[
  {
    "path": ".ccls",
    "content": "clang\n%c -std=c17\n%cpp -std=c++17\n-Isrc/"
  },
  {
    "path": ".clang-format",
    "content": "﻿---\nAlignAfterOpenBracket: DontAlign\nAlignEscapedNewlines: DontAlign\nAlignTrailingComments: false\nAllowShortCaseLabelsOnASingleLine: true\nAllowShortIfStatementsOnASingleLine: AllIfsAndElse\nAllowShortLoopsOnASingleLine: true\nBraceWrapping:\n  AfterControlStatement: MultiLine\n  BeforeCatch: true\n  BeforeElse: true\nBreakBeforeBraces: Custom\nColumnLimit: 132\nConstructorInitializerIndentWidth: 0\nContinuationIndentWidth: 2\nIndentCaseLabels: true\nIndentPPDirectives: AfterHash\nIndentWidth: 2\nKeepEmptyLinesAtTheStartOfBlocks: false\nMaxEmptyLinesToKeep: 2\nPenaltyBreakAssignment: 50\nPointerAlignment: Left\nReflowComments: false\nSortIncludes: false\nSpaceAfterTemplateKeyword: false\nUseTab: Never\n\n...\n"
  },
  {
    "path": ".cmake-format.py",
    "content": "# flake8: noqa\nwith section(\"format\"):\n    separate_ctrl_name_with_space = True\n"
  },
  {
    "path": ".codecov.yml",
    "content": "coverage:\n  precision: 1\n  round: down\n  range: 60..100\ncomment:\n  require_changes: true\n  after_n_builds: 12\n"
  },
  {
    "path": ".fortls",
    "content": "{\n  \"excl_paths\": [\"build\"]\n}"
  },
  {
    "path": ".git-blame-ignore-revs",
    "content": "# git commit hashes with whitespace/reformatting changes only\n# Make git-blame use this file by running:\n#   git config blame.ignoreRevsFile .git-blame-ignore-revs\n\n21f91d84e3cda3eaf838a3b510077c9e01c8aeb8\nfcfa8ae3551ae0d3517db59cbc3ebaea0dccc967\n53891420300f402fd70afcbfb00e1b21024040d3\ne948f9db58989f081fa0b4e4e4236e06b5566364\n972f09eb17c021c4970ddbd08596869b43e88a33\n8e647643ad149d2b886c74db1d50376066d65483\n8ebeab6fd522ec54e89ab7c6dd14bae36efc8d67\n3169190d69019d1221b1fee92e35d2501479f403\ndf7ea8fb053b17a0bb6f9c3b243652395cf9dbe7\n224479c43e58305d2da2f41eff727baca5ef72c8\nf4d6abdf94381392a496e736c8684f06664bd9e5\ne8e1fe118ce19e6e6942405baeae2f96dbd620cb\nfa1838a1e4ae03b87c3c1e4b37ba4dc2b97d75ae\n65f3f47c78c51548bb84332f239b79e6c0094d6f\n"
  },
  {
    "path": ".gitattributes",
    "content": ".gitattributes export-ignore\n.gitignore export-ignore\n.gitmodules export-ignore\n.travis.yml export-ignore\n.github export-ignore\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is, including the stacktrace (if there was one).\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Built with the command: '...'\n2. Run like this: '....'\n3. On the architecture/host/platform: '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Environment:**\n - Operating system & version\n - Compiler vendor & version\n - Build environment (make or cmake)\n - Configuration of DBCSR (either the cmake flags or the `Makefile.inc`)\n - MPI implementation and version\n - If CUDA is being used: CUDA version and GPU architecture\n - BLAS/LAPACK implementation and version\n - If applicable: Runtime information (how many nodes, type of nodes, ...)\n"
  },
  {
    "path": ".github/workflows/doc-generation.yml",
    "content": "---\nname: Generating documentation\non:\n  push:\n    branches:\n    - 'develop'\n    tags:\n    - 'v*'\n  workflow_dispatch:\n\njobs:\n  build-and-deploy:\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop\n      volumes:\n      - \"/etc/ssh/ssh_known_hosts:/etc/ssh/ssh_known_hosts:ro\"\n\n    steps:\n    - uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        submodules: true\n\n    - name: Configure\n      run: |\n        mkdir -p build\n        cd build\n        cmake -G Ninja \\\n          -DUSE_MPI=ON \\\n          -DBUILD_TESTING=ON \\\n          -DUSE_OPENMP=ON \\\n          -DUSE_SMM=libxsmm \\\n          -DMPI_EXECUTABLE_SUFFIX=.mpich \\\n          ..\n\n    - name: Build\n      run: |\n        cmake --build build -- doc\n        touch build/doc/.nojekyll\n\n    - name: Configure git to trust the workspace despite the different owner\n      run:\n        git config --global --add safe.directory \"$GITHUB_WORKSPACE\"\n\n    - name: Deploy Development Documentation\n      if: github.repository == 'cp2k/dbcsr' && github.ref == 'refs/heads/develop'\n      uses: JamesIves/github-pages-deploy-action@releases/v4\n      with:\n        branch: gh-pages\n        folder: build/doc\n        target-folder: develop\n        clean: true\n        clean-exclude: |\n          releases/\n        ssh-key: ${{ secrets.SSH_DEPLOY_KEY }}\n\n    - name: Get the release version\n      id: get_version\n      run: echo ::set-output name=VERSION::${GITHUB_REF/refs\\/tags\\/v/}\n      shell: bash\n\n    - name: Deploy Release Documentation\n      if: github.repository == 'cp2k/dbcsr' && contains(github.ref, 'tags')\n      uses: JamesIves/github-pages-deploy-action@releases/v4\n      with:\n        branch: gh-pages\n        folder: build/doc\n        target-folder: 'releases/v${{ steps.get_version.outputs.VERSION }}'\n        ssh-key: ${{ secrets.SSH_DEPLOY_KEY }}\n\n#  vim: set ts=2 sw=2 tw=0 :\n"
  },
  {
    "path": ".github/workflows/docker-build-env.yml",
    "content": "---\nname: Publish DBCSR Build Environments to the GitHub Contrainer Registry\n\non:\n  push:\n    branches:\n    - 'develop'\n    paths:\n    - 'tools/docker/**'\n    - '.github/workflows/docker-build-env.yml'\n  schedule:  # runs on the last commit of the repo's default branch\n    - cron: '45 23 * * *'\n  workflow_dispatch:\n\njobs:\n  docker-build-env:\n    runs-on: ubuntu-latest\n    if: github.repository == 'cp2k/dbcsr' # Only run from main repo\n    strategy:\n      matrix:\n        include:\n          - docker_image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04\n            context: tools/docker\n            file: Dockerfile.build-env-ubuntu\n            registry: ghcr.io\n          - docker_image: ghcr.io/cp2k/dbcsr-build-env-latest-gcc\n            context: tools/docker\n            file: Dockerfile.build-env-latest-gcc\n            registry: ghcr.io\n          - docker_image: ghcr.io/cp2k/dbcsr-build-env-rocm\n            context: tools/docker\n            file: Dockerfile.build-env-rocm\n            registry: ghcr.io\n          - docker_image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04-cuda\n            context: tools/docker\n            file: Dockerfile.build-env-ubuntu-cuda\n            registry: ghcr.io\n\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@v4\n\n      - name: Prepare\n        id: prep\n        run: |\n          DOCKER_IMAGE=${{ matrix.docker_image }}\n          VERSION=latest\n          if [[ $GITHUB_REF == refs/tags/* ]]; then\n            VERSION=${GITHUB_REF#refs/tags/}\n          elif [[ $GITHUB_REF == refs/heads/* ]]; then\n            VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g')\n          elif [[ $GITHUB_REF == refs/pull/* ]]; then\n            VERSION=pr-${{ github.event.number }}\n          fi\n          TAGS=\"${DOCKER_IMAGE}:${VERSION}\"\n          if [ \"${{ github.event_name }}\" = \"push\" ]; then\n            TAGS=\"$TAGS,${DOCKER_IMAGE}:sha-${GITHUB_SHA::8}\"\n          fi\n          echo \"version=${VERSION}\" >> $GITHUB_OUTPUT\n          echo \"tags=${TAGS}\" >> $GITHUB_OUTPUT\n          echo \"created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')\" >> $GITHUB_OUTPUT\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n\n      - name: Login to Container registry\n        uses: docker/login-action@v3\n        with:\n          registry: ${{ matrix.registry }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Build and push container image\n        uses: docker/build-push-action@v5\n        with:\n          context: ${{ matrix.context }}\n          file: ${{ matrix.context }}/${{ matrix.file }}\n          push: ${{ github.event_name != 'pull_request' }}\n          tags: ${{ steps.prep.outputs.tags }}\n          labels: |\n            org.opencontainers.image.source=${{ github.event.repository.html_url }}\n            org.opencontainers.image.created=${{ steps.prep.outputs.created }}\n            org.opencontainers.image.revision=${{ github.sha }}\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "---\nname: Create release\non:\n  push:\n    tags:\n    - 'v*'\n\njobs:\n  build-and-upload:\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop\n\n    steps:\n    - uses: actions/checkout@v4\n      with:\n        submodules: true\n\n    - name: Configure\n      run: |\n        mkdir -p build\n        cd build\n        cmake -G Ninja \\\n          -DUSE_MPI=ON \\\n          -DBUILD_TESTING=ON \\\n          -DUSE_OPENMP=ON \\\n          -DUSE_SMM=libxsmm \\\n          -DMPI_EXECUTABLE_SUFFIX=.mpich \\\n          ..\n\n    - name: Configure git to trust the workspace despite the different owner\n      run:\n        git config --global --add safe.directory \"$GITHUB_WORKSPACE\"\n\n    - name: Build Release Asset\n      run: cmake --build build -- dist\n\n    - name: Get the release version\n      id: get_version\n      run: echo ::set-output name=VERSION::${GITHUB_REF/refs\\/tags\\/v/}\n      shell: bash\n\n    - name: Create Release\n      id: create_release\n      uses: actions/create-release@latest\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      with:\n        tag_name: ${{ github.ref }}\n        release_name: Release ${{ github.ref }}\n        draft: true\n        prerelease: true\n\n    - name: Upload Release Asset\n      uses: actions/upload-release-asset@v1\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      with:\n        upload_url: ${{ steps.create_release.outputs.upload_url }}\n        asset_path: ./build/dist/dbcsr-${{ steps.get_version.outputs.VERSION }}.tar.gz\n        asset_name: dbcsr-${{ steps.get_version.outputs.VERSION }}.tar.gz\n        asset_content_type: application/gzip\n\n#  vim: set ts=2 sw=2 tw=0 :\n"
  },
  {
    "path": ".github/workflows/testing-gcc.yml",
    "content": "---\nname: Testing with latest gcc\non:\n  push:\n    branches:\n    - 'develop'\n  pull_request:\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/cp2k/dbcsr-build-env-latest-gcc:develop\n\n    steps:\n    - uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        submodules: true\n\n    - name: Configure\n      run: |\n        mkdir -p build\n        cd build\n        cmake -G Ninja \\\n          -DCMAKE_BUILD_TYPE=Debug \\\n          -DBUILD_TESTING=ON \\\n          -DUSE_MPI=OFF \\\n          -DUSE_OPENMP=ON \\\n          -DUSE_SMM=blas \\\n          -DUSE_MPI_F08=ON \\\n          ..\n\n    - name: Build\n      run: cmake --build build -- --verbose\n\n    - name: Test\n      run: |\n        export LSAN_OPTIONS=suppressions=$PWD/tools/docker/lsan.supp\n        cd build\n        ctest --output-on-failure\n\n#  vim: set ts=2 sw=2 tw=0 :\n"
  },
  {
    "path": ".github/workflows/testing-linux.yml",
    "content": "---\nname: Testing on Linux\non:\n  push:\n    branches:\n    - 'develop'\n  pull_request:\n\njobs:\n  ##################################################################################\n  # Run pre-commit\n  ##################################################################################\n  pre-commit:\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop\n    steps:\n    - uses: actions/checkout@v4\n    - name: Run pre-commit\n      run: |\n        git config --global --add safe.directory \"$GITHUB_WORKSPACE\"\n        pre-commit run --all-files || ( git status --short ; git diff ; exit 1 )\n\n  ##################################################################################\n  # Build and test on linux, no accelerator\n  ##################################################################################\n  build-and-test:\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop\n\n    strategy:\n      matrix:\n        use_mpi: [MPI=ON, MPI=OFF]\n        use_openmp: [OPENMP=ON, OPENMP=OFF]\n        use_smm: [SMM=blas, SMM=libxsmm]\n        mpi_suffix: [openmpi, mpich]\n        exclude:\n          - use_mpi: MPI=OFF\n            mpi_suffix: mpich\n\n    steps:\n    - uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        submodules: true\n\n    - name: Configure\n      run: |\n        mkdir -p build\n        cd build\n        cmake -G Ninja \\\n          -DCMAKE_BUILD_TYPE=Coverage \\\n          -DBUILD_TESTING=ON \\\n          -DUSE_${{ matrix.use_mpi }} \\\n          -DUSE_${{ matrix.use_openmp }} \\\n          -DUSE_${{ matrix.use_smm }} \\\n          -DMPI_EXECUTABLE_SUFFIX=.${{ matrix.mpi_suffix }} \\\n          -DMPIEXEC_PREFLAGS=\"$([ \"${{ matrix.mpi_suffix }}\" = \"openmpi\" ] && echo \"-mca btl ^openib --allow-run-as-root --oversubscribe\")\" \\\n          -DLCOV_ARGS=\"--test-name;${{ matrix.use_mpi }}-${{ matrix.use_openmp }}-${{ matrix.use_smm }}-cpu\" \\\n          -DTEST_MPI_RANKS=auto \\\n          ..\n\n    - name: Build\n      run: cmake --build build -- --verbose\n\n    - name: Test\n      run: |\n        cd build\n        ctest --output-on-failure\n\n    - name: Generate coverage info\n      run: |\n        cmake --build build -- cov-info\n        mv build/coverage.info build/coverage-Linux-${{ matrix.use_mpi }}-${{ matrix.use_openmp }}-${{ matrix.use_smm }}-cpu.info\n\n    - name: Upload coverage data\n      uses: actions/upload-artifact@v4\n      with:\n        name: coverage-data-${{ matrix.use_mpi }}-${{ matrix.use_openmp }}-${{ matrix.use_smm }}-${{ matrix.mpi_suffix }}\n        path: build/coverage-*.info\n\n    - name: Upload coverage data (generated files)\n      uses: actions/upload-artifact@v4\n      if: matrix.use_mpi == 'MPI=ON' && matrix.use_openmp == 'OPENMP=ON' && matrix.use_smm == 'SMM=blas' && matrix.mpi_suffix == 'openmpi'\n      with:\n        name: coverage-data-${{ matrix.use_mpi }}-${{ matrix.use_openmp }}-${{ matrix.use_smm }}-${{ matrix.mpi_suffix }}-generated-files\n        path: |\n          build/src/dbcsr.h\n          build/src/tensors/dbcsr_tensor.h\n\n  ##################################################################################\n  # Build on CUDA\n  ##################################################################################\n  build-on-cuda:\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04-cuda:develop\n\n    strategy:\n      matrix:\n        use_mpi: [MPI=ON, MPI=OFF]\n        use_openmp: [OPENMP=ON]\n        mpi_suffix: [mpich]\n\n    steps:\n    - uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        submodules: true\n\n    - name: Configure\n      run: |\n        mkdir -p build\n        cd build\n        cmake -G Ninja \\\n          -DCMAKE_BUILD_TYPE=Debug \\\n          -DBUILD_TESTING=ON \\\n          -DUSE_${{ matrix.use_mpi }} \\\n          -DUSE_${{ matrix.use_openmp }} \\\n          -DUSE_ACCEL=cuda \\\n          -DWITH_GPU=H100 \\\n          -DWITH_EXAMPLES=ON \\\n          -DWITH_CUDA_PROFILING=ON \\\n          ..\n    - name: Build\n      run: cmake --build build -- --verbose\n\n  ##################################################################################\n  # Build on OpenCL\n  ##################################################################################\n  build-on-opencl:\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04-cuda:develop\n\n    strategy:\n      matrix:\n        use_openmp: [OPENMP=ON]\n        use_smm: [SMM=libxsmm]\n\n    steps:\n    - uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        submodules: true\n\n    - name: Configure\n      run: |\n        mkdir -p build\n        cd build\n        cmake -G Ninja \\\n          -DCMAKE_BUILD_TYPE=Debug \\\n          -DBUILD_TESTING=ON \\\n          -DUSE_${{ matrix.use_openmp }} \\\n          -DUSE_${{ matrix.use_smm }} \\\n          -DUSE_ACCEL=opencl \\\n          -DWITH_EXAMPLES=ON \\\n          ..\n    - name: Build\n      run: cmake --build build -- --verbose\n\n  ##################################################################################\n  # Build on ROCm\n  ##################################################################################\n  build-on-rocm:\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/cp2k/dbcsr-build-env-rocm:develop\n\n    strategy:\n      matrix:\n        use_mpi: [MPI=ON, MPI=OFF]\n        use_openmp: [OPENMP=ON]\n        mpi_suffix: [mpich]\n\n    steps:\n    - uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        submodules: true\n\n    - name: Configure\n      run: |\n        mkdir -p build\n        cd build\n        cmake -G Ninja \\\n          -DCMAKE_BUILD_TYPE=Release \\\n          -DBUILD_TESTING=ON \\\n          -DUSE_${{ matrix.use_mpi }} \\\n          -DUSE_${{ matrix.use_openmp }} \\\n          -DUSE_ACCEL=hip \\\n          -DWITH_GPU=Mi250 \\\n          -DWITH_EXAMPLES=ON \\\n          -DCMAKE_PREFIX_PATH=/opt/rocm \\\n          ..\n    - name: Build\n      run: cmake --build build -- --verbose\n\n  coverage:\n    name: Combine & check coverage.\n    runs-on: ubuntu-latest\n    needs: build-and-test\n    container:\n      image: ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04:develop\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Download coverage data\n        uses: actions/download-artifact@v4.1.7\n        with:\n          pattern: coverage-data-*\n          merge-multiple: true\n\n      - name: Combine coverage\n        run: |\n          mkdir -p build/src\n          mv dbcsr.h tensors build/src/\n          echo *.info | xargs printf -- '-a %s\\n' | xargs lcov -o merged.info\n          genhtml merged.info -o htmlcov\n          lcov --summary merged.info\n\n      - name: Upload merged HTML report\n        uses: actions/upload-artifact@v4\n        with:\n          name: html-report\n          path: htmlcov\n\n#  vim: set ts=2 sw=2 tw=0 :\n"
  },
  {
    "path": ".github/workflows/testing-macos.yml",
    "content": "---\nname: Testing on macOS\non:\n  push:\n    branches:\n    - 'develop'\n  pull_request:\n\njobs:\n  build-and-test:\n    runs-on: macos-latest\n\n    strategy:\n      matrix:\n        use_mpi: [MPI=ON]\n        use_openmp: [OPENMP=ON]\n        use_smm: [SMM=blas]\n        blas_impl: [accelerate,openblas]\n        mpi_suffix: [mpich] # Brew openmpi doesn't provide mpi.mod\n\n    steps:\n    - uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        submodules: true\n\n    - name: Install common dependencies\n      run: |\n        env HOMEBREW_NO_AUTO_UPDATE=1 brew install \\\n          ninja\n\n    - name: Install ${{ matrix.mpi_suffix }}\n      run: |\n        env HOMEBREW_NO_AUTO_UPDATE=1 brew install ${{ matrix.mpi_suffix }}\n\n    - name: Configure\n      run: |\n        mkdir -p build\n        cd build\n        env \\\n          CC=gcc-15 CXX=g++-15 FC=gfortran-15 \\\n          cmake -G Ninja \\\n          -DCMAKE_BUILD_TYPE=Release \\\n          -DBUILD_TESTING=ON \\\n          -DUSE_${{ matrix.use_mpi }} \\\n          -DUSE_${{ matrix.use_openmp }} \\\n          -DUSE_${{ matrix.use_smm }} \\\n          $([ \"${{ matrix.blas_impl }}\" = \"openblas\" ] && echo '-DCMAKE_PREFIX_PATH=/usr/local/opt/openblas') \\\n          -DMPIEXEC_PREFLAGS=\"$([ \"${{ matrix.mpi_suffix }}\" = \"openmpi\" ] && echo \"-mca btl ^openib --allow-run-as-root\")\" \\\n          -DTEST_MPI_RANKS=auto \\\n          ..\n\n    - name: Build\n      run: cmake --build build -- --verbose\n\n    - name: Test\n      run: |\n        cd build\n        ctest --output-on-failure\n\n#  vim: set ts=2 sw=2 tw=0 :\n"
  },
  {
    "path": ".gitignore",
    "content": "# ignore project specific locations & files\n/lib/\n/obj/\n/bin/\n/doc/\n/install/\n*.callgraph\n\n# exclude personal makefile\n/Makefile.inc.*\n\n# The following covers some more,\n# Created by https://www.gitignore.io/api/vim,emacs,python,fortran\n\n### Emacs ###\n# -*- mode: gitignore; -*-\n*~\n\\#*\\#\n/.emacs.desktop\n/.emacs.desktop.lock\n*.elc\nauto-save-list\ntramp\n.\\#*\n\n# Org-mode\n.org-id-locations\n*_archive\n\n# flymake-mode\n*_flymake.*\n\n# eshell files\n/eshell/history\n/eshell/lastdir\n\n# elpa packages\n/elpa/\n\n# reftex files\n*.rel\n\n# AUCTeX auto folder\n/auto/\n\n# cask packages\n.cask/\ndist/\n\n# Flycheck\nflycheck_*.el\n\n# server auth directory\n/server/\n\n# projectiles files\n.projectile\nprojectile-bookmarks.eld\n\n# directory configuration\n.dir-locals.el\n\n# saveplace\nplaces\n\n# url cache\nurl/cache/\n\n# cedet\nede-projects.el\n\n# smex\nsmex-items\n\n# company-statistics\ncompany-statistics-cache.el\n\n# anaconda-mode\nanaconda-mode/\n\n### Fortran ###\n# Prerequisites\n*.d\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic libraries\n*.so\n*.dylib\n*.dll\n\n# Fortran module files\n*.mod\n*.smod\n\n# Compiled Static libraries\n*.lai\n*.la\n*.a\n*.lib\n\n# Executables\n*.exe\n*.out\n*.app\n\n### Python ###\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\n*.egg-info/\n.installed.cfg\n*.egg\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\n.pytest_cache/\nnosetests.xml\ncoverage.xml\n*.cover\n.hypothesis/\n\n# Translations\n*.mo\n*.pot\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule.*\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n\n### Vim ###\n# swap\n.sw[a-p]\n.*.sw[a-p]\n# session\nSession.vim\n# temporary\n.netrwhist\n# auto-generated tag files\ntags\n.tags\n.tags_swap\n\n# End of https://www.gitignore.io/api/vim,emacs,python,fortran\n\nspack-*\n\n.ccls-cache/\n\n.DS_Store\n\nBUILD/\n!tools/fedora/dbcsr.spec\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"tools/build_utils/fypp\"]\n\tpath = tools/build_utils/fypp\n\turl = https://github.com/aradi/fypp.git\n"
  },
  {
    "path": ".packit.yaml",
    "content": "specfile_path: tools/fedora/dbcsr.spec\nfiles_to_sync:\n  - src: tools/fedora/\n    dest: ./\n    delete: true\n    filters:\n      - \"protect .git*\"\n      - \"protect sources\"\n      - \"protect changelog\"\n  - .packit.yaml\nupstream_package_name: dbcsr\ndownstream_package_name: dbcsr\nupstream_tag_template: v{version}\n\ntargets:\n  - fedora-development-x86_64\n  - fedora-development-aarch64\n\n_:\n  # Job templates\n  - &build-in-packit\n    job: copr_build\n  - &build-at-lecris\n    <<: *build-in-packit\n    owner: lecris\n\njobs:\n  - <<: *build-at-lecris\n    trigger: release\n    project: release\n  - <<: *build-at-lecris\n    trigger: commit\n    branch: master\n    project: nightly\n  - <<: *build-in-packit\n    trigger: pull_request\n  - job: propose_downstream\n    trigger: release\n    dist_git_branches:\n      - fedora-rawhide\n  - job: koji_build\n    trigger: commit\n    dist_git_branches:\n      - fedora-all\n  - job: bodhi_update\n    trigger: commit\n    dist_git_branches:\n      - fedora-branched\n"
  },
  {
    "path": ".pre-commit/check_header.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport argparse\nimport re\nimport mmap\nimport sys\nimport pathlib\nfrom collections import defaultdict\nfrom os import path, listdir\nfrom contextlib import contextmanager\n\nTYPES = {\n    \"c_cpp\": [\".c\", \".h\", \".cc\", \".hh\", \".cxx\", \".hxx\", \".cpp\", \".hpp\", \".cu\", \".cl\"],\n    \"fortran\": [\".F\", \".f\", \".f90\", \".f03\"],\n    \"script\": [\".py\", \".sh\"],\n    \"fypp\": [\".fypp\"],\n}\n\n# max number of lines allowed between header and top of file\nALLOWED_LINES = 5\n\n# some assumed max line length to terminate early for large files\nMAX_LINE_LENGTH = 128\n\n\n@contextmanager\ndef mmap_open(name, mode=\"r\"):\n    access = mmap.ACCESS_READ if mode == \"r\" else mmap.ACCESS_WRITE\n    with open(name, mode + \"b\") as fhandle:\n        fmapped = mmap.mmap(fhandle.fileno(), 0, access=access)\n        yield fmapped\n        fmapped.close()\n\n\ndef check_header(header_dir, files, verbose=False):\n    retval = 0\n    header_re = defaultdict(list)\n    header_len = defaultdict(list)\n\n    for headerfile in listdir(header_dir):\n        headertype = pathlib.Path(headerfile).stem\n        if headertype in TYPES:\n            with open(path.join(header_dir, headerfile), \"rb\") as fhandle:\n                header_content = fhandle.read()\n                header_re[headertype].append(re.compile(re.escape(header_content)))\n                header_len[headertype].append(len(header_content))\n        else:\n            print(\"no matching headerfile to file extensions\")\n            sys.exit(1)\n\n    ext_map = {e: t for t, exts in TYPES.items() for e in exts}\n\n    for fpath in files:\n        _, fext = path.splitext(fpath)\n\n        if fext not in ext_map:\n            if verbose:\n                print(\"? {} ... unknown file type, ignoring\".format(fpath))\n            continue\n\n        with mmap_open(fpath) as fmapped:\n            header_type = ext_map[fext]\n            for h_re, h_len in zip(header_re[header_type], header_len[header_type]):\n                match = h_re.search(fmapped, 0, ALLOWED_LINES * MAX_LINE_LENGTH + h_len)\n                if match:\n                    break\n\n            if not match:\n                print(\"✗ {} ... required header not found\".format(fpath))\n                retval = 1\n                continue\n\n            lines_above = fmapped[0 : match.start()].splitlines()\n            if len(lines_above) > ALLOWED_LINES:\n                print(\n                    \"✗ {} ... header not within first {} lines\".format(\n                        fpath, ALLOWED_LINES\n                    )\n                )\n                retval = 1\n                continue\n\n        if verbose:\n            print(\"✓ {}\".format(fpath))\n\n    sys.exit(retval)\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"Check files for header presence\")\n    parser.add_argument(\n        \"files\", metavar=\"FILE\", type=str, nargs=\"+\", help=\"files to check\"\n    )\n    parser.add_argument(\"--verbose\", \"-v\", action=\"store_true\", default=False)\n    args = parser.parse_args()\n\n    header_dir = path.join(path.dirname(path.abspath(__file__)), \"headers\")\n    check_header(header_dir, args.files, args.verbose)\n"
  },
  {
    "path": ".pre-commit/clang-format-fypp.sh",
    "content": "#!/usr/bin/env bash\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\n# clang-format change FYPP directives, need to revert the changes.\n\nfunction sed_darwin()\n{\n    sed -i \"\" \"$@\"\n}\n\nfunction sed_linux()\n{\n    sed -i \"$@\"\n}\n\nfunction main()\n{\n    local files=\"\"\n    for i in \"$@\"; do\n    case $i in\n      -*|--*)\n      ;;\n      *)\n          files+=\"$i \"\n      ;;\n    esac\n    done\n\n    clang-format \"$@\"\n    # Fix FYPP directives\n    uname=\"$(uname -s)\"\n    case \"${uname}\" in\n        Darwin*)\n            sed_fcn=sed_darwin\n        ;;\n        *)\n            sed_fcn=sed_linux\n        ;;\n    esac\n\n    for i in ${files}; do\n        ${sed_fcn} -e '/\\${$/ { N; s/\\${\\n[[:space:]]*/\\${/; }' \"$i\"\n        ${sed_fcn} -e 's/#[[:space:]]*: /#:/g' -e 's/} \\$/}\\$/g' \"$i\"\n    done\n}\n\nmain \"$@\"\n"
  },
  {
    "path": ".pre-commit/headers/c_cpp.1",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n"
  },
  {
    "path": ".pre-commit/headers/c_cpp.2",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved                          */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n"
  },
  {
    "path": ".pre-commit/headers/c_cpp.3",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n"
  },
  {
    "path": ".pre-commit/headers/fortran.1",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n"
  },
  {
    "path": ".pre-commit/headers/fortran.2",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved                            !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n"
  },
  {
    "path": ".pre-commit/headers/fypp.1",
    "content": "#!--------------------------------------------------------------------------------------------------!\n#! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n#! This file is part of the DBCSR library.                                                          !\n#!                                                                                                  !\n#! For information on the license, see the LICENSE file.                                            !\n#! For further information please visit https://dbcsr.cp2k.org                                      !\n#! SPDX-License-Identifier: GPL-2.0+                                                                !\n#!--------------------------------------------------------------------------------------------------!\n"
  },
  {
    "path": ".pre-commit/headers/script.1",
    "content": "####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n"
  },
  {
    "path": ".pre-commit/headers/script.2",
    "content": "####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: BSD-3-Clause                                                            #\n####################################################################################################\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "default_language_version:\n    python: python3\n\nexclude: '^tools/(build_utils/fypp)'\nfail_fast: false\nminimum_pre_commit_version: 3.2.0\nrepos:\n- repo: https://github.com/astral-sh/ruff-pre-commit\n  rev: 'v0.15.13'\n  hooks:\n  - id: ruff\n    args: [ --fix, --exit-non-zero-on-fix ]\n    exclude: >-\n      (?x)^(\n        .cp2k/.*|\n      )$\n- repo: https://github.com/psf/black-pre-commit-mirror\n  rev: 26.5.0\n  hooks:\n  - id: black\n    name: Reformat Python files with the black code formatter\n    files: '^.*(/PACKAGE)|(\\.py)$'\n- repo: https://github.com/pre-commit/pre-commit-hooks\n  rev: v6.0.0\n  hooks:\n  - id: check-ast\n  - id: check-yaml\n  - id: check-symlinks\n  - id: trailing-whitespace\n- repo: https://github.com/fortran-lang/fprettify\n  rev: v0.3.7\n  hooks:\n  - id: fprettify\n- repo: https://github.com/cheshirekow/cmake-format-precommit\n  rev: v0.6.13\n  hooks:\n  - id: cmake-format\n    exclude: >-\n      (?x)^(\n        cmake/(CheckFortranSourceRuns|CompilerConfiguration|Find(BLAS|LAPACK)|GetGitRevisionDescription).cmake|\n      )$\n- repo: local\n  hooks:\n  - id: check-header\n    name: check file headers\n    entry: ./.pre-commit/check_header.py --verbose\n    language: script\n    types: [text]\n    exclude: >-\n      (?x)^(\n        tools/.*|\n        .cp2k/.*|\n        .cmake-format.py|\n        src/acc/hip/dbcsr_hip_profiling.F|\n      )$\n  - id: check-doxygen-tags\n    name: no doxygen tags present\n    entry: '^\\s*!>'\n    language: pygrep\n    types: [text]\n  - id: clang-format-fypp\n    name: clang-format-fypp\n    description: Format files with ClangFormat, ignore FYPP directives.\n    entry: ./.pre-commit/clang-format-fypp.sh\n    language: python\n    files: \\.(c|cc|cxx|cpp|cl|frag|glsl|h|hpp|hxx|ih|ispc|ipp|java|js|m|mm|proto|textproto|vert)$\n    args: ['-i', '-fallback-style=none', '--style=file']\n    # specify version since clang-format is not stable version-to-version\n    additional_dependencies: ['clang-format~=19.1.0']\n"
  },
  {
    "path": ".ruff.toml",
    "content": "select = [\"E\", \"F\", \"B\"]\nline-length = 128\nignore = [\"B905\"]\n"
  },
  {
    "path": "AUTHORS",
    "content": "Alfio Lazzaro <alfio.lazzaro@gmail.com>\nAndreas Gloeß <agloess@cp2k.org>\nChristian Pousa <pousa@cp2k.org>\nDorothea Golze <dorotheagolze@cp2k.org>\nFawzi Mohamed <fawzi@cp2k.org>\nFlorian Schiffmann <fschiff@cp2k.org>\nGina Sitaraman <gina.sitaraman@amd.com>\nHarald Forbert <hforbert@cp2k.org>\nH. Bani-Hashemian <hbani@cp2k.org>\nIain Bethune <ibethune@cp2k.org>\nIlia Sivkov <ilia.sivkov@chem.uzh.ch>\nJan Wilhelm <jwilhelm@cp2k.org>\nJoost VandeVondele <joost.vandevondele@cscs.ch>\nJuerg Hutter <hutter@chem.uzh.ch>\nLeopold Grinberg <leopold.grinberg@amd.com>\nLianheng Tong <ltong@cp2k.org>\nMarcella Mauri-Iannuzzi <marcella@cp2k.org>\nMatthias Krack <mkrack@cp2k.org>\nMaximilien Ambroise <maximilien.ambroise@gmail.com>\nNico Holmberg <nholmberg@cp2k.org>\nOle Schuett <ole.schuett@cp2k.org>\nPatrick Seewald <pseewald@cp2k.org>\nSamuel Andermatt <sandermatt@cp2k.org>\nSergey Chulkov <schulkov@cp2k.org>\nShoshana Alice Jakobovits <jakobovits@cscs.ch>\nTeodoro Laino <tlaino@cp2k.org>\nThomas Chassaing <tchassai@cp2k.org>\nUrban Borstnik <uborstnik@cp2k.org>\nValery Weber <vweber@cp2k.org>\nVladimir Rybkin <rybkinjr@cp2k.org>\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.22)\n\nset(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE FORCE)\n\n# include our cmake snippets\nset(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)\n# DBCSR's source directory\nset(DBCSR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)\n\n# =================================================================================================\n# REQUIRE OUT-OF-SOURCE BUILDS\nfile(TO_CMAKE_PATH \"${PROJECT_BINARY_DIR}/CMakeLists.txt\" LOC_PATH)\nif (EXISTS \"${LOC_PATH}\")\n  message(\n    FATAL_ERROR\n      \"You cannot build in a source directory (or any directory with a CMakeLists.txt file). Please make a build subdirectory.\"\n  )\nendif ()\n\n# =================================================================================================\n# PROJECT AND VERSION\ninclude(GetGitRevisionDescription)\n\ngit_describe(GIT_DESC)\n\nif (GIT_DESC)\n  string(REGEX REPLACE \"^v([0-9]+)\\\\..*\" \"\\\\1\" VERSION_MAJOR \"${GIT_DESC}\")\n  string(REGEX REPLACE \"^v[0-9]+\\\\.([0-9]+).*\" \"\\\\1\" VERSION_MINOR\n                       \"${GIT_DESC}\")\n  string(REGEX REPLACE \"^v[0-9]+\\\\.[0-9]+\\\\.([0-9]+).*\" \"\\\\1\" VERSION_PATCH\n                       \"${GIT_DESC}\")\n  string(REGEX REPLACE \"^v[0-9]+\\\\.[0-9]+\\\\.[0-9]+(.*)\" \"\\\\1\" VERSION_GIT\n                       \"${GIT_DESC}\")\n\n  git_local_changes(GIT_STATE)\n  if (\"${GIT_STATE}\" STREQUAL \"DIRTY\")\n    set(VERSION_GIT \"${VERSION_GIT}-dirty\")\n  endif ()\n\n  execute_process(\n    COMMAND git log -1 --format=%ai\n    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}\n    OUTPUT_VARIABLE GIT_COMMIT_DATE\n    OUTPUT_STRIP_TRAILING_WHITESPACE)\n\n  # take only the date from the git timestamp:\n  string(REGEX REPLACE \"^([0-9\\\\-]+) .*\" \"\\\\1\" VERSION_DATE\n                       \"${GIT_COMMIT_DATE}\")\nelse ()\n  file(STRINGS VERSION VERSION_INFO)\n  foreach (line ${VERSION_INFO})\n    if (${line} MATCHES \"^([^#].*)=[ \\t]*(.*)$\")\n      set(key ${CMAKE_MATCH_1})\n      set(value ${CMAKE_MATCH_2})\n      string(REGEX REPLACE \"[ \\t\\n]+$\" \"\" key \"${key}\")\n      string(REGEX REPLACE \"[ \\t\\n]+$\" \"\" value \"${value}\")\n      set(VERSION_${key} \"${value}\")\n      continue()\n    endif ()\n  endforeach ()\nendif ()\n\nproject(\n  dbcsr\n  DESCRIPTION\n    \"DBCSR: Distributed Block Compressed Sparse Row matrix library (https://dbcsr.cp2k.org)\"\n)\nset(dbcsr_VERSION\n    ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_GIT})\nset(dbcsr_APIVERSION ${VERSION_MAJOR}.${VERSION_MINOR})\n\n# =================================================================================================\n# OPTIONS\ninclude(CMakeDependentOption)\n\noption(BUILD_SHARED_LIBS \"Build shared libraries\" OFF)\noption(USE_OPENMP \"Build with OpenMP support\" ON)\noption(USE_MPI \"Build with MPI support\" ON)\noption(USE_MPI_F08 \"Build with the mpi_f08 module support\" OFF)\noption(BUILD_TESTING \"Build dbcsr unit tests\" OFF)\ncmake_dependent_option(\n  WITH_C_API \"Build the C API (ISO_C_BINDINGS)\" ON \"USE_MPI\" OFF\n)# the ISO_C_BINDINGS require MPI unconditionally\ncmake_dependent_option(WITH_EXAMPLES \"Build the examples\" ON \"USE_MPI\" OFF\n)# all examples require MPI\n\nset(TEST_MPI_RANKS\n    2\n    CACHE STRING \"Number of MPI ranks for testing\")\nset(TEST_OMP_THREADS\n    2\n    CACHE STRING \"Number of OpenMP threads for testing\")\n\nset(USE_SMM\n    \"auto\"\n    CACHE STRING\n          \"Small Matrix Multiplication implementation to use (default: auto)\")\nset_property(CACHE USE_SMM PROPERTY STRINGS auto blas libxsmm)\n\nset(USE_ACCEL\n    \"\"\n    CACHE STRING \"Build with acceleration support (default: none)\")\nset_property(CACHE USE_ACCEL PROPERTY STRINGS \"\" opencl cuda hip)\n\nset(SUPPORTED_CUDA_ARCHITECTURES\n    K20X\n    K40\n    K80\n    P100\n    V100\n    A100\n    H100)\nset(SUPPORTED_HIP_ARCHITECTURES Mi50 Mi100 Mi250 Mi300 Mi350)\nset(WITH_GPU\n    $<IF:$<STREQUAL:${USE_ACCEL},\"opencl\">,\"\",\"P100\">\n    CACHE\n      STRING\n      \"Select GPU arch. and embed parameters (default: CUDA/HIP=P100, OPENCL=all)\"\n)\nset(WITH_GPU_PARAMS \"${WITH_GPU}\")\nset_property(CACHE WITH_GPU PROPERTY STRINGS ${SUPPORTED_CUDA_ARCHITECTURES}\n                                     ${SUPPORTED_HIP_ARCHITECTURES})\n\noption(WITH_CUDA_PROFILING \"Enable profiling within CUDA\" OFF)\noption(WITH_HIP_PROFILING \"Enable profiling within HIP\" OFF)\n\n# =================================================================================================\n# LANGUAGES AND TESTING\nenable_language(Fortran)\n\nif ((WITH_C_API AND WITH_EXAMPLES) OR (NOT USE_ACCEL MATCHES \"none\"))\n  enable_language(CXX)\n  enable_language(C)\n\n  if (NOT DEFINED CMAKE_CXX_STANDARD)\n    set(CMAKE_CXX_STANDARD 14)\n    set(CMAKE_CXX_STANDARD_REQUIRED ON)\n  endif ()\n\n  if (NOT DEFINED CMAKE_C_STANDARD)\n    set(CMAKE_C_STANDARD 11)\n    set(CMAKE_C_STANDARD_REQUIRED ON)\n  endif ()\n\nendif ()\n\n# =================================== OpenMP\nif (USE_OPENMP)\n  find_package(OpenMP REQUIRED)\nendif ()\n\n# =================================== LIBXSMM (rely on pkg-config)\nif (USE_SMM MATCHES \"libxsmm|auto\")\n  if (USE_SMM MATCHES \"libxsmm\")\n    set(LIBXSMM_REQUIRED \"REQUIRED\")\n  endif ()\n  find_package(PkgConfig ${LIBXSMM_REQUIRED})\n  if (USE_OPENMP)\n    if (BUILD_SHARED_LIBS OR USE_SMM MATCHES \"libxsmm-shared\")\n      pkg_check_modules(LIBXSMMEXT IMPORTED_TARGET GLOBAL libxsmmext-shared)\n    else ()\n      pkg_check_modules(LIBXSMMEXT IMPORTED_TARGET GLOBAL libxsmmext-static)\n    endif ()\n    if (NOT LIBXSMMEXT_FOUND)\n      pkg_check_modules(LIBXSMMEXT ${LIBXSMM_REQUIRED} IMPORTED_TARGET GLOBAL\n                        libxsmmext)\n    endif ()\n  endif ()\n  if (BUILD_SHARED_LIBS OR USE_SMM MATCHES \"libxsmm-shared\")\n    pkg_check_modules(LIBXSMM IMPORTED_TARGET GLOBAL libxsmmf-shared)\n  else ()\n    pkg_check_modules(LIBXSMM IMPORTED_TARGET GLOBAL libxsmmf-static)\n  endif ()\n  if (NOT LIBXSMM_FOUND)\n    pkg_check_modules(LIBXSMM ${LIBXSMM_REQUIRED} IMPORTED_TARGET GLOBAL\n                      libxsmmf)\n  endif ()\nendif ()\n\n# =================================== SMM (Small Matrix-Matrix multiplication)\nif (USE_SMM MATCHES \"blas\" OR (USE_SMM MATCHES \"auto\" AND NOT LIBXSMM_FOUND))\n  if (USE_ACCEL MATCHES \"opencl\")\n    message(FATAL_ERROR \"OpenCL requires USE_SMM=libxsmm\")\n  endif ()\n  message(STATUS \"Using BLAS for Small Matrix Multiplication\")\nelseif (USE_SMM MATCHES \"libxsmm\" OR USE_SMM MATCHES \"auto\")\n  message(STATUS \"Using libxsmm for Small Matrix Multiplication\")\nelse ()\n  message(FATAL_ERROR \"Unknown SMM library specified\")\nendif ()\n\n# =================================== BLAS & LAPACK, PkgConfig\nfind_package(LAPACK REQUIRED) # needed for some of the integrated test routines,\n                              # also calls find_package(BLAS)\n\n# =================================== Python this module looks preferably for\n# version 3 of Python. If not found, version 2 is searched. In CMake 3.15, if a\n# python virtual environment is activated, it will search the virtual\n# environment for a python interpreter before searching elsewhere in the system.\n# In CMake <3.15, the system is searched before the virtual environment.\nif (NOT Python_EXECUTABLE)\n  # If the python interpreter is not specified (command line), try finding it:\n  find_package(\n    Python\n    COMPONENTS Interpreter\n    REQUIRED)\nendif ()\n\n# =================================== MPI\nif (USE_MPI)\n  get_property(REQUIRED_MPI_COMPONENTS GLOBAL PROPERTY ENABLED_LANGUAGES)\n  if (NOT CMAKE_CROSSCOMPILING) # when cross compiling, assume the users know\n                                # what they are doing\n    set(MPI_DETERMINE_LIBRARY_VERSION TRUE)\n  endif ()\n  find_package(\n    MPI\n    COMPONENTS ${REQUIRED_MPI_COMPONENTS}\n    REQUIRED)\n\n  if (NOT MPI_Fortran_HAVE_F90_MODULE)\n    message(\n      FATAL_ERROR\n        \"\\\nThe listed MPI implementation does not provide the required mpi.mod interface. \\\nWhen using the GNU compiler in combination with Intel MPI, please use the \\\nIntel MPI compiler wrappers. Check the INSTALL.md for more information.\")\n  endif ()\n  if (USE_MPI_F08)\n    if (NOT MPI_Fortran_HAVE_F08_MODULE)\n      message(\n        FATAL_ERROR\n          \"The listed MPI implementation does not provide the required mpi_f08.mod interface.\"\n      )\n    endif ()\n  endif ()\n  if (\"${MPI_Fortran_LIBRARY_VERSION_STRING}\" MATCHES \"Open MPI v2.1\"\n      OR \"${MPI_Fortran_LIBRARY_VERSION_STRING}\" MATCHES \"Open MPI v3.1\")\n    message(\n      WARNING\n        \"RMA with ${MPI_Fortran_LIBRARY_VERSION_STRING} is not supported due to issues with its implementation.\"\n        \" Please use a newer version of OpenMPI or switch to MPICH if you plan on using MPI-RMA.\"\n    )\n  endif ()\nendif ()\n\n# =================================== GPU backends\n\nif (NOT USE_ACCEL MATCHES \"none\")\n  set(DBCSR_ACC_HEADER acc/acc.h acc/acc_bench.h acc/acc_libsmm.h)\nendif ()\n\nif (USE_ACCEL MATCHES \"opencl\")\n  find_package(OpenCL REQUIRED)\n\n  set(DBCSR_OPENCL_SCRIPT ${DBCSR_SOURCE_DIR}/acc/opencl/acc_opencl.sh)\n  set(DBCSR_OPENCL_COMMON acc/opencl/common/opencl_atomics.h\n                          acc/opencl/common/opencl_common.h)\n  list(APPEND DBCSR_ACC_HEADER acc/opencl/smm/opencl_libsmm.h\n       acc/opencl/acc_opencl.h)\nendif ()\n\nif (USE_ACCEL MATCHES \"cuda|hip\")\n  set(GPU_ARCH_NUMBER_K20X 35)\n  set(GPU_ARCH_NUMBER_K40 35)\n  set(GPU_ARCH_NUMBER_K80 37)\n  set(GPU_ARCH_NUMBER_P100 60)\n  set(GPU_ARCH_NUMBER_V100 70)\n  set(GPU_ARCH_NUMBER_A100 80)\n  set(GPU_ARCH_NUMBER_H100 90)\n  set(GPU_ARCH_NUMBER_Mi50 gfx906)\n  set(GPU_ARCH_NUMBER_Mi100 gfx908)\n  set(GPU_ARCH_NUMBER_Mi250 gfx90a)\n  set(GPU_ARCH_NUMBER_Mi300 gfx942)\n  set(GPU_ARCH_NUMBER_Mi350 gfx950)\nendif ()\n\nif (USE_ACCEL MATCHES \"cuda\")\n  enable_language(CUDA)\n  find_package(CUDAToolkit REQUIRED)\n\n  if (NOT DEFINED CMAKE_CUDA_STANDARD)\n    set(CMAKE_CUDA_STANDARD 14)\n    set(CMAKE_CUDA_STANDARD_REQUIRED ON)\n  endif ()\n\n  if (CUDAToolkit_VERSION LESS 5.5)\n    message(FATAL_ERROR \"CUDA version >= 5.5 is required.\")\n  endif ()\n\n  # Make sure the GPU required is supported\n  list(FIND SUPPORTED_CUDA_ARCHITECTURES ${WITH_GPU} GPU_SUPPORTED)\n  if (GPU_SUPPORTED EQUAL -1)\n    message(\n      FATAL_ERROR \"GPU architecture requested (${WITH_GPU}) is not supported. \"\n                  \"Please choose from: ${SUPPORTED_CUDA_ARCHITECTURES}\")\n  endif ()\n\n  # set cuda architecture number and compilation flags\n  set(ACC_ARCH_NUMBER ${GPU_ARCH_NUMBER_${WITH_GPU}})\n\n  message(STATUS \"GPU target architecture: \" ${WITH_GPU})\n  message(STATUS \"Kernel parameters: \" ${WITH_GPU_PARAMS})\n  message(STATUS \"GPU architecture number: \" ${ACC_ARCH_NUMBER})\n  message(STATUS \"GPU profiling enabled: \" ${WITH_CUDA_PROFILING})\nendif ()\n\nif (USE_ACCEL MATCHES \"hip\")\n  if (NOT CMAKE_HIP_ARCHITECTURES)\n    set(CMAKE_HIP_ARCHITECTURES OFF)\n  endif ()\n  enable_language(HIP)\n\n  if (NOT DEFINED CMAKE_HIP_STANDARD)\n    set(CMAKE_HIP_STANDARD 14)\n    set(CMAKE_HIP_STANDARD_REQUIRED ON)\n  endif ()\n\n  # Make sure the GPU required is supported\n  list(FIND SUPPORTED_HIP_ARCHITECTURES ${WITH_GPU} GPU_SUPPORTED)\n  if (GPU_SUPPORTED EQUAL -1)\n    message(\n      FATAL_ERROR \"GPU architecture requested (${WITH_GPU}) is not supported. \"\n                  \"Please choose from: ${SUPPORTED_HIP_ARCHITECTURES}\")\n  endif ()\n\n  # ROCm is typically installed in /opt/rocm; otherwise let the user set\n  # ROCM_PATH as an environment variable or define.\n  if (NOT DEFINED ROCM_PATH)\n    if (NOT DEFINED ENV{ROCM_PATH})\n      set(ROCM_PATH\n          \"/opt/rocm\"\n          CACHE PATH \"Path to ROCm installation\")\n    else ()\n      set(ROCM_PATH\n          $ENV{ROCM_PATH}\n          CACHE PATH \"Path to ROCm installation\")\n    endif ()\n  endif ()\n\n  # Notice: this is not FindHIP.cmake for hip language support, but\n  # hip-config.cmake which contains targets like hip::host for jitting.\n  find_package(hip CONFIG REQUIRED HINTS ${ROCM_PATH})\n\n  message(STATUS \"Build with HIP ${hip_VERSION}\")\n  if (hip_VERSION LESS 4.4.0)\n    message(FATAL_ERROR \"HIP version >= 4.4.0 is required.\")\n  endif ()\n\n  set(ACC_ARCH_NUMBER ${GPU_ARCH_NUMBER_${WITH_GPU}})\n  message(STATUS \"GPU target architecture: \" ${WITH_GPU})\n  message(STATUS \"Kernel parameters: \" ${WITH_GPU_PARAMS})\n  message(STATUS \"GPU architecture number: \" ${ACC_ARCH_NUMBER})\n  message(STATUS \"GPU profiling enabled: \" ${WITH_HIP_PROFILING})\n\n  # =================================== BLAS on GPU backend\n  find_package(hipblas CONFIG REQUIRED HINTS ${ROCM_PATH})\n\n  # =================================== HIPRTC\n  find_package(hiprtc REQUIRED)\nendif ()\n\n# =================================================================================================\n# OPTION HANDLING\n\n# make sure that the default build type is RELEASE\nset(default_build_type \"Release\")\nif (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)\n  message(\n    STATUS\n      \"Setting build type to '${default_build_type}' as none was specified.\")\n  set(CMAKE_BUILD_TYPE\n      \"${default_build_type}\"\n      CACHE STRING\n            \"Choose the type of build, options are: Debug Release Coverage.\"\n            FORCE)\n  # set the possible values of build type for cmake-gui\n  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS \"Debug\" \"Release\"\n                                               \"Coverage\")\nendif ()\n\n# compiler configuration could have impacted package discovery (above)\ninclude(CompilerConfiguration)\ninclude(CheckCompilerSupport)\n\n# subdirectories\nadd_subdirectory(${DBCSR_SOURCE_DIR})\n\nif (BUILD_TESTING)\n  include(CTest)\n  add_subdirectory(tests)\nendif ()\n\nif (WITH_EXAMPLES)\n  add_subdirectory(examples)\nendif ()\n\nadd_subdirectory(docs)\n\ninclude(CustomTargets)\n\n# Disable LTO\nset(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE FORCE)\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to DBCSR\nThe core of DBCSR is written in Fortran. All other languages must be supported through bindings.\n\nThere 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.\n\nWe 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.\n\nHaving examples (under the directory [examples](./examples)) is also appreciated. They must be independent of the DBCSR compilation and only use the DBCSR APIs.\n\nDBCSR developers can find additional information on the [Development](https://github.com/cp2k/dbcsr/wiki/Development) wiki page.\n\n## Fortran Code conventions\n\nThe code is automatically formatted (via pre-commit hooks) by the [prettify tool](https://github.com/pseewald/fprettify/).\n\nPlease make sure that you follow the following code conventions (based on [CP2K conventions](https://www.cp2k.org/dev:codingconventions)):\n1. Every `USE` statement should have an `ONLY:` clause, which lists the imported symbols.\n2. Every `OMP PARALLEL` region should declare `default(none)`.\n3. Every static variable should be marked with the `SAVE` attribute.\n4. Every Fortran module should contain the line `IMPLICIT NONE`.\n5. Every conversion that might change value should be explicit.\n6. 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!\n7. Use the routines from [MPI wrappers](./src/mpi) instead of calling MPI directly.\n8. 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, ,,,)`.\n9. Avoid to use `STOP`. Prefer the DBCSR error handlers: `DBCSR_WARN`, `DBCSR_ABORT`, `DBCSR_ASSERT`.\n10. 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).\n11. 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_<unique ID of the submodule>_` namespace.\n12. 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\"`).\n13. All Fortran keywords (`FUNCTION`, `SUBROUTINE`, data types...) must be in capital letters.\n\n**Most important, please avoid committing dead code and useless comments!**\n"
  },
  {
    "path": "DBCSR.md",
    "content": "---\nproject: DBCSR\nproject_github: https://github.com/cp2k/dbcsr\nproject_download: https://github.com/cp2k/dbcsr/releases\nproject_website: https://dbcsr.cp2k.org\nsummary: ![DBCSR](media/logo/logo.png)\n         {: style=\"text-align: center\"}\nauthor: DBCSR Authors\ngithub: https://github.com/cp2k/dbcsr/blob/master/AUTHORS\nfpp_extensions: F\nfixed_extensions:\nextensions: F\npreprocessor: cpp -traditional-cpp -E -Wno-invalid-pp-token\ninclude: ../src\npredocmark: >\nmedia_dir: @CMAKE_SOURCE_DIR@/docs/media\nmd_base_dir: @CMAKE_SOURCE_DIR@\npage_dir: @CMAKE_SOURCE_DIR@/docs/guide\nsrc_dir: ./src\n         ./tests\n         ./examples\noutput_dir: @CMAKE_BINARY_DIR@/doc\ndocmark_alt: #\npredocmark_alt: <\ndisplay: public\n         protected\n         private\nsource: true\ngraph: false\nsearch: false\nfavicon: @CMAKE_SOURCE_DIR@/docs/media/logo/logo.png\nversion: @dbcsr_VERSION@\nexclude: Makefile\nextra_filetypes: cpp #\n---\n\n--------------------\n\nDBCSR stands for **D**istributed **B**locked **C**ompressed **S**parse **R**ow.\n\nDBCSR is a library designed to efficiently perform sparse matrix-matrix multiplication, among other operations.\n\nIt is MPI and OpenMP parallel and can exploit Nvidia and AMD GPUs via CUDA and HIP.\n\nTo get started with DBCSR, go to\n\n- [Installation guide](page/2-user-guide/1-installation/index.html)\n- [User guide](page/2-user-guide/index.html)\n- [Developer guide](page/3-developer-guide/index.html)\n\nLicense\n-------\n\nDBCSR'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.\n\nHow to cite\n-----------------\n\nTo cite DBCSR, use the following paper\n\n```latex\n@article{dbcsr,\n\ttitle = {{Sparse Matrix Multiplication: The Distributed Block-Compressed Sparse Row Library}},\n\tjournal = {Parallel Computing},\n\tvolume = {40},\n\tnumber = {5-6},\n\tyear = {2014},\n\tissn = {0167-8191},\n\tauthor = {Urban Borstnik and Joost VandeVondele and Valery Weber and Juerg Hutter}\n}\n```\n\nTo cite the DBCSR software library, use:\n\n```latex\n@misc{dbcsr-software,\n\tauthor = {The CP2K Developers Group},\n\ttitle = {{DBCSR: Distributed Block Compressed Sparse Row matrix library}},\n\tpublisher = {GitHub},\n\tjournal = {GitHub repository},\n\tyear = {2020},\n\turl = {https://github.com/cp2k/dbcsr}\n}\n```\n\nContributing\n-----------------\n\nYour 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).\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n                            NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    DBCSR: Distributed Block Compressed Sparse Row matrix library\n    Copyright (C) by the DBCSR developers group - All rights reserved\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n"
  },
  {
    "path": "README.md",
    "content": "# DBCSR: Distributed Block Compressed Sparse Row matrix library\n\n[![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)\n\n\n[![codecov](https://codecov.io/gh/cp2k/dbcsr/branch/develop/graph/badge.svg)](https://codecov.io/gh/cp2k/dbcsr)\n[![Licence](https://img.shields.io/badge/license-GPL%20v2.0-blue.svg)](./LICENSE)\n[![GitHub Releases](https://img.shields.io/github/release-pre/cp2k/dbcsr.svg)](https://github.com/cp2k/dbcsr/releases)\n\nDBCSR is a library designed to efficiently perform sparse matrix-matrix multiplication, among other operations.\nIt is MPI and OpenMP parallel and can exploit Nvidia and AMD GPUs via CUDA and HIP.\n\n<p align=\"center\">\n<img src=\"docs/media/logo/logo.png\" width=\"500\">\n</p>\n\n## How to Install\n\nFollow the [installation guide](https://cp2k.github.io/dbcsr/develop/page/2-user-guide/1-installation/index.html).\n\n## Documentation\n\nDocumentation is [available online](https://cp2k.github.io/dbcsr/) for the latest release.\n\n## How to Cite\n\nTo cite DBCSR, use the following paper\n\n```latex\n@article{dbcsr,\n\ttitle = {{Sparse Matrix Multiplication: The Distributed Block-Compressed Sparse Row Library}},\n\tjournal = {Parallel Computing},\n\tvolume = {40},\n\tnumber = {5-6},\n\tyear = {2014},\n\tissn = {0167-8191},\n\tauthor = {Urban Borstnik and Joost VandeVondele and Valery Weber and Juerg Hutter}\n}\n```\n\nTo cite the DBCSR software library, use:\n\n```latex\n@misc{dbcsr-software,\n\tauthor = {The CP2K Developers Group},\n\ttitle = {{DBCSR: Distributed Block Compressed Sparse Row matrix library}},\n\tpublisher = {GitHub},\n\tjournal = {GitHub repository},\n\tyear = {2022},\n\turl = {https://github.com/cp2k/dbcsr}\n}\n```\n\n## Contributing to DBCSR\n\nYour contribution to the project is welcome!\nPlease 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.\n"
  },
  {
    "path": "VERSION",
    "content": "MAJOR = 2\nMINOR = 9\nPATCH = 1\n# A specific DATE (YYYY-MM-DD) fixes an official release, otherwise\n# it is considered Development version.\nDATE  = 2025-12-19\n\n\n"
  },
  {
    "path": "cmake/CheckCompilerSupport.cmake",
    "content": "include(CheckFortranSourceCompiles)\n\nset(CHECK_PROGRAMS f2008-norm2.f90 f2008-block_construct.f90\n                   f2008-contiguous.f90 f95-reshape-order-allocatable.f90)\n\nset(_saved_fortran_flags \"${CMAKE_Fortran_FLAGS}\")\nset(CMAKE_Fortran_FLAGS \"\")\nset(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)\nforeach (prog ${CHECK_PROGRAMS})\n  get_filename_component(prog_ext ${prog} EXT) # get the src extension to pass\n                                               # along\n  get_filename_component(prog_name ${prog} NAME_WE)\n\n  file(READ \"${CMAKE_CURRENT_LIST_DIR}/compiler-tests/${prog}\" prog_src)\n  CHECK_Fortran_SOURCE_COMPILES(\"${prog_src}\" \"${prog_name}\" SRC_EXT\n                                \"${prog_ext}\")\n\n  if (NOT ${prog_name})\n    message(\n      FATAL_ERROR \"Your compiler does not support all required F2008 features\")\n  endif ()\nendforeach ()\nunset(CMAKE_TRY_COMPILE_TARGET_TYPE)\nset(CMAKE_Fortran_FLAGS \"${_saved_fortran_flags}\")\n"
  },
  {
    "path": "cmake/CompilerConfiguration.cmake",
    "content": "if (CMAKE_Fortran_COMPILER_ID STREQUAL \"GNU\")\n  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\")\n  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10) # comparison against CXX version rather than GFortran version\n    set(CMAKE_Fortran_FLAGS \"${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch\") # required for 10+ (MPI wrap)\n   else ()\n    set(CMAKE_Fortran_FLAGS \"${CMAKE_Fortran_FLAGS} -Werror=argument-mismatch\")  # gcc 10+ has this automatically\n  endif ()\n  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13) # comparison against CXX version rather than GFortran version\n    set(CMAKE_Fortran_FLAGS \"${CMAKE_Fortran_FLAGS} -Wno-error=uninitialized\") # false positive (allocatable array)\n  endif ()\n  include(CheckFortranCompilerFlag)\n  check_fortran_compiler_flag(\"-Wno-error=deprecated-openmp\" _fc_has_deprecated_openmp)\n  if (_fc_has_deprecated_openmp)\n    set(CMAKE_Fortran_FLAGS \"${CMAKE_Fortran_FLAGS} -Wno-error=deprecated-openmp\")\n  endif ()\n  set(CMAKE_Fortran_FLAGS_RELEASE  \"-O3 -g -funroll-loops\")\n  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\")\n  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\")\n  if ((NOT (USE_MPI)) OR (NOT (\"${MPI_Fortran_LIBRARY_VERSION_STRING}\" MATCHES \"Open MPI\")))\n    set(CMAKE_Fortran_FLAGS_DEBUG \"${CMAKE_Fortran_FLAGS_DEBUG} -fsanitize=leak\")\n  endif ()\nelseif (CMAKE_Fortran_COMPILER_ID STREQUAL \"Intel\")\n  set(CMAKE_Fortran_FLAGS          \"${CMAKE_Fortran_FLAGS} -free -stand=f18 -fpp -heap-arrays\")\n  set(CMAKE_Fortran_FLAGS_RELEASE  \"-O3 -g\")\n  set(CMAKE_Fortran_FLAGS_DEBUG    \"-O2 -debug\")\nelseif (CMAKE_Fortran_COMPILER_ID STREQUAL \"IntelLLVM\")\n  set(CMAKE_Fortran_FLAGS          \"${CMAKE_Fortran_FLAGS} -free -stand f18 -fpp -heap-arrays\")\n  set(CMAKE_Fortran_FLAGS_RELEASE  \"-O3 -g\")\n  set(CMAKE_Fortran_FLAGS_DEBUG    \"-O2 -debug\")\nelseif (CMAKE_Fortran_COMPILER_ID STREQUAL \"PGI\")\n  set(CMAKE_Fortran_FLAGS          \"${CMAKE_Fortran_FLAGS} -Mfreeform -Mextend -Mallocatable=03\")  # -Mallocatable=03: enable F2003+ assignment semantics\n  set(CMAKE_Fortran_FLAGS_RELEASE  \"-fast\")\n  set(CMAKE_Fortran_FLAGS_DEBUG    \"-g\")\nelseif (CMAKE_Fortran_COMPILER_ID STREQUAL \"NAG\")\n  set(CMAKE_Fortran_FLAGS          \"${CMAKE_Fortran_FLAGS} -f2008 -free -Warn=reallocation -Warn=subnormal\")\n  set(CMAKE_Fortran_FLAGS_RELEASE  \"-O2\")\n  set(CMAKE_Fortran_FLAGS_DEBUG    \"-g -C\")\n  if (NOT OpenMP_FOUND)\n    set(CMAKE_Fortran_FLAGS_RELEASE  \"${CMAKE_Fortran_FLAGS_RELEASE} -gline\")  # -gline is only supported without OpenMP\n    set(CMAKE_Fortran_FLAGS_DEBUG  \"${CMAKE_Fortran_FLAGS_DEBUG} -C=all\")  # some checks are not available with OpenMP\n  endif ()\nelseif (CMAKE_Fortran_COMPILER_ID STREQUAL \"Cray\")\n  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\n  set(CMAKE_Fortran_FLAGS_RELEASE  \"-O2 -G2\")\n  set(CMAKE_Fortran_FLAGS_DEBUG    \"-G2\")\n  set(CMAKE_Fortran_MODOUT_FLAG    \"-ef\")  # override to get lower-case module file names\nelseif (CMAKE_Fortran_COMPILER_ID STREQUAL \"LLVMFlang\")\n  set(CMAKE_Fortran_FLAGS          \"${CMAKE_Fortran_FLAGS} -ffree-form -std=f2018 -cpp\")\n  set(CMAKE_Fortran_FLAGS_RELEASE  \"-O3\")\n  set(CMAKE_Fortran_FLAGS_DEBUG    \"-O0 -g\")\nelseif (CMAKE_Fortran_COMPILER_ID STREQUAL \"Flang\")\n  set(CMAKE_Fortran_FLAGS          \"${CMAKE_Fortran_FLAGS} -ffree-form -cpp\")\n  set(CMAKE_Fortran_FLAGS_RELEASE  \"-O3\")\n  set(CMAKE_Fortran_FLAGS_DEBUG    \"-O0 -g\")\nelse ()\n  message(WARNING \"\\\nUnknown Fortran compiler, trying without any additional (optimization) flags.\\n\\\nYou will most likely have to specify extra options for free-form Fortran 2008 for your compiler!\\n\\\nPlease open an issue at https://github.com/cp2k/dbcsr/issues with the reported compiler name and the required flags.\")\n  message(\"-- CMAKE_Fortran_COMPILER_ID: \" ${CMAKE_Fortran_COMPILER_ID})\n  message(\"-- CMAKE_Fortran_COMPILER full path: \" ${CMAKE_Fortran_COMPILER})\nendif ()\n\nif (CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\")\n  set(CMAKE_CXX_FLAGS_RELEASE      \"-O3 -g -funroll-loops -Wall -Wextra -Werror -Wno-missing-field-initializers\")\n  set(CMAKE_CXX_FLAGS_COVERAGE     \"-O0 -g --coverage -Wall -Wextra -Werror -Wno-missing-field-initializers\")\n  set(CMAKE_CXX_FLAGS_DEBUG        \"-O2 -ggdb -Wall -Wextra -Werror -Wno-missing-field-initializers -fsanitize=undefined -fsanitize=address -fsanitize-recover=all\")\n  if ((NOT (USE_MPI)) OR (NOT (\"${MPI_Fortran_LIBRARY_VERSION_STRING}\" MATCHES \"Open MPI\")))\n    set(CMAKE_CXX_FLAGS_DEBUG \"${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=leak\")\n  endif ()\nelseif (CMAKE_CXX_COMPILER_ID STREQUAL \"Clang\")\n  set(CMAKE_CXX_FLAGS_RELEASE      \"-O3 -funroll-loops\")\n  set(CMAKE_CXX_FLAGS_COVERAGE     \"-O0 -g --coverage\")\n  set(CMAKE_CXX_FLAGS_DEBUG        \"-O0 -g\")\nelseif (CMAKE_CXX_COMPILER_ID STREQUAL \"AppleClang\")\n  set(CMAKE_CXX_FLAGS_RELEASE      \"-O3 -funroll-loops\")\n  set(CMAKE_CXX_FLAGS_COVERAGE     \"-O0 -g --coverage\")\n  set(CMAKE_CXX_FLAGS_DEBUG        \"-O0 -g\")\n  set(CMAKE_EXE_LINKER_FLAGS_COVERAGE \"-lgcov\")  # Apple's Clang needs an extra\nelseif (CMAKE_CXX_COMPILER_ID STREQUAL \"Intel\")\n  set(CMAKE_CXX_FLAGS_RELEASE      \"-O3 -g\")\n  set(CMAKE_CXX_FLAGS_DEBUG        \"-O0 -debug\")\nelseif (CMAKE_CXX_COMPILER_ID STREQUAL \"IntelLLVM\")\n  set(CMAKE_CXX_FLAGS_RELEASE      \"-O3 -g\")\n  set(CMAKE_CXX_FLAGS_DEBUG        \"-O0 -debug\")\nelseif (CMAKE_CXX_COMPILER_ID STREQUAL \"PGI\")\n  set(CMAKE_CXX_FLAGS_RELEASE      \"-fast\")\n  set(CMAKE_CXX_FLAGS_DEBUG        \"-g\")\nelseif (CMAKE_CXX_COMPILER_ID STREQUAL \"Cray\")\n  set(CMAKE_CXX_FLAGS_RELEASE      \"-O3\")\n  set(CMAKE_CXX_FLAGS_DEBUG        \"-G2\")\n  if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)\n    # prevent deallocation failures due to tcmalloc's free with glibc's aligned_alloc, see https://bugzilla.redhat.com/show_bug.cgi?id=1569391\n    set(CMAKE_C_FLAGS              \"${CMAKE_C_FLAGS} -h system_alloc\")\n    set(CMAKE_CXX_FLAGS            \"${CMAKE_CXX_FLAGS} -h system_alloc\")\n    set(CMAKE_Fortran_FLAGS        \"${CMAKE_Fortran_FLAGS} -h system_alloc\")\n    # since the detection of the implicitly linked libraries occurs before we can intervene, filter them out again\n    list(FILTER CMAKE_C_IMPLICIT_LINK_LIBRARIES EXCLUDE REGEX \"tcmalloc\")\n    list(FILTER CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES EXCLUDE REGEX \"tcmalloc\")\n  endif ()\n  # OpenACC support with CCE is EOL: causes https://github.com/cp2k/dbcsr/issues/261\n  # eventually check compiler version (similar to -h system_alloc)\n  set(CMAKE_C_FLAGS                \"${CMAKE_C_FLAGS} -hnoacc -h nomessage=1234\")\n  set(CMAKE_CXX_FLAGS              \"${CMAKE_CXX_FLAGS} -hnoacc -h nomessage=1234\")\n  set(CMAKE_Fortran_FLAGS          \"${CMAKE_Fortran_FLAGS} -hnoacc -M1234\")\nelse ()\n  message(WARNING \"\\\nUnknown C++ compiler, trying without any additional (optimization) flags.\\n\\\nYou may have to specify flags for C++11/14 support manually.\\n\\\nPlease open an issue at https://github.com/cp2k/dbcsr/issues with the reported compiler name and the required flags.\")\n  message(\"-- CMAKE_CXX_COMPILER_ID: \" ${CMAKE_CXX_COMPILER_ID})\n  message(\"-- CMAKE_CXX_COMPILER full path: \" ${CMAKE_CXX_COMPILER})\nendif ()\n\n# inherit C flags from CXX\nset(CMAKE_C_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})\nset(CMAKE_C_FLAGS_COVERAGE ${CMAKE_CXX_FLAGS_COVERAGE})\nset(CMAKE_C_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})\n"
  },
  {
    "path": "cmake/CustomTargets.cmake",
    "content": "# =================================================================================================\n# BUILD DISTRIBUTION\nset(ARCHIVE_NAME \"${CMAKE_PROJECT_NAME}-${dbcsr_VERSION}\")\nadd_custom_target(\n  dist\n  COMMENT \"Building distribution: ${ARCHIVE_NAME}\"\n  COMMAND ${CMAKE_COMMAND} -E make_directory \"${CMAKE_BINARY_DIR}/dist\"\n  COMMAND git archive-all \"${CMAKE_BINARY_DIR}/dist/${ARCHIVE_NAME}.tar.gz\"\n  COMMAND ${CMAKE_COMMAND} -E echo \"SHA512 Digests:\"\n  COMMAND ${CMAKE_COMMAND} -E sha512sum\n          \"${CMAKE_BINARY_DIR}/dist/${ARCHIVE_NAME}.tar.gz\"\n  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})\n\n# =================================================================================================\n# LCOV - COVERAGE REPORTS GENERATION\nfind_program(\n  LCOV_EXE lcov\n  DOC \"path to the lcov executable (required to generate coverage reports)\")\n\nfind_program(\n  GENHTML_EXE genhtml\n  DOC \"path to the genhtml executable (required to generate HTML coverage reports)\"\n)\n\nset(LCOV_ARGS CACHE STRING\n                    \"specify additional arguments to pass to lcov for cov-info\")\nadd_custom_target(\n  cov-info\n  COMMAND\n    \"${LCOV_EXE}\" --directory \"${CMAKE_BINARY_DIR}\" --base-dir\n    \"${CMAKE_SOURCE_DIR}\" --no-external --capture ${LCOV_ARGS} --output-file\n    coverage.info\n  COMMAND \"${LCOV_EXE}\" --list coverage.info\n  VERBATIM\n  BYPRODUCTS coverage.info\n  COMMENT \"Generate coverage.info using lcov\")\n\nadd_custom_target(\n  cov-genhtml\n  COMMAND \"${GENHTML_EXE}\" coverage.info --output-directory cov-html\n  COMMENT\n    \"Generate a HTML-based coverage report using lcov in ${CMAKE_BINARY_DIR}/cov-html\"\n  VERBATIM) # Note: this directory will not be cleaned by `cmake --build .. --\n            # clean`\nadd_dependencies(cov-genhtml cov-info)\n"
  },
  {
    "path": "cmake/GetGitRevisionDescription.cmake",
    "content": "# - Returns a version string from Git\n#\n# These functions force a re-configure on each git commit so that you can\n# trust the values of the variables in your build system.\n#\n#  get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])\n#\n# Returns the refspec and sha hash of the current head revision\n#\n#  git_describe(<var> [<additional arguments to git describe> ...])\n#\n# Returns the results of git describe on the source tree, and adjusting\n# the output so that it tests false if an error occurs.\n#\n#  git_get_exact_tag(<var> [<additional arguments to git describe> ...])\n#\n# Returns the results of git describe --exact-match on the source tree,\n# and adjusting the output so that it tests false if there was no exact\n# matching tag.\n#\n#  git_local_changes(<var>)\n#\n# Returns either \"CLEAN\" or \"DIRTY\" with respect to uncommitted changes.\n# Uses the return code of \"git diff-index --quiet HEAD --\".\n# Does not regard untracked files.\n#\n# Requires CMake 2.6 or newer (uses the 'function' command)\n#\n# Original Author:\n# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>\n# http://academic.cleardefinition.com\n# Iowa State University HCI Graduate Program/VRAC\n#\n# Copyright Iowa State University 2009-2010.\n# Distributed under the Boost Software License, Version 1.0.\n# (See accompanying file LICENSE_1_0.txt or copy at\n# http://www.boost.org/LICENSE_1_0.txt)\n\nif(__get_git_revision_description)\n\treturn()\nendif()\nset(__get_git_revision_description YES)\n\n# We must run the following at \"include\" time, not at function call time,\n# to find the path to this module rather than the path to a calling list file\nget_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)\n\nfunction(get_git_head_revision _refspecvar _hashvar)\n\tset(GIT_PARENT_DIR \"${CMAKE_CURRENT_SOURCE_DIR}\")\n\tset(GIT_DIR \"${GIT_PARENT_DIR}/.git\")\n\twhile(NOT EXISTS \"${GIT_DIR}\")\t# .git dir not found, search parent directories\n\t\tset(GIT_PREVIOUS_PARENT \"${GIT_PARENT_DIR}\")\n\t\tget_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)\n\t\tif(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)\n\t\t\t# We have reached the root directory, we are not in git\n\t\t\tset(${_refspecvar} \"GITDIR-NOTFOUND\" PARENT_SCOPE)\n\t\t\tset(${_hashvar} \"GITDIR-NOTFOUND\" PARENT_SCOPE)\n\t\t\treturn()\n\t\tendif()\n\t\tset(GIT_DIR \"${GIT_PARENT_DIR}/.git\")\n\tendwhile()\n\t# check if this is a submodule\n\tif(NOT IS_DIRECTORY ${GIT_DIR})\n\t\tfile(READ ${GIT_DIR} submodule)\n\t\tstring(REGEX REPLACE \"gitdir: (.*)\\n$\" \"\\\\1\" GIT_DIR_RELATIVE ${submodule})\n\t\tget_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)\n\t\tget_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)\n\tendif()\n\tif(NOT IS_DIRECTORY \"${GIT_DIR}\")\n\t\tfile(READ ${GIT_DIR} worktree)\n \t\tstring(REGEX REPLACE \"gitdir: (.*)worktrees(.*)\\n$\" \"\\\\1\" GIT_DIR ${worktree})\n \tendif()\n\tset(GIT_DATA \"${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data\")\n\tif(NOT EXISTS \"${GIT_DATA}\")\n\t\tfile(MAKE_DIRECTORY \"${GIT_DATA}\")\n\tendif()\n\n\tif(NOT EXISTS \"${GIT_DIR}/HEAD\")\n\t\treturn()\n\tendif()\n\tset(HEAD_FILE \"${GIT_DATA}/HEAD\")\n\tconfigure_file(\"${GIT_DIR}/HEAD\" \"${HEAD_FILE}\" COPYONLY)\n\n\tconfigure_file(\"${_gitdescmoddir}/GetGitRevisionDescription.cmake.in\"\n\t\t\"${GIT_DATA}/grabRef.cmake\"\n\t\t@ONLY)\n\tinclude(\"${GIT_DATA}/grabRef.cmake\")\n\n\tset(${_refspecvar} \"${HEAD_REF}\" PARENT_SCOPE)\n\tset(${_hashvar} \"${HEAD_HASH}\" PARENT_SCOPE)\nendfunction()\n\nfunction(git_describe _var)\n\tif(NOT GIT_FOUND)\n\t\tfind_package(Git QUIET)\n\tendif()\n\tget_git_head_revision(refspec hash)\n\tif(NOT GIT_FOUND)\n\t\tset(${_var} \"GIT-NOTFOUND\" PARENT_SCOPE)\n\t\treturn()\n\tendif()\n\tif(NOT hash)\n\t\tset(${_var} \"HEAD-HASH-NOTFOUND\" PARENT_SCOPE)\n\t\treturn()\n\tendif()\n\n\t# TODO sanitize\n\t#if((${ARGN}\" MATCHES \"&&\") OR\n\t#\t(ARGN MATCHES \"||\") OR\n\t#\t(ARGN MATCHES \"\\\\;\"))\n\t#\tmessage(\"Please report the following error to the project!\")\n\t#\tmessage(FATAL_ERROR \"Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}\")\n\t#endif()\n\n\t#message(STATUS \"Arguments to execute_process: ${ARGN}\")\n\n\texecute_process(COMMAND\n\t\t\"${GIT_EXECUTABLE}\"\n\t\tdescribe\n\t\t${hash}\n\t\t${ARGN}\n\t\tWORKING_DIRECTORY\n\t\t\"${CMAKE_CURRENT_SOURCE_DIR}\"\n\t\tRESULT_VARIABLE\n\t\tres\n\t\tOUTPUT_VARIABLE\n\t\tout\n\t\tERROR_QUIET\n\t\tOUTPUT_STRIP_TRAILING_WHITESPACE)\n\tif(NOT res EQUAL 0)\n\t\tset(out \"${out}-${res}-NOTFOUND\")\n\tendif()\n\n\tset(${_var} \"${out}\" PARENT_SCOPE)\nendfunction()\n\nfunction(git_get_exact_tag _var)\n\tgit_describe(out --exact-match ${ARGN})\n\tset(${_var} \"${out}\" PARENT_SCOPE)\nendfunction()\n\nfunction(git_local_changes _var)\n\tif(NOT GIT_FOUND)\n\t\tfind_package(Git QUIET)\n\tendif()\n\tget_git_head_revision(refspec hash)\n\tif(NOT GIT_FOUND)\n\t\tset(${_var} \"GIT-NOTFOUND\" PARENT_SCOPE)\n\t\treturn()\n\tendif()\n\tif(NOT hash)\n\t\tset(${_var} \"HEAD-HASH-NOTFOUND\" PARENT_SCOPE)\n\t\treturn()\n\tendif()\n\n\texecute_process(COMMAND\n\t\t\"${GIT_EXECUTABLE}\"\n\t\tdiff-index --quiet HEAD --\n\t\tWORKING_DIRECTORY\n\t\t\"${CMAKE_CURRENT_SOURCE_DIR}\"\n\t\tRESULT_VARIABLE\n\t\tres\n\t\tOUTPUT_VARIABLE\n\t\tout\n\t\tERROR_QUIET\n\t\tOUTPUT_STRIP_TRAILING_WHITESPACE)\n\tif(res EQUAL 0)\n\t\tset(${_var} \"CLEAN\" PARENT_SCOPE)\n\telse()\n\t\tset(${_var} \"DIRTY\" PARENT_SCOPE)\n\tendif()\nendfunction()\n"
  },
  {
    "path": "cmake/GetGitRevisionDescription.cmake.in",
    "content": "#\n# Internal file for GetGitRevisionDescription.cmake\n#\n# Requires CMake 2.6 or newer (uses the 'function' command)\n#\n# Original Author:\n# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>\n# http://academic.cleardefinition.com\n# Iowa State University HCI Graduate Program/VRAC\n#\n# Copyright Iowa State University 2009-2010.\n# Distributed under the Boost Software License, Version 1.0.\n# (See accompanying file LICENSE_1_0.txt or copy at\n# http://www.boost.org/LICENSE_1_0.txt)\n\nset(HEAD_HASH)\n\nfile(READ \"@HEAD_FILE@\" HEAD_CONTENTS LIMIT 1024)\n\nstring(STRIP \"${HEAD_CONTENTS}\" HEAD_CONTENTS)\nif(HEAD_CONTENTS MATCHES \"ref\")\n\t# named branch\n\tstring(REPLACE \"ref: \" \"\" HEAD_REF \"${HEAD_CONTENTS}\")\n\tif(EXISTS \"@GIT_DIR@/${HEAD_REF}\")\n\t\tconfigure_file(\"@GIT_DIR@/${HEAD_REF}\" \"@GIT_DATA@/head-ref\" COPYONLY)\n\telse()\n\t\tconfigure_file(\"@GIT_DIR@/packed-refs\" \"@GIT_DATA@/packed-refs\" COPYONLY)\n\t\tfile(READ \"@GIT_DATA@/packed-refs\" PACKED_REFS)\n\t\tif(${PACKED_REFS} MATCHES \"([0-9a-z]*) ${HEAD_REF}\")\n\t\t\tset(HEAD_HASH \"${CMAKE_MATCH_1}\")\n\t\tendif()\n\tendif()\nelse()\n\t# detached HEAD\n\tconfigure_file(\"@GIT_DIR@/HEAD\" \"@GIT_DATA@/head-ref\" COPYONLY)\nendif()\n\nif(NOT HEAD_HASH)\n\tfile(READ \"@GIT_DATA@/head-ref\" HEAD_HASH LIMIT 1024)\n\tstring(STRIP \"${HEAD_HASH}\" HEAD_HASH)\nendif()\n"
  },
  {
    "path": "cmake/compiler-tests/f2008-block_construct.f90",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nprogram main\n   try: block\n      exit try\n   end block try\nend program\n"
  },
  {
    "path": "cmake/compiler-tests/f2008-contiguous.f90",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nprogram main\n   implicit none\n\n   ! test whether the compiler supports the CONTIGUOUS keyword\n   integer, allocatable, target :: targ(:)\n   integer, contiguous, pointer :: ptr(:)\n\n   ! allocated data is always contiguous\n   allocate (targ(10))\n   ptr => targ\n\n   ! IS_CONTIGUOUS was implemented in gcc-9 and is therefore not tested for yet\nend program\n"
  },
  {
    "path": "cmake/compiler-tests/f2008-norm2.f90",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nprogram main\n   implicit none\n   real :: x(2) = [real :: 3, 4]\n   if (abs(norm2(x) - 5.) > 1.0D-5) stop 1\nend program\n"
  },
  {
    "path": "cmake/compiler-tests/f95-reshape-order-allocatable.f90",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\nprogram test_reshape\n   integer, dimension(4) :: x = [1, 2, 3, 4]\n   integer, dimension(:), allocatable :: order\n\n   allocate (order(2))\n   order(:) = [2, 1]\n\n   ! PGI <= 19.10 does not accept allocatables for the order parameter\n   print *, reshape(x, shape=[2, 2], order=order)\nend program\n"
  },
  {
    "path": "cmake/fypp-sources.cmake",
    "content": "add_custom_target(fypp) # common target for all fypp calls\n\n# Use a system-provided fypp if available, otherwise the bundled one\nfind_program(\n  FYPP_EXECUTABLE fypp\n  DOC \"The FYPP preprocessor\"\n  PATHS ../tools/build_utils/fypp/bin)\nif (NOT FYPP_EXECUTABLE)\n  message(FATAL_ERROR \"Failed to find the FYPP preprocessor.\")\nelse ()\n  message(STATUS \"FYPP preprocessor found.\")\nendif ()\n\nif ((CMAKE_Fortran_COMPILER_ID STREQUAL \"GNU\")\n    AND (CMAKE_GENERATOR STREQUAL \"Ninja\")\n    AND (CMAKE_VERSION VERSION_GREATER_EQUAL 3.16))\n  set(fypp_flags --line-numbering --line-marker-format=gfortran5)\nelseif (CMAKE_BUILD_TYPE MATCHES COVERAGE)\n  message(\n    WARNING\n      \"Coverage build requested but your environment does not support Line Control directives in Fypp\"\n  )\n  message(\n    WARNING\n      \"You need CMake 3.16+, Ninja (CMake-patched) and gfortran 5+ for this to work!\"\n  )\n  # otherwise the referenced lines in the Coverage report point to either the\n  # original (unexpanded files) or to the Fypped sources which may then not be\n  # picked up by the postprocessing tools. CMake 3.16+ and Ninja are needed\n  # since older CMake (or CMake with make) are unable to parse Line Control\n  # directives within line-continued USE stmts, see\n  # https://gitlab.kitware.com/cmake/cmake/issues/18188\nendif ()\n\nfunction (ADD_FYPP_SOURCES OUTVAR)\n  set(outfiles)\n\n  foreach (f ${ARGN})\n    # first we might need to make the input file absolute\n    get_filename_component(f \"${f}\" ABSOLUTE)\n    get_filename_component(ext \"${f}\" EXT)\n    # get the relative path of the file to the current source dir\n    file(RELATIVE_PATH rf \"${CMAKE_CURRENT_SOURCE_DIR}\" \"${f}\")\n    # set the output filename of fypped sources\n    set(of \"${CMAKE_CURRENT_BINARY_DIR}/${rf}\")\n\n    # create the output directory if it doesn't exist\n    get_filename_component(d \"${of}\" PATH)\n    if (NOT IS_DIRECTORY \"${d}\")\n      file(MAKE_DIRECTORY \"${d}\")\n    endif ()\n\n    if (\"${f}\" MATCHES \".F$\")\n      # append the output file to the list of outputs\n      list(APPEND outfiles \"${of}\")\n      # now add the custom command to generate the output file\n      add_custom_command(\n        OUTPUT \"${of}\"\n        COMMAND ${Python_EXECUTABLE} ${FYPP_EXECUTABLE} ARGS ${fypp_flags}\n                \"${f}\" \"${of}\"\n        MAIN_DEPENDENCY \"${f}\"\n        VERBATIM)\n    elseif (\"${f}\" MATCHES \".h$\")\n      # append the output file to the list of outputs\n      list(APPEND outfiles \"${of}\")\n      # now add the custom command to generate the output file\n      add_custom_command(\n        OUTPUT \"${of}\"\n        COMMAND ${Python_EXECUTABLE} ${FYPP_EXECUTABLE} ARGS \"-F\" \"${f}\" \"${of}\"\n        DEPENDS \"${f}\")\n    else ()\n      configure_file(\"${f}\" \"${of}\" COPYONLY)\n    endif ()\n  endforeach ()\n\n  # build a custom target to fypp seperately (required for example by the doc\n  # target)\n  add_custom_target(\"fypp_${OUTVAR}\" DEPENDS ${outfiles})\n  add_dependencies(fypp \"fypp_${OUTVAR}\")\n\n  # set the output list in the calling scope\n  set(${OUTVAR}\n      ${outfiles}\n      PARENT_SCOPE)\nendfunction ()\n"
  },
  {
    "path": "docs/CMakeLists.txt",
    "content": "# =================================================================================================\n# FORD - DOCUMENTATION GENERATION\nfind_program(\n  FORD_EXE ford\n  DOC \"path to the ford executable (required to generate the documentation)\")\n\n# Copy the FORD project-file into the build directory\nset(FORD_PROJECT_FILE \"${CMAKE_BINARY_DIR}/DBCSR.md\")\nconfigure_file(${CMAKE_SOURCE_DIR}/DBCSR.md \"${FORD_PROJECT_FILE}\")\n\n# Copy the FORD project-file into the build directory\nadd_custom_target(\n  doc\n  COMMENT \"Generating API documentation and doc pages\"\n  COMMAND \"${FORD_EXE}\" \"${FORD_PROJECT_FILE}\"\n  VERBATIM)\n\nif (BUILD_TESTING)\n  add_dependencies(doc doc_copy_tests)\nendif ()\n\nif (WITH_C_API AND WITH_EXAMPLES)\n  add_dependencies(doc doc_copy_examples)\nendif ()\n\nadd_dependencies(doc fypp) # only depend on the fypp step to avoid building\n                           # everything just for the docs\n"
  },
  {
    "path": "docs/guide/1-DBCSR/index.md",
    "content": "title: DBCSR\n\n# DBCSR\n\nDBCSR 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.\n\nDBCSR 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.\n"
  },
  {
    "path": "docs/guide/1-DBCSR/publications.md",
    "content": "title: Publications\n\n# Publications\n\n- **General overview of the library**\n\nUrban 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.\n\n- **Use of one-sided MPI and a 2.5D algorithm**\n\nAlfio 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.\n\n- **GPU-Backend**\n\nOle Schütt, Peter Messmer, Jü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.\n\nIlia 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.\n"
  },
  {
    "path": "docs/guide/2-user-guide/1-installation/1-cmake-build-recipes.md",
    "content": "title: CMake Build Recipes\n\n# DBCSR CMake Build Recipes\n\nFollowing are recipes for different combinations of compilers, platforms and libraries.\nUnless otherwise noted, the examples assume that after fetching/unpacking DBCSR you created\na directory `build/` inside the DBCSR directory and switched into it using `cd build/`.\n\nThe listed examples can usually be combined with other build options like *libxsmm* or *CUDA*\neven if the examples are not explicitly given.\n\nThe instructions used for building in the Continuous Integration can be found in\nthe `.ci/` folder or in the `.github/workflows/`.\n\n## GNU\n\n### GNU compiler, system MPI and system-provided OpenBLAS\n\nMost Linux systems provide the GNU compiler, a system MPI (OpenMPI or MPICH) using the\nGNU compiler as a backend and OpenBLAS for BLAS/LAPACK:\n\n```bash\n    cmake ..\n```\n\n### GNU compiler, system MPI and Intel MKL\n\nTo use the Intel MKL together with the GNU compiler and possibly a system-MPI,\nassuming that MKL is installed in `/sw/intel/mkl`.\n\nVerified with MKL provided as part of the Intel Parallel Studio XE 2019.5 installed in `/sw/intel`\nwith an OS-provided GCC 7.4.1 on Linux openSUSE Leap 15.1, using CMake 3.12.0.\n\n1. Make sure the MKL environment is properly loaded:\n\n```bash\n       source /sw/intel/mkl/bin/mklvars.sh intel64\n```\n\n2. Make sure CMake picks the Intel MKL over any system-provided BLAS library:\n\n```bash\n       cmake -DBLA_VENDOR=Intel10_64lp_seq ..\n```\n\n## Intel\n\nInstructions for using Intel compiler or libraries for different parts on non-Cray systems.\nFor Cray systems, please check further below.\n\n*Note*: in Intel Parallel Studio 2019 there is a potential issue that `mpirun` fails with\nthe error `OFI addrinfo() failed` on local (non-cluster) installations.\nThis can be worked around by setting `export I_MPI_FABRICS=shm`.\n\n### Intel MPI, GNU Compiler and system-provided OpenBLAS\n\nVerified with Intel Parallel Studio XE 2019.5 installed in `/sw/intel`\nwith an OS-provided GCC 7.4.1 on Linux openSUSE Leap 15.1, using CMake 3.12.0.\n\n1. Make sure that the Intel environment is properly loaded:\n\n```bash\n       source /sw/intel/bin/compilervars.sh intel64\n```\n\n2. Use the Intel-provided MPI compiler wrappers for the GNU toolchain,\n   to override CMake's auto-detection which may pick up the system MPI:\n\n```bash\n       CC=mpicc FC=mpifc CXX=mpicxx cmake ..\n```\n\n### Intel MPI, GNU Compiler and Intel MKL\n\nVerified with Intel Parallel Studio XE 2019.5 installed in `/sw/intel`\nwith an OS-provided GCC 7.4.1 on Linux openSUSE Leap 15.1, using CMake 3.12.0.\n\n1. Make sure that the Intel environment is properly loaded:\n\n```bash\n       source /sw/intel/bin/compilervars.sh intel64\n```\n\n2. Use the Intel-provided MPI compiler wrappers for the GNU toolchain:\n\n```bash\n       CC=mpicc FC=mpifc CXX=mpicxx cmake -DBLA_VENDOR=Intel10_64lp_seq ..\n```\n\n### Intel MPI, Intel Compiler and Intel MKL\n\nVerified with Intel Parallel Studio XE 2019.5 installed in `/sw/intel`\non Linux openSUSE Leap 15.1, using CMake 3.12.0.\n\n1. Make sure that the Intel environment is properly loaded:\n\n```bash\n       source /sw/intel/bin/compilervars.sh intel64\n```\n\n2. Use the Intel-provided MPI compiler wrappers:\n\n```bash\n       CC=mpiicc FC=mpiifort CXX=mpiicxx cmake -DBLA_VENDOR=Intel10_64lp_seq ..\n```\n\n## MacOS\n\nFollow what is described in the previous sections.\nFor GNU, if you have installed Command Line Tools by Apple and GCC with Homebrew that can lead to a\nconflict in which compiler CMake will use. Therefore, we suggest specifying GCC, for example\n\n```bash\n    CC=gcc-9 CXX=g++-9 cmake ..\n```\n\nwhere `-9` can be adapted to your version.\n\n### PGI\n\nPlease note that you need at least PGI >= 19.11.\n\nAssuming that your `$PATH` is set correctly such that `pgcc`, `pgc++` and `pgfortran` can be found,\nrun the following to get a DBCSR version without MPI:\n\n```bash\n    CC=pgcc CXX=pgc++ FC=pgfortran cmake -DUSE_MPI=OFF ..\n```\n\nthe `-DUSE_MPI=OFF` is needed here to avoid that CMake picks up any MPI installation, for example from Homebrew.\n\nTo build with MPI you need an MPI implementation built for/with the PGI compiler, for example the MPICH\nusually bundled with the PGI installation.\n\nMake sure that `$PATH` is correctly set to include `mpicc` and `mpifort` from the PGI MPICH installation, then run:\n\n```bash\n    CC=mpicc CXX=mpicxx FC=mpifort MPICH_CC=pgcc cmake ..\n```\n\n## Cray\n\nSome machines require additional environments to be loaded to either provide\nthe modules specified below or to be able to properly build with the loaded modules.\n\nPlease contact your cluster/datacenter administrator for more information.\n\nExample for the CSCS' Piz Daint:\n\n```bash\n    module load daint-mc  # to build for the non-GPU partition\n    module load daint-gpu  # to build for the GPU partition\n```\n\n*Note*: the `libsci-cray` has different variants for MPI or OpenMP.\nWhen disabling either MPI or OpenMP support in DBCSR you might want to adjust the\nselected BLAS/LAPACK library accordingly (e.g. drop the `_mpi`, or `_mp`).\n\n### CCE and libsci-cray\n\nVerified on CSCS' Piz Daint with CCE 10.0.2 and cray-libsci 20.06.1,\nusing CMake 3.18.4.\n\n1. Make sure that the `PrgEnv-cray` module is loaded:\n\n```bash\n       module load PrgEnv-cray\n```\n\n2. While the MPI wrapper/compiler will be detected automatically,\n   must the BLAS/LAPACK libraries be specified manually:\n\n```bash\n       cmake \\\n         -DCMAKE_SYSTEM_NAME=CrayLinuxEnvironment \\\n         -DBLAS_LIBRARIES=\"-lsci_cray_mpi_mp -lhugetlbfs\" \\\n         -DLAPACK_LIBRARIES=\"-lsci_cray_mpi_mp\" \\\n         ..\n```\n\n### Intel Compiler and libsci-cray\n\nVerified on CSCS' Piz Daint with Intel 19.1 and cray-libsci 20.06.1,\nusing CMake 3.18.4.\n\n1. Make sure that the `PrgEnv-intel` module is loaded:\n\n```bash\n       module load PrgEnv-intel\n```\n\n2. While the MPI wrapper/compiler will be detected automatically,\n   must the BLAS/LAPACK libraries be specified manually:\n\n```bash\n       cmake \\\n         -DCMAKE_SYSTEM_NAME=CrayLinuxEnvironment \\\n         -DBLAS_LIBRARIES=\"-lsci_intel_mpi_mp -lhugetlbfs\" \\\n         -DLAPACK_LIBRARIES=\"-lsci_intel_mpi_mp\" \\\n         ..\n```\n\n### GNU Compiler and libsci-cray\n\nVerified on CSCS' Piz Daint with GNU 8.3.0 and cray-libsci 20.06.1,\nusing CMake 3.18.4.\n\n1. Make sure that the `PrgEnv-gnu` module is loaded:\n\n```bash\n       module load PrgEnv-gnu\n```\n\n2. While the MPI wrapper/compiler will be detected automatically,\n   must the BLAS/LAPACK libraries be specified manually:\n\n```bash\n       cmake \\\n         -DCMAKE_SYSTEM_NAME=CrayLinuxEnvironment \\\n         -DBLAS_LIBRARIES=\"-lsci_gnu_mpi_mp -lhugetlbfs\" \\\n         -DLAPACK_LIBRARIES=\"-lsci_gnu_mpi_mp\" \\\n         ..\n```\n\n## Any compiler\n\n### Custom compiler flags\n\nIn the DBCSR build system we preload the default compiler flags (especially the ones for Fortran) with flags\nrequired to build the code with a specific compiler, while additional optimization flags are added based on the\nCMake build type.\n\nThis allows the user to override optimization flags by setting a custom build type and providing optimization flags\nfor that build type as follows:\n\n```bash\n       cmake \\\n         -DCMAKE_BUILD_TYPE=custom \\\n         -DCMAKE_C_FLAGS_CUSTOM=\"-O3 -march=native\" \\\n         -DCMAKE_CXX_FLAGS_CUSTOM=\"-O3 -march=native\" \\\n         -DCMAKE_Fortran_FLAGS_CUSTOM=\"-O3 -march=native\" \\\n         ..\n```\n"
  },
  {
    "path": "docs/guide/2-user-guide/1-installation/2-supported-compilers.md",
    "content": "title: Supported Compilers\n\n# Supported compilers\n\nDBCSR uses the Fortran 2008+ standard, which requires up-to-date compilers.\nCurrently direct testing is done with the following compilers:\n\n* GNU 11.2.0\n\nSince DBCSR is a core library of CP2K, the code gets additional testing on a\nwider range of systems and compilers, you can find more information about this\non [CP2K Compiler Support](https://www.cp2k.org/dev:compiler_support).\n"
  },
  {
    "path": "docs/guide/2-user-guide/1-installation/3-using-dbcsr-in-a-cmake-project.md",
    "content": "title: Using DBCSR in a CMake project\n\n# Using DBCSR in a CMake project\n\nWe are providing CMake helper files to easily include DBCSR in any other CMake-based project.\nFor this you have to build DBCSR using CMake as described above and then also install it.\n\nAs a user being able to run commands as root, use:\n\n```bash\n    sudo cmake --build . -- install  # will install to /usr/local\n```\n\nIf you can not run commands as root, use `-DCMAKE_INSTALL_PREFIX=...` when calling CMake to set\nan alternative base installation path for DBCSR instead:\n\n```bash\n    cmake -DCMAKE_INSTALL_PREFIX=/my/custom/prefix ..\n    cmake --build . -- install\n```\n\nIn your project's CMake you can then easily search for the DBCSR library:\n\n```cmake\ncmake_minimum_required(VERSION 3.22)\n\nenable_language(Fortran C CXX)  # only request the required language\n\nfind_package(DBCSR 2.0.0 CONFIG REQUIRED)\nfind_package(MPI)\n\n# for Fortran:\nset(CMAKE_Fortran_FLAGS \"-std=f2018\")  # your Fortran code likely needs to be F2018+ compatible as well\nadd_executable(dbcsr_example_fortran dbcsr_example.f90)\ntarget_link_libraries(dbcsr_example_fortran DBCSR::dbcsr)\n\n# for C:\nadd_executable(dbcsr_example_c dbcsr_example.c)\ntarget_link_libraries(dbcsr_example_c DBCSR::dbcsr_c MPI::MPI_C)\n\n# for C++:\nadd_executable(dbcsr_example_cpp dbcsr_example.cpp)\ntarget_link_libraries(dbcsr_example_cpp DBCSR::dbcsr_c MPI::MPI_CXX)\n```\n\nIf you installed DBCSR into a custom prefix, you have to make sure that CMake\nis able to find the DBCSR CMake configuration:\n\n```bash\n    DBCSR_DIR=/my/custom/prefix cmake ..\n```\n"
  },
  {
    "path": "docs/guide/2-user-guide/1-installation/4-docker.md",
    "content": "title: Docker Images\n\n{!./tools/docker/README.md!}\n\n"
  },
  {
    "path": "docs/guide/2-user-guide/1-installation/index.md",
    "content": "title: Install\n\n# Install\n\n## Prerequisites\n\nYou need:\n\n* [CMake](https://cmake.org/) (3.22+)\n* GNU make or Ninja\n* Fortran compiler which supports at least Fortran 2008 (including the TS 29113 when using the C-bindings)\n* BLAS+LAPACK implementation (reference, OpenBLAS and MKL have been tested. Note: DBCSR linked to OpenBLAS 0.3.6 gives wrong results on Power9 architectures.)\n* Python version installed (2.7 or 3.6+ have been tested)\n\nOptional:\n\n* [LIBXSMM](https://github.com/hfp/libxsmm) (1.10+, and `pkg-config`) for Small Matrix Multiplication acceleration\n* LAPACK implementation (reference, OpenBLAS-bundled and MKL have been tested), required when building the tests\n\nTo build DBCSR's GPU backend:\n\n* CUDA Toolkit (targets NVIDIA GPUs, minimal version required: 5.5) with cuBLAS\n    * Host C++ compiler which supports at least C++11 standard\n* or HIP compiler (targets NVIDIA or AMD GPUs) and hipBLAS (ROCm 4.5.2 was tested)\n    * Host C++ compiler which supports at least C++11 standard\n* or OpenCL, i.e., development headers (`opencl-headers`), generic loader \"ocl-icd\" (`ocl-icd-opencl-dev`),\n    * Vendor specific OpenCL package, e.g.,\n      [Intel Compute Runtime](https://github.com/intel/compute-runtime/releases/latest),\n      or CUDA Toolkit (includes OpenCL)\n    * Nvidia GPU mode shall be `DEFAULT` (`nvidia-smi -c DEFAULT`) if MPI puts multiple ranks onto a single GPU;\n      MPS daemon with GPU mode `EXCLUSIVE_PROCESS` is not an option\n    * For the OpenCL backend, a plain C compiler is sufficient (C90 standard)\n    * Optionally, `clinfo` (can be useful to show available devices)\n\nDBCSR is tested against GNU and Intel compilers on Linux systems, and GNU compiler on MacOS systems.\nSee a list of supported compilers [here](2-supported-compilers.html).\n\n## Get DBCSR\n\nDownload either a [release tarball](https://github.com/cp2k/dbcsr/releases) or clone the latest version from Git using:\n\n```bash\ngit clone --recursive https://github.com/cp2k/dbcsr.git\n```\n\n## Build\n\nDBCSR can be compiled in four main variants:\n* Serial, i.e., no OpenMP and no MPI\n* OpenMP\n* MPI\n* OpenMP+MPI\nIn addition, the variants can support accelerators.\n\nRun inside the `dbcsr` directory:\n\n```bash\nmkdir build\ncd build\ncmake ..\nmake\n```\n\n The configuration flags for the CMake command are (default first):\n\n```bash\n-DUSE_MPI=<ON|OFF>\n-DUSE_OPENMP=<ON|OFF>\n-DUSE_SMM=<blas|libxsmm>\n-DUSE_ACCEL=<opencl|cuda|hip>\n-DWITH_CUDA_PROFILING=<OFF|ON>\n-DWITH_HIP_PROFILING=<OFF|ON>\n-DWITH_C_API=<ON|OFF>\n-DWITH_EXAMPLES=<ON|OFF>\n-DWITH_GPU=<P100|K20X|K40|K80|V100|Mi50|Mi100|Mi250|Mi300|Mi350>\n-DCMAKE_BUILD_TYPE=<Release|Debug|Coverage>\n-DBUILD_TESTING=<ON|OFF>\n-DTEST_MPI_RANKS=<2|auto|N>\n-DTEST_OMP_THREADS=<2|N>\n```\n\nWhen providing a build of LIBXSMM, make sure the `lib` directory is added to the `PKG_CONFIG_PATH` variable prior\nto running `cmake`. For example, if LIBXSMM was checked out using Git to your home folder:\n\n```bash\nexport PKG_CONFIG_PATH=\"${PKG_CONFIG_PATH}:${HOME}/libxsmm/lib\"\n```\n\n### CMake Build Recipes\n\nFor build recipes on different platforms, make sure to also read the [CMake Build Recipes](1-cmake-build-recipes.html).\n\n### Building with spack\n\nDBCSR and its dependencies can be built with the [spack package manager](https://github.com/spack/spack):\n\n```bash\nspack install dbcsr +openmp +mpi +cuda cuda_arch=70\nspack install dbcsr +openmp +mpi +rocm amdgpu_target=gfx906\nspack install dbcsr +openmp +mpi +opencl ^cuda\n```\n\nSee `spack info dbcsr` for all supported variants.\n\n### C/C++ Interface\n\nIf MPI support is enabled (the default), the C API is automatically built.\n"
  },
  {
    "path": "docs/guide/2-user-guide/2-tests/index.md",
    "content": "title: Tests\n\n# Tests\n\n## Correctness tests\n\n- [[dbcsr_unittest_1(program)]] (fortran) : test matrix operations: add, multiply and multiply-ghost\n- [[dbcsr_unittest_2(program)]] (fortran) : test matrix-multiply with large blocks (block size=100) and rectangular matrices (block size=5)\n- [[dbcsr_test_csr_conversions(program)]] (fortran) : test DBCSR to CSR conversion with random matrices\n- [[dbcsr_tas_unittest(program)]] (fortran) : unit test for tall-and-skinny matrices\n- [[dbcsr_tensor_unittest(program)]] (fortran) : unit test for tensor functionalities\n- [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\n\n### GPU-backend correctness tests:\n\n- [[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\n- [libsmm_acc_unittest_multiply](../../../sourcefile/libsmm_acc_unittest_multiply.cpp.html) (c++) : tests all libsmm_acc transpose kernels\n- [libsmm_acc_unittest_transpose](../../../sourcefile/libsmm_acc_unittest_transpose.cpp.html) (c++) : tests all libsmm_acc batch-multiplication kernels\n\n## Performance tests\n\nDBCSR performance tests:\n\n- [[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.\n\n### GPU backend performance tests:\n\n- [libsmm_acc_timer_multiply](../../../sourcefile/libsmm_acc_timer_multiply.cpp.html) (c++) : time all libsmm_acc batch-multiplication kernels\n\n## Running Tests\n\nTo run all the tests, use:\n\n```bash\nmake test\n```\n\nOr run individual tests from the `build` directory, as follows:\n\n```bash\nsrun -N 1 --ntasks-per-core 2 --ntasks-per-node 12 --cpus-per-task 2 ./tests/dbcsr_unittest_1\n```\n\nNote that the tests of libsmm_acc (the GPU-backend) do not use MPI since libsmm_acc only operates on-node.\n\nNote that if you are using OpenMP builds, then you have to set the environment variable `OMP_NESTED=false`.\n\n### Input Files for Performance Driver\n\nThe test suite comes with a performance driver ([[dbcsr_performance_driver(program)]]), which evaluates the performance of matrix-matrix multiplication in DBCSR.\n\nInput matrices can be specified in an input file, passed to the executable as standard input, for example:\n\na) To test pure MPI performance test using [n] nodes:\n\n```bash\nmpirun -np [n] ./build/tests/dbcsr_perf tests/input.perf 2>&1 | tee perf.log\n```\n\nb) To test hybrid MPI/OpenMP performance test using [n] nodes, each spanning [t] threads:\n\n```bash\nexport OMP_NUM_THREADS=[t]; mpirun -np [n] ./build/tests/dbcsr_perf tests/input.perf 2>&1 | tee perf.log\n```\n\n###  How to Write Input Files\n\nExamples of input files can be found in `tests/inputs` for different sizes of matrices and different block sizes.\n\nYou can also write custom input files: for more information, follow the template in `tests/input.perf`.\n"
  },
  {
    "path": "docs/guide/2-user-guide/3-examples/index.md",
    "content": "title: Examples\n\n# Examples\n\n- [[dbcsr_example_1(program)]] : how to create a dbcsr matrix (fortran)\n- [[dbcsr_example_2(program)]] : how to set a dbcsr matrix (fortran)\n- 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))\n- [[dbcsr_tensor_example_1(program)]] : how to create a dbcsr matrix (fortran)\n    - the example can be run with different parameters, controlling block size, sparsity, verbosity and more\n- [dbcsr_tensor_example_2](../../../sourcefile/dbcsr_tensor_example_2.cpp.html): tensor contraction example (cpp)\n    - tensor1 x tensor2 = tensor3, (13|2)x(54|21)=(3|45)\n\n## Build\n\nCompile the DBCSR library, using `-DUSE_MPI=ON -DWITH_EXAMPLES=ON`.\n\nThe examples require MPI. Furthermore, if you are using threading, MPI_THREAD_FUNNELED mode is required.\n\n## Run\n\nYou can run the examples, for instance from the `build` directory, as follows:\n\n```bash\nsrun -N 1 --ntasks-per-core 2 --ntasks-per-node 12 --cpus-per-task 2 ./examples/dbcsr_example_1\n```\n\n### Run tensor examples\n\nHow to run (this example and DBCSR for tensors in general):\n\n- best performance is obtained by running with mpi and one openmp thread per rank.\n- ideally number of mpi ranks should be composed of small prime factors (e.g. powers of 2).\n- for sparse data & heterogeneous block sizes, DBCSR should be run on CPUs with libxsmm backend.\n- for dense data best performance is obtained by choosing homogeneous block sizes of 64 and by compiling with GPU support.\n"
  },
  {
    "path": "docs/guide/2-user-guide/4-gpu/index.md",
    "content": "title: GPUs\n\n# Introduction\n\n[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)).\n\nCP2K 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.\n\nCP2K 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.\n\n# CUDA/HIP Backend\n\nUsers 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.\n\n# OpenCL Backend\n\nThis 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.\n\nFor 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).\n\n```bash\ncd ${HOME}\ngit clone https://github.com/hfp/libxsmm.git\ncd libxsmm\nmake GNU=1 -j\n\ncd ${HOME}\ngit clone https://github.com/cp2k/dbcsr.git\ncd dbcsr/src/acc/opencl\nmake\n```\n\nTuning 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`).\n\n```bash\ncd ${HOME}/dbcsr/src/acc/opencl/smm\n./tune_multiply.py 23x23x23\n```\n\nBeside 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).\n\nSuppose 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.\n\n```bash\ncd ${HOME}/dbcsr/src/acc/opencl\nmake\n```\n\nImportant 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).\n\n```bash\ncd ${HOME}/dbcsr/src/acc/opencl/smm\n./tune_multiply.py 23x23x23 -a 0\n```\n\nTo \"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`).\n"
  },
  {
    "path": "docs/guide/2-user-guide/index.md",
    "content": "title: User Guide\n"
  },
  {
    "path": "docs/guide/3-developer-guide/1-tooling/index.md",
    "content": "title: Tooling\n\n# Build System\n\nWe support CMake for compilation. See [here](../../2-user-guide/1-installation/index.html) on how to compile and\n[here](../../2-user-guide/1-installation/1-cmake-build-recipes.html) for more CMake details.\n\nCompilations is based on [Fypp](https://github.com/aradi/fypp) meta-progamming package, which is available as submodule.\n\n# CI Setup\n\nDBCSR's CI setup is described in [DBCSR's Github wiki](https://github.com/cp2k/dbcsr/wiki/CI-Setup).\n\n# Development\n\nDBCSR's development (Git branching model, commit messages, releases, etc.) is described in [DBCSR's Github wiki](https://github.com/cp2k/dbcsr/wiki/Development).\n\n"
  },
  {
    "path": "docs/guide/3-developer-guide/2-documentation/index.md",
    "content": "title: Documentation\n\n# Documentation\n\n## Build\n\nTo build the documentation you need [FORD](https://github.com/Fortran-FOSS-Programmers/ford).\n\nAfterwards use the `doc` target for the CMake generated Makefile:\n\n```bash\n    mkdir build\n    cd build\n    cmake .. # will look for the `ford` binary\n    make doc\n```\n\nNote that in order to generate the documentation with examples (recommended), the following options should be activated in cmake (these are the options' default values)\n\n```bash\n    cmake -DUSE_MPI=ON -DWITH_EXAMPLES=ON .. # these options are default and recommended.\n                                             # If set off, the examples' documentation is not generated.\n```\n\nThe documentation (HTML format) will be located in `doc/`. To view it, open `doc/index.html` in a browser.\n\n## Add Pages\n\nTo 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).\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/1-overview/index.md",
    "content": "title: Overview\n\n# Code Architecture\n\n![DBCSR code architecture](dbcsr_mm_overview.png)\n\n```\ndbcsr/\n-- src/\n---- acc/: contains all code related to accelerators\n---- base/: base routines needed to abstract away some machine/compiler dependent functionality\n---- block/: block level routines\n---- core/: core matrix data structure\n---- data/: data handling\n---- dist/: data distribution and message passing\n---- mm/: matrix-matrix multiplication\n---- mpi/: wrappers of the MPI routines\n---- ops/: high level operations\n---- tas/: tall-and-skinny matrices\n---- tensors/: block-sparse tensor framework\n---- utils/: utilities\n---- work/\n```\n\n# Distribution Scheme\n\nAssumed square matrix with 20x20 matrix with 5x5 blocks and a 2x2 processor grid\n\n![DBCSR distribution over processors](dbcsr_dist.png)\n\n![DBCSR block scheme](dbcsr_blocks.png)\n\n# List of standard compiler flags\n\n* OpenMP flag to enable multi-threaded parallelization, e.g. `-fopenmp` for GNU and Intel compilers.\n* 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.\n* 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.\n\n# List of Macros used in the code\n\n| Macro | Explanation | Language |\n|-|-|-|\n| `__parallel` | Enable MPI runs | Fortran |\n| `__USE_MPI_F08` | Enable use of the modern `mpi_f08` module instead of the `mpi` module to reduce interfacing issues | Fortran |\n| `__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 |\n| `__MKL` | Enable use of optimized Intel MKL functions | Fortran\n| `__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 |\n| `__NO_ABORT` | Avoid calling abort, but STOP instead (useful for coverage testing, and to avoid core dumps on some systems) | Fortran |\n| `__LIBXSMM` | Enable [LIBXSMM](https://github.com/hfp/libxsmm/) link for optimized small matrix multiplications on CPU | Fortran |\n| `__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 |\n| `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++ |\n| `__CRAY_PM_ACCEL_ENERGY` or `__CRAY_PM_ENERGY` | Switch on collectin energy profiling on Cray systems | Fortran |\n| `__DBCSR_ACC` | Enable Accelerator compilation | Fortran, C, C++ |\n| `__OPENCL`  | Enable OpenCL acceleration | C |\n| `__CUDA_PROFILING`  | To turn on Nvidia Tools Extensions. It requires to link `-lnvToolsExt` | Fortran, C, C++ |\n| `__CUDA` | Enable CUDA acceleration | C, C++ |\n| `__HIP`  | Enable HIP acceleration | C, C++ |\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/2-accelerator-backend/1-code-structure.md",
    "content": "title: Code Structure\n\n# GPU Backend Code Architecture\n\n```\ndbcsr/\n-- src/\n---- acc/: contains interfaces to ACC and LIBSMM (top-level) as well as backends (subdirectories)\n------ cuda/: CUDA backend\n------ hip/: HIP backend\n------ cuda_hip/: common code for CUDA and HIP\n------ libsmm_acc/: small matrix-matrix operations on GPU (can use either cuda or hip interface)\n------ opencl/: OpenCL backend\n------ opencl/smm/: LIBSMM implementation based on OpenCL\n```\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/1-kernels.md",
    "content": "title: Kernels\n\n![kernel parameters and memory](../../../../../media/images/libsmm_acc_parameters_and_memory.png){ width=50% }\n\n{!./src/acc/libsmm_acc/kernels/README.md!}\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/2-parameters.md",
    "content": "title: Kernel Parameters\n\n# Kernel Parameters\n\n## Batched Matrix-Matrix Multiplication Kernel Parameters\n\nThe batched matrix-matrix multiplication kernels are templated on:\n\n* the characteristic dimensions of the multiplication: `m, n, k`\n* between 3-7 kernel parameters from (`M`, `N`, `w`, `v`, `threads`, `grouping`, `minblocks`), depending on the algorithm.\n\n## Batched Matrix Transpose Kernel Parameters\n\nThe batched transpose kernels are templated on:\n\n* the characteristic dimensions of the transpose: `m, n`\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/3-tune.md",
    "content": "title: Autotuning Framework\n\n{!./src/acc/libsmm_acc/tune/README.md!}\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/2-accelerator-backend/2-libsmm_acc/index.md",
    "content": "title: CUDA/HIP\n\n{!./src/acc/libsmm_acc/README.md!}\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/2-accelerator-backend/3-libsmm_ocl/1-autotune.md",
    "content": "title: Autotune\n\n{!./src/acc/opencl/smm/README-autotune.md!}\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/2-accelerator-backend/3-libsmm_ocl/2-bulktune.md",
    "content": "title: Parameters\n\n{!./src/acc/opencl/smm/README-bulktune.md!}\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/2-accelerator-backend/3-libsmm_ocl/index.md",
    "content": "title: OpenCL\n\n{!./src/acc/opencl/README.md!}\n\n{!./src/acc/opencl/smm/README.md!}\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/2-accelerator-backend/index.md",
    "content": "title: Accelerator Backend\n\n{!./src/acc/README.md!}\n"
  },
  {
    "path": "docs/guide/3-developer-guide/3-programming/index.md",
    "content": "title: Programming\n"
  },
  {
    "path": "docs/guide/3-developer-guide/4-performance/1-insights.md",
    "content": "title: Insights\n\n# Insights into Performance\n\n## Read Timing & Statistics Reports\n\nAt the end of an output file, a report of DBCSR's statistics and timings can be found.\n\n### Statistics\n\nThe STATISTICS section of the output file provides some information on matrix-matrix multiplications that were run and their performance characteristics.\n\nExample:\n\n```\n-------------------------------------------------------------------------------\n-                                                                             -\n-                                DBCSR STATISTICS                             -\n-                                                                             -\n-------------------------------------------------------------------------------\nCOUNTER                                    TOTAL       BLAS       SMM       ACC\nflops    23 x    23 x    23         687272462200       0.0%      0.0%    100.0%\nflops inhomo. stacks                           0       0.0%      0.0%      0.0%\nflops total                       687.272462E+09       0.0%      0.0%    100.0%\nflops max/rank                    687.272462E+09       0.0%      0.0%    100.0%\nmatmuls inhomo. stacks                         0       0.0%      0.0%      0.0%\nmatmuls total                           28243300       0.0%      0.0%    100.0%\nnumber of processed stacks                  1600       0.0%      0.0%    100.0%\naverage stack size                                     0.0       0.0   17652.1\nmarketing flops                     1.076458E+12\n-------------------------------------------------------------------------------\n# multiplications                             50\nmax memory usage/rank              16.650822E+09\n# max total images/rank                        1\n# max 3D layers                                1\n# MPI messages exchanged                       0\nMPI messages size (bytes):\n total size                         0.000000E+00\n min size                           0.000000E+00\n max size                           0.000000E+00\n average size                       0.000000E+00\nMPI breakdown and total messages size (bytes):\n            size <=      128                   0                        0\n      128 < size <=     8192                   0                        0\n     8192 < size <=    32768                   0                        0\n    32768 < size <=   131072                   0                        0\n   131072 < size <=  4194304                   0                        0\n  4194304 < size <= 16777216                   0                        0\n 16777216 < size                               0                        0\n-------------------------------------------------------------------------------\n```\n\n#### How to Read the Columns\n\n- `TOTAL`: total flops\n- `BLAS`: percentage of flops run on BLAS (this could be CUBLAS or HIPBLAS)\n- `SMM`: percentage of flops run on SMM (libsmm or libxsmm, CPU)\n- `ACC`: percentage of flops run on ACC (libsmm_acc, DBCSR's GPU-accelerated backend)\n\n#### How to Read the Rows (Counters)\n\nEvery 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.\n\n- `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.\n- `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).\n- `flops total`: total flops for all stacks of matrix-matrix multiplication.\n- `flops max/rank`: flops of the MPI rank with the most flops.\n- `matmuls inhomo. stacks`: number of matrix-matrix multiplications run in inhomogeneous stacks.\n- `matmuls total`: number of matrix-matrix multiplications run in total.\n- `number of processed stacks`: number of stacks of batched matrix-matrix multiplication.\n- `average stack size`: average over all stacks of the stack size (i.e. the number of matrix-matrix multiplications that a stack contains).\n\n### Timings\n\nExample of the statistics section of the output file:\n\n```\n-------------------------------------------------------------------------------\n-                                                                             -\n-                                T I M I N G                                  -\n-                                                                             -\n-------------------------------------------------------------------------------\nSUBROUTINE                       CALLS  ASD         SELF TIME        TOTAL TIME MAXRANK\n                               MAXIMUM       AVERAGE  MAXIMUM  AVERAGE  MAXIMUM\ndbcsr_performance_driver             1  1.0    0.000    0.000  102.563  102.563       0\ndbcsr_perf_multiply_low              1  2.0    0.002    0.002  102.563  102.563       0\nperf_multiply                        1  3.0    0.003    0.003  102.077  102.077       0\n[...]\n-------------------------------------------------------------------------------\n```\n\nThe columns describe:\n\n- `SUBROUTINE`: the name of the fortran subroutine (or c++ function) timed.\n- `CALLS`: number of times the subroutine was called.\n- `ASD`: average stack depth: the average number of entries on the call stack when this subroutine is called.\n- `SELF TIME`: how much time is spent in the subroutine, or in non-timed subroutines called by this subroutine.\n    - `AVERAGE`: the self time averaged over all MPI ranks,\n    - `MAXIMUM`: the self time maximum over all MPI ranks,\n    - `AVERAGE` and `MAXIMUM` can be used to locate load-imbalance or synchronization points.\n- `TOTAL TIME`: how much time is spent in the subroutine, including the time spent in timed subroutines.\n    - `AVERAGE`: averaged over all MPI ranks\n    - `MAXIMUM`: maximum over all MPI ranks\n    - `AVERAGE` and `MAXIMUM` can be used to locate load-imbalance or synchronization points.\n- `MAXRANKS`:\n\n#### Time spent in Just-In-Time (JIT) Compilation\n\nFor 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`.\n\n#### How to Time a Function\n\nBy default, the most important subroutines are timed in DBCSR.\n\nIf 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.\n\nFor examples, just `grep` for `timeset` and `timestop` in the codebase.\n\nThis can be done both in fortran code and in the c++ code.\n"
  },
  {
    "path": "docs/guide/3-developer-guide/4-performance/2-just-in-time-compilation.md",
    "content": "title: JIT\n\n# Just-In-Time (JIT) Compilation\n\nDBCSR'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.\n\nInstead, 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.\n\nNo 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.\n\nTo 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`).\n"
  },
  {
    "path": "docs/guide/3-developer-guide/4-performance/index.md",
    "content": "title: Performance\n"
  },
  {
    "path": "docs/guide/3-developer-guide/index.md",
    "content": "title: Developer Guide\n"
  },
  {
    "path": "docs/guide/index.md",
    "content": "title: Guide\n\n"
  },
  {
    "path": "examples/.gitignore",
    "content": "*.x\n"
  },
  {
    "path": "examples/CMakeLists.txt",
    "content": "set(DBCSR_PROGRAM_SRCS_FTN dbcsr_example_1.F dbcsr_example_2.F\n                           dbcsr_example_3.F dbcsr_tensor_example_1.F)\n\nset(DBCSR_PROGRAM_SRCS_CPP dbcsr_example_3.cpp dbcsr_tensor_example_2.cpp)\n\n# Compile Fortran examples\nforeach (dbcsr_program_src ${DBCSR_PROGRAM_SRCS_FTN})\n  get_filename_component(dbcsr_program_name ${dbcsr_program_src} NAME_WE)\n  add_executable(${dbcsr_program_name} ${dbcsr_program_src})\n  target_link_libraries(${dbcsr_program_name} dbcsr)\n  if (OpenMP_FOUND)\n    target_link_libraries(${dbcsr_program_name} OpenMP::OpenMP_Fortran)\n  endif ()\n\n  # with the Intel compiler CMake 3.12 seems to forget that the source is\n  # actually Fortran and needs to be told explicitly:\n  if (NOT \"${CMAKE_Fortran_COMPILER_ID}\" STREQUAL IntelLLVM)\n    set_target_properties(${dbcsr_program_name} PROPERTIES LINKER_LANGUAGE\n                                                           Fortran)\n  endif ()\nendforeach ()\n\n# override -Werror for certain translation units\nif ((CMAKE_Fortran_COMPILER_ID STREQUAL \"GNU\")\n    AND (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10))\n  set_source_files_properties(dbcsr_tensor_example_1.F PROPERTIES COMPILE_FLAGS\n                                                                  -Wno-error)\nendif ()\n\n# Compile C++ examples\nif (WITH_C_API)\n  foreach (dbcsr_program_src ${DBCSR_PROGRAM_SRCS_CPP})\n    get_filename_component(dbcsr_program_name ${dbcsr_program_src} NAME_WE)\n    set(dbcsr_program_name ${dbcsr_program_name}_cpp)\n    add_executable(${dbcsr_program_name} ${dbcsr_program_src})\n    target_link_libraries(${dbcsr_program_name} dbcsr_c MPI::MPI_CXX)\n    if (NOT \"${CMAKE_Fortran_COMPILER_ID}\" STREQUAL IntelLLVM)\n      set_target_properties(${dbcsr_program_name} PROPERTIES LINKER_LANGUAGE\n                                                             Fortran)\n    endif ()\n    if (OpenMP_FOUND)\n      target_compile_options(${dbcsr_program_name} PRIVATE ${OpenMP_CXX_FLAGS})\n      target_link_libraries(${dbcsr_program_name} OpenMP::OpenMP_Fortran)\n    endif ()\n\n    if (CMAKE_CXX_COMPILER_ID STREQUAL \"Cray\")\n      # for recent Cray compiler versions CMake doesn't know\n      target_compile_options(${dbcsr_program_name} PRIVATE \"-hstd=c++14\")\n    else ()\n      target_compile_features(${dbcsr_program_name} PRIVATE cxx_std_14)\n    endif ()\n  endforeach ()\nendif ()\n\n# =================================== DOCUMENTATION GENERATION Copy example\n# source files into the build directory so that their documentation can be\n# generated by FORD\n\nset(DBCSR_PROGRAM_SRCS ${DBCSR_PROGRAM_SRCS_FTN} ${DBCSR_PROGRAM_SRCS_CPP})\n\n# Make a list of the copy commands\nset(example_copy_commands)\nforeach (example ${DBCSR_PROGRAM_SRCS})\n  list(\n    APPEND\n    example_copy_commands\n    COMMAND\n    ${CMAKE_COMMAND}\n    -E\n    copy\n    ${CMAKE_SOURCE_DIR}/examples/${example}\n    ${CMAKE_BINARY_DIR}/examples)\nendforeach ()\n\nadd_custom_target(\n  doc_copy_examples\n  COMMENT \"Copy examples for documentation generation\"\n  COMMAND mkdir -p ${CMAKE_BINARY_DIR}/examples ${example_copy_commands}\n  VERBATIM)\n"
  },
  {
    "path": "examples/README.md",
    "content": "# Examples\n\n- [`dbcsr_example_1`](dbcsr_example_1.F): how to create a dbcsr matrix (fortran)\n- [`dbcsr_example_2`](dbcsr_example_2.F): how to set a dbcsr matrix (fortran)\n- `dbcsr_example_3`: how to multiply two dbcsr matrices ([fortran](dbcsr_example_3.F) and [cpp](dbcsr_example_3.cpp))\n- [`dbcsr_tensor_example_1`](dbcsr_tensor_example_1.F): how to create a dbcsr matrix (fortran)\n    - the example can be run with different parameters, controlling block size, sparsity, verbosity and more\n- [`dbcsr_tensor_example_2`](dbcsr_tensor_example_2.cpp): tensor contraction example (cpp)\n    - tensor1 x tensor2 = tensor3, (13|2)x(54|21)=(3|45)\n\n## Build\n\nCompile the DBCSR library, using `-DUSE_MPI=ON -DWITH_EXAMPLES=ON`.\n\nThe examples require MPI. Furthermore, if you are using threading, MPI_THREAD_FUNNELED mode is required.\n\n## Run\n\nYou can run the examples, for instance from the `build` directory, as follows:\n\n```bash\nsrun -N 1 --ntasks-per-core 2 --ntasks-per-node 12 --cpus-per-task 2 ./examples/dbcsr_example_1\n```\n\n### Run tensor examples\n\nHow to run (this example and DBCSR for tensors in general):\n* best performance is obtained by running with mpi and one openmp thread per rank.\n* ideally number of mpi ranks should be composed of small prime factors (e.g. powers of 2).\n* for sparse data & heterogeneous block sizes, DBCSR should be run on CPUs with libxsmm backend.\n* for dense data best performance is obtained by choosing homogeneous block sizes of 64 and by compiling with GPU support.\n"
  },
  {
    "path": "examples/dbcsr_example_1.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_example_1\n   !! DBCSR example 1:\n   !! This example shows how to create a DBCSR matrix\n\n   USE mpi\n   USE dbcsr_api, ONLY: &\n      dbcsr_create, dbcsr_distribution_new, dbcsr_distribution_release, dbcsr_distribution_type, &\n      dbcsr_finalize, dbcsr_finalize_lib, dbcsr_init_lib, dbcsr_print, dbcsr_release, &\n      dbcsr_type, dbcsr_type_no_symmetry, dbcsr_type_real_8\n\n   IMPLICIT NONE\n\n   TYPE(dbcsr_type)                         :: matrix_a\n\n   INTEGER, DIMENSION(:), POINTER           :: col_blk_sizes, row_blk_sizes\n   INTEGER                                  :: group, numnodes, mynode, nblkrows_total, &\n                                               nblkcols_total, ierr\n   INTEGER, DIMENSION(2)                    :: npdims\n   INTEGER, DIMENSION(:), POINTER           :: col_dist, row_dist\n   TYPE(dbcsr_distribution_type)            :: dist\n   LOGICAL, DIMENSION(2)                    :: period = .TRUE.\n!$ INTEGER                                  :: provided_tsl\n\n   !***************************************************************************************\n\n   !\n   ! initialize mpi\n!$ IF (.FALSE.) THEN\n      CALL mpi_init(ierr)\n      IF (ierr /= 0) STOP \"Error in MPI_Init\"\n!$ ELSE\n!$    CALL mpi_init_thread(MPI_THREAD_FUNNELED, provided_tsl, ierr)\n!$    IF (ierr /= 0) STOP \"Error in MPI_Init_thread\"\n!$    IF (provided_tsl .LT. MPI_THREAD_FUNNELED) THEN\n!$       STOP \"MPI library does not support the requested level of threading (MPI_THREAD_FUNNELED).\"\n!$    END IF\n!$ END IF\n\n   !\n   ! setup the mpi environment\n   CALL mpi_comm_size(MPI_COMM_WORLD, numnodes, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Comm_size\"\n   npdims(:) = 0\n   CALL mpi_dims_create(numnodes, 2, npdims, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Dims_create\"\n   CALL mpi_cart_create(MPI_COMM_WORLD, 2, npdims, period, .FALSE., group, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Cart_create\"\n\n   CALL mpi_comm_rank(MPI_COMM_WORLD, mynode, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Comm_rank\"\n   WRITE (*, *) 'mynode ', mynode, ' numnodes', numnodes\n\n   !***************************************************************************************\n   !\n   ! initialize the DBCSR library\n   CALL dbcsr_init_lib(MPI_COMM_WORLD)\n\n   !\n   ! the matrix will contain nblkrows_total row blocks and nblkcols_total column blocks\n   nblkrows_total = 4\n   nblkcols_total = 3\n\n   !\n   ! set the block size for each row and column\n   ALLOCATE (row_blk_sizes(nblkrows_total), col_blk_sizes(nblkcols_total))\n   row_blk_sizes(:) = 2\n   col_blk_sizes(:) = 3\n\n   !\n   ! set the row and column distributions (here the distribution is set randomly)\n   CALL random_dist(row_dist, nblkrows_total, npdims(1))\n   CALL random_dist(col_dist, nblkcols_total, npdims(2))\n\n   !\n   ! set the DBCSR distribution object\n   CALL dbcsr_distribution_new(dist, group=group, row_dist=row_dist, col_dist=col_dist, reuse_arrays=.TRUE.)\n\n   !\n   ! create the DBCSR matrix, i.e. a double precision non symmetric matrix\n   ! with nblkrows_total x nblkcols_total blocks and\n   ! sizes \"sum(row_blk_sizes)\" x \"sum(col_blk_sizes)\", distributed as\n   ! specified by the dist object\n   CALL dbcsr_create(matrix=matrix_a, &\n                     name=\"this is my matrix a\", &\n                     dist=dist, &\n                     matrix_type=dbcsr_type_no_symmetry, &\n                     row_blk_size=row_blk_sizes, &\n                     col_blk_size=col_blk_sizes, &\n                     data_type=dbcsr_type_real_8, &\n                     reuse_arrays=.TRUE.)\n\n   !\n   ! finalize the DBCSR matrix\n   CALL dbcsr_finalize(matrix_a)\n\n   !\n   ! print the *empty* matrix\n   CALL dbcsr_print(matrix_a)\n\n   !\n   ! release the matrix\n   CALL dbcsr_release(matrix_a)\n\n   !\n   ! release the distribution\n   CALL dbcsr_distribution_release(dist)\n\n   !***************************************************************************************\n   !\n\n   ! free comm\n   CALL mpi_comm_free(group, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Comm_free\"\n\n   ! finalize the DBCSR library\n   CALL dbcsr_finalize_lib()\n\n   !\n   ! finalize mpi\n   CALL mpi_finalize(ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_finalize\"\n\n   !***************************************************************************************\n\nCONTAINS\n\n   SUBROUTINE random_dist(dist_array, dist_size, nbins)\n      INTEGER, DIMENSION(:), INTENT(out), POINTER        :: dist_array\n      INTEGER, INTENT(in)                                :: dist_size, nbins\n\n      INTEGER                                            :: i\n\n      ALLOCATE (dist_array(dist_size))\n      DO i = 1, dist_size\n         dist_array(i) = MODULO(nbins - i, nbins)\n      END DO\n\n   END SUBROUTINE random_dist\n\nEND PROGRAM dbcsr_example_1\n"
  },
  {
    "path": "examples/dbcsr_example_2.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_example_2\n   !! DBCSR example 2:\n   !! This example shows how to set a DBCSR matrix\n\n   USE mpi\n   USE dbcsr_api, ONLY: &\n      dbcsr_create, dbcsr_distribution_get, dbcsr_distribution_new, dbcsr_distribution_release, &\n      dbcsr_distribution_type, dbcsr_finalize, dbcsr_finalize_lib, dbcsr_get_stored_coordinates, &\n      dbcsr_init_lib, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_print, dbcsr_put_block, &\n      dbcsr_release, dbcsr_type, dbcsr_type_no_symmetry, dbcsr_type_real_8\n\n   IMPLICIT NONE\n\n   TYPE(dbcsr_type)                         :: matrix_a\n\n   INTEGER, DIMENSION(:), POINTER           :: col_blk_sizes, row_blk_sizes\n   INTEGER                                  :: group, numnodes, mynode, ierr, &\n                                               nblkrows_total, nblkcols_total, node_holds_blk, max_nze, nze, &\n                                               row, col, row_s, col_s, max_row_size, max_col_size\n   INTEGER, DIMENSION(2)                    :: npdims\n   INTEGER, DIMENSION(:), POINTER           :: col_dist, row_dist\n   TYPE(dbcsr_distribution_type)            :: dist\n   REAL(KIND=KIND(0.0D0)), DIMENSION(:), ALLOCATABLE :: values\n   LOGICAL, DIMENSION(2)                    :: period = .TRUE.\n!$ INTEGER                                  :: provided_tsl\n\n   !***************************************************************************************\n\n   !\n   ! initialize mpi\n!$ IF (.FALSE.) THEN\n      CALL mpi_init(ierr)\n      IF (ierr /= 0) STOP \"Error in MPI_Init\"\n!$ ELSE\n!$    CALL mpi_init_thread(MPI_THREAD_FUNNELED, provided_tsl, ierr)\n!$    IF (ierr /= 0) STOP \"Error in MPI_Init_thread\"\n!$    IF (provided_tsl .LT. MPI_THREAD_FUNNELED) THEN\n!$       STOP \"MPI library does not support the requested level of threading (MPI_THREAD_FUNNELED).\"\n!$    END IF\n!$ END IF\n\n   !\n   ! setup the mpi environment\n   CALL mpi_comm_size(MPI_COMM_WORLD, numnodes, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Comm_size\"\n   npdims(:) = 0\n   CALL mpi_dims_create(numnodes, 2, npdims, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Dims_create\"\n   CALL mpi_cart_create(MPI_COMM_WORLD, 2, npdims, period, .FALSE., group, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Cart_create\"\n\n   CALL mpi_comm_rank(MPI_COMM_WORLD, mynode, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Comm_rank\"\n   WRITE (*, *) 'mynode ', mynode, ' numnodes', numnodes\n\n   !***************************************************************************************\n   !\n   ! initialize the DBCSR library\n   CALL dbcsr_init_lib(MPI_COMM_WORLD)\n\n   !\n   ! the matrix will contain nblkrows_total row blocks and nblkcols_total column blocks\n   nblkrows_total = 4\n   nblkcols_total = 4\n\n   !\n   ! set the block size for each row and column\n   ALLOCATE (row_blk_sizes(nblkrows_total), col_blk_sizes(nblkcols_total))\n   row_blk_sizes(:) = 2\n   col_blk_sizes(:) = 2\n\n   !\n   ! set the row and column distributions (here the distribution is set randomly)\n   CALL random_dist(row_dist, nblkrows_total, npdims(1))\n   CALL random_dist(col_dist, nblkcols_total, npdims(2))\n\n   !\n   ! set the DBCSR distribution object\n   CALL dbcsr_distribution_new(dist, group=group, row_dist=row_dist, col_dist=col_dist, reuse_arrays=.TRUE.)\n\n   !\n   ! create the DBCSR matrix, i.e. a double precision non symmetric matrix\n   ! with nblkrows_total x nblkcols_total blocks and\n   ! sizes \"sum(row_blk_sizes)\" x \"sum(col_blk_sizes)\", distributed as\n   ! specified by the dist object\n   CALL dbcsr_create(matrix=matrix_a, &\n                     name=\"this is my matrix a\", &\n                     dist=dist, &\n                     matrix_type=dbcsr_type_no_symmetry, &\n                     row_blk_size=row_blk_sizes, &\n                     col_blk_size=col_blk_sizes, &\n                     data_type=dbcsr_type_real_8)\n\n   !\n   ! get the node id from the matrix\n   CALL dbcsr_distribution_get(dist, mynode=mynode)\n\n   !\n   ! get the maximum block size of the matrix\n   max_row_size = MAXVAL(row_blk_sizes)\n   max_col_size = MAXVAL(col_blk_sizes)\n   max_nze = max_row_size*max_col_size\n\n   !\n   ! allocate a 1d buffer that is needed to put a block\n   ! into the matrix (2d buffer can also be used)\n   ALLOCATE (values(max_nze))\n\n   !\n   ! loop over the blocks, build a tridiagonal matrix\n   DO row = 1, dbcsr_nblkrows_total(matrix_a)\n      DO col = MAX(row - 1, 1), MIN(row + 1, dbcsr_nblkcols_total(matrix_a))\n         !\n         ! get the node id that holds this (row, col) block\n         row_s = row; col_s = col\n         CALL dbcsr_get_stored_coordinates(matrix_a, row_s, col_s, node_holds_blk)\n         !\n         ! put the block on the right node\n         IF (node_holds_blk .EQ. mynode) THEN\n            !\n            ! get the size of the block\n            nze = row_blk_sizes(row_s)*col_blk_sizes(col_s)\n            !\n            ! fill the matrix with the random block\n            CALL RANDOM_NUMBER(values(1:nze))\n            CALL dbcsr_put_block(matrix_a, row_s, col_s, values(1:nze))\n         END IF\n      END DO\n   END DO\n   DEALLOCATE (values)\n\n   !\n   ! finalize the DBCSR matrix\n   CALL dbcsr_finalize(matrix_a)\n\n   !\n   ! print the matrix\n   CALL dbcsr_print(matrix_a)\n\n   !\n   ! release the matrix\n   CALL dbcsr_release(matrix_a)\n\n   CALL dbcsr_distribution_release(dist)\n   DEALLOCATE (row_blk_sizes, col_blk_sizes)\n\n   !***************************************************************************************\n   !\n\n   ! free comm\n   CALL mpi_comm_free(group, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Comm_free\"\n\n   ! finalize the DBCSR library\n   CALL dbcsr_finalize_lib()\n\n   !\n   ! finalize mpi\n   CALL mpi_finalize(ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_finalize\"\n\n   !***************************************************************************************\n\nCONTAINS\n\n   SUBROUTINE random_dist(dist_array, dist_size, nbins)\n      INTEGER, DIMENSION(:), INTENT(out), POINTER        :: dist_array\n      INTEGER, INTENT(in)                                :: dist_size, nbins\n\n      INTEGER                                            :: i\n\n      ALLOCATE (dist_array(dist_size))\n      DO i = 1, dist_size\n         dist_array(i) = MODULO(nbins - i, nbins)\n      END DO\n\n   END SUBROUTINE random_dist\n\nEND PROGRAM dbcsr_example_2\n"
  },
  {
    "path": "examples/dbcsr_example_3.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_example_3\n   !! DBCSR example 3:\n   !! This example shows how to multiply two dbcsr matrices\n\n   USE mpi\n   USE dbcsr_api, ONLY: &\n      dbcsr_create, dbcsr_distribution_get, dbcsr_distribution_new, dbcsr_distribution_release, &\n      dbcsr_distribution_type, dbcsr_finalize, dbcsr_finalize_lib, dbcsr_get_stored_coordinates, &\n      dbcsr_init_lib, dbcsr_multiply, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_print, &\n      dbcsr_put_block, dbcsr_release, dbcsr_type, dbcsr_type_no_symmetry, dbcsr_type_real_8\n\n   IMPLICIT NONE\n\n   TYPE(dbcsr_type)                         :: matrix_a, matrix_b, matrix_c\n\n   INTEGER, DIMENSION(:), POINTER           :: col_blk_sizes, row_blk_sizes\n   INTEGER                                  :: group, numnodes, mynode, ierr, &\n                                               nblkrows_total, nblkcols_total, &\n                                               node_holds_blk, max_nze, nze, row, col, row_s, col_s, &\n                                               max_row_size, max_col_size\n   INTEGER, DIMENSION(2)                    :: npdims\n   INTEGER, DIMENSION(:), POINTER           :: col_dist, row_dist\n   TYPE(dbcsr_distribution_type)            :: dist\n   REAL(KIND=KIND(0.0D0)), DIMENSION(:), ALLOCATABLE :: values\n   LOGICAL, DIMENSION(2)                    :: period = .TRUE.\n!$ INTEGER                                  :: provided_tsl\n\n   !***************************************************************************************\n\n   !\n   ! initialize mpi\n!$ IF (.FALSE.) THEN\n      CALL mpi_init(ierr)\n      IF (ierr /= 0) STOP \"Error in MPI_Init\"\n!$ ELSE\n!$    CALL mpi_init_thread(MPI_THREAD_FUNNELED, provided_tsl, ierr)\n!$    IF (ierr /= 0) STOP \"Error in MPI_Init_thread\"\n!$    IF (provided_tsl .LT. MPI_THREAD_FUNNELED) THEN\n!$       STOP \"MPI library does not support the requested level of threading (MPI_THREAD_FUNNELED).\"\n!$    END IF\n!$ END IF\n\n   !\n   ! setup the mpi environment\n   CALL mpi_comm_size(MPI_COMM_WORLD, numnodes, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Comm_size\"\n   npdims(:) = 0\n   CALL mpi_dims_create(numnodes, 2, npdims, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Dims_create\"\n   CALL mpi_cart_create(MPI_COMM_WORLD, 2, npdims, period, .FALSE., group, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Cart_create\"\n\n   CALL mpi_comm_rank(MPI_COMM_WORLD, mynode, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Comm_rank\"\n   WRITE (*, *) 'mynode ', mynode, ' numnodes', numnodes\n\n   !***************************************************************************************\n   !\n   ! initialize the DBCSR library\n   CALL dbcsr_init_lib(MPI_COMM_WORLD)\n\n   !\n   ! the matrix will contain nblkrows_total row blocks and nblkcols_total column blocks\n   nblkrows_total = 4\n   nblkcols_total = 4\n\n   !\n   ! set the block size for each row and column\n   ALLOCATE (row_blk_sizes(nblkrows_total), col_blk_sizes(nblkcols_total))\n   row_blk_sizes(:) = 2\n   col_blk_sizes(:) = 2\n\n   !\n   ! set the row and column distributions (here the distribution is set randomly)\n   CALL random_dist(row_dist, nblkrows_total, npdims(1))\n   CALL random_dist(col_dist, nblkcols_total, npdims(2))\n\n   !\n   ! set the dbcsr distribution object\n   CALL dbcsr_distribution_new(dist, group=group, row_dist=row_dist, col_dist=col_dist, reuse_arrays=.TRUE.)\n\n   !\n   ! create the dbcsr matrices, i.e. a double precision non symmetric matrix\n   ! with nblkrows_total x nblkcols_total blocks and\n   ! sizes \"sum(row_blk_sizes)\" x \"sum(col_blk_sizes)\", distributed as\n   ! specified by the dist object\n   CALL dbcsr_create(matrix=matrix_a, &\n                     name=\"this is my matrix a\", &\n                     dist=dist, &\n                     matrix_type=dbcsr_type_no_symmetry, &\n                     row_blk_size=row_blk_sizes, &\n                     col_blk_size=col_blk_sizes, &\n                     data_type=dbcsr_type_real_8)\n\n   CALL dbcsr_create(matrix=matrix_b, &\n                     name=\"this is my matrix b\", &\n                     dist=dist, &\n                     matrix_type=dbcsr_type_no_symmetry, &\n                     row_blk_size=row_blk_sizes, &\n                     col_blk_size=col_blk_sizes, &\n                     data_type=dbcsr_type_real_8)\n\n   CALL dbcsr_create(matrix=matrix_c, &\n                     name=\"this is my matrix c\", &\n                     dist=dist, &\n                     matrix_type=dbcsr_type_no_symmetry, &\n                     row_blk_size=row_blk_sizes, &\n                     col_blk_size=col_blk_sizes, &\n                     data_type=dbcsr_type_real_8)\n\n   ! get the maximum block size of the matrix\n   max_row_size = MAXVAL(row_blk_sizes)\n   max_col_size = MAXVAL(col_blk_sizes)\n   max_nze = max_row_size*max_col_size\n\n   !\n   ! set up the a matrix\n   CALL dbcsr_distribution_get(dist, mynode=mynode)\n   ALLOCATE (values(max_nze))\n   DO row = 1, dbcsr_nblkrows_total(matrix_a)\n      DO col = MAX(row - 1, 1), MIN(row + 1, dbcsr_nblkcols_total(matrix_a))\n         row_s = row; col_s = col\n         CALL dbcsr_get_stored_coordinates(matrix_a, row_s, col_s, node_holds_blk)\n         IF (node_holds_blk .EQ. mynode) THEN\n            nze = row_blk_sizes(row_s)*col_blk_sizes(col_s)\n            CALL RANDOM_NUMBER(values(1:nze))\n            CALL dbcsr_put_block(matrix_a, row_s, col_s, values(1:nze))\n         END IF\n      END DO\n   END DO\n   DEALLOCATE (values)\n\n   !\n   ! set up the b matrix\n   CALL dbcsr_distribution_get(dist, mynode=mynode)\n   ALLOCATE (values(max_nze))\n   DO row = 1, dbcsr_nblkrows_total(matrix_b)\n      DO col = MAX(row - 1, 1), MIN(row + 1, dbcsr_nblkcols_total(matrix_b))\n         row_s = row; col_s = col\n         CALL dbcsr_get_stored_coordinates(matrix_b, row_s, col_s, node_holds_blk)\n         IF (node_holds_blk .EQ. mynode) THEN\n            nze = row_blk_sizes(row_s)*col_blk_sizes(col_s)\n            CALL RANDOM_NUMBER(values(1:nze))\n            CALL dbcsr_put_block(matrix_b, row_s, col_s, values(1:nze))\n         END IF\n      END DO\n   END DO\n   DEALLOCATE (values)\n\n   !\n   ! finalize the dbcsr matrices\n   CALL dbcsr_finalize(matrix_a)\n   CALL dbcsr_finalize(matrix_b)\n   CALL dbcsr_finalize(matrix_c)\n\n   !\n   ! multiply the matrices\n   CALL dbcsr_multiply('N', 'N', 1.0D0, matrix_a, matrix_b, 0.0D0, matrix_c)\n\n   !\n   ! print the matrices\n   CALL dbcsr_print(matrix_a)\n   CALL dbcsr_print(matrix_b)\n   CALL dbcsr_print(matrix_c)\n\n   !\n   ! release the matrices\n   CALL dbcsr_release(matrix_a)\n   CALL dbcsr_release(matrix_b)\n   CALL dbcsr_release(matrix_c)\n\n   CALL dbcsr_distribution_release(dist)\n   DEALLOCATE (row_blk_sizes, col_blk_sizes)\n\n   ! free comm\n   CALL mpi_comm_free(group, ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_Comm_free\"\n\n   ! finalize the DBCSR library\n   CALL dbcsr_finalize_lib()\n\n   !\n   ! finalize mpi\n   CALL mpi_finalize(ierr)\n   IF (ierr /= 0) STOP \"Error in MPI_finalize\"\n\n   !***************************************************************************************\n\nCONTAINS\n\n   SUBROUTINE random_dist(dist_array, dist_size, nbins)\n      INTEGER, DIMENSION(:), INTENT(out), POINTER        :: dist_array\n      INTEGER, INTENT(in)                                :: dist_size, nbins\n\n      INTEGER                                            :: i\n\n      ALLOCATE (dist_array(dist_size))\n      DO i = 1, dist_size\n         dist_array(i) = MODULO(nbins - i, nbins)\n      END DO\n\n   END SUBROUTINE random_dist\n\nEND PROGRAM dbcsr_example_3\n"
  },
  {
    "path": "examples/dbcsr_example_3.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include <algorithm>\n#include <cstdint>\n#include <cstdio>\n#include <cstdlib>\n#include <iostream>\n#include <random>\n#include <vector>\n\n#include <mpi.h>\n\n#include <dbcsr.h>\n\n// Random distribution by using round-robin assignment\n// of blocks to processors\nstd::vector<int> random_dist(int dist_size, int nbins) {\n  std::vector<int> dist(dist_size);\n\n  for (int i = 0; i < dist_size; i++) dist[i] = i % nbins;\n\n  return dist;\n}\n\n// DBCSR example 3\n// This example shows how to multiply two DBCSR matrices\nint main(int argc, char* argv[]) {\n  // initialize MPI\n  MPI_Init(&argc, &argv);\n\n  // setup the mpi environment\n  int mpi_size, mpi_rank;\n  MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);\n  MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);\n\n  // make 2D grid\n  int dims[2] = {0};\n  MPI_Dims_create(mpi_size, 2, dims);\n  int periods[2] = {1};\n  int reorder = 0;\n  MPI_Comm group;\n  MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, reorder, &group);\n\n  int coord[2];\n  MPI_Cart_coords(group, mpi_rank, 2, coord);\n\n  for (int i = 0; i != mpi_size; ++i) {\n    if (mpi_rank == i) {\n      std::cout << \"I'm processor \" << mpi_rank << \" over \" << mpi_size << \" proc\"\n                << \", (\" << coord[0] << \", \" << coord[1] << \") in the 2D grid\" << std::endl;\n    }\n    MPI_Barrier(MPI_COMM_WORLD);\n  }\n\n  // initialize the DBCSR library\n  c_dbcsr_init_lib(MPI_COMM_WORLD, nullptr);\n\n  // Total number of blocks\n  int nrows_1 = 4;\n  int ncols_1 = 5;\n  int nrows_2 = 5;\n  int ncols_2 = 4;\n\n  // Block sizes\n  std::vector<int> row_blk_sizes_1 = {2, 3, 5, 2};\n  std::vector<int> col_blk_sizes_1 = {3, 3, 4, 6, 2};\n  std::vector<int> row_blk_sizes_2 = col_blk_sizes_1;\n  std::vector<int> col_blk_sizes_2 = {5, 2, 5, 3};\n\n  auto row_dist_1 = random_dist(nrows_1, dims[0]);\n  auto col_dist_1 = random_dist(ncols_1, dims[1]);\n  auto row_dist_2 = random_dist(nrows_2, dims[0]);\n  auto col_dist_2 = random_dist(ncols_2, dims[1]);\n\n  dbcsr_distribution dist1 = nullptr;\n  dbcsr_distribution dist2 = nullptr;\n  dbcsr_distribution dist3 = nullptr;\n\n  //create distributions\n  c_dbcsr_distribution_new(&dist1, group, row_dist_1.data(), row_dist_1.size(), col_dist_1.data(), col_dist_1.size());\n\n  c_dbcsr_distribution_new(&dist2, group, row_dist_2.data(), row_dist_2.size(), col_dist_2.data(), col_dist_2.size());\n\n  c_dbcsr_distribution_new(&dist3, group, row_dist_1.data(), row_dist_1.size(), col_dist_2.data(), col_dist_2.size());\n\n  // Fill all blocks, i.e. dense matrices\n  auto fill_matrix = [&](void* matrix, std::vector<int>& irblks, std::vector<int>& icblks) {\n    std::vector<double> block;\n    std::vector<int> loc_irblks, loc_icblks;\n\n    for (int i = 0; i != (int)irblks.size(); ++i) {\n      int blk_proc = -1;\n      int ix = irblks[i];\n      int jx = icblks[i];\n      c_dbcsr_get_stored_coordinates(matrix, ix, jx, &blk_proc);\n      if (mpi_rank == blk_proc) {\n        loc_irblks.push_back(ix);\n        loc_icblks.push_back(jx);\n      }\n    }\n\n    c_dbcsr_reserve_blocks(matrix, loc_irblks.data(), loc_icblks.data(), loc_irblks.size());\n\n    void* iter = nullptr;\n    c_dbcsr_iterator_start(&iter, matrix, nullptr, nullptr, nullptr, nullptr, nullptr);\n\n    while (c_dbcsr_iterator_blocks_left(iter)) {\n      int i = -1;\n      int j = -1;\n      int nblk = -1;\n      int rsize = -1;\n      int csize = -1;\n      bool tr = false;\n\n      double* blk = nullptr;\n      c_dbcsr_iterator_next_2d_block_d(iter, &i, &j, &blk, &tr, &nblk, &rsize, &csize, nullptr, nullptr);\n\n      std::generate(blk, blk + rsize * csize, [&]() { return static_cast<double>(std::rand()) / RAND_MAX; });\n    }\n\n    c_dbcsr_iterator_stop(&iter);\n  };\n\n  dbcsr_matrix matrix_a = nullptr;\n  dbcsr_matrix matrix_b = nullptr;\n  dbcsr_matrix matrix_c = nullptr;\n\n  c_dbcsr_create_new(&matrix_a, \"matrix a\", dist1, dbcsr_type_no_symmetry, row_blk_sizes_1.data(), row_blk_sizes_1.size(),\n    col_blk_sizes_1.data(), col_blk_sizes_1.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);\n\n  c_dbcsr_create_new(&matrix_b, \"matrix b\", dist2, dbcsr_type_no_symmetry, row_blk_sizes_2.data(), row_blk_sizes_2.size(),\n    col_blk_sizes_2.data(), col_blk_sizes_2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);\n\n  c_dbcsr_create_new(&matrix_c, \"matrix c\", dist3, dbcsr_type_no_symmetry, row_blk_sizes_1.data(), row_blk_sizes_1.size(),\n    col_blk_sizes_2.data(), col_blk_sizes_2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);\n\n  // indices of non-zero blocks\n  std::vector<int> irblks_1 = {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3};\n  std::vector<int> icblks_1 = {0, 1, 2, 4, 0, 2, 3, 1, 3, 4, 0, 1, 2};\n\n  std::vector<int> irblks_2 = {0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4};\n  std::vector<int> icblks_2 = {0, 2, 3, 0, 1, 2, 3, 0, 2, 3, 1, 2, 3, 0, 1, 2, 3};\n\n  std::vector<int> irblks_3 = {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3};\n  std::vector<int> icblks_3 = {0, 1, 2, 3, 0, 2, 3, 1, 2, 3, 0, 1, 2, 3};\n\n  fill_matrix(matrix_a, irblks_1, icblks_1);\n  c_dbcsr_finalize(matrix_a);\n  fill_matrix(matrix_b, irblks_2, icblks_2);\n  c_dbcsr_finalize(matrix_b);\n  fill_matrix(matrix_c, irblks_3, icblks_3);\n  c_dbcsr_finalize(matrix_c);\n\n  // Compute C = 3.0 * A * B + 2.0 * C\n  c_dbcsr_multiply_d('N', 'N', 3.0, matrix_a, matrix_b, 2.0, matrix_c, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,\n    nullptr, nullptr, nullptr);\n\n  c_dbcsr_print(matrix_c);\n\n  // release the matrices\n  c_dbcsr_release(&matrix_a);\n  c_dbcsr_release(&matrix_b);\n  c_dbcsr_release(&matrix_c);\n\n  c_dbcsr_distribution_release(&dist1);\n  c_dbcsr_distribution_release(&dist2);\n  c_dbcsr_distribution_release(&dist3);\n\n  MPI_Comm_free(&group);\n\n  // finalize the DBCSR library\n  c_dbcsr_finalize_lib();\n\n  // finalize MPI\n  MPI_Finalize();\n\n  return 0;\n}\n"
  },
  {
    "path": "examples/dbcsr_tensor_example_1.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nprogram dbcsr_tensor_example_1\n   !! Sparse tensor contraction example\n   use mpi\n   use dbcsr_api, only: &\n      dbcsr_type, dbcsr_distribution_type, dbcsr_init_lib, dbcsr_distribution_new, &\n      dbcsr_type_no_symmetry, dbcsr_create, dbcsr_iterator_start, dbcsr_iterator_blocks_left, &\n      dbcsr_iterator_stop, dbcsr_iterator_next_block, dbcsr_iterator_type, dbcsr_put_block, &\n      dbcsr_reserve_blocks, dbcsr_scalar, dbcsr_finalize_lib, dbcsr_distribution_release, &\n      dbcsr_nblkrows_total, dbcsr_type_real_8, dbcsr_release, dbcsr_nblkcols_total, dbcsr_finalize, &\n      dbcsr_get_stored_coordinates, dbcsr_get_info, dbcsr_filter, dbcsr_checksum\n   use dbcsr_tensor_api, only: &\n      dbcsr_t_create, dbcsr_t_copy_matrix_to_tensor, &\n      dbcsr_t_pgrid_type, dbcsr_t_type, dbcsr_t_distribution_type, dbcsr_t_nblks_total, &\n      dbcsr_t_reserve_blocks, dbcsr_t_iterator_start, dbcsr_t_iterator_blocks_left, &\n      dbcsr_t_iterator_next_block, dbcsr_t_iterator_stop, dbcsr_t_default_distvec, dbcsr_t_put_block, &\n      dbcsr_t_copy, dbcsr_t_distribution_new, dbcsr_t_distribution_destroy, dbcsr_t_write_blocks, dbcsr_t_contract, &\n      dbcsr_t_copy_tensor_to_matrix, dbcsr_t_destroy, dbcsr_t_pgrid_destroy, dbcsr_t_nblks_total, &\n      dbcsr_t_pgrid_create, dbcsr_t_iterator_type, dbcsr_t_get_stored_coordinates, dbcsr_t_get_info, dbcsr_t_filter, &\n      dbcsr_t_checksum, dbcsr_t_clear, dbcsr_t_batched_contract_init, dbcsr_t_batched_contract_finalize\n   use iso_fortran_env, only: &\n      output_unit, real64, int64\n\n! --------------------------------------------------------------------------------------------------\n! this example implements the sparse tensor contraction (einstein notation)\n! 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))\n!\n! the tensors have the following shape and entries:\n! a: n x n x 2n: a(i,j,k) = exp(-1/3*alpha*((i-j)**2+(i-k)**2+(j-k)**2))\n! b: n x n x n: b(i,j,k) = exp(-1/3*beta*((i-j)**2+(i-k)**2+(j-k)**2))\n! c: n x n: c(i,j) = exp(-1/2*gamma*(i-j)**2)\n!\n! due to the exponential decay of the tensor elements w.r.t. difference between two indices,\n! all tensors are sparse. neglect of small tensor elements is controlled by threshold 'filter_eps':\n! tensor blocks with frobenius norm < filter_eps are neglected.\n!\n! block sizes are set randomly in this example to demonstrate a heterogeneous sparsity pattern,\n! these should ideally be adapted to the natural sparsity pattern of the problem\n! (e.g. blocks corresponding to a set of gaussian basis functions with same exponent)\n!\n! DBCSR provides two basic operations in terms of which any tensor contraction can be expressed:\n! dbcsr_t_contract: contraction of a pair of tensors\n! dbcsr_t_copy: copy supporting redistribution and index permutation\n!\n! by default, DBCSR supports tensors of ranks between 2 and 4.\n! higher ranks can be enabled by adapting 'maxrank' in 'dbcsr_tensor.fypp'.\n!\n! the above contraction is executed in the following order:\n! 1) d(i,j,l,m) = a(i,j,k) x a(l,m,k)\n! 2) e(j,m,n) = d(i,j,l,m) x b(i,l,n)\n! 3) f(j,m,o) = b(m,o,j) + b(o,m,j)\n! 4) c(n,o) = c(n,o) + e(j,m,n) x f(j,m,o)\n!\n! how to run (this example and DBCSR for tensors in general):\n! - best performance is obtained by running with mpi and one openmp thread per rank.\n! - ideally number of mpi ranks should be composed of small prime factors (e.g. powers of 2).\n! - for sparse data & heterogeneous block sizes, DBCSR should be run on CPUs with libxsmm backend.\n! - for dense data best performance is obtained by choosing homogeneous block sizes of 64 and by\n!   compiling with GPU support.\n! --------------------------------------------------------------------------------------------------\n\n! ------ Parameters ------\n\n   ! example type:\n   ! - 1: debug (small & verbose)\n   ! - 2: default (medium size)\n   ! - 3: large (requires parallelism)\n   ! - 4: large, batched contraction to reduce memory (does not require parallelism)\n   integer, parameter :: example_type = 2\n\n   ! filter threshold (larger value means more sparse but less accurate)\n   real(real64), parameter :: filter_eps = 1.0e-08_real64\n\n   ! number of batches in one dimension (to reduce memory footprint)\n   integer, parameter :: nbatch = 8\n\n   ! exponents for gaussians\n   real(real64) :: alpha, beta, gamma\n\n   ! maximum block size (actual block sizes are random between 1 and this number)\n   integer :: max_bsize\n\n   ! tensor size in one dimension (n)\n   integer :: nel\n\n   ! tune sparsity by scaling exponent for calculation of tensor elements\n   real(real64) :: scale_exp\n\n   ! contract all tensors at once\n   logical :: contract_direct\n\n   ! contract in batches (memory saving)\n   logical :: contract_batched\n\n   ! verbosity level\n   ! 0: essential output\n   ! 1: tensor log\n   ! 2: verbose tensor log\n   ! 3: verbose tensor log and print all tensor data\n   integer :: verbosity\n\n   integer :: &\n      ierr, numnodes, mynode, node_holds_blk, io_unit, io_unit_dbcsr, ind, row, col, blk, group, &\n      i, j, k, l, n, o, i_arr, j_arr, k_arr, l_arr, n_arr, o_arr, blk_size, &\n      min_exp, min_exp_ij, min_exp_ik, min_exp_jk, min_exp_il, min_exp_in, min_exp_ln, &\n      ibatch, jbatch, lbatch, mbatch\n   integer, dimension(:), allocatable :: &\n      offset_i, offset_j, offset_l, offset_k, offset_n, tmp, &\n      start_batch_i, start_batch_j, start_batch_l, start_batch_m, &\n      end_batch_i, end_batch_j, end_batch_l, end_batch_m\n   integer, dimension(:), allocatable, target :: &\n      blk_ind_1, blk_ind_2, blk_ind_3, &\n      blk_size_i, blk_size_j, blk_size_k, blk_size_l, blk_size_m, blk_size_n, blk_size_o, &\n      dist_1, dist_2, dist_3, dist_4\n   integer, dimension(:, :), allocatable :: bounds_1, bounds_2, bounds_3\n   integer, dimension(:), pointer :: &\n      row_dist, col_dist, row_blk_size, col_blk_size, row_offset, col_offset\n   integer, dimension(2) :: shape_2d, blk_ind_2d, blk_size_2d, blk_offset_2d, pdims_2d\n   integer, dimension(3) :: blk_ind_3d, pdims_3d, shape_3d, blk_size_3d, blk_offset_3d\n   integer, dimension(4) :: shape_4d, pdims_4d\n   integer, dimension(7) :: shape_ijklmno\n   integer(int64) :: nflop_sum, nflop\n   real(real64) :: cs, t1, t0, time, flop_rate\n   real(real64), dimension(:, :), pointer :: blk_values_2d\n   real(real64), dimension(:, :, :), allocatable :: blk_values_3d\n   logical :: tr\n   logical, dimension(2) :: period = .true.\n   type(dbcsr_type) :: c_matrix\n   type(dbcsr_distribution_type) :: dist_matrix\n   type(dbcsr_iterator_type) :: iter_matrix\n   type(dbcsr_t_pgrid_type) :: pgrid_3d, pgrid_4d\n   type(dbcsr_t_distribution_type) :: dist_tensor\n   type(dbcsr_t_type) :: a_ijk, a_lmk, b_iln, c_no, d_ijlm, e_jmn, f_jmo\n   type(dbcsr_t_iterator_type) :: iter_tensor\n\n   ! prefactor in exponent for tensor data\n   alpha = 1.0_real64; beta = 0.5_real64; gamma = 2.0_real64\n\n   ! parameters for different example types\n   select case (example_type)\n   case (1)\n      nel = 10\n      max_bsize = 3\n      verbosity = 3\n      scale_exp = 10.0_real64\n      contract_direct = .true.\n      contract_batched = .false.\n   case (2)\n      nel = 200\n      max_bsize = 10\n      verbosity = 1\n      scale_exp = 0.01_real64\n      contract_direct = .true.\n      contract_batched = .false.\n   case (3)\n      nel = 2000\n      max_bsize = 10\n      verbosity = 1\n      scale_exp = 0.01_real64\n      contract_direct = .true.\n      contract_batched = .false.\n   case (4)\n      nel = 2000\n      max_bsize = 10\n      verbosity = 0\n      scale_exp = 0.01_real64\n      contract_direct = .false.\n      contract_batched = .true.\n   end select\n\n   alpha = alpha*scale_exp\n   beta = beta*scale_exp\n   gamma = gamma*scale_exp\n\n   ! initialize mpi\n   call mpi_init(ierr)\n   if (ierr /= 0) stop \"error in mpi_init\"\n\n   call mpi_comm_size(mpi_comm_world, numnodes, ierr)\n   if (ierr /= 0) stop \"error in mpi_comm_size\"\n\n   call mpi_comm_rank(mpi_comm_world, mynode, ierr)\n   if (ierr /= 0) stop \"error in mpi_comm_rank\"\n\n   ! initialize DBCSR\n   call dbcsr_init_lib(mpi_comm_world)\n\n   ! prepare output\n   io_unit_dbcsr = -1\n   io_unit = -1\n   if (mynode == 0 .and. verbosity > 0) io_unit_dbcsr = output_unit\n   if (mynode == 0) io_unit = output_unit\n\n   ! create block sizes\n   call random_blk_sizes(nel, shape_ijklmno(1), blk_size_i)\n   call random_blk_sizes(nel, shape_ijklmno(2), blk_size_j)\n   call random_blk_sizes(2*nel, shape_ijklmno(3), blk_size_k)\n   call random_blk_sizes(nel, shape_ijklmno(4), blk_size_l)\n   call random_blk_sizes(nel, shape_ijklmno(5), blk_size_m)\n   call random_blk_sizes(nel, shape_ijklmno(6), blk_size_n)\n   call random_blk_sizes(nel, shape_ijklmno(7), blk_size_o)\n\n! ------ create matrix c[no] ------\n\n   ! shape (number of blocks in each dimension)\n   shape_2d = shape_ijklmno(6:7)\n\n   ! set up 2-dimensional process grid\n   pdims_2d(:) = 0\n   call mpi_dims_create(numnodes, 2, pdims_2d, ierr)\n   if (ierr /= 0) stop \"error in mpi_dims_create\"\n   call mpi_cart_create(mpi_comm_world, 2, pdims_2d, period, .false., group, ierr)\n   if (ierr /= 0) stop \"error in mpi_cart_create\"\n\n   ! row and column distribution (mapping blocks in each dimension to process grid coordinate)\n   ! this routine creates a load-balanced distribution for heterogeneous block sizes, alternatively\n   ! any custom distribution can be used\n   allocate (dist_1(shape_2d(1)))\n   call dbcsr_t_default_distvec(shape_2d(1), pdims_2d(1), blk_size_n, dist_1)\n   allocate (dist_2(shape_2d(2)))\n   call dbcsr_t_default_distvec(shape_2d(2), pdims_2d(2), blk_size_o, dist_2)\n\n   ! convert to pointers because DBCSR matrix api only accepts pointers\n   row_dist => dist_1\n   col_dist => dist_2\n\n   ! create distribution\n   call dbcsr_distribution_new(dist_matrix, group=group, row_dist=row_dist, col_dist=col_dist)\n   deallocate (dist_1, dist_2)\n\n   ! convert to pointers since DBCSR matrix api only accepts pointers\n   row_blk_size => blk_size_n\n   col_blk_size => blk_size_o\n\n   ! create DBCSR matrix\n   call dbcsr_create(matrix=c_matrix, name=\"c[n|o]\", dist=dist_matrix, matrix_type=dbcsr_type_no_symmetry, &\n                     row_blk_size=row_blk_size, col_blk_size=col_blk_size, data_type=dbcsr_type_real_8)\n\n   call dbcsr_distribution_release(dist_matrix)\n\n! ------ fill matrix c[no] ------\n\n   ! reserve non-zero blocks. for performance it is important to first reserve all present blocks\n   ! before calculating them and inserting them into DBCSR matrix.\n   call dbcsr_get_info(c_matrix, row_blk_offset=row_offset, col_blk_offset=col_offset)\n\n   ind = 0\n   allocate (blk_ind_1(0), blk_ind_2(0))\n   do row = 1, dbcsr_nblkrows_total(c_matrix)\n      do col = 1, dbcsr_nblkcols_total(c_matrix)\n\n         ! only consider blocks that are local to this rank (according to distribution)\n         call dbcsr_get_stored_coordinates(c_matrix, row, col, node_holds_blk)\n         if (node_holds_blk /= mynode) cycle\n\n         ! calculate largest matrix element to determine an upper bound for block frobenius norm\n         ! block is reserved only if this estimate is larger than the filter_eps parameter\n         min_exp = block_minabsdiff(row_offset(row), col_offset(col), row_blk_size(row), col_blk_size(col))\n         blk_size = row_blk_size(row)*col_blk_size(col)\n         if (blk_size*exp(-0.5*gamma*real(min_exp**2)) < filter_eps) cycle\n\n         ind = ind + 1\n\n         ! store index of block to be reserved\n         call move_alloc(blk_ind_1, tmp)\n         allocate (blk_ind_1(ind))\n         blk_ind_1(:ind - 1) = tmp; deallocate (tmp)\n\n         call move_alloc(blk_ind_2, tmp)\n         allocate (blk_ind_2(ind))\n         blk_ind_2(:ind - 1) = tmp; deallocate (tmp)\n\n         blk_ind_1(ind) = row\n         blk_ind_2(ind) = col\n\n      end do\n   end do\n\n   ! reserve blocks\n   call dbcsr_reserve_blocks(c_matrix, blk_ind_1, blk_ind_2)\n   deallocate (blk_ind_1, blk_ind_2)\n\n   ! iterate over reserved matrix blocks to fill them with data\n   call dbcsr_iterator_start(iter_matrix, c_matrix)\n   do while (dbcsr_iterator_blocks_left(iter_matrix))\n      call dbcsr_iterator_next_block(iter_matrix, blk_ind_2d(1), blk_ind_2d(2), blk_values_2d, tr, &\n                                     row_size=blk_size_2d(1), col_size=blk_size_2d(2), &\n                                     row_offset=blk_offset_2d(1), col_offset=blk_offset_2d(2))\n      do n_arr = 1, blk_size_2d(1)\n         do o_arr = 1, blk_size_2d(2)\n            ! get matrix element index n & o from block offset\n            n = n_arr + blk_offset_2d(1) - 1\n            o = o_arr + blk_offset_2d(2) - 1\n            ! calculate matrix element\n            blk_values_2d(n_arr, o_arr) = exp(-0.5*gamma*real((n - o)**2))\n         end do\n      end do\n   end do\n   call dbcsr_iterator_stop(iter_matrix)\n\n   ! finalize the DBCSR matrix\n   call dbcsr_finalize(c_matrix)\n\n   ! sparsity refinement by removing small blocks\n   call dbcsr_filter(c_matrix, filter_eps)\n\n   ! create tensor from DBCSR matrix for tensor contraction and copy data\n   ! (alternatively we could have directly created c_matrix as a tensor)\n   call dbcsr_t_create(c_matrix, c_no)\n   call dbcsr_t_copy_matrix_to_tensor(c_matrix, c_no)\n\n! ------ create tensor a[ijk] ------\n\n   ! note: tensor api is analogous to matrix api with a few differences of technical and historical nature\n\n   shape_3d = shape_ijklmno(1:3)\n\n   ! n-rank tensor requires an n-dimensional process grid:\n   ! 'dbcsr_t_pgrid_create' is analogous to 'mpi_cart_create' but comes with some additional defaults.\n   ! If the tensor dimensions vary significantly in size, it's important for performance to use the\n   ! optional argument 'tensor_dims' to specify the tensor (block) dimensions.\n   pdims_3d(:) = 0\n   call dbcsr_t_pgrid_create(mpi_comm_world, pdims_3d, pgrid_3d)\n\n   allocate (dist_1(shape_3d(1)))\n   call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_i, dist_1)\n\n   allocate (dist_2(shape_3d(2)))\n   call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_j, dist_2)\n\n   allocate (dist_3(shape_3d(3)))\n   call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_k, dist_3)\n\n   call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3)\n   deallocate (dist_1, dist_2, dist_3)\n\n   ! create tensor. Compared with dbcsr_create this takes 2 additional arguments to control how the\n   ! tensor is internally represented as a matrix:\n   ! - map1_2d: which tensor dimensions are mapped to the first matrix dimension (in this case i & j)\n   ! - map2_2d: which tensor dimensions are mapped to the second matrix dimension (in this case k)\n   ! (these arguments need to be given for performance reasons, see documentation of dbcsr_t_contract\n   ! for more info)\n   call dbcsr_t_create(a_ijk, \"a[ij|k]\", dist_tensor, &\n                       map1_2d=[1, 2], map2_2d=[3], &\n                       data_type=dbcsr_type_real_8, &\n                       blk_size_1=blk_size_i, blk_size_2=blk_size_j, blk_size_3=blk_size_k)\n   call dbcsr_t_distribution_destroy(dist_tensor)\n\n! ------ create a[lmk]  ------\n   ! note: normally we can just create an exact copy by calling:\n   !    call dbcsr_t_create(a_ijk, a_lmk)\n   !    call dbcsr_t_copy(a_ijk, a_lmk)\n   ! here we need to create from scratch since the tensors have different block sizes\n   shape_3d = shape_ijklmno([4, 5, 3])\n\n   allocate (dist_1(shape_3d(1)))\n   call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_l, dist_1)\n\n   allocate (dist_2(shape_3d(2)))\n   call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_m, dist_2)\n\n   allocate (dist_3(shape_3d(3)))\n   call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_k, dist_3)\n\n   call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3)\n   deallocate (dist_1, dist_2, dist_3)\n   call dbcsr_t_create(a_lmk, \"a[lm|k]\", dist_tensor, [1, 2], [3], dbcsr_type_real_8, &\n                       blk_size_l, blk_size_m, blk_size_k)\n   call dbcsr_t_distribution_destroy(dist_tensor)\n\n! ------ fill tensor a[ijk] and copy to a[lmk] ------\n\n   allocate (offset_i(dbcsr_t_nblks_total(a_ijk, 1)))\n   allocate (offset_j(dbcsr_t_nblks_total(a_ijk, 2)))\n   allocate (offset_k(dbcsr_t_nblks_total(a_ijk, 3)))\n   call dbcsr_t_get_info(a_ijk, blk_offset_1=offset_i, blk_offset_2=offset_j, blk_offset_3=offset_k)\n\n   ind = 0\n   allocate (blk_ind_1(0), blk_ind_2(0), blk_ind_3(0))\n   do i = 1, dbcsr_t_nblks_total(a_ijk, 1)\n      do j = 1, dbcsr_t_nblks_total(a_ijk, 2)\n         do k = 1, dbcsr_t_nblks_total(a_ijk, 3)\n\n            call dbcsr_t_get_stored_coordinates(a_ijk, [i, j, k], node_holds_blk)\n            if (node_holds_blk /= mynode) cycle\n\n            min_exp_ij = block_minabsdiff(offset_i(i), offset_j(j), blk_size_i(i), blk_size_j(j))\n            min_exp_ik = block_minabsdiff(offset_i(i), offset_k(k), blk_size_i(i), blk_size_k(k))\n            min_exp_jk = block_minabsdiff(offset_j(j), offset_k(k), blk_size_j(j), blk_size_k(k))\n\n            blk_size = blk_size_i(i)*blk_size_j(j)*blk_size_k(k)\n\n            if (blk_size*exp(-1./3*alpha*real(min_exp_ij**2 + min_exp_ik**2 + min_exp_jk**2)) < filter_eps) cycle\n\n            ind = ind + 1\n\n            call move_alloc(blk_ind_1, tmp)\n            allocate (blk_ind_1(ind))\n            blk_ind_1(:ind - 1) = tmp; deallocate (tmp)\n\n            call move_alloc(blk_ind_2, tmp)\n            allocate (blk_ind_2(ind))\n            blk_ind_2(:ind - 1) = tmp; deallocate (tmp)\n\n            call move_alloc(blk_ind_3, tmp)\n            allocate (blk_ind_3(ind))\n            blk_ind_3(:ind - 1) = tmp; deallocate (tmp)\n\n            blk_ind_1(ind) = i\n            blk_ind_2(ind) = j\n            blk_ind_3(ind) = k\n         end do\n      end do\n   end do\n\n   call dbcsr_t_reserve_blocks(a_ijk, blk_ind_1, blk_ind_2, blk_ind_3)\n   deallocate (blk_ind_1, blk_ind_2, blk_ind_3)\n\n   call dbcsr_t_iterator_start(iter_tensor, a_ijk)\n   do while (dbcsr_t_iterator_blocks_left(iter_tensor))\n      ! direct access to block pointers via iterator is not possible in the tensor api\n      ! the iterator goes over indices and then we call 'put_block'\n      call dbcsr_t_iterator_next_block(iter_tensor, blk_ind_3d, blk, blk_size=blk_size_3d, blk_offset=blk_offset_3d)\n      allocate (blk_values_3d(blk_size_3d(1), blk_size_3d(2), blk_size_3d(3)))\n      do i_arr = 1, blk_size_3d(1)\n         do j_arr = 1, blk_size_3d(2)\n            do k_arr = 1, blk_size_3d(3)\n               i = i_arr + blk_offset_3d(1) - 1\n               j = j_arr + blk_offset_3d(2) - 1\n               k = k_arr + blk_offset_3d(3) - 1\n               blk_values_3d(i_arr, j_arr, k_arr) = exp(-1./3*alpha*real((i - j)**2 + (i - k)**2 + (j - k)**2))\n            end do\n         end do\n      end do\n      call dbcsr_t_put_block(a_ijk, blk_ind_3d, blk_size_3d, blk_values_3d)\n      deallocate (blk_values_3d)\n   end do\n   call dbcsr_t_iterator_stop(iter_tensor)\n\n   call dbcsr_t_filter(a_ijk, filter_eps)\n\n   ! no need to finalize for tensors, this is done internally\n\n   ! fill tensor (lmk) by copying from a[ijk]\n   call dbcsr_t_copy(a_ijk, a_lmk)\n   call dbcsr_t_filter(a_lmk, filter_eps)\n\n! ------ create tensor b[iln] ------\n   shape_3d = shape_ijklmno([1, 4, 6])\n\n   allocate (dist_1(shape_3d(1)))\n   call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_i, dist_1)\n\n   allocate (dist_2(shape_3d(2)))\n   call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_l, dist_2)\n\n   allocate (dist_3(shape_3d(3)))\n   call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_n, dist_3)\n\n   call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3)\n   deallocate (dist_1, dist_2, dist_3)\n\n   call dbcsr_t_create(b_iln, \"b[il|n]\", dist_tensor, [1, 2], [3], dbcsr_type_real_8, &\n                       blk_size_i, blk_size_l, blk_size_n)\n   call dbcsr_t_distribution_destroy(dist_tensor)\n\n! ------ fill tensor b[iln] ------\n   allocate (offset_l(dbcsr_t_nblks_total(b_iln, 2)))\n   allocate (offset_n(dbcsr_t_nblks_total(b_iln, 3)))\n   call dbcsr_t_get_info(b_iln, blk_offset_2=offset_l, blk_offset_3=offset_n)\n\n   ind = 0\n   allocate (blk_ind_1(0), blk_ind_2(0), blk_ind_3(0))\n   do i = 1, dbcsr_t_nblks_total(b_iln, 1)\n      do l = 1, dbcsr_t_nblks_total(b_iln, 2)\n         do n = 1, dbcsr_t_nblks_total(b_iln, 3)\n\n            call dbcsr_t_get_stored_coordinates(b_iln, [i, l, n], node_holds_blk)\n            if (node_holds_blk /= mynode) cycle\n\n            min_exp_il = block_minabsdiff(offset_i(i), offset_l(l), blk_size_i(i), blk_size_l(l))\n            min_exp_in = block_minabsdiff(offset_i(i), offset_n(n), blk_size_i(i), blk_size_n(n))\n            min_exp_ln = block_minabsdiff(offset_l(l), offset_n(n), blk_size_l(l), blk_size_n(n))\n\n            blk_size = blk_size_i(i)*blk_size_l(l)*blk_size_n(n)\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\n\n            ind = ind + 1\n\n            call move_alloc(blk_ind_1, tmp)\n            allocate (blk_ind_1(ind))\n            blk_ind_1(:ind - 1) = tmp; deallocate (tmp)\n\n            call move_alloc(blk_ind_2, tmp)\n            allocate (blk_ind_2(ind))\n            blk_ind_2(:ind - 1) = tmp; deallocate (tmp)\n\n            call move_alloc(blk_ind_3, tmp)\n            allocate (blk_ind_3(ind))\n            blk_ind_3(:ind - 1) = tmp; deallocate (tmp)\n\n            blk_ind_1(ind) = i\n            blk_ind_2(ind) = l\n            blk_ind_3(ind) = n\n         end do\n      end do\n   end do\n\n   call dbcsr_t_reserve_blocks(b_iln, blk_ind_1, blk_ind_2, blk_ind_3)\n   deallocate (blk_ind_1, blk_ind_2, blk_ind_3)\n\n   call dbcsr_t_iterator_start(iter_tensor, b_iln)\n   do while (dbcsr_t_iterator_blocks_left(iter_tensor))\n      call dbcsr_t_iterator_next_block(iter_tensor, blk_ind_3d, blk, blk_size=blk_size_3d, blk_offset=blk_offset_3d)\n      allocate (blk_values_3d(blk_size_3d(1), blk_size_3d(2), blk_size_3d(3)))\n      do i_arr = 1, blk_size_3d(1)\n         do l_arr = 1, blk_size_3d(2)\n            do n_arr = 1, blk_size_3d(3)\n               i = i_arr + blk_offset_3d(1) - 1\n               l = l_arr + blk_offset_3d(2) - 1\n               n = n_arr + blk_offset_3d(3) - 1\n               blk_values_3d(i_arr, l_arr, n_arr) = exp(-1./3*beta*real((i - l)**2 + (i - n)**2 + (l - n)**2))\n            end do\n         end do\n      end do\n      call dbcsr_t_put_block(b_iln, blk_ind_3d, blk_size_3d, blk_values_3d)\n      deallocate (blk_values_3d)\n   end do\n   call dbcsr_t_iterator_stop(iter_tensor)\n\n   call dbcsr_t_filter(b_iln, filter_eps)\n\n! ------ create tensor e[jmn] ------\n   shape_3d = shape_ijklmno([2, 5, 6])\n\n   allocate (dist_1(shape_3d(1)))\n   call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_j, dist_1)\n\n   allocate (dist_2(shape_3d(2)))\n   call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_m, dist_2)\n\n   allocate (dist_3(shape_3d(3)))\n   call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_n, dist_3)\n\n   call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3)\n   deallocate (dist_1, dist_2, dist_3)\n   call dbcsr_t_create(e_jmn, \"e[jm|n]\", dist_tensor, [1, 2], [3], dbcsr_type_real_8, &\n                       blk_size_j, blk_size_m, blk_size_n)\n   call dbcsr_t_distribution_destroy(dist_tensor)\n\n! ------ create tensor f[jmo] ------\n   shape_3d = shape_ijklmno([2, 5, 7])\n\n   allocate (dist_1(shape_3d(1)))\n   call dbcsr_t_default_distvec(shape_3d(1), pdims_3d(1), blk_size_j, dist_1)\n\n   allocate (dist_2(shape_3d(2)))\n   call dbcsr_t_default_distvec(shape_3d(2), pdims_3d(2), blk_size_m, dist_2)\n\n   allocate (dist_3(shape_3d(3)))\n   call dbcsr_t_default_distvec(shape_3d(3), pdims_3d(3), blk_size_o, dist_3)\n\n   call dbcsr_t_distribution_new(dist_tensor, pgrid_3d, dist_1, dist_2, dist_3)\n   deallocate (dist_1, dist_2, dist_3)\n   call dbcsr_t_create(f_jmo, \"f[jm|o]\", dist_tensor, [1, 2], [3], dbcsr_type_real_8, &\n                       blk_size_j, blk_size_m, blk_size_o)\n   call dbcsr_t_distribution_destroy(dist_tensor)\n\n! ------ create and fill tensor f[jmo] ------\n! ------ f(j,m,o) = b(m,o,j) + b(o,m,j) ------\n\n   ! note: order argument of dbcsr_t_copy allows for arbitrary index permutations\n   ! (same convention as fortran reshape intrinsic)\n\n   ! f(j,m,o) = b(m,o,j)\n   call dbcsr_t_copy(b_iln, f_jmo, order=[2, 3, 1])\n\n   ! f(j,m,o) = f(j,m,o) + b(o,m,j)\n   call dbcsr_t_copy(b_iln, f_jmo, order=[3, 2, 1], summation=.true.)\n\n   call dbcsr_t_filter(f_jmo, filter_eps)\n\n! ------ create tensor d[i,j,l,m] ------\n   shape_4d = shape_ijklmno([1, 2, 4, 5])\n\n   pdims_4d(:) = 0\n   call dbcsr_t_pgrid_create(mpi_comm_world, pdims_4d, pgrid_4d)\n\n   allocate (dist_1(shape_4d(1)))\n   call dbcsr_t_default_distvec(shape_4d(1), pdims_4d(1), blk_size_i, dist_1)\n\n   allocate (dist_2(shape_4d(2)))\n   call dbcsr_t_default_distvec(shape_4d(2), pdims_4d(2), blk_size_j, dist_2)\n\n   allocate (dist_3(shape_4d(3)))\n   call dbcsr_t_default_distvec(shape_4d(3), pdims_4d(3), blk_size_l, dist_3)\n\n   allocate (dist_4(shape_4d(4)))\n   call dbcsr_t_default_distvec(shape_4d(4), pdims_4d(4), blk_size_m, dist_4)\n\n   call dbcsr_t_distribution_new(dist_tensor, pgrid_4d, dist_1, dist_2, dist_3, dist_4)\n   deallocate (dist_1, dist_2, dist_3, dist_4)\n\n   call dbcsr_t_create(d_ijlm, \"d[ij|lm]\", dist_tensor, [1, 2], [3, 4], dbcsr_type_real_8, &\n                       blk_size_i, blk_size_j, blk_size_l, blk_size_m)\n   call dbcsr_t_distribution_destroy(dist_tensor)\n\n! ------ write tensors (for debugging purposes only) ------\n   if (verbosity == 3) call dbcsr_t_write_blocks(a_ijk, io_unit_dbcsr, output_unit)\n   if (verbosity == 3) call dbcsr_t_write_blocks(b_iln, io_unit_dbcsr, output_unit)\n   if (verbosity == 3) call dbcsr_t_write_blocks(c_no, io_unit_dbcsr, output_unit)\n\n   if (contract_direct) then\n\n! ------ d(i,j,l,m) = a(i,j,k) x a(l,m,k) ------\n\n      ! performance measurement\n      nflop_sum = 0\n      call cpu_time(t0)\n\n      ! contract_1: indices of first tensor to sum\n      ! notcontract_1: all other indices of first tensor\n      ! contract_2: indices of second tensor to sum (corresponding to contract_1)\n      ! notcontract_2: all other indices of second tensor\n      ! map_1: indices of result tensor corresponding to notcontract_1\n      ! map_2: indices of result tensor corresponding to notcontract_2\n\n      call dbcsr_t_contract(alpha=dbcsr_scalar(1.0_real64), tensor_1=a_ijk, tensor_2=a_lmk, &\n                            beta=dbcsr_scalar(0.0_real64), tensor_3=d_ijlm, &\n                            contract_1=[3], notcontract_1=[1, 2], &\n                            contract_2=[3], notcontract_2=[1, 2], &\n                            map_1=[1, 2], map_2=[3, 4], &\n                            filter_eps=filter_eps, &\n                            unit_nr=io_unit_dbcsr, log_verbose=verbosity >= 2, &\n                            flop=nflop)\n      nflop_sum = nflop_sum + nflop\n\n! ------ e(j,m,n) = d(i,j,l,m) x b(i,l,n) ------\n\n      ! note: tensor d was created with map1_2d, map2_2d arguments inconsistent with\n      ! contract_1 and notcontract_1 since this tensor was created with the previous contraction in mind.\n      ! in this case tensor will be redistributed to the correct layout automatically.\n      call dbcsr_t_contract(dbcsr_scalar(1.0_real64), d_ijlm, b_iln, dbcsr_scalar(0.0_real64), e_jmn, &\n                            contract_1=[1, 3], notcontract_1=[2, 4], &\n                            contract_2=[1, 2], notcontract_2=[3], &\n                            map_1=[1, 2], map_2=[3], &\n                            filter_eps=filter_eps, &\n                            unit_nr=io_unit_dbcsr, log_verbose=verbosity >= 2, &\n                            flop=nflop)\n\n      nflop_sum = nflop_sum + nflop\n\n      ! free memory\n      call dbcsr_t_clear(d_ijlm)\n\n! ------ c(n,o) = c(n,o) + e(j,m,n) x f(j,m,o) ------\n\n      ! summation to c is done by setting beta parameter to 1\n      call dbcsr_t_contract(dbcsr_scalar(1.0_real64), e_jmn, f_jmo, dbcsr_scalar(1.0_real64), c_no, &\n                            contract_1=[1, 2], notcontract_1=[3], &\n                            contract_2=[1, 2], notcontract_2=[3], &\n                            map_1=[1], map_2=[2], &\n                            filter_eps=filter_eps, &\n                            unit_nr=io_unit_dbcsr, log_verbose=verbosity >= 2, &\n                            flop=nflop)\n\n      nflop_sum = nflop_sum + nflop\n\n      ! free memory\n      call dbcsr_t_clear(e_jmn)\n\n      call cpu_time(t1)\n\n! ------ verify result by calculating checksum of c ------\n\n      cs = dbcsr_t_checksum(c_no)\n      if (io_unit > 0) write (io_unit, \"(a, e20.13)\") \"checksum matrix c\", cs\n\n! ------ write contraction result (for debugging purposes only) ------\n      if (verbosity == 3) call dbcsr_t_write_blocks(c_no, io_unit_dbcsr, output_unit)\n\n! ------ output performance measurements ------\n! useful to test strong scaling & overhead of batched contraction\n\n      time = t1 - t0\n      flop_rate = real(nflop_sum, real64)/(1.0e09_real64*time)\n\n      if (io_unit > 0) then\n         write (io_unit, \"(a,t73,es8.2)\") \"performance: total number of flops:\", real(nflop_sum*numnodes)\n         write (io_unit, \"(a,t66,f15.2)\") \"performance: total execution time:\", time\n         write (io_unit, \"(a,t66,f15.2)\") \"performance: contraction flop rate (gflops / mpi rank):\", flop_rate\n      end if\n\n   end if\n\n   if (contract_batched) then\n\n! ------ batched contraction ------\n! reduce memory by contracting over batches (such that intermediate tensors are never fully held in memory)\n! indices i,j,l,m are split into n batches each (these indices belong to largest tensor d[ijlm])\n\n      ! performance measurement\n      nflop_sum = 0\n      call cpu_time(t0)\n\n      call create_batches(blk_size_i, nbatch, start_batch_i, end_batch_i)\n      call create_batches(blk_size_j, nbatch, start_batch_j, end_batch_j)\n      call create_batches(blk_size_l, nbatch, start_batch_l, end_batch_l)\n      call create_batches(blk_size_m, nbatch, start_batch_m, end_batch_m)\n\n      call dbcsr_t_copy_matrix_to_tensor(c_matrix, c_no)\n\n      ! for better performance (avoiding communications) call init routine on all tensors that appear\n      ! in multiple contraction calls with the same bounds:\n      call dbcsr_t_batched_contract_init(c_no)\n\n      ! iterate over index batches\n      do jbatch = 1, nbatch\n         do mbatch = 1, nbatch\n            do ibatch = 1, nbatch\n               call dbcsr_t_batched_contract_init(a_ijk)\n               do lbatch = 1, nbatch\n\n! ------ d(i,j,l,m) = a(i,j,k) x a(l,m,k) ------\n\n                  ! specify bounds corresponding to the contraction index sets\n                  allocate (bounds_2(2, 2), bounds_3(2, 2))\n\n                  ! bounds corresponding to notcontract_1 indices i,j\n                  bounds_2(:, 1) = [start_batch_i(ibatch), end_batch_i(ibatch)]\n                  bounds_2(:, 2) = [start_batch_j(jbatch), end_batch_j(jbatch)]\n\n                  ! bounds corresponding to notcontract_2 indices l,m\n                  bounds_3(:, 1) = [start_batch_l(lbatch), end_batch_l(lbatch)]\n                  bounds_3(:, 2) = [start_batch_m(mbatch), end_batch_m(mbatch)]\n\n                  call dbcsr_t_contract(dbcsr_scalar(1.0_real64), a_ijk, a_lmk, &\n                                        dbcsr_scalar(0.0_real64), d_ijlm, &\n                                        contract_1=[3], notcontract_1=[1, 2], &\n                                        contract_2=[3], notcontract_2=[1, 2], &\n                                        map_1=[1, 2], map_2=[3, 4], &\n                                        bounds_2=bounds_2, &\n                                        bounds_3=bounds_3, &\n                                        filter_eps=filter_eps, &\n                                        unit_nr=io_unit_dbcsr, &\n                                        flop=nflop)\n                  nflop_sum = nflop_sum + nflop\n                  deallocate (bounds_2, bounds_3)\n\n! ------ e(j,m,n) = d(i,j,l,m) x b(i,l,n) ------\n\n                  allocate (bounds_1(2, 2), bounds_2(2, 2))\n\n                  ! bounds corresponding to contract indices i,l\n                  bounds_1(:, 1) = [start_batch_i(ibatch), end_batch_i(ibatch)]\n                  bounds_1(:, 2) = [start_batch_l(lbatch), end_batch_l(lbatch)]\n\n                  ! bounds corresponding to notcontract_1 indices j,m\n                  bounds_2(:, 1) = [start_batch_j(jbatch), end_batch_j(jbatch)]\n                  bounds_2(:, 2) = [start_batch_m(mbatch), end_batch_m(mbatch)]\n\n                  ! note: we sum up contributions from batches i & l, thus beta parameter set to 1\n                  call dbcsr_t_contract(dbcsr_scalar(1.0_real64), d_ijlm, b_iln, dbcsr_scalar(1.0_real64), e_jmn, &\n                                        contract_1=[1, 3], notcontract_1=[2, 4], &\n                                        contract_2=[1, 2], notcontract_2=[3], &\n                                        map_1=[1, 2], map_2=[3], &\n                                        bounds_1=bounds_1, bounds_2=bounds_2, &\n                                        filter_eps=filter_eps, &\n                                        unit_nr=io_unit_dbcsr, &\n                                        flop=nflop)\n\n                  nflop_sum = nflop_sum + nflop\n                  deallocate (bounds_1, bounds_2)\n\n                  ! free memory\n                  call dbcsr_t_clear(d_ijlm)\n\n               end do\n\n               ! complete batched contraction of a\n               call dbcsr_t_batched_contract_finalize(a_ijk)\n            end do\n\n! ------ c(n,o) = c(n,o) + e(j,m,n) x f(j,m,o) ------\n\n            allocate (bounds_1(2, 2))\n\n            ! bounds corresponding to contract indices j,m\n            bounds_1(:, 1) = [start_batch_j(jbatch), end_batch_j(jbatch)]\n            bounds_1(:, 2) = [start_batch_m(mbatch), end_batch_m(mbatch)]\n\n            call dbcsr_t_contract(dbcsr_scalar(1.0_real64), e_jmn, f_jmo, dbcsr_scalar(1.0_real64), c_no, &\n                                  contract_1=[1, 2], notcontract_1=[3], &\n                                  contract_2=[1, 2], notcontract_2=[3], &\n                                  map_1=[1], map_2=[2], &\n                                  bounds_1=bounds_1, &\n                                  filter_eps=filter_eps, &\n                                  unit_nr=io_unit_dbcsr, &\n                                  flop=nflop)\n\n            nflop_sum = nflop_sum + nflop\n            deallocate (bounds_1)\n\n            ! free memory\n            call dbcsr_t_clear(e_jmn)\n         end do\n      end do\n\n      ! complete batched contraction of c\n      call dbcsr_t_batched_contract_finalize(c_no)\n\n      call cpu_time(t1)\n\n! ------ verify result by calculating checksum of c ------\n      cs = dbcsr_t_checksum(c_no)\n      if (io_unit > 0) write (io_unit, \"(a, e20.13)\") \"checksum matrix c\", cs\n\n! ------ output performance measurements ------\n! useful to test strong scaling & overhead of batched contraction\n\n      time = t1 - t0\n      flop_rate = real(nflop_sum, real64)/(1.0e09_real64*time)\n\n      if (io_unit > 0) then\n         write (io_unit, \"(a,t73,es8.2)\") \"performance (batched): total number of flops:\", real(nflop_sum*numnodes)\n         write (io_unit, \"(a,t66,f15.2)\") \"performance (batched): total execution time:\", time\n         write (io_unit, \"(a,t66,f15.2)\") \"performance (batched): contraction flop rate (gflops / mpi rank):\", flop_rate\n      end if\n\n      deallocate (start_batch_i, start_batch_j, start_batch_l, start_batch_m, &\n                  end_batch_i, end_batch_j, end_batch_l, end_batch_m)\n\n   end if\n\n! ------ copy tensor c to matrix c ------\n   call dbcsr_t_copy_tensor_to_matrix(c_no, c_matrix)\n\n! ------ cleanup ------\n\n   call dbcsr_t_pgrid_destroy(pgrid_3d)\n   call dbcsr_t_pgrid_destroy(pgrid_4d)\n\n   call dbcsr_release(c_matrix)\n\n   call dbcsr_t_destroy(c_no)\n   call dbcsr_t_destroy(a_ijk)\n   call dbcsr_t_destroy(e_jmn)\n   call dbcsr_t_destroy(a_lmk)\n   call dbcsr_t_destroy(b_iln)\n   call dbcsr_t_destroy(f_jmo)\n   call dbcsr_t_destroy(d_ijlm)\n\n   deallocate (blk_size_i, blk_size_j, blk_size_k, blk_size_l, blk_size_m, blk_size_n, blk_size_o, &\n               offset_i, offset_j, offset_k, offset_l, offset_n)\n\n   call mpi_comm_free(group, ierr)\n   if (ierr /= 0) stop \"error in mpi_comm_free\"\n\n   ! finalize libdbcsr\n   call dbcsr_finalize_lib()\n\n   ! finalize mpi\n   call mpi_finalize(ierr)\n   if (ierr /= 0) stop \"error in mpi_finalize\"\n\ncontains\n\n   subroutine random_blk_sizes(total_size, nblk, blk_sizes)\n      ! random block sizes such that sum is equal to total_size\n      integer, intent(in) :: total_size\n      integer, intent(out) :: nblk\n      integer, intent(out), allocatable :: blk_sizes(:)\n      integer, allocatable :: tmp(:)\n      integer :: mynode, ierr, blk_sum, bsize\n      real :: rand\n\n      call mpi_comm_rank(mpi_comm_world, mynode, ierr)\n      if (ierr /= 0) stop \"error in mpi_comm_rank\"\n\n      if (mynode == 0) then\n         blk_sum = 0\n         allocate (blk_sizes(0))\n         nblk = 0\n         do while (blk_sum < total_size)\n            call random_number(rand)\n            bsize = int(rand*max_bsize + 1)\n            if (blk_sum + bsize > total_size) bsize = total_size - blk_sum\n            blk_sum = blk_sum + bsize\n            nblk = nblk + 1\n            call move_alloc(blk_sizes, tmp)\n            allocate (blk_sizes(nblk))\n            blk_sizes(1:nblk - 1) = tmp; deallocate (tmp)\n            blk_sizes(nblk) = bsize\n         end do\n      end if\n      call mpi_bcast(nblk, 1, mpi_integer, 0, mpi_comm_world, ierr)\n      if (ierr /= 0) stop \"error in mpi_bcast\"\n      if (mynode /= 0) allocate (blk_sizes(nblk))\n      call mpi_bcast(blk_sizes, nblk, mpi_integer, 0, mpi_comm_world, ierr)\n      if (ierr /= 0) stop \"error in mpi_bcast\"\n\n   end subroutine\n\n   function block_minabsdiff(offset_1, offset_2, size_1, size_2)\n      ! get minimum difference between row and column indices belonging to a block defined by its\n      ! size and offset\n      integer, intent(in) :: offset_1, offset_2, size_1, size_2\n      integer :: block_minabsdiff\n      integer, dimension(2) :: limits_1, limits_2\n\n      limits_1 = offset_1 - 1 + [1, size_1]\n      limits_2 = offset_2 - 1 + [1, size_2]\n\n      if (limits_1(2) < limits_2(1)) then\n         block_minabsdiff = limits_2(1) - limits_1(2)\n      elseif (limits_2(2) < limits_1(1)) then\n         block_minabsdiff = limits_1(1) - limits_2(2)\n      else\n         block_minabsdiff = 0\n      end if\n\n   end function\n\n   subroutine create_batches(blk_sizes, nbatch, start_batch, end_batch)\n      ! create tensor batches: split index at block boundaries such that each batch contains approximately\n      ! the same number of tensor elements.\n      integer, dimension(:), intent(in) :: blk_sizes\n      integer, intent(in) :: nbatch\n      integer, dimension(:), allocatable, intent(out) :: start_batch, end_batch\n      integer :: nel, nel_batch, nblk, blk_sum, batch_sum, iblk\n      integer, dimension(:), allocatable :: tmp\n\n      nblk = size(blk_sizes)\n      nel = sum(blk_sizes)\n      nel_batch = nel/nbatch\n      ibatch = 0\n      blk_sum = 0; batch_sum = nel_batch\n      allocate (end_batch(0:nbatch))\n      allocate (start_batch(1:nbatch))\n      end_batch(0) = 0\n      do iblk = 1, nblk\n         blk_sum = blk_sum + blk_sizes(iblk)\n         if (blk_sum >= batch_sum) then\n            ibatch = ibatch + 1\n            end_batch(ibatch) = blk_sum\n            start_batch(ibatch) = end_batch(ibatch - 1) + 1\n            batch_sum = min(batch_sum + nel_batch, nel)\n         end if\n      end do\n\n      call move_alloc(end_batch, tmp)\n      allocate (end_batch(1:nbatch))\n      end_batch(:) = tmp(1:)\n\n   end subroutine\n\nend program\n"
  },
  {
    "path": "examples/dbcsr_tensor_example_2.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include <algorithm>\n#include <cstdint>\n#include <cstdio>\n#include <cstdlib>\n#include <dbcsr.h>\n#include <iostream>\n#include <mpi.h>\n#include <random>\n#include <string>\n#include <tensors/dbcsr_tensor.h>\n#include <vector>\n\n//-------------------------------------------------------------------------------------------------!\n// Example: tensor contraction (13|2)x(54|21)=(3|45)\n//                             tensor1 x tensor2 = tensor3\n//-------------------------------------------------------------------------------------------------!\n\nstd::vector<int> random_dist(int dist_size, int nbins) {\n  std::vector<int> dist(dist_size);\n\n  for (int i = 0; i < dist_size; i++) dist[i] = i % nbins;\n\n  return dist;\n}\n\nvoid printvec(std::vector<int>& v) {\n  for (auto i : v) {\n    std::cout << i << \" \";\n  }\n  std::cout << '\\n' << std::endl;\n}\n\nvoid fill_random(dbcsr_t_tensor tensor, std::vector<std::vector<int>> nzblocks) {\n  int myrank, mpi_size;\n  int dim = nzblocks.size();\n\n  MPI_Comm_rank(MPI_COMM_WORLD, &myrank);\n  MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);\n\n  std::random_device rd;\n  std::mt19937_64 gen(rd());\n  std::uniform_real_distribution<> dis(-1.0, 1.0);\n\n  if (myrank == 0) std::cout << \"Filling Tensor...\" << std::endl;\n  if (myrank == 0) std::cout << \"Dimension: \" << dim << std::endl;\n\n  int nblocks = nzblocks[0].size();\n  std::vector<std::vector<int>> mynzblocks(dim);\n  std::vector<int> idx(dim);\n\n  for (int i = 0; i != nblocks; ++i) {\n    // make index out of nzblocks\n    for (int j = 0; j != dim; ++j) idx[j] = nzblocks[j][i];\n\n    int proc = -1;\n\n    c_dbcsr_t_get_stored_coordinates(tensor, idx.data(), &proc);\n\n    if (proc == myrank) {\n      for (int j = 0; j != dim; ++j) mynzblocks[j].push_back(idx[j]);\n    }\n  }\n\n  std::vector<int*> dataptr(4, nullptr);\n\n  for (int i = 0; i != dim; ++i) {\n    dataptr[i] = mynzblocks[i].size() == 0 ? nullptr : &mynzblocks[i][0];\n  }\n\n  if (myrank == 0) std::cout << \"Reserving blocks...\" << std::endl;\n\n  if (mynzblocks[0].size() != 0)\n    c_dbcsr_t_reserve_blocks_index(tensor, mynzblocks[0].size(), dataptr[0], dataptr[1], dataptr[2], dataptr[3]);\n\n  auto fill_rand = [&](std::vector<double>& blk) {\n    for (auto& e : blk) {\n      e = dis(gen);\n    }\n  };\n\n  dbcsr_t_iterator iter = nullptr;\n\n  c_dbcsr_t_iterator_start(&iter, tensor);\n\n  std::vector<int> loc_idx(dim);\n  std::vector<int> blk_sizes(dim);\n  std::vector<double> block(1);\n\n  int blk = 0;\n  int blk_proc = 0;\n\n  while (c_dbcsr_t_iterator_blocks_left(iter)) {\n    c_dbcsr_t_iterator_next_block(iter, loc_idx.data(), &blk, &blk_proc, blk_sizes.data(), nullptr);\n\n    int tot = 1;\n    for (int i = 0; i != dim; ++i) {\n      tot *= blk_sizes[i];\n    }\n\n    block.resize(tot);\n\n    fill_rand(block);\n\n    c_dbcsr_t_put_block(tensor, loc_idx.data(), blk_sizes.data(), block.data(), nullptr, nullptr);\n  }\n\n  c_dbcsr_t_iterator_stop(&iter);\n\n  MPI_Barrier(MPI_COMM_WORLD);\n}\n\nint main(int argc, char* argv[]) {\n  MPI_Init(&argc, &argv);\n\n  int mpi_size, mpi_rank;\n  MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);\n  MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);\n\n  c_dbcsr_init_lib(MPI_COMM_WORLD, nullptr);\n\n  dbcsr_t_pgrid pgrid_3d = nullptr;\n  dbcsr_t_pgrid pgrid_4d = nullptr;\n\n  std::vector<int> dims4(4);\n  std::vector<int> dims3(3);\n\n  MPI_Fint fcomm = MPI_Comm_c2f(MPI_COMM_WORLD);\n\n  c_dbcsr_t_pgrid_create(&fcomm, dims3.data(), dims3.size(), &pgrid_3d, nullptr);\n\n  c_dbcsr_t_pgrid_create(&fcomm, dims4.data(), dims4.size(), &pgrid_4d, nullptr);\n\n  if (mpi_rank == 0) {\n    std::cout << \"pgrid3-dimensions:\" << std::endl;\n    printvec(dims3);\n\n    std::cout << \"pgrid4-dimensions:\" << std::endl;\n    printvec(dims4);\n  }\n\n  // block sizes\n  std::vector<int> blk1, blk2, blk3, blk4, blk5;\n  // blk indices of non-zero blocks\n  std::vector<int> nz11, nz12, nz13, nz21, nz22, nz24, nz25, nz33, nz34, nz35;\n\n  blk1 = {3, 9, 12, 1};\n  blk2 = {4, 2, 3, 1, 9, 2, 32, 10, 5, 8, 7};\n  blk3 = {7, 3, 8, 7, 9, 5, 10, 23, 2};\n  blk4 = {8, 1, 4, 13, 6};\n  blk5 = {4, 2, 22};\n\n  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};\n  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};\n  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};\n\n  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};\n  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};\n  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};\n  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};\n\n  nz33 = {1, 3, 4, 4, 4, 5, 5, 7};\n  nz34 = {2, 1, 0, 0, 2, 1, 3, 4};\n  nz35 = {2, 1, 0, 1, 2, 1, 0, 0};\n\n  // (13|2)x(54|21)=(3|45)\n  // distribute blocks\n  std::vector<int> dist11 = random_dist(blk1.size(), dims3[0]);\n  std::vector<int> dist12 = random_dist(blk2.size(), dims3[1]);\n  std::vector<int> dist13 = random_dist(blk3.size(), dims3[2]);\n\n  std::vector<int> dist21 = random_dist(blk1.size(), dims4[0]);\n  std::vector<int> dist22 = random_dist(blk2.size(), dims4[1]);\n  std::vector<int> dist23 = random_dist(blk4.size(), dims4[2]);\n  std::vector<int> dist24 = random_dist(blk5.size(), dims4[3]);\n\n  std::vector<int> dist31 = random_dist(blk3.size(), dims3[0]);\n  std::vector<int> dist32 = random_dist(blk4.size(), dims3[1]);\n  std::vector<int> dist33 = random_dist(blk5.size(), dims3[2]);\n\n  if (mpi_rank == 0) {\n    std::cout << \"dist11:\" << std::endl;\n    printvec(dist11);\n\n    std::cout << \"dist12:\" << std::endl;\n    printvec(dist12);\n\n    std::cout << \"dist13:\" << std::endl;\n    printvec(dist13);\n\n    std::cout << \"dist21:\" << std::endl;\n    printvec(dist21);\n\n    std::cout << \"dist22:\" << std::endl;\n    printvec(dist22);\n\n    std::cout << \"dist23:\" << std::endl;\n    printvec(dist23);\n\n    std::cout << \"dist24:\" << std::endl;\n    printvec(dist24);\n\n    std::cout << \"dist31:\" << std::endl;\n    printvec(dist31);\n\n    std::cout << \"dist32:\" << std::endl;\n    printvec(dist32);\n\n    std::cout << \"dist33:\" << std::endl;\n    printvec(dist33);\n  }\n\n  dbcsr_t_distribution dist1 = nullptr;\n  dbcsr_t_distribution dist2 = nullptr;\n  dbcsr_t_distribution dist3 = nullptr;\n\n  // (13|2)x(54|21)=(3|45)\n  std::vector<int> map11, map12, map21, map22, map31, map32;\n\n  map11 = {0, 2};\n  map12 = {1};\n  map21 = {3, 2};\n  map22 = {1, 0};\n  map31 = {0};\n  map32 = {1, 2};\n\n  if (mpi_rank == 0) std::cout << \"Creating dist objects...\" << '\\n' << std::endl;\n\n  // create distribution objects\n  c_dbcsr_t_distribution_new(\n    &dist1, pgrid_3d, dist11.data(), dist11.size(), dist12.data(), dist12.size(), dist13.data(), dist13.size(), nullptr, 0);\n\n  c_dbcsr_t_distribution_new(&dist2, pgrid_4d, dist21.data(), dist21.size(), dist22.data(), dist22.size(), dist23.data(),\n    dist23.size(), dist24.data(), dist24.size());\n\n  c_dbcsr_t_distribution_new(\n    &dist3, pgrid_3d, dist31.data(), dist31.size(), dist32.data(), dist32.size(), dist33.data(), dist33.size(), nullptr, 0);\n\n  MPI_Barrier(MPI_COMM_WORLD);\n\n  // create tensors\n  // (13|2)x(54|21)=(3|45)\n\n  dbcsr_t_tensor tensor1 = nullptr;\n  dbcsr_t_tensor tensor2 = nullptr;\n  dbcsr_t_tensor tensor3 = nullptr;\n\n  if (mpi_rank == 0) std::cout << \"Creating tensors...\" << std::endl;\n\n  c_dbcsr_t_create_new(&tensor1, \"(13|2)\", dist1, map11.data(), map11.size(), map12.data(), map12.size(), nullptr, blk1.data(),\n    blk1.size(), blk2.data(), blk2.size(), blk3.data(), blk3.size(), nullptr, 0);\n\n  c_dbcsr_t_create_new(&tensor2, \"(54|21)\", dist2, map21.data(), map21.size(), map22.data(), map22.size(), nullptr, blk1.data(),\n    blk1.size(), blk2.data(), blk2.size(), blk4.data(), blk4.size(), blk5.data(), blk5.size());\n\n  c_dbcsr_t_create_new(&tensor3, \"(3|45)\", dist3, map31.data(), map31.size(), map32.data(), map32.size(), nullptr, blk3.data(),\n    blk3.size(), blk4.data(), blk4.size(), blk5.data(), blk5.size(), nullptr, 0);\n\n  MPI_Barrier(MPI_COMM_WORLD);\n\n  // fill the tensors\n\n  if (mpi_rank == 0) std::cout << \"Tensor 1\" << '\\n' << std::endl;\n  fill_random(tensor1, {nz11, nz12, nz13});\n  if (mpi_rank == 0) std::cout << \"Tensor 2\" << '\\n' << std::endl;\n  fill_random(tensor2, {nz21, nz22, nz24, nz25});\n  if (mpi_rank == 0) std::cout << \"Tensor 3\" << '\\n' << std::endl;\n  fill_random(tensor3, {nz33, nz34, nz35});\n\n  // contracting\n\n  // (13|2)x(54|21)=(3|45)\n\n  MPI_Barrier(MPI_COMM_WORLD);\n\n  if (mpi_rank == 0) std::cout << \"Contracting...\" << std::endl;\n\n  // cn : indices to be contracted\n  // noncn : indices not to be contracted\n  // mapn : how nonc indices map to tensor 3\n  std::vector<int> c1, nonc1, c2, nonc2, map1, map2;\n  c1 = {0, 1};\n  nonc1 = {2};\n  c2 = {0, 1};\n  nonc2 = {2, 3};\n  map1 = {0};\n  map2 = {1, 2};\n\n  int unit_nr = -1;\n  if (mpi_rank == 0) unit_nr = 6;\n  bool log_verbose = true;\n\n  // tensor_3(map_1, map_2) := 0.2 * tensor_1(notcontract_1, contract_1)\n  //                                 * tensor_2(contract_2, notcontract_2)\n  //                                 + 0.8 * tensor_3(map_1, map_2)\n\n  c_dbcsr_t_contract_r_dp(0.2, tensor1, tensor2, 0.8, tensor3, c1.data(), c1.size(), nonc1.data(), nonc1.size(), c2.data(),\n    c2.size(), nonc2.data(), nonc2.size(), map1.data(), map1.size(), map2.data(), map2.size(), nullptr, nullptr, nullptr, nullptr,\n    nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &unit_nr, &log_verbose);\n\n  c_dbcsr_t_destroy(&tensor1);\n  c_dbcsr_t_destroy(&tensor2);\n  c_dbcsr_t_destroy(&tensor3);\n\n  c_dbcsr_t_pgrid_destroy(&pgrid_3d, nullptr);\n  c_dbcsr_t_pgrid_destroy(&pgrid_4d, nullptr);\n\n  c_dbcsr_t_distribution_destroy(&dist1);\n  c_dbcsr_t_distribution_destroy(&dist2);\n  c_dbcsr_t_distribution_destroy(&dist3);\n\n  c_dbcsr_finalize_lib();\n\n  MPI_Finalize();\n\n  return 0;\n}\n"
  },
  {
    "path": "src/.gitignore",
    "content": "!/dist/\n"
  },
  {
    "path": "src/CMakeLists.txt",
    "content": "# =================================================================================================\n# INCLUDE\ninclude(fypp-sources)\ninclude(GNUInstallDirs) # required to get a proper LIBDIR variable\ninclude(CMakePackageConfigHelpers)\n\n# =================================================================================================\n# SOURCE FILE LISTS\nadd_fypp_sources(\n  DBCSR_FORTRAN_SRCS\n  dbcsr_api.F\n  acc/cuda/dbcsr_cuda_profiling.F\n  acc/dbcsr_acc_device.F\n  acc/dbcsr_acc_devmem.F\n  acc/dbcsr_acc_event.F\n  acc/dbcsr_acc_hostmem.F\n  acc/dbcsr_acc_init.F\n  acc/dbcsr_acc_stream.F\n  acc/dbcsr_acc_timings.F\n  acc/hip/dbcsr_hip_profiling.F\n  base/dbcsr_base_hooks.F\n  base/dbcsr_kinds.F\n  base/dbcsr_machine.F\n  base/dbcsr_machine_internal.F\n  block/dbcsr_block_access.F\n  block/dbcsr_block_operations.F\n  block/dbcsr_index_operations.F\n  block/dbcsr_iterator_operations.F\n  core/dbcsr_array_types.F\n  core/dbcsr_config.F\n  core/dbcsr_lib.F\n  core/dbcsr_methods.F\n  core/dbcsr_types.F\n  core/dbcsr_dict.F\n  core/dbcsr_error_handling.F\n  core/dbcsr_iter_types.F\n  core/dbcsr_list_callstackentry.F\n  core/dbcsr_list.F\n  core/dbcsr_list_routinereport.F\n  core/dbcsr_list_routinestat.F\n  core/dbcsr_list_timerenv.F\n  core/dbcsr_log_handling.F\n  core/dbcsr_print_messages.F\n  core/dbcsr_timings_base_type.F\n  core/dbcsr_timings.F\n  core/dbcsr_timings_report.F\n  core/dbcsr_timings_types.F\n  data/dbcsr_data_operations.F\n  data/dbcsr_data_methods.F\n  data/dbcsr_data_methods_low.F\n  data/dbcsr_data_types.F\n  data/dbcsr_mem_methods.F\n  data/dbcsr_ptr_util.F\n  dist/dbcsr_dist_methods.F\n  dist/dbcsr_dist_operations.F\n  dist/dbcsr_dist_util.F\n  mm/dbcsr_acc_operations.F\n  mm/dbcsr_mm_3d.F\n  mm/dbcsr_mm_accdrv.F\n  mm/dbcsr_mm_cannon.F\n  mm/dbcsr_mm_common.F\n  mm/dbcsr_mm_csr.F\n  mm/dbcsr_mm_dist_operations.F\n  mm/dbcsr_mm.F\n  mm/dbcsr_mm_hostdrv.F\n  mm/dbcsr_mm_multrec.F\n  mm/dbcsr_mm_sched.F\n  mm/dbcsr_mm_types.F\n  mm/dbcsr_multiply_api.F\n  mpi/dbcsr_mp_methods.F\n  mpi/dbcsr_mp_operations.F\n  mpi/dbcsr_mpiwrap.F\n  ops/dbcsr_csr_conversions.F\n  ops/dbcsr_io.F\n  ops/dbcsr_operations.F\n  ops/dbcsr_test_methods.F\n  ops/dbcsr_tests.F\n  ops/dbcsr_transformations.F\n  tas/dbcsr_tas_base.F\n  tas/dbcsr_tas_global.F\n  tas/dbcsr_tas_io.F\n  tas/dbcsr_tas_mm.F\n  tas/dbcsr_tas_reshape_ops.F\n  tas/dbcsr_tas_split.F\n  tas/dbcsr_tas_test.F\n  tas/dbcsr_tas_types.F\n  tas/dbcsr_tas_util.F\n  tensors/dbcsr_allocate_wrap.F\n  tensors/dbcsr_array_list_methods.F\n  tensors/dbcsr_tensor_api.F\n  tensors/dbcsr_tensor_block.F\n  tensors/dbcsr_tensor.F\n  tensors/dbcsr_tensor_index.F\n  tensors/dbcsr_tensor_io.F\n  tensors/dbcsr_tensor_reshape.F\n  tensors/dbcsr_tensor_split.F\n  tensors/dbcsr_tensor_test.F\n  tensors/dbcsr_tensor_types.F\n  utils/dbcsr_array_sort.F\n  utils/dbcsr_blas_operations.F\n  utils/dbcsr_btree.F\n  utils/dbcsr_files.F\n  utils/dbcsr_min_heap.F\n  utils/dbcsr_string_utilities.F\n  utils/dbcsr_toollib.F\n  work/dbcsr_work_operations.F)\n\nset(DBCSR_HIP_AND_CUDA_SRCS\n    acc/libsmm_acc/libsmm_acc_benchmark.cpp\n    acc/libsmm_acc/libsmm_acc_init.cpp\n    acc/libsmm_acc/libsmm_acc.cpp\n    acc/cuda_hip/calculate_norms.cpp\n    acc/cuda_hip/acc_blas.cpp\n    acc/cuda_hip/acc_dev.cpp\n    acc/cuda_hip/acc_error.cpp\n    acc/cuda_hip/acc_event.cpp\n    acc/cuda_hip/acc_utils.cpp\n    acc/cuda_hip/acc_init.cpp\n    acc/cuda_hip/acc_mem.cpp\n    acc/cuda_hip/acc_stream.cpp)\n\nset(DBCSR_CUDA_SRCS ${DBCSR_HIP_AND_CUDA_SRCS} acc/cuda/acc_cuda.cpp\n                    acc/cuda/dbcsr_cuda_nvtx_cu.cpp)\n\nset(DBCSR_HIP_SRCS ${DBCSR_HIP_AND_CUDA_SRCS} acc/hip/acc_hip.cpp)\n\nif (USE_ACCEL MATCHES \"hip\")\n  set_source_files_properties(acc/cuda_hip/calculate_norms.cpp\n                              PROPERTIES LANGUAGE HIP)\n  set_source_files_properties(acc/cuda_hip/calculate_norms.cpp\n                              PROPERTIES COMPILE_FLAGS \"-fPIE\")\nelseif (USE_ACCEL MATCHES \"cuda\")\n  set_source_files_properties(acc/cuda_hip/calculate_norms.cpp\n                              PROPERTIES LANGUAGE CUDA)\n  set_source_files_properties(acc/cuda_hip/calculate_norms.cpp\n                              PROPERTIES COMPILE_FLAGS \"--x cu\")\nendif ()\n\nset(DBCSR_OPENCL_SRCS\n    acc/opencl/smm/opencl_libsmm.c acc/opencl/acc_opencl.c\n    acc/opencl/acc_opencl_event.c acc/opencl/acc_opencl_mem.c\n    acc/opencl/acc_opencl_stream.c)\n\n# set the __SHORT_FILE__ per file for dbcsr sources\nforeach (dbcsr_src ${DBCSR_FORTRAN_SRCS})\n  # add_fypp_sources returns a path in the current binary dir\n  get_filename_component(short_file \"${dbcsr_src}\" NAME)\n  set_source_files_properties(\n    ${dbcsr_src} PROPERTIES COMPILE_DEFINITIONS __SHORT_FILE__=\"${short_file}\")\nendforeach ()\n\n# override -Werror for certain translation units\nif ((CMAKE_Fortran_COMPILER_ID STREQUAL \"GNU\")\n    AND (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10))\n  set_source_files_properties(mpi/dbcsr_mpiwrap.F PROPERTIES COMPILE_FLAGS\n                                                             -Wno-error)\nendif ()\n\nset(DBCSR_SRCS ${DBCSR_FORTRAN_SRCS})\n\nif (USE_ACCEL MATCHES \"cuda\")\n  set(DBCSR_SRCS ${DBCSR_SRCS} ${DBCSR_CUDA_SRCS})\nelseif (USE_ACCEL MATCHES \"hip\")\n  set(DBCSR_SRCS ${DBCSR_SRCS} ${DBCSR_HIP_SRCS})\nelseif (USE_ACCEL MATCHES \"opencl\")\n  set(DBCSR_SRCS ${DBCSR_SRCS} ${DBCSR_OPENCL_SRCS})\nendif ()\n\n# =================================================================================================\n# DBCSR LIBRARY\nadd_library(dbcsr ${DBCSR_SRCS})\n\n# -fPIC can also be used in the static case. Addresses are resolved during the\n# linking process\nset_target_properties(\n  dbcsr\n  PROPERTIES VERSION ${dbcsr_VERSION}\n             SOVERSION ${dbcsr_APIVERSION}\n             POSITION_INDEPENDENT_CODE ON)\n\nif (USE_ACCEL MATCHES \"hip\")\n  set_target_properties(dbcsr PROPERTIES HIP_ARCHITECTURES \"${ACC_ARCH_NUMBER}\")\nelseif (USE_ACCEL MATCHES \"cuda\")\n  set_target_properties(dbcsr PROPERTIES CUDA_ARCHITECTURES\n                                         \"${ACC_ARCH_NUMBER}\")\nendif ()\n\nif (USE_SMM MATCHES \"libxsmm\" OR (USE_SMM MATCHES \"auto\" AND LIBXSMM_FOUND))\n  target_compile_definitions(dbcsr PRIVATE __LIBXSMM)\n  target_link_directories(dbcsr PUBLIC ${LIBXSMM_LIBRARY_DIRS})\n  if (USE_OPENMP)\n    target_link_libraries(dbcsr PRIVATE PkgConfig::LIBXSMMEXT)\n  endif ()\n  target_link_libraries(dbcsr PRIVATE PkgConfig::LIBXSMM)\n  target_link_libraries(dbcsr PRIVATE ${BLAS_LIBRARIES})\nendif ()\n\nif (BLAS_LIBRARIES MATCHES \"mkl_\")\n  target_compile_definitions(dbcsr PRIVATE __MKL)\nendif ()\n\nif (APPLE)\n  # fix /proc/self/statm can not be opened on macOS\n  target_compile_definitions(dbcsr PRIVATE __NO_STATM_ACCESS)\n\n  if (BLAS_LIBRARIES MATCHES \"Accelerate\")\n    target_compile_definitions(dbcsr PRIVATE __ACCELERATE)\n  endif ()\nendif ()\n\n# set -DNDEBUG for Release builds\ntarget_compile_definitions(dbcsr PRIVATE $<$<CONFIG:Release>:NDEBUG>)\n\ntarget_link_libraries(dbcsr PRIVATE ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES})\ntarget_include_directories(\n  dbcsr PRIVATE base) # do not export those includes, but some srcs do an\n                      # unprefixed include\n# make sure dependencies of dbcsr find the dbcsr_api.mod file plus some files\n# they usually include:\ntarget_include_directories(\n  dbcsr\n  PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>\n         $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>\n         $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)\ntarget_compile_definitions(dbcsr PRIVATE __STATM_TOTAL)\nset_target_properties(dbcsr PROPERTIES LINKER_LANGUAGE Fortran)\n\nif (MPI_FOUND)\n  # once built, a user of the dbcsr library can not influence anything anymore\n  # by setting those flags:\n  target_compile_definitions(dbcsr PRIVATE __parallel)\n\n  # If requested, use the MPI_F08 module\n  if (USE_MPI_F08)\n    target_compile_definitions(dbcsr PRIVATE __USE_MPI_F08)\n  endif ()\n\n  # Instead of resetting the compiler for MPI, we are adding the compiler flags\n  # otherwise added by the mpifort-wrapper directly; based on hints from:\n  # https://cmake.org/pipermail/cmake/2012-June/050991.html Here we assume that\n  # the MPI implementation found uses the same compiler as the Fortran compiler\n  # we found prior. Otherwise we might be adding incompatible compiler flags at\n  # this point. when built against MPI, a dbcsr consumer has to specify the MPI\n  # flags as well, therefore: PUBLIC\n  target_link_libraries(dbcsr PUBLIC MPI::MPI_Fortran)\n\n  # Workaround https://gitlab.kitware.com/cmake/cmake/-/issues/27231\n  get_target_property(opts MPI::MPI_Fortran INTERFACE_COMPILE_OPTIONS)\n  set_target_properties(\n    MPI::MPI_Fortran PROPERTIES INTERFACE_COMPILE_OPTIONS\n                                \"$<$<COMPILE_LANGUAGE:Fortran>:${opts}>\")\n  unset(opts)\n\nendif ()\n\ntarget_link_libraries(\n  dbcsr\n  PRIVATE $<$<BOOL:${USE_OPENMP}>:OpenMP::OpenMP_C>\n          $<$<BOOL:${USE_OPENMP}>:OpenMP::OpenMP_CXX>\n          $<$<BOOL:${USE_OPENMP}>:OpenMP::OpenMP_Fortran>)\n\n# todo, make this a bit better with opencl.\nif (USE_ACCEL MATCHES \"cuda|hip\")\n  add_subdirectory(acc/libsmm_acc)\nendif ()\n\nif (USE_ACCEL MATCHES \"opencl\")\n  add_subdirectory(acc/opencl/smm)\nendif ()\n\nif (USE_ACCEL)\n  target_compile_definitions(\n    dbcsr\n    PRIVATE __DBCSR_ACC\n            $<$<STREQUAL:${USE_ACCEL},cuda>:__CUDA>\n            $<$<STREQUAL:${USE_ACCEL},opencl>:__OPENCL>\n            $<$<STREQUAL:${USE_ACCEL},cuda>:ARCH_NUMBER=${ACC_ARCH_NUMBER}>\n            $<$<STREQUAL:${USE_ACCEL},hip>:__HIP>\n            $<$<STREQUAL:${USE_ACCEL},hip>:ARCH_NUMBER=${ACC_ARCH_NUMBER}>\n            $<$<BOOL:${WITH_CUDA_PROFILING}>:__CUDA_PROFILING>\n            $<$<BOOL:${WITH_HIP_PROFILING}>:__HIP_PROFILING>)\n\n  target_link_libraries(\n    dbcsr\n    PRIVATE $<$<STREQUAL:${USE_ACCEL},cuda>:CUDA::cudart>\n            $<$<STREQUAL:${USE_ACCEL},cuda>:CUDA::cuda_driver>\n            $<$<STREQUAL:${USE_ACCEL},cuda>:CUDA::cublas>\n            $<$<STREQUAL:${USE_ACCEL},cuda>:CUDA::nvrtc>\n            $<$<BOOL:${WITH_CUDA_PROFILING}>:CUDA::nvToolsExt>\n            $<$<STREQUAL:${USE_ACCEL},hip>:roc::hipblas>\n            $<$<STREQUAL:${USE_ACCEL},hip>:hiprtc::hiprtc>\n            $<$<STREQUAL:${USE_ACCEL},hip>:hip::host>\n            $<$<BOOL:${WITH_HIP_PROFILING}>:roctx64>\n            $<$<BOOL:${WITH_HIP_PROFILING}>:roctracer64>\n            $<$<STREQUAL:${USE_ACCEL},opencl>:OpenCL::OpenCL>)\nendif ()\n\n# =================================================================================================\n# DBCSR's C API\nif (WITH_C_API)\n  # Build the C API as a separate library\n  add_fypp_sources(DBCSR_C_SRCS dbcsr.h dbcsr_api_c.F\n                   tensors/dbcsr_tensor_api_c.F tensors/dbcsr_tensor.h)\n\n  add_library(dbcsr_c ${DBCSR_C_SRCS})\n  set_target_properties(dbcsr_c PROPERTIES LINKER_LANGUAGE Fortran)\n\n  set_target_properties(\n    dbcsr_c\n    PROPERTIES VERSION ${dbcsr_VERSION}\n               SOVERSION ${dbcsr_APIVERSION}\n               POSITION_INDEPENDENT_CODE ON)\n\n  target_link_libraries(dbcsr_c PRIVATE dbcsr)\n  target_link_libraries(dbcsr_c PUBLIC MPI::MPI_C) # the C API always needs MPI\n  target_include_directories(\n    dbcsr_c\n    PUBLIC\n      $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> # change order so compiler\n                                                     # first checks binary\n                                                     # directory\n      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>\n      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)\nendif ()\n\n# =================================================================================================\n# INSTALL\n\nset(config_install_dir \"${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}\")\nset(config_namespace \"DBCSR::\")\n\n# Install targets\ninstall(\n  TARGETS dbcsr\n  EXPORT DBCSRTargets\n  LIBRARY DESTINATION \"${CMAKE_INSTALL_LIBDIR}\"\n  ARCHIVE DESTINATION \"${CMAKE_INSTALL_LIBDIR}\")\n# See https://gitlab.kitware.com/cmake/cmake/-/issues/19608\n# CMAKE_INSTALL_Fortran_MODULES may not be an \"official\" variable\nif (NOT CMAKE_INSTALL_Fortran_MODULES)\n  set(CMAKE_INSTALL_Fortran_MODULES \"${CMAKE_INSTALL_INCLUDEDIR}\")\nendif ()\ninstall(FILES \"${CMAKE_CURRENT_BINARY_DIR}/dbcsr_api.mod\"\n        DESTINATION \"${CMAKE_INSTALL_Fortran_MODULES}\")\ninstall(FILES \"${CMAKE_CURRENT_BINARY_DIR}/dbcsr_tensor_api.mod\"\n        DESTINATION \"${CMAKE_INSTALL_Fortran_MODULES}\")\n\nif (WITH_C_API)\n  install(\n    TARGETS dbcsr_c\n    EXPORT DBCSRTargets\n    COMPONENT C\n    LIBRARY DESTINATION \"${CMAKE_INSTALL_LIBDIR}\"\n    ARCHIVE DESTINATION \"${CMAKE_INSTALL_LIBDIR}\")\n  install(\n    FILES \"${CMAKE_CURRENT_BINARY_DIR}/dbcsr.h\"\n          \"${CMAKE_CURRENT_BINARY_DIR}/tensors/dbcsr_tensor.h\"\n    COMPONENT C\n    DESTINATION \"${CMAKE_INSTALL_INCLUDEDIR}\")\nendif ()\n\nif (USE_ACCEL MATCHES \"opencl\")\n  foreach (FILE ${DBCSR_ACC_HEADER})\n    cmake_path(GET FILE PARENT_PATH SUBDIR)\n    install(FILES \"${FILE}\" DESTINATION \"${CMAKE_INSTALL_INCLUDEDIR}/${SUBDIR}\")\n  endforeach ()\n  install(PROGRAMS \"${DBCSR_OPENCL_SCRIPT}\"\n          DESTINATION \"${CMAKE_INSTALL_DATADIR}/opencl\")\n  foreach (FILE ${DBCSR_OPENCL_COMMON})\n    cmake_path(GET FILE PARENT_PATH SUBDIR)\n    install(FILES \"${FILE}\" DESTINATION \"${CMAKE_INSTALL_INCLUDEDIR}/${SUBDIR}\")\n  endforeach ()\nendif ()\n\nconfigure_package_config_file(\n  cmake/DBCSRConfig.cmake.in \"${CMAKE_CURRENT_BINARY_DIR}/DBCSRConfig.cmake\"\n  INSTALL_DESTINATION \"${config_install_dir}\")\nwrite_basic_package_version_file(\n  \"${CMAKE_CURRENT_BINARY_DIR}/DBCSRConfigVersion.cmake\"\n  VERSION \"${dbcsr_VERSION}\"\n  COMPATIBILITY SameMajorVersion)\ninstall(\n  EXPORT DBCSRTargets\n  NAMESPACE \"${config_namespace}\"\n  DESTINATION \"${config_install_dir}\")\ninstall(FILES ${CMAKE_CURRENT_BINARY_DIR}/DBCSRConfig.cmake\n              ${CMAKE_CURRENT_BINARY_DIR}/DBCSRConfigVersion.cmake\n        DESTINATION ${config_install_dir})\n"
  },
  {
    "path": "src/PACKAGE",
    "content": "{\n\"description\": \"Distributed Block Compressed Sparse Row, A sparse matrix library\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"base\", \"mpi\", \"data\", \"dist\",\n\"block\", \"ops\", \"mm\", \"core\", \"utils\", \"work\"],\n\"public\": [\"*.F\"]\n}\n"
  },
  {
    "path": "src/acc/PACKAGE",
    "content": "{\n\"description\": \"Generic accelerator API\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../base\", \"../core\", \"cuda\", \"hip\", \"opencl\", \"libsmm_acc\"]\n}\n"
  },
  {
    "path": "src/acc/README.md",
    "content": "# ACCelerator Interface\n\n## Backends\n\nThe 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.\n\nThe 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`).\n\n## Miniapp\n\nThere 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.\n\n```bash\ngit clone -b main https://github.com/libxsmm/libxsmm.git\ncd libxsmm\nmake GNU=1 -j\n```\n\nTo 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).\n\n```bash\ngit clone https://github.com/cp2k/dbcsr.git\ncd dbcsr/src/acc/opencl\nmake\n```\n\n**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).\n\nThe 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:\n\n```bash\n$ OMP_PROC_BIND=TRUE ./acc_bench 3 30000 23 23 23\nActivated device0 (ndevices=8)\nacc_bench 3 30000 23 23 23 1875 18750 18750\ntypename (id=3): double\ncopy-in (2058 MB): 92 ms 21.9 GB/s\ntranspose: 0.23 ms 3187.9 GFLOPS/s\ndevice: 0.18 ms 4122.8 GFLOPS/s\nhost: 0.57 ms 1278.1 GFLOPS/s\ndiff.cur: 3.20547e-15 (|36.6983-36.6983|=5.47118e-13)\n```\n\nFor timing, comparison (host code), and validation, LIBXSMM is required. The driver exercises the respective backend. For example with the CUDA backend:\n\n```bash\ncd src/acc/cuda\nmake WITH_GPU=P100\n../acc_bench\n```\n\nFor the OpenCL backend:\n\n```bash\ncd src/acc/opencl\nmake\n../acc_bench\n```\n\nIn 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).\n"
  },
  {
    "path": "src/acc/acc.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#ifndef DBCSR_ACC_H\n#define DBCSR_ACC_H\n\n#include <stddef.h>\n\n#define DBCSR_STRINGIFY_AUX(SYMBOL) #SYMBOL\n#define DBCSR_STRINGIFY(SYMBOL) DBCSR_STRINGIFY_AUX(SYMBOL)\n#define DBCSR_CONCATENATE2(A, B) A##B\n#define DBCSR_CONCATENATE(A, B) DBCSR_CONCATENATE2(A, B)\n\n/** used to mark variables used */\n#define DBCSR_MARK_USED(x) (void)(x)\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/** types */\ntypedef int c_dbcsr_acc_bool_t;\n\n/** initialization and finalization */\nint c_dbcsr_acc_init(void);\nint c_dbcsr_acc_finalize(void);\nvoid c_dbcsr_acc_clear_errors(void);\n\n/** devices */\nint c_dbcsr_acc_get_ndevices(int* ndevices);\nint c_dbcsr_acc_set_active_device(int device_id);\nint c_dbcsr_acc_device_synchronize(void);\n\n/** streams */\nint c_dbcsr_acc_stream_priority_range(int* least, int* greatest);\nint c_dbcsr_acc_stream_create(void** stream_p, const char* name,\n  /** lower number is higher priority */\n  int priority);\nint c_dbcsr_acc_stream_destroy(void* stream);\nint c_dbcsr_acc_stream_sync(void* stream);\nint c_dbcsr_acc_stream_wait_event(void* stream, void* event);\n\n/** events */\nint c_dbcsr_acc_event_create(void** event_p);\nint c_dbcsr_acc_event_destroy(void* event);\nint c_dbcsr_acc_event_record(void* event, void* stream);\nint c_dbcsr_acc_event_query(void* event, c_dbcsr_acc_bool_t* has_occurred);\nint c_dbcsr_acc_event_synchronize(void* event);\n\n/** memory */\nint c_dbcsr_acc_dev_mem_allocate(void** dev_mem, size_t nbytes);\nint c_dbcsr_acc_dev_mem_deallocate(void* dev_mem);\nint c_dbcsr_acc_dev_mem_set_ptr(void** dev_mem, void* other, size_t lb);\nint c_dbcsr_acc_host_mem_allocate(void** host_mem, size_t nbytes, void* stream);\nint c_dbcsr_acc_host_mem_deallocate(void* host_mem, void* stream);\nint c_dbcsr_acc_memcpy_h2d(const void* host_mem, void* dev_mem, size_t nbytes, void* stream);\nint c_dbcsr_acc_memcpy_d2h(const void* dev_mem, void* host_mem, size_t nbytes, void* stream);\nint c_dbcsr_acc_memcpy_d2d(const void* devmem_src, void* devmem_dst, size_t nbytes, void* stream);\nint c_dbcsr_acc_memset_zero(void* dev_mem, size_t offset, size_t nbytes, void* stream);\nint c_dbcsr_acc_dev_mem_info(size_t* mem_free, size_t* mem_total);\n\nvoid c_dbcsr_timeset(const char** routineN, const int* routineN_len, int* handle);\nvoid c_dbcsr_timestop(const int* handle);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif /*DBCSR_ACC_H*/\n"
  },
  {
    "path": "src/acc/acc_bench.c",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n#include \"acc_libsmm.h\"\n#include \"acc_bench.h\"\n#include <string.h>\n#include <stdio.h>\n#include <math.h>\n\n#if defined(__LIBXSMM)\n#  if defined(LIBXSMM_DEFAULT_CONFIG)\n#    include <libxsmm_source.h>\n#  else\n#    include <libxsmm.h>\n#    if !defined(LIBXSMM_TIMER_H)\n#      include <utils/libxsmm_timer.h>\n#    endif\n#    if !defined(LIBXSMM_SYNC_H)\n#      include <libxsmm_sync.h>\n#    endif\n#  endif\n#  if defined(LIBXSMM_VERSION_NUMBER) && LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER\n#    define USE_LIBXSMM\n#  endif\n#endif\n\n#if defined(USE_LIBXSMM)\n#  if defined(_OPENMP)\n#    define ACC_BENCH_USEOMP(FUNC) LIBXSMM_USEOMP(FUNC)\n#  else\n#    define ACC_BENCH_USEOMP(FUNC) (FUNC)\n#  endif\n#  define ACC_BENCH_GEMM_BATCH(IPREC, OPREC, TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, STRIDE_A, B, LDB, STRIDE_B, BETA, C, LDC, \\\n    STRIDE_C, INDEX_STRIDE, INDEX_BASE, BATCHSIZE) \\\n    ACC_BENCH_USEOMP(libxsmm_gemm_batch) \\\n    (IPREC, OPREC, TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, STRIDE_A, B, LDB, STRIDE_B, BETA, C, LDC, STRIDE_C, INDEX_STRIDE, \\\n      INDEX_BASE, BATCHSIZE)\n#  define PRINTF(...) \\\n    do { \\\n      const size_t print_buffer_size = sizeof(print_buffer) - print_offset; \\\n      const int print_buffer_result = LIBXSMM_SNPRINTF(print_buffer + print_offset, print_buffer_size, __VA_ARGS__); \\\n      assert(0 <= print_buffer_result && print_buffer_result < (int)print_buffer_size); \\\n      print_offset += print_buffer_result; \\\n    } while (0)\n#else\n#  define PRINTF(...) printf(__VA_ARGS__)\n#endif\n\n#if !defined(DEDUPLICATE) && 0\n#  define DEDUPLICATE\n#endif\n#if !defined(ELEM_TYPE)\n#  define ELEM_TYPE double\n#endif\n#if !defined(ALIGNMENT)\n#  define ALIGNMENT 64\n#endif\n#if !defined(BATCHGRAIN)\n#  define BATCHGRAIN 100\n#endif\n#if !defined(BATCHSIZE)\n#  define BATCHSIZE (300 * BATCHGRAIN)\n#endif\n#if !defined(NRAND)\n#  define NRAND BATCHSIZE\n#endif\n#if !defined(NREPEAT)\n#  define NREPEAT 3\n#endif\n#if !defined(XREPEAT)\n#  define XREPEAT 66\n#endif\n#if !defined(TRANSPOSE)\n#  define TRANSPOSE\n#endif\n#if !defined(VALIDATE)\n#  define VALIDATE\n#endif\n#if !defined(WARMUP)\n#  define WARMUP 2\n#endif\n#if !defined(DELIMS)\n#  define DELIMS \",;:|/\\n\\t \"\n#endif\n\n#define ACC_BENCH_SMM_EPSILON(T) DBCSR_CONCATENATE(ACC_BENCH_SMM_EPSILON_, T)\n#define ACC_BENCH_SMM_EPSILON_double 1E-3\n#define ACC_BENCH_SMM_EPSILON_float 2E-3\n\n#define ROUNDUP2(N, NPOT) ((((unsigned long long)N) + ((NPOT) - 1)) & ~((NPOT) - 1))\n#define CHECK(EXPR, RPTR, VALUE) \\\n  do { \\\n    if (NULL != ((const void*)(RPTR))) { \\\n      if (0 == *((const int*)(RPTR)) || (0 > *((const int*)(RPTR)) && 0 == (VALUE))) { \\\n        const int check_r_ = (EXPR); \\\n        if (0 != check_r_) { \\\n          *((int*)(RPTR)) = check_r_; \\\n          assert(0 > check_r_ && 0 == (VALUE)); \\\n        } \\\n      } \\\n    } \\\n    else { \\\n      (EXPR); \\\n    } \\\n  } while (0)\n\n\nstatic void parse_params(int argc, char* argv[], FILE** file, const char** snr, const char** sss, const char** ssm,\n  const char** ssn, const char** ssk, const char** snc, const char** sna, const char** snb) {\n  char buffer[1024], *args[8];\n  int i;\n  assert(file && snr && sss && ssm && ssn && ssk && snc && sna && snb);\n  --argc;\n  if (NULL == *file) *file = (1 <= argc ? fopen(argv[1], \"r\") : NULL);\n  if (NULL == *file) {\n    for (i = 0; i < argc; ++i) args[i] = argv[i + 1];\n  }\n  else { /* input file is specified */\n    argc = 0;\n    if (NULL != fgets(buffer, sizeof(buffer), *file)) {\n      char* arg = strtok(buffer, DELIMS);\n      while (NULL == arg && NULL != fgets(buffer, sizeof(buffer), *file)) {\n        arg = strtok(buffer, DELIMS);\n      }\n      for (; NULL != arg; arg = strtok(NULL, DELIMS)) {\n        if (argc * sizeof(*args) < sizeof(args)) args[argc++] = arg;\n        else { /* malformed command-line */\n          fclose(*file);\n          *file = NULL;\n          break;\n        }\n      }\n    }\n    else {\n      fclose(*file);\n      *file = NULL;\n    }\n  }\n  i = 0;\n  if (i < argc) {\n    const char* x1 = strchr(args[i], 'x');\n    const char* x2 = (NULL == x1 ? NULL : strchr(x1 + 1, 'x'));\n    if (NULL == x1 || NULL == x2) { /* accept \"M N K\" */\n      *snr = args[i++];\n      *sss = (i < argc ? args[i++] : NULL);\n      if (i < argc) {\n        x1 = strchr(args[i], 'x');\n        x2 = (NULL == x1 ? NULL : strchr(x1 + 1, 'x'));\n        *ssm = args[i++];\n        if (NULL == x1 || NULL == x2) { /* accept \"M N K\" */\n          *ssn = (i < argc ? args[i++] : NULL);\n          *ssk = (i < argc ? args[i++] : NULL);\n        }\n        else { /* accept \"MxNxK\" */\n          *ssn = x1 + 1;\n          *ssk = x2 + 1;\n        }\n      }\n    }\n    else { /* accept \"MxNxK\" */\n      *ssm = args[i++];\n      *ssn = x1 + 1;\n      *ssk = x2 + 1;\n    }\n  }\n  *snc = (i < argc ? args[i++] : NULL);\n  *sna = (i < argc ? args[i++] : NULL);\n  *snb = (i < argc ? args[i++] : NULL);\n}\n\n\nstatic size_t parse_nbytes(const char* nbytes, size_t* nelems) {\n  size_t result = 0;\n  if (NULL != nelems) *nelems = 0;\n  if (NULL != nbytes && '\\0' != *nbytes) {\n    size_t u = strlen(nbytes) - 1;\n    const char units[] = \"kmgKMG\", *const unit = strchr(units, nbytes[u]);\n    char* end = NULL;\n    /* take parsed value with increased type-width */\n    const long long int ibytes = strtol(nbytes, &end, 10);\n    if (NULL != end) { /* no obvious error */\n      /* value is given without unit */\n      if (NULL == unit && '\\0' == *end) {\n        result = (size_t)ibytes;\n        if (NULL != nelems) *nelems = result;\n      }\n      /* must match allowed set of units */\n      else if (NULL != unit && *unit == *end) {\n        result = (size_t)ibytes;\n        if (NULL != nelems) *nelems = result;\n        u = (unit - units) % 3 + 1;\n        result <<= u * 10;\n      }\n    }\n  }\n  return result;\n}\n\n\nint main(int argc, char* argv[]) {\n  const char* const env_check = getenv(\"CHECK\");\n  const double check = (NULL == env_check ? -1 : fabs(atof(env_check) * ACC_BENCH_SMM_EPSILON(ELEM_TYPE)));\n#if defined(WARMUP) && (0 < WARMUP) && !defined(_DEBUG)\n  const int warmup = MAX(WARMUP, 2) / 2 * 2;\n#else\n  const int warmup = 0;\n#endif\n  int result = c_dbcsr_acc_init(), *rnd = NULL, nok = 0, m = 0, n = 0, k = 0, i;\n  const char *snr = NULL, *sss = NULL;\n  const char *ssm = NULL, *ssn = NULL, *ssk = NULL;\n  const char *snc = NULL, *sna = NULL, *snb = NULL;\n  FILE* file = NULL;\n#if !defined(__OFFLOAD_UNIFIED_MEMORY) || !defined(DEDUPLICATE)\n  const char* const env_nrepeat_h2d = getenv(\"NREPEAT_H2D\");\n  const int nrepeat_h2d = (NULL == env_nrepeat_h2d ? 1 : MAX(atoi(env_nrepeat_h2d), 1));\n#endif\n#if defined(USE_LIBXSMM)\n  double perf_h2d = 0, perf_dev = 0, perf_hst = 0;\n  const char* const env_check_h2d = getenv(\"CHECK_H2D\");\n  const char* const env_check_dev = getenv(\"CHECK_DEV\");\n  const char* const env_check_hst = getenv(\"CHECK_HST\");\n#  if defined(__OPENCL)\n  const char* const env_nrepeat_smm = getenv(\"NREPEAT_SMM\");\n  const int nrepeat_smm = (NULL == env_nrepeat_smm ? 1 : MAX(atoi(env_nrepeat_smm), 1));\n#  else\n  const int nrepeat_smm = 1;\n#  endif\n#  if defined(VALIDATE)\n  double maxdiff = 0;\n#  else\n  DBCSR_MARK_USED(check);\n#  endif\n#else\n  DBCSR_MARK_USED(check);\n#endif\n  CHECK(libsmm_acc_init(), &result, check); /* note: libsmm_acc_init() may imply acc_init() */\n  if (EXIT_SUCCESS == result) {\n    int ndevices = 0;\n    result = c_dbcsr_acc_get_ndevices(&ndevices);\n    if (EXIT_SUCCESS == result && 0 < ndevices) {\n      const char* const env_device = getenv(\"DEVICE\");\n      const char* const env_rank = (NULL != getenv(\"PMI_RANK\") ? getenv(\"PMI_RANK\") : getenv(\"OMPI_COMM_WORLD_LOCAL_RANK\"));\n      const int rank = (NULL != env_rank ? atoi(env_rank) : -1);\n      int device = ((NULL == env_device || '\\0' == *env_device) ? 0 : atoi(env_device));\n      device = ((0 <= device && device < ndevices) ? (0 <= rank ? (rank % ndevices) : device) : -1);\n      result = c_dbcsr_acc_set_active_device(device);\n      if (EXIT_SUCCESS == result) {\n        printf(\"Activated device%i (ndevices=%i)\\n\", device, ndevices);\n      }\n      else {\n        fprintf(stderr, \"ERROR: Failed to activate device!\\n\");\n      }\n    }\n    else {\n      fprintf(stderr, \"ERROR: No ACC-device found!\\n\");\n      if (EXIT_SUCCESS == result) result = EXIT_FAILURE;\n    }\n    if (EXIT_SUCCESS == result) {\n      rnd = (int*)malloc(sizeof(int) * NRAND);\n      if (NULL != rnd) {\n        srand(25071975); /* seed rng */\n        for (i = 0; i < NRAND; ++i) rnd[i] = rand();\n        parse_params(argc, argv, &file, &snr, &sss, &ssm, &ssn, &ssk, &snc, &sna, &snb);\n      }\n      else result = EXIT_FAILURE;\n    }\n  }\n  else {\n    fprintf(stderr, \"ERROR: ACC initialization failed!\\n\");\n  }\n  while (EXIT_SUCCESS == result || (NULL != file && 0 > result && 0 == check)) {\n    const int inr = (NULL != snr ? atoi(snr) : 0);\n    const int ism = (NULL != ssm ? atoi(ssm) : 0);\n    const int isn = (NULL != ssn ? atoi(ssn) : 0);\n    const int isk = (NULL != ssk ? atoi(ssk) : 0);\n    const int inc = (NULL != snc ? atoi(snc) : 0);\n    const int ina = (NULL != sna ? atoi(sna) : 0);\n    const int inb = (NULL != snb ? atoi(snb) : 0);\n    if (NULL != file && 0 > result && 0 == check) result = EXIT_SUCCESS;\n    m = (0 < ism ? ism : 23);\n    n = (0 < isn ? isn : m);\n    k = (0 < isk ? isk : m);\n    {\n#if defined(ALIGNMENT) && (0 < ALIGNMENT)\n      const int ma = (int)ROUNDUP2(sizeof(ELEM_TYPE) * m, ALIGNMENT);\n      const int ka = (int)ROUNDUP2(sizeof(ELEM_TYPE) * k, ALIGNMENT);\n      const int mn = ma * n / (int)sizeof(ELEM_TYPE);\n      const int mk = ma * k / (int)sizeof(ELEM_TYPE);\n      const int kn = ka * n / (int)sizeof(ELEM_TYPE);\n#else\n      const int mn = m * n, mk = m * k, kn = k * n;\n#endif\n      const int max_kernel_dim = ceil(sqrt(m * n));\n      int *stack_hst = NULL, *stack_dev = NULL, *trans_hst = NULL, *trans_dev = NULL;\n      ELEM_TYPE *amat_hst = NULL, *bmat_hst = NULL, *cmat_hst = NULL;\n      ELEM_TYPE *amat_dev = NULL, *bmat_dev = NULL, *cmat_dev = NULL;\n      void* stream = NULL;\n#if defined(USE_LIBXSMM)\n      libxsmm_timer_tickint start;\n      int print_offset = 0;\n      char print_buffer[1024] = \"\";\n#  if defined(TRANSPOSE) && defined(VALIDATE)\n      double transpose = 0;\n#  endif\n      double duration = 0;\n#endif\n      const char* const env_batchsize_smm = getenv(\"BATCHSIZE_SMM\");\n      const int xrepeat = (0 != check ? NREPEAT : XREPEAT);\n      int nrepeat = (0 < inr ? inr : xrepeat);\n      int stack_size, na, nb, nc, nr, r;\n      if (NULL == env_batchsize_smm) {\n        stack_size = 0;\n        if (NULL != sss) {\n          size_t nelems, s;\n          const size_t nbytes = parse_nbytes(sss, &nelems);\n          if (nbytes != nelems) {\n            while (1) {\n              nc = (0 < inc ? MIN(inc, stack_size) : MAX(stack_size / 16, 1));\n              na = (0 < ina ? ina : (10 * nc));\n              nb = (0 < inb ? inb : (10 * nc));\n              s = sizeof(ELEM_TYPE) * (mk * na + kn * nb) + sizeof(int) * 3 * stack_size;\n              if (s < nbytes) ++stack_size;\n              else break;\n            }\n          }\n          else stack_size = (int)nelems;\n        }\n      }\n      else { /* parse SMM_BATCHSIZE=batchsize,nrepfactor */\n        i = strcspn(env_batchsize_smm, DELIMS);\n        if (i < (int)sizeof(DELIMS)) {\n          r = atoi(env_batchsize_smm + i + 1);\n          if (0 < r) nrepeat = r;\n        }\n        stack_size = atoi(env_batchsize_smm);\n      }\n      if (0 >= stack_size) { /* trigger default */\n        if (0 > stack_size) { /* randomize batchsize */\n          const int r = rnd[nok % NRAND], ss = -stack_size, bs = (1 < ss ? ss : BATCHSIZE);\n          const int limit = (BATCHGRAIN < ss ? ((bs + BATCHGRAIN - 1) / BATCHGRAIN) : ss);\n          stack_size = (r % limit + 1) * BATCHGRAIN;\n          nrepeat = MAX((BATCHSIZE * nrepeat + stack_size - 1) / stack_size, xrepeat);\n        }\n        else stack_size = BATCHSIZE; /* plain default */\n      }\n      nc = (0 < inc ? MIN(inc, stack_size) : MAX(stack_size / 16, 1));\n      na = (0 < ina ? ina : (10 * nc));\n      nb = (0 < inb ? inb : (10 * nc));\n      nr = nrepeat * nc;\n      assert(m <= (mn / n) && 0 == (mn % n));\n      assert(m <= (mk / k) && 0 == (mk % k));\n      assert(k <= (kn / n) && 0 == (kn % n));\n      PRINTF(\n        \"%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);\n      PRINTF(\"typename (id=%i): %s\\n\", DBCSR_TYPE(ELEM_TYPE), DBCSR_STRINGIFY(ELEM_TYPE));\n      if (MAX_KERNEL_DIM < max_kernel_dim) {\n        fprintf(stderr, \"ERROR: Matrix shape (%i) exceeds MAX_KERNEL_DIM=%i\\n\", max_kernel_dim, MAX_KERNEL_DIM);\n        result = EXIT_FAILURE;\n      }\n      CHECK(c_dbcsr_acc_stream_create(&stream, \"stream\", -1 /*default priority*/), &result, check);\n      CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&amat_hst, sizeof(ELEM_TYPE) * mk * na, stream), &result, check);\n      CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&bmat_hst, sizeof(ELEM_TYPE) * kn * nb, stream), &result, check);\n      CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&cmat_hst, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check);\n      CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&stack_hst, sizeof(int) * 3 * stack_size, stream), &result, check);\n      CHECK(c_dbcsr_acc_host_mem_allocate((void**)(void*)&trans_hst, sizeof(int) * nb, stream), &result, check);\n      CHECK(c_dbcsr_acc_stream_sync(stream), &result, check); /* ensure host-data is allocated */\n      if (NULL != amat_hst && NULL != bmat_hst && NULL != trans_hst && NULL != stack_hst) {\n        init_stack(stack_hst, stack_size, NRAND, rnd, mn, mk, kn, nc, na, nb);\n#if defined(_OPENMP)\n#  pragma omp parallel\n#endif\n        {\n#if defined(_OPENMP)\n#  pragma omp for nowait\n#endif\n          for (i = 0; i < na; ++i) INIT_MAT(ELEM_TYPE, i /*seed*/ + 42, &amat_hst[i * mk], m, k, 1.0 / (nr * na));\n#if defined(_OPENMP)\n#  pragma omp for\n#endif\n          for (i = 0; i < nb; ++i) {\n            INIT_MAT(ELEM_TYPE, i /*seed*/ + 24, &bmat_hst[i * kn], k, n, 1.0 / (nr * nb));\n            trans_hst[i] = i * kn;\n          }\n        }\n      }\n#if !defined(__OFFLOAD_UNIFIED_MEMORY) || !defined(DEDUPLICATE)\n      CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&amat_dev, sizeof(ELEM_TYPE) * mk * na), &result, check);\n      CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&bmat_dev, sizeof(ELEM_TYPE) * kn * nb), &result, check);\n      CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&cmat_dev, sizeof(ELEM_TYPE) * mn * nc), &result, check);\n      CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&stack_dev, sizeof(int) * 3 * stack_size), &result, check);\n      CHECK(c_dbcsr_acc_dev_mem_allocate((void**)(void*)&trans_dev, sizeof(int) * nb), &result, check);\n      CHECK(c_dbcsr_acc_memset_zero(cmat_dev, 0 /*offset*/, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check);\n      CHECK(c_dbcsr_acc_memcpy_h2d(trans_hst, trans_dev, sizeof(int) * nb, stream), &result, check);\n#  if defined(USE_LIBXSMM)\n      CHECK(c_dbcsr_acc_stream_sync(stream), &result, check);\n      start = libxsmm_timer_tick();\n#  endif\n      CHECK(c_dbcsr_acc_memcpy_h2d(amat_hst, amat_dev, sizeof(ELEM_TYPE) * mk * na, stream), &result, check);\n      CHECK(c_dbcsr_acc_memcpy_h2d(bmat_hst, bmat_dev, sizeof(ELEM_TYPE) * kn * nb, stream), &result, check);\n      CHECK(c_dbcsr_acc_memcpy_h2d(stack_hst, stack_dev, sizeof(int) * 3 * stack_size, stream), &result, check);\n      if (1 < nrepeat_h2d) {\n#  if defined(USE_LIBXSMM)\n        CHECK(c_dbcsr_acc_stream_sync(stream), &result, check);\n        start = libxsmm_timer_tick();\n#  endif\n        for (r = 0; r < nrepeat_h2d; ++r) {\n          CHECK(c_dbcsr_acc_memcpy_h2d(amat_hst, amat_dev, sizeof(ELEM_TYPE) * mk * na, stream), &result, check);\n          CHECK(c_dbcsr_acc_memcpy_h2d(bmat_hst, bmat_dev, sizeof(ELEM_TYPE) * kn * nb, stream), &result, check);\n          CHECK(c_dbcsr_acc_memcpy_h2d(stack_hst, stack_dev, sizeof(int) * 3 * stack_size, stream), &result, check);\n        }\n      }\n#  if defined(USE_LIBXSMM)\n      CHECK(c_dbcsr_acc_stream_sync(stream), &result, check);\n      if (NULL != amat_hst && NULL != bmat_hst && NULL != stack_hst && EXIT_SUCCESS == result) {\n        const size_t size = (sizeof(ELEM_TYPE) * (mk * na + kn * nb) + sizeof(int) * 3 * stack_size);\n        duration = libxsmm_timer_duration(start, libxsmm_timer_tick()) / nrepeat_h2d;\n        perf_h2d = size / (duration * (1ULL << 30));\n        PRINTF(\"copy-in (%i MB): %.2g ms %.1f GB/s\\n\", (int)((size + (1 << 19)) >> 20), 1000.0 * duration, perf_h2d);\n      }\n#  endif\n#else\n      amat_dev = amat_hst;\n      bmat_dev = bmat_hst;\n      cmat_dev = cmat_hst;\n      stack_dev = stack_hst;\n      trans_dev = trans_hst;\n      CHECK(c_dbcsr_acc_memset_zero(cmat_dev, 0 /*offset*/, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check);\n#endif\n#if defined(TRANSPOSE) && defined(VALIDATE)\n      /* warmup execution and prebuild transpose-kernel */\n      for (r = 0; r < warmup / 2; ++r) {\n        CHECK(libsmm_acc_transpose(trans_dev, 0 /*offset*/, nb, bmat_dev, DBCSR_TYPE(ELEM_TYPE), k, n, MAX_KERNEL_DIM, stream),\n          &result, check);\n        CHECK(libsmm_acc_transpose(trans_dev, 0 /*offset*/, nb, bmat_dev, DBCSR_TYPE(ELEM_TYPE), n, k, MAX_KERNEL_DIM, stream),\n          &result, check);\n      }\n#  if defined(USE_LIBXSMM)\n      CHECK(c_dbcsr_acc_stream_sync(stream), &result, check);\n      start = libxsmm_timer_tick();\n#  endif\n      /* to perform NN-SMMs on the device, all B-matrices are transposed upfront (SMM-kernel is limited to NT) */\n      CHECK(libsmm_acc_transpose(trans_dev, 0 /*offset*/, nb, bmat_dev, DBCSR_TYPE(ELEM_TYPE), k, n, MAX_KERNEL_DIM, stream),\n        &result, check);\n#  if defined(USE_LIBXSMM)\n      CHECK(c_dbcsr_acc_stream_sync(stream), &result, check);\n      transpose = libxsmm_timer_duration(start, libxsmm_timer_tick());\n#  endif\n#endif\n      /* warmup execution and prebuild SMM-kernel */\n      for (r = 0; r < warmup; ++r) {\n        CHECK(libsmm_acc_process(stack_hst, stack_dev, stack_size, DBCSR_TYPE(ELEM_TYPE), amat_dev, bmat_dev, cmat_dev, m, n, k,\n                MAX_KERNEL_DIM, 1 /*homogeneous*/, stream, stream),\n          &result, check);\n      }\n      CHECK(c_dbcsr_acc_memset_zero(cmat_dev, 0 /*offset*/, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check);\n#if defined(USE_LIBXSMM)\n      CHECK(c_dbcsr_acc_stream_sync(stream), &result, check);\n      start = libxsmm_timer_tick();\n#endif\n      for (r = 0; r < nrepeat; ++r) {\n        /* GPU-kernel is limited to C += Ai * Bi^T, i.e., NT (for NN, all Bi must be transposed upfront) */\n        CHECK(libsmm_acc_process(stack_hst, stack_dev, stack_size, DBCSR_TYPE(ELEM_TYPE), amat_dev, bmat_dev, cmat_dev, m, n, k,\n                MAX_KERNEL_DIM, 1 /*homogeneous*/, stream, stream),\n          &result, check);\n      }\n#if defined(USE_LIBXSMM)\n      CHECK(c_dbcsr_acc_stream_sync(stream), &result, check);\n      duration = libxsmm_timer_duration(start, libxsmm_timer_tick());\n      if (EXIT_SUCCESS == result) {\n        if (0 < duration) {\n#  if defined(TRANSPOSE) && defined(VALIDATE)\n          PRINTF(\"transpose: %.2g ms %.1f GFLOPS/s\\n\", 1000.0 * (duration + transpose) / (nrepeat * nrepeat_smm),\n            1E-9 * ((size_t)2 * m * n * k * stack_size * nrepeat * nrepeat_smm) / (duration + transpose));\n#  endif\n          perf_dev = 1E-9 * ((size_t)2 * m * n * k * stack_size * nrepeat * nrepeat_smm) / duration;\n          PRINTF(\"device: %.2g ms %.1f GFLOPS/s\\n\", 1000.0 * duration / (nrepeat * nrepeat_smm), perf_dev);\n        }\n        else {\n#  if defined(TRANSPOSE)\n          PRINTF(\"transpose: 0 ms 0 GFLOPS/s\\n\");\n#  endif\n          PRINTF(\"device: 0 ms 0 GFLOPS/s\\n\");\n        }\n      }\n#  if defined(VALIDATE)\n      if (EXIT_SUCCESS == result) {\n        ELEM_TYPE* const gold_hst = (ELEM_TYPE*)(0 != check ? libxsmm_malloc(sizeof(ELEM_TYPE) * mn * nc) : NULL);\n        /* determine host's performance independent of current result code/status */\n        if (NULL != gold_hst && NULL != amat_hst && NULL != bmat_hst && NULL != stack_hst) {\n          const ELEM_TYPE alpha = 1, beta = 1;\n          const char transa = 'N';\n#    if defined(TRANSPOSE)\n          const char transb = 'N';\n#    else\n          const char transb = 'T';\n#    endif\n          memset(gold_hst, 0, sizeof(ELEM_TYPE) * mn * nc);\n          for (r = 0; r < warmup; ++r) {\n            ACC_BENCH_GEMM_BATCH(LIBXSMM_DATATYPE(ELEM_TYPE), LIBXSMM_DATATYPE(ELEM_TYPE), &transa, &transb, m, n, k, &alpha,\n              amat_hst, &m /*lda*/, stack_hst + 0 /*stride_a*/, bmat_hst, &k /*ldb*/, stack_hst + 1 /*stride_b*/, &beta, gold_hst,\n              &m /*ldc*/, stack_hst + 2 /*stride_c*/, sizeof(int) * 3, 1 /*index_base*/, stack_size);\n          }\n          memset(gold_hst, 0, sizeof(ELEM_TYPE) * mn * nc);\n          start = libxsmm_timer_tick();\n          /* CPU-kernel operates on data that is not initialized in NUMA-aware fashion */\n          for (r = 0; r < (nrepeat * nrepeat_smm); ++r) {\n            ACC_BENCH_GEMM_BATCH(LIBXSMM_DATATYPE(ELEM_TYPE), LIBXSMM_DATATYPE(ELEM_TYPE), &transa, &transb, m, n, k, &alpha,\n              amat_hst, &m /*lda*/, stack_hst + 0 /*stride_a*/, bmat_hst, &k /*ldb*/, stack_hst + 1 /*stride_b*/, &beta, gold_hst,\n              &m /*ldc*/, stack_hst + 2 /*stride_c*/, sizeof(int) * 3, 1 /*index_base*/, stack_size);\n          }\n          duration = libxsmm_timer_duration(start, libxsmm_timer_tick());\n          perf_hst = 1E-9 * ((size_t)2 * m * n * k * stack_size * nrepeat * nrepeat_smm) / duration;\n          PRINTF(\"host: %.2g ms %.1f GFLOPS/s\\n\", 1000.0 * duration / (nrepeat * nrepeat_smm), perf_hst);\n          /* validate correctness in case of successful result code/status */\n          if (EXIT_SUCCESS == result) {\n#    if !defined(__OFFLOAD_UNIFIED_MEMORY) || !defined(DEDUPLICATE)\n            /* transfer result from device to host for validation */\n            CHECK(c_dbcsr_acc_memcpy_d2h(cmat_dev, cmat_hst, sizeof(ELEM_TYPE) * mn * nc, stream), &result, check);\n            CHECK(c_dbcsr_acc_stream_sync(stream), &result, check);\n#    endif\n#    if defined(USE_LIBXSMM)\n            if (EXIT_SUCCESS == result) {\n              libxsmm_matdiff_info diff;\n              /* validate result buffers at once (including excess/padded space) */\n              result = libxsmm_matdiff(&diff, LIBXSMM_DATATYPE(ELEM_TYPE), mn, nc, gold_hst, cmat_hst, &mn, &mn);\n              if (EXIT_SUCCESS == result) {\n#      if defined(USE_LIBXSMM) && LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER\n                const double epsilon = libxsmm_matdiff_epsilon(&diff); /* 1.0 - diff.rsq */\n#      else\n                const double epsilon = diff.normf_rel;\n#      endif\n                PRINTF(\"diff.cur: %g\", epsilon);\n                if (maxdiff < epsilon && NULL != file) maxdiff = epsilon;\n                if (0 < epsilon) {\n                  if (LIBXSMM_NOTNAN(diff.v_tst)) {\n                    PRINTF(\" (|%g-%g|=%g)\\n\", diff.v_ref, diff.v_tst, diff.linf_abs);\n                  }\n                  else {\n                    PRINTF(\" (%g)\\n\", diff.v_tst);\n                  }\n                }\n                else {\n                  PRINTF(\"\\n\");\n                }\n                if (0 < check && check < epsilon) result = EXIT_FAILURE;\n              }\n              else fprintf(stderr, \"ERROR: failed to validate!\\n\");\n            }\n#    endif\n          }\n        }\n        libxsmm_free(gold_hst);\n      }\n#  endif\n#endif\n      CHECK(c_dbcsr_acc_host_mem_deallocate(stack_hst, stream), NULL, check);\n      CHECK(c_dbcsr_acc_host_mem_deallocate(trans_hst, stream), NULL, check);\n      CHECK(c_dbcsr_acc_host_mem_deallocate(amat_hst, stream), NULL, check);\n      CHECK(c_dbcsr_acc_host_mem_deallocate(bmat_hst, stream), NULL, check);\n      CHECK(c_dbcsr_acc_host_mem_deallocate(cmat_hst, stream), NULL, check);\n#if !defined(__OFFLOAD_UNIFIED_MEMORY) || !defined(DEDUPLICATE)\n      CHECK(c_dbcsr_acc_dev_mem_deallocate(stack_dev), NULL, check);\n      CHECK(c_dbcsr_acc_dev_mem_deallocate(trans_dev), NULL, check);\n      CHECK(c_dbcsr_acc_dev_mem_deallocate(amat_dev), NULL, check);\n      CHECK(c_dbcsr_acc_dev_mem_deallocate(bmat_dev), NULL, check);\n      CHECK(c_dbcsr_acc_dev_mem_deallocate(cmat_dev), NULL, check);\n#endif\n      CHECK(c_dbcsr_acc_stream_destroy(stream), NULL, check);\n      if (0 == result || (0 > result && 0 == check)) {\n        parse_params(argc, argv, &file, &snr, &sss, &ssm, &ssn, &ssk, &snc, &sna, &snb);\n        if (NULL != file) PRINTF(\"\\n\");\n        ++nok;\n      }\n#if defined(USE_LIBXSMM)\n      if (0 == result) {\n        LIBXSMM_STDIO_ACQUIRE();\n        fputs(print_buffer, stdout);\n        LIBXSMM_STDIO_RELEASE();\n      }\n      else\n#endif\n      {\n        if (0 > result) fprintf(stderr, \"WARNING: %ix%ix%i-kernel not available or unsuitable!\\n\", m, n, k);\n      }\n      if (NULL == file && (0 == result || (0 > result && 0 == check))) break;\n    }\n  }\n  free(rnd); /* release array of random numbers */\n#if !defined(__CUDA)\n  CHECK(libsmm_acc_finalize(), NULL, check);\n#endif\n  CHECK(c_dbcsr_acc_finalize(), NULL, check);\n#if defined(USE_LIBXSMM) && defined(VALIDATE)\n  if (1 < nok) printf(\"\\ndiff.max: %g\\n\", maxdiff);\n#endif\n  if (EXIT_SUCCESS == result) {\n#if defined(USE_LIBXSMM)\n    if (NULL != env_check_h2d && 0 < perf_h2d) {\n      const double check_h2d = atof(env_check_h2d);\n      if (perf_h2d < check_h2d) result = EXIT_FAILURE;\n    }\n    if (NULL != env_check_dev && 0 < perf_dev) {\n      const double check_dev = atof(env_check_dev);\n      if (perf_dev < check_dev) result = EXIT_FAILURE;\n    }\n    if (NULL != env_check_hst && 0 < perf_hst) {\n      const double check_hst = atof(env_check_hst);\n      if (perf_hst < check_hst) result = EXIT_FAILURE;\n    }\n    if (EXIT_SUCCESS != result) fprintf(stderr, \"\\nFAILED\\n\\n\");\n#endif\n  }\n  else {\n    if (NULL != file) fclose(file);\n    if (0 < result) fprintf(stderr, \"\\nFAILED\\n\\n\");\n    else if (0 == check) result = EXIT_SUCCESS;\n  }\n  return result;\n}\n"
  },
  {
    "path": "src/acc/acc_bench.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#ifndef DBCSR_ACC_BENCH_H\n#define DBCSR_ACC_BENCH_H\n\n#include <stdlib.h>\n#include <assert.h>\n\n#if !defined(MIN)\n#  define MIN(A, B) ((A) < (B) ? (A) : (B))\n#endif\n#if !defined(MAX)\n#  define MAX(A, B) ((B) < (A) ? (A) : (B))\n#endif\n\n#if !defined(INLINE) && (defined(__cplusplus) || (defined(__STDC_VERSION__) && (199901L <= __STDC_VERSION__) /*C99*/))\n#  define INLINE inline\n#else\n#  define INLINE\n#endif\n\n#if !defined(MAX_KERNEL_DIM)\n#  define MAX_KERNEL_DIM 80\n#endif\n\n#define INIT_MAT(ELEM_TYPE, SEED, MAT, M, N, SCALE) \\\n  do { \\\n    const double init_mat_seed1_ = (SCALE) * (SEED) + (SCALE); \\\n    int init_mat_i_, init_mat_j_; \\\n    for (init_mat_i_ = 0; init_mat_i_ < (N); ++init_mat_i_) { \\\n      for (init_mat_j_ = 0; init_mat_j_ < (M); ++init_mat_j_) { \\\n        const int init_mat_k_ = init_mat_i_ * (M) + init_mat_j_; \\\n        ((ELEM_TYPE*)(MAT))[init_mat_k_] = (ELEM_TYPE)(init_mat_seed1_ * (init_mat_k_ + 1)); \\\n      } \\\n    } \\\n  } while (0)\n\n\n/**\n * Artificial stack-setup for DBCSR/ACC benchmarks.\n * The arguments rnd and rnd_size optionally allow\n * to supply an array of (pseudo-)random-numbers.\n */\nstatic INLINE void init_stack(\n  int* stack, int stack_size, int rnd_size, const int* rnd, int mn, int mk, int kn, int nc, int na, int nb) {\n  /* navg matrix products are accumulated into a C-matrix */\n  const int navg = stack_size / nc;\n  const int nimb = MAX(1, navg - 4); /* imbalance */\n  int i = 0, c = 0, ntop = 0;\n  assert(0 < nc && nc <= stack_size);\n  while (i < stack_size) {\n    const int r = ((NULL == rnd || 0 >= rnd_size) ? rand() : rnd[i % rnd_size]), next = c + 1;\n    ntop += navg + (r % (2 * nimb) - nimb);\n    if (stack_size < ntop) ntop = stack_size;\n    for (; i < ntop; ++i) { /* setup one-based indexes */\n      int a, b;\n      if (NULL != rnd && 0 < rnd_size) {\n        a = rnd[(2 * i + 0) % rnd_size] % na;\n        b = rnd[(2 * i + 1) % rnd_size] % nb;\n      }\n      else {\n        a = rand() % na;\n        b = rand() % nb;\n      }\n      *stack++ = a * mk + 1; /* A-index */\n      *stack++ = b * kn + 1; /* B-index */\n      *stack++ = c * mn + 1; /* C-index */\n    }\n    if (next < nc) c = next;\n  }\n}\n\n#endif /*DBCSR_ACC_BENCH_H*/\n"
  },
  {
    "path": "src/acc/acc_libsmm.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n#ifndef DBCSR_ACC_LIBSMM_H\n#define DBCSR_ACC_LIBSMM_H\n\n#include \"acc.h\"\n\n#define DBCSR_TYPE(T) DBCSR_CONCATENATE(DBCSR_TYPE_, T)\n#define DBCSR_TYPE_double dbcsr_type_real_8\n#define DBCSR_TYPE_float dbcsr_type_real_4\n\n#define LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_STRPTR ((const char**)((uintptr_t)&libsmm_acc_transpose_routine_name_ptr))\n#define LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_LENPTR (&libsmm_acc_transpose_routine_name_len)\n#define LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_STR (libsmm_acc_transpose_routine_name_str)\n\n#define LIBSMM_ACC_PROCESS_ROUTINE_NAME_STRPTR ((const char**)((uintptr_t)&libsmm_acc_process_routine_name_ptr))\n#define LIBSMM_ACC_PROCESS_ROUTINE_NAME_LENPTR (&libsmm_acc_process_routine_name_len)\n#define LIBSMM_ACC_PROCESS_ROUTINE_NAME_STR (libsmm_acc_process_routine_name_str)\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\ntypedef enum libsmm_acc_data_t {\n  dbcsr_type_real_4 = 1,\n  dbcsr_type_real_8 = 3,\n  dbcsr_type_complex_4 = 5,\n  dbcsr_type_complex_8 = 7\n} libsmm_acc_data_t;\n\nint libsmm_acc_init(void);\nint libsmm_acc_finalize(void);\nc_dbcsr_acc_bool_t libsmm_acc_is_thread_safe(void);\n\nint libsmm_acc_transpose(const int* dev_trs_stack, int offset, int stack_size, void* dev_data, libsmm_acc_data_t datatype, int m,\n  int n, int max_kernel_dim, void* stream);\n\nint libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype,\n  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,\n  c_dbcsr_acc_bool_t def_mnk, void* stack_stream, void* c_stream);\n\nint c_calculate_norms(const double* mat, int nblks, const int* offsets, const int* nelems, float* norms, void* stream_ptr);\n\nstatic const char libsmm_acc_transpose_routine_name_str[] = \"jit_kernel_transpose\";\nstatic const char* const libsmm_acc_transpose_routine_name_ptr = libsmm_acc_transpose_routine_name_str;\nstatic const int libsmm_acc_transpose_routine_name_len = (int)sizeof(libsmm_acc_transpose_routine_name_str) - 1;\n\nstatic const char libsmm_acc_process_routine_name_str[] = \"jit_kernel_multiply\";\nstatic const char* const libsmm_acc_process_routine_name_ptr = libsmm_acc_process_routine_name_str;\nstatic const int libsmm_acc_process_routine_name_len = (int)sizeof(libsmm_acc_process_routine_name_str) - 1;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif /*DBCSR_ACC_LIBSMM_H*/\n"
  },
  {
    "path": "src/acc/acc_triplets.sh",
    "content": "#!/usr/bin/env bash\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: BSD-3-Clause                                                            #\n####################################################################################################\nXARGS=$(command -v xargs)\nSORT=$(command -v sort)\nHEAD=$(command -v head)\nSED=$(command -v gsed)\nCUT=$(command -v cut)\n\n# GNU sed is desired (macOS)\nif [ ! \"${SED}\" ]; then\n  SED=$(command -v sed)\nfi\n\nif [ \"${XARGS}\" ] && [ \"${SORT}\" ] && [ \"${HEAD}\" ] && [ \"${SED}\" ] && [ \"${CUT}\" ]; then\n  LINES=0\n  while test $# -gt 0; do\n    case \"$1\" in\n    -h|--help)\n      HELP=1\n      shift $#;;\n    -l|--lines)\n      LINES=1\n      shift;;\n    -r|--bound)\n      BOUNDL=$2\n      BOUNDU=$3\n      shift 3;;\n    -m|--limit)\n      MAXEXT=$2\n      shift 2;;\n    -n|--triplets)\n      MAXNUM=$2\n      shift 2;;\n    -a|--amat)\n      CUTSEL=-f1,3\n      shift;;\n    -b|--bmat)\n      CUTSEL=-f3,2\n      shift;;\n    -c|--cmat)\n      CUTSEL=-f1,2\n      shift;;\n    -k|--specid)\n      case \"$2\" in\n      0) TRIPLETS=\"23, 6, 14 16 29, 5 16 13 24 26, 9 16 22, 32, 64, 78, 16 29 55\";;\n      1) TRIPLETS=\"23, 6, 14 16 29, 5 32 13 24 26, 9 32 22, 32, 64, 78, 16 29 55\";;\n      2) TRIPLETS=\"23, 6, 14 16 29, 5 32 13 24 26, 9 32 22, 32, 64, 78, 16 29 55, 12\";;\n      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\";;\n      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\";;\n      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\";;\n      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\";;\n      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\";;\n      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\";;\n      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\";;\n      *) TRIPLETS=\" \\\n          4 5 7 9 13 25 26 28 32 45, \\\n          13 14 25 26 32, \\\n          5 32 13 24 26, \\\n          14 16 29, \\\n          14 32 29, \\\n          16 29 55, \\\n          32 29 55, \\\n          9 32 22, \\\n          4 10 15, \\\n          6 7 8, \\\n          23, \\\n          64, \\\n          78, \\\n          12, \\\n          6\";;\n      esac\n      shift 2;;\n    *)\n      if [ \"\" = \"$(echo \"$*\" | ${SED} -n \"s/[0-9]*[[:space:]]*,*//gp\")\" ]; then\n        TRIPLETS=\"$*\"\n      else\n        >&2 echo \"ERROR: invalid triplet specification!\"\n      fi\n      break;;\n    esac\n  done\n  if [[ \"${TRIPLETS}\" && (! \"${HELP}\" || \"0\" = \"${HELP}\") ]]; then\n    for SPECS in $(echo \"${TRIPLETS}\" | ${SED} -e \"s/[[:space:]][[:space:]]*/x/g\" -e \"s/,/ /g\"); do\n      SPEC=$(echo \"${SPECS}\" | ${SED} -e \"s/^x//g\" -e \"s/x$//g\" -e \"s/x/,/g\")\n      if [ \"${MAXEXT}\" ] && [ \"0\" != \"$((0<MAXEXT))\" ]; then\n        for EXT in $(echo \"${SPEC}\" | ${SED} \"s/,/ /g\"); do\n          if [ \"0\" != \"$((MAXEXT<EXT))\" ]; then continue 2; fi\n        done\n      fi\n      MNKS=\"${MNKS} $(eval printf \"%s\" \"{${SPEC}}x{${SPEC}}x{${SPEC}}\\\" \\\"\" | ${SED} -e \"s/{//g\" -e \"s/}//g\")\"\n    done\n    if [ \"${MNKS}\" ]; then\n      if [ \"${BOUNDL}\" ] || [ \"${BOUNDU}\" ]; then\n        if [ ! \"${BOUNDL}\" ]; then BOUNDL=0; elif [ ! \"${BOUNDU}\" ]; then BOUNDU=0; fi\n        if [ \"0\" != \"$((0<=BOUNDL))\" ]; then\n          for MNK in $(echo \"${MNKS}\" | ${SED} \"s/x/*/g\"); do\n            S=$((MNK))\n            if [ \"0\" != \"$((BOUNDL<BOUNDU))\" ]; then\n              if [ \"0\" != \"$((BOUNDL**3<S&&S<=BOUNDU**3))\" ]; then TMP=\"${TMP} ${MNK}\"; fi\n            else\n              if [ \"0\" != \"$((BOUNDL**3<S))\" ]; then TMP=\"${TMP} ${MNK}\"; fi\n            fi\n          done\n          MNKS=$(echo \"${TMP}\" | ${SED} \"s/*/x/g\")\n        fi\n      fi\n      if [ \"${CUTSEL}\" ]; then\n        MNK=$(echo \"${MNKS}\" | ${XARGS} -n1 | ${CUT} -dx ${CUTSEL} | ${SORT} -u -n -tx -k1,1 -k2,2 -k3,3 | \\\n          if [ \"${MAXNUM}\" ] && [ \"0\" != \"$((0<MAXNUM))\" ]; then ${HEAD} -n\"${MAXNUM}\"; else cat; fi)\n      else\n        MNK=$(echo \"${MNKS}\" | ${XARGS} -n1 | ${SORT} -u -n -tx -k1,1 -k2,2 -k3,3 | \\\n          if [ \"${MAXNUM}\" ] && [ \"0\" != \"$((0<MAXNUM))\" ]; then ${HEAD} -n\"${MAXNUM}\"; else cat; fi)\n      fi\n      if [ \"0\" = \"${LINES}\" ]; then\n        echo \"${MNK}\" | ${XARGS}\n      else\n        echo \"${MNK}\"\n      fi\n    fi\n  else\n    if [ ! \"${HELP}\" ] || [ \"0\" = \"${HELP}\" ]; then\n      ECHO=\">&2 echo\"\n    else\n      ECHO=\"echo\"\n    fi\n    eval \"${ECHO} \\\"Usage: $0 [options] [<triplet-spec>]\\\"\"\n    eval \"${ECHO} \\\"       Options must precede triplet specification\\\"\"\n    eval \"${ECHO} \\\"       -l|--lines: lines instead of list of words\\\"\"\n    eval \"${ECHO} \\\"       -r|--bound L U: limit L**3 < MNK <= U**3\\\"\"\n    eval \"${ECHO} \\\"       -m|--limit N: limit any shape extent to N\\\"\"\n    eval \"${ECHO} \\\"       -n|--triplets N: limit number of triplet\\\"\"\n    eval \"${ECHO} \\\"       -a|--amat: select MxK instead of MxNxK\\\"\"\n    eval \"${ECHO} \\\"       -b|--bmat: select KxN instead of MxNxK\\\"\"\n    eval \"${ECHO} \\\"       -c|--cmat: select MxN instead of MxNxK\\\"\"\n    eval \"${ECHO} \\\"       -k|--specid N: predefined triplets\\\"\"\n    eval \"${ECHO} \\\"        0-10: older to newer (larger), e.g.,\\\"\"\n    eval \"${ECHO} \\\"       -k  0:  201 kernels\\\"\"\n    eval \"${ECHO} \\\"       -k 10: 1266 kernels\\\"\"\n    eval \"${ECHO} \\\"       <triplet-spec>, e.g., 134 kernels\\\"\"\n    eval \"${ECHO} \\\"         23, 5 32 13 24 26, 4 9\\\"\"\n    eval \"${ECHO}\"\n    if [ \"${HELP}\" ] || [ \"0\" = \"${HELP}\" ]; then exit 0; fi\n    >&2 echo \"ERROR: invalid or no <triplet-spec> given!\"\n    exit 1\n  fi\nelse\n  >&2 echo \"ERROR: missing prerequisites!\"\n  exit 1\nfi\n"
  },
  {
    "path": "src/acc/cuda/Makefile",
    "content": "# This Makefile builds the SMM benchmark driver without building DBCSR.\n# It is for testing and comparison with other implementations.\n\nMAKDIR := $(subst //,,$(dir $(firstword $(MAKEFILE_LIST)))/)\nACCDIR := $(MAKDIR)/..\nDIRSMM := $(ACCDIR)/libsmm_acc\nINCACC := $(wildcard $(MAKDIR)/*.h*) $(ACCDIR)/acc.h\nSRCACC := $(wildcard $(ACCDIR)/cuda_hip/*.cpp) \\\n          $(wildcard $(MAKDIR)/*.cpp) \\\n          $(NULL)\nOBJACC := $(SRCACC:.cpp=.o)\n\nGPUSMM := $(wildcard $(DIRSMM)/kernels/*.h*)\nINCSMM := $(wildcard $(DIRSMM)/*.h*) \\\n                     $(DIRSMM)/parameters.h \\\n                     $(DIRSMM)/smm_acc_kernels.h \\\n                     $(ACCDIR)/acc_libsmm.h \\\n                     $(ACCDIR)/acc_bench.h \\\n                     $(NULL)\nSRCSMM := $(wildcard $(DIRSMM)/*.cpp)\nOBJSMM := $(SRCSMM:.cpp=.o)\n\nINCALL := $(INCACC) $(INCSMM)\n\nLIBXSMMROOT := $(wildcard $(ACCDIR)/../../../../../libxsmm)\nifeq (,$(LIBXSMMROOT))\n  LIBXSMMROOT := $(wildcard $(HOME)/libxsmm)\nendif\nUNAME := $(shell uname)\nHEADERONLY ?= 0\nSTATIC ?= 1\nINTEL ?= 0\nGNU ?= 0\nDEV ?= 0\n\n# C++ baseline standard\nCXXSTD ?= -std=c++14\n\n# select from set of predefined triplet specifications\nSPECID ?= 0\n# limit shape in tests (zero or negative for unlimited)\nMAXEXT ?= 48\n# number of tests (zero or negative for unlimited)\nNSMMS ?= 10\n\nCOMMAND := $(shell which command 2>/dev/null)\nifneq (,$(COMMAND))\n  which = $(shell $(COMMAND) -v $1)\nelse\n  which = $(shell which $(firstword $1) 2>/dev/null)\nendif\n\nPYTHON := $(call which,python3)\nifeq (,$(PYTHON))\n  PYTHON := $(call which,python)\nendif\n\nWITH_GPU := $(if $(WITH_GPU),$(WITH_GPU),$(GPUVER))\nifeq (,$(WITH_GPU))\n  ifneq (,$(call which,nvidia-smi))\n    GPU_NAME := $(shell nvidia-smi --query-gpu=gpu_name --format=csv,noheader -i 0 2>/dev/null | tr -c [:alnum:] \" \")\n    WITH_GPU := $(filter K20X K40 K80 P100 V100 A100 H100,$(GPU_NAME))\n  endif\nendif\nifeq (,$(WITH_GPU))\n  WITH_GPU := P100\nendif\n\nNVCC ?= $(call which,nvcc)\nCUDA_PATH ?= $(if $(NVCC),$(abspath $(dir $(NVCC))/..))\n\nifeq ($(WITH_GPU),K20X)\n  ARCH_NUMBER = 35\nelse ifeq ($(WITH_GPU),K40)\n  ARCH_NUMBER = 35\nelse ifeq ($(WITH_GPU),K80)\n  ARCH_NUMBER = 37\nelse ifeq ($(WITH_GPU),P100)\n  ARCH_NUMBER = 60\nelse ifeq ($(WITH_GPU),V100)\n  ARCH_NUMBER = 70\nelse ifeq ($(WITH_GPU),A100)\n  ARCH_NUMBER = 80\nelse ifeq ($(WITH_GPU),H100)\n  ARCH_NUMBER = 90\nelse ifeq (,$(ARCH_NUMBER))\n  $(error Unknown ARCH_NUMBER since WITH_GPU=\"$(WITH_GPU)\" is not recognized)\nendif\n\nCFLAGS := -fPIC \\\n  -Wall -Wextra -pedantic \\\n  -Wno-variadic-macros \\\n  -Wno-long-long \\\n  $(NULL)\n\nDFLAGS := \\\n  -DARCH_NUMBER=$(ARCH_NUMBER) \\\n  -D__CUDA \\\n  $(NULL)\n\nifneq (,$(ELEM_TYPE))\n  DFLAGS += -DELEM_TYPE=$(ELEM_TYPE)\nendif\n\nifneq (0,$(INTEL))\n  ifneq (1,$(INTEL))\n    CXX := icpx\n    CC := icx\n  else\n    CXX := icpc\n    CC := icc\n  endif\n  AR := $(if $(call which,xiar),xiar,ar)\nelse\n  CXX := g++\n  CC := gcc\n  ifneq (Darwin,$(UNAME))\n    AR := gcc-ar\n  else\n    AR := ar\n  endif\nendif\n\nifeq (0,$(DEV))\n  CFLAGS += \\\n    -Wno-unused-parameter \\\n    -Wno-format \\\n    $(NULL)\nendif\n\nifneq (0,$(DBG))\n  ifeq (,$(DBG))\n    DFLAGS += -DNDEBUG\n    CFLAGS += -O2\n  else\n    ifneq (1,$(DBG))\n      DFLAGS += -D_DEBUG\n    endif\n    CFLAGS += -O0\n  endif\nelse\n  DFLAGS += -DNDEBUG -DNDBGDEV\n  CFLAGS += -O2\n  SYM := 0\nendif\nifneq (0,$(SYM))\n  CFLAGS += -g\nendif\n\nifneq (0,$(OMP))\n  ifneq (0,$(INTEL))\n    CFLAGS += -qopenmp\n    LDFLAGS += -qopenmp\n  else ifneq (Darwin,$(UNAME))\n    CFLAGS += -fopenmp\n    LDFLAGS += -fopenmp\n  else # macOS\n    CFLAGS += -Xpreprocessor -fopenmp\n    LDFLAGS += -lomp\n  endif\nendif\n\nifneq (,$(LIBXSMMROOT))\n  ifneq (0,$(STATIC))\n    ifeq (0,$(HEADERONLY))\n      ifneq (0,$(OMP))\n        LDFLAGS += $(LIBXSMMROOT)/lib/libxsmmext.a\n      endif\n      LDFLAGS += $(LIBXSMMROOT)/lib/libxsmm.a\n    else\n      CFLAGS_XSMM += -DLIBXSMM_DEFAULT_CONFIG\n    endif\n    LDFLAGS += $(LIBXSMMROOT)/lib/libxsmmnoblas.a\n  else\n    LDFLAGS += -L$(LIBXSMMROOT)/lib\n    ifneq (Darwin,$(UNAME))\n      LDFLAGS += -Wl,-rpath=$(LIBXSMMROOT)/lib\n    endif\n    ifneq (0,$(OMP))\n      LDFLAGS += -lxsmmext\n    endif\n    LDFLAGS += -lxsmm -lxsmmnoblas\n  endif\n  CFLAGS_XSMM += -pthread -D__LIBXSMM -I$(LIBXSMMROOT)/include\n  LDFLAGS += -pthread -ldl -lm\nendif\n\nifneq (,$(CUDA_PATH))\n  CUDA_LIBDIR := $(if $(wildcard $(CUDA_PATH)/lib64),lib64,lib)\n  LDFLAGS += -L$(CUDA_PATH)/$(CUDA_LIBDIR)/stubs -Wl,-rpath=$(CUDA_PATH)/$(CUDA_LIBDIR)/stubs\n  LDFLAGS += -L$(CUDA_PATH)/$(CUDA_LIBDIR) -Wl,-rpath=$(CUDA_PATH)/$(CUDA_LIBDIR)\n  CUDAINC := $(strip $(lastword $(sort $(wildcard $(CUDA_PATH)/../cuda/*/targets/x86_64-linux/include/cuda.h))))\n  ifneq (,$(CUDAINC))\n    CFLAGS += -I$(abspath $(dir $(CUDAINC)))\n  else\n    CFLAGS += -I$(CUDA_PATH)/include\n  endif\nendif\n\n# Collect all paths in LD_LIBRARY_PATH and LD_LIBRARY_PATH/stubs, and append to LDFLAGS\nLD_LIBRARY_DIRS := $(wildcard $(subst :, ,$(LD_LIBRARY_PATH)))\nLD_LIBSTUB_PATH := $(wildcard $(patsubst %,%/stubs,$(LD_LIBRARY_DIRS)))\nLIBPATHS := $(foreach DIR,$(LD_LIBRARY_DIRS),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR)))\nLIBSTUBS := $(foreach DIR,$(LD_LIBSTUB_PATH),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR)))\nLDFLAGS += $(LIBPATHS) $(LIBSTUBS) -lcudart -lcublas -lnvrtc -lcuda\nCXXFLAGS += $(CXXSTD) $(CFLAGS)\n\n.PHONY: bench\nbench: $(ACCDIR)/acc_bench\n\n.PHONY: all\nall: bench $(ACCDIR)/dbcsr_acc_test\n\n.PHONY: test\ntest: test-interface test-smm\n\n.PHONY: test-interface\ntest-interface: $(ACCDIR)/dbcsr_acc_test\n\t@echo \"--- DBCSR Backend Interface\"\n\t$(ACCDIR)/dbcsr_acc_test\n\n$(MAKDIR)/test-smm.log: bench\n\t$(eval SHAPES = $(shell $(ACCDIR)/acc_triplets.sh -k $(SPECID) -m $(MAXEXT) -n $(NSMMS)))\n\t@echo \"--- DBCSR CUDA SMMs ($(words $(SHAPES)))\"\n\t@echo \"LD_LIBRARY_PATH=${LD_LIBRARY_PATH}\"\nifneq (,$(LD_PRELOAD))\n\t@echo \"LD_PRELOAD=${LD_PRELOAD}\"\nendif\n\t@echo \"NVCC: $$($(NVCC) --version | head -n1)\"\n\t@echo \"CXX: $$($(CXX) --version | head -n1)\"\n\t@echo \"CC: $$($(CC) --version | head -n1)\"\n\t@echo \"runtime libraries:\"\n\t@ldd $(ACCDIR)/acc_bench\n\t@echo \"hostname: $$(hostname)\"\n\t@echo\n\t@echo \"$(SHAPES)\" | xargs -n1 | (CHECK=$(if $(CHECK),$(CHECK),1) stdbuf --output=L \\\n\t\t$(ACCDIR)/acc_bench /dev/stdin 2>$(MAKDIR)/test-smm.err && rm $(MAKDIR)/test-smm.err) | tee $@\n\n.PHONY: test-smm\ntest-smm: $(MAKDIR)/test-smm.log\nifneq (,$(call which,datamash))\nifeq (,$(shell datamash geomean 2>&1 | grep invalid))\n\t@echo \"geomean: $$(sed -n \"/device:/p\" $< 2>/dev/null | datamash -W -R 1 geomean 4) GFLOPS/s\"\nendif\n\t@echo \"median: $$(sed -n \"/device:/p\" $< 2>/dev/null | datamash -W -R 1 median 4) GFLOPS/s\"\n\t@echo \"mean: $$(sed -n \"/device:/p\" $< 2>/dev/null | datamash -W -R 1 mean 4) GFLOPS/s\"\nendif\n\t@if [ -s $(MAKDIR)/test-smm.err ]; then \\\n\t\techo && cat $(MAKDIR)/test-smm.err; \\\n\t\tif [ \"0\" != \"$(if $(CHECK),$(CHECK),1)\" ]; then exit 1; fi; \\\n\tfi\n\nPARDIR := $(DIRSMM)/parameters\nPARAMS := $(wildcard $(PARDIR)/parameters_$(WITH_GPU).json)\n$(DIRSMM)/parameters.h: $(MAKDIR)/Makefile $(DIRSMM)/generate_parameters.py $(PARAMS)\n\t@cd $(DIRSMM) && $(PYTHON) ../libsmm_acc/generate_parameters.py --gpu_version=$(WITH_GPU) --base_dir=../libsmm_acc/parameters\n\n$(DIRSMM)/smm_acc_kernels.h: $(GPUSMM) $(MAKDIR)/Makefile $(DIRSMM)/generate_kernels.py $(PARAMS)\n\t@cd $(DIRSMM) && $(PYTHON) ../libsmm_acc/generate_kernels.py ../libsmm_acc/kernels\n\n.PHONY: backend\nbackend: $(ACCDIR)/dbcsr_acc.a\n$(ACCDIR)/dbcsr_acc.a: $(OBJACC) $(DIRSMM)/libsmm_acc_init.o\n\t$(AR) -rs $@ $^\n\n.PHONY: libsmm\nlibsmm: $(ACCDIR)/dbcsr_acc_smm.a\n$(ACCDIR)/dbcsr_acc_smm.a: $(OBJSMM)\n\t$(AR) -rs $@ $^\n\n%.o: %.cpp $(INCALL) $(MAKDIR)/Makefile\n\t$(CXX) $(DFLAGS) $(CXXFLAGS) $(CFLAGS_XSMM) -c $< -o $@\n\n%.o: %.cu $(INCALL) $(MAKDIR)/Makefile\n\t$(NVCC) $(DFLAGS) -allow-unsupported-compiler $(CXXSTD) \\\n\t\t--compiler-options=\"$(filter-out $(CXXSTD),$(CXXFLAGS)) $(CFLAGS_XSMM)\" -c $< -o $@\n\n$(ACCDIR)/cuda_hip/calculate_norms.o: $(ACCDIR)/cuda_hip/calculate_norms.cpp $(INCALL) $(MAKDIR)/Makefile\n\t$(NVCC) $(DFLAGS) -allow-unsupported-compiler $(CXXSTD) -x cu \\\n\t\t--compiler-options=\"$(filter-out $(CXXSTD) -pedantic,$(CXXFLAGS)) $(CFLAGS_XSMM)\" -c $< -o $@\n\n$(MAKDIR)/acc_bench.o: $(ACCDIR)/acc_bench.c $(MAKDIR)/Makefile\nifneq (0,$(LIBXSMM))\n\t$(CC) $(DFLAGS) $(CFLAGS) $(CFLAGS_XSMM) -c $< -o $@\nelse\n\t$(CC) $(DFLAGS) $(CFLAGS) -c $< -o $@\nendif\n$(ACCDIR)/acc_bench: $(MAKDIR)/acc_bench.o $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc_smm.a\n\t$(CXX) $^ $(LDFLAGS) -o $@\n\n$(MAKDIR)/dbcsr_acc_test.o: $(ACCDIR)/../../tests/dbcsr_acc_test.c $(MAKDIR)/Makefile\n\t$(CC) $(DFLAGS) $(CFLAGS) -I$(ACCDIR)/.. -c $< -o $@\n$(ACCDIR)/dbcsr_acc_test: $(MAKDIR)/dbcsr_acc_test.o $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc_smm.a\n\t$(CXX) $^ $(LDFLAGS) -o $@\n\n.PHONY: clean\nclean:\n\t@rm -f $(OBJACC) $(OBJSMM)\n\t@rm -f $(MAKDIR)/dbcsr_acc_test.o\n\t@rm -f $(MAKDIR)/acc_bench.o\n\t@rm -f $(DIRSMM)/parameters.h\n\t@rm -f $(DIRSMM)/smm_acc_kernels.h\n\t@rm -f $(MAKDIR)/test-smm.err\n\n.PHONY: realclean\nrealclean: clean\n\t@rm -f $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc_smm.a\n\t@rm -f $(ACCDIR)/acc_bench\n\t@rm -f $(ACCDIR)/dbcsr_acc_test\n\t@rm -f $(MAKDIR)/test-smm.log\n"
  },
  {
    "path": "src/acc/cuda/PACKAGE",
    "content": "{\n\"description\": \"Cuda backend for accelerator API\",\n\"archive\":\"libdbcsr\",\n\"requires\": [\"../../base\"]\n}\n"
  },
  {
    "path": "src/acc/cuda/acc_cuda.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include \"acc_cuda.h\"\n\nnvrtcResult nvrtcGetLowLevelCode(nvrtcProgram prog, char* code) { return nvrtcGetPTX(prog, code); }\n\nnvrtcResult nvrtcGetLowLevelCodeSize(nvrtcProgram prog, size_t* codeSizeRet) { return nvrtcGetPTXSize(prog, codeSizeRet); }\n\nCUresult cuLaunchJITKernel(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ,\n  unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream stream,\n  void** kernelParams, void** extra) {\n  return cuLaunchKernel(\n    f, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, sharedMemBytes, stream, kernelParams, extra);\n}\n\n// CUDA Runtime API: flag values\nCUevent_flags CUEventDefault = CU_EVENT_DEFAULT;\nCUstream_flags CUStreamDefault = CU_STREAM_DEFAULT;\nCUsharedconfig CUSharedMemBankSizeEightByte = CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE;\n\ncublasStatus_t ACC_BLAS_STATUS_SUCCESS = CUBLAS_STATUS_SUCCESS;\ncublasOperation_t ACC_BLAS_OP_N = CUBLAS_OP_N;\ncublasOperation_t ACC_BLAS_OP_T = CUBLAS_OP_T;\nnvrtcResult ACC_RTC_SUCCESS = NVRTC_SUCCESS;\n"
  },
  {
    "path": "src/acc/cuda/acc_cuda.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef ACC_CUDA_H\n#define ACC_CUDA_H\n\n#include <cuda.h>\n#include <cuda_runtime.h>\n#include <nvrtc.h>\n#include <cublas_v2.h>\n#include <stdio.h>\n\n#define ACC(x) cuda##x\n#define ACC_DRV(x) CU##x\n#define ACC_DRV_FUNC_PREFIX(x) cu##x\n#define ACC_RTC(x) nvrtc##x\n#define ACC_BLAS(x) cublas##x\n#define BACKEND \"CUDA\"\n\n/* Macros for CUDA error handling\n * Wrap calls to CUDA runtime API (CUDART)\n */\n#define ACC_API_CALL(func, args) \\\n  do { \\\n    cudaError_t result = ACC(func) args; \\\n    if (result != cudaSuccess) { \\\n      printf(\"\\nCUDA RUNTIME API error: %s failed with error %s (%s::%d)\\n\", #func, cudaGetErrorName(result), __FILE__, __LINE__); \\\n      exit(1); \\\n    } \\\n  } while (0)\n\n/* Wrap calls to CUDA driver API */\n#define ACC_DRV_CALL(func, args) \\\n  do { \\\n    CUresult result = ACC_DRV_FUNC_PREFIX(func) args; \\\n    if (result != CUDA_SUCCESS) { \\\n      const char* msg; \\\n      cuGetErrorName(result, &msg); \\\n      printf(\"\\nCUDA DRIVER API ERROR: %s failed with error %s (%s::%d)\\n\", #func, msg, __FILE__, __LINE__); \\\n      exit(1); \\\n    } \\\n  } while (0)\n\n/* Wrap calls to CUDA NVRTC API */\n#define ACC_RTC_CALL(func, args) \\\n  do { \\\n    nvrtcResult result = ACC_RTC(func) args; \\\n    if (result != NVRTC_SUCCESS) { \\\n      printf(\"\\nNVRTC ERROR: %s failed with error %s\\n\", #func, nvrtcGetErrorString(result)); \\\n      exit(1); \\\n    } \\\n  } while (0)\n\n\n/* Wrap calls to CUDA CUBLAS API */\n#define ACC_BLAS_CALL(func, args) \\\n  do { \\\n    cublasStatus_t result = ACC_BLAS(func) args; \\\n    if (result != CUBLAS_STATUS_SUCCESS) { \\\n      const char* error_name = \"CUBLAS_ERRROR\"; \\\n      if (result == CUBLAS_STATUS_NOT_INITIALIZED) { \\\n        error_name = \"CUBLAS_STATUS_NOT_INITIALIZED\"; \\\n      } \\\n      else if (result == CUBLAS_STATUS_ALLOC_FAILED) { \\\n        error_name = \"CUBLAS_STATUS_ALLOC_FAILED\"; \\\n      } \\\n      else if (result == CUBLAS_STATUS_INVALID_VALUE) { \\\n        error_name = \"CUBLAS_STATUS_INVALID_VALUE\"; \\\n      } \\\n      else if (result == CUBLAS_STATUS_ARCH_MISMATCH) { \\\n        error_name = \"CUBLAS_STATUS_ARCH_MISMATCH\"; \\\n      } \\\n      else if (result == CUBLAS_STATUS_MAPPING_ERROR) { \\\n        error_name = \"CUBLAS_STATUS_MAPPING_ERROR\"; \\\n      } \\\n      else if (result == CUBLAS_STATUS_EXECUTION_FAILED) { \\\n        error_name = \"CUBLAS_STATUS_EXECUTION_FAILED\"; \\\n      } \\\n      else if (result == CUBLAS_STATUS_INTERNAL_ERROR) { \\\n        error_name = \"CUBLAS_STATUS_INTERNAL_ERROR\"; \\\n      } \\\n      printf(\"\\nCUBLAS ERROR: %s failed with error %s\\n\", #func, error_name); \\\n      exit(1); \\\n    } \\\n  } while (0)\n\n\nextern nvrtcResult nvrtcGetLowLevelCode(nvrtcProgram prog, char* code);\nextern nvrtcResult nvrtcGetLowLevelCodeSize(nvrtcProgram prog, size_t* codeSizeRet);\nextern CUresult cuLaunchJITKernel(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ,\n  unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream stream,\n  void** kernelParams, void** extra);\n\n/* CUDA Runtime API: flag values */\nextern CUevent_flags CUEventDefault;\nextern CUstream_flags CUStreamDefault;\nextern CUsharedconfig CUSharedMemBankSizeEightByte;\n\n/* CUBLAS status and operations */\nextern cublasStatus_t ACC_BLAS_STATUS_SUCCESS;\nextern cublasOperation_t ACC_BLAS_OP_N;\nextern cublasOperation_t ACC_BLAS_OP_T;\n\n/* NVRTC error status */\nextern nvrtcResult ACC_RTC_SUCCESS;\n\n#endif /*ACC_CUDA_H*/\n"
  },
  {
    "path": "src/acc/cuda/dbcsr_cuda_nvtx_cu.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#if defined(__CUDA_PROFILING)\n\n#  include <nvToolsExt.h>\n#  include <stdio.h>\n#  include <pthread.h>\n#  include <cstring>\n\nconst uint32_t colormap[] = {0xFFFFFF00, // Yellow\n  0xFFFF00FF, // Fuchsia\n  0xFFFF0000, // Red\n  0xFFC0C0C0, // Silver\n  0xFF808080, // Gray\n  0xFF808000, // Olive\n  0xFF800080, // Purple\n  0xFF800000, // Maroon\n  0xFF00FFFF, // Aqua\n  0xFF00FF00, // Lime\n  0xFF008080, // Teal\n  0xFF008000, // Green\n  0xFF0000FF, // Blue\n  0xFF000080}; // Navy\n\n//==============================================================================\nextern \"C\" int cuda_nvtx_range_push_cu(const char* message) {\n  // assembling event attribute\n  nvtxEventAttributes_t eventAttrib = {0};\n  eventAttrib.version = NVTX_VERSION;\n  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;\n  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;\n  eventAttrib.message.ascii = message;\n\n  // colors are picked based on a (very simple) hash value of the message\n  int hash = 0;\n  for (size_t i = 0; i < strlen(message); i++) hash += i * message[i] * message[i];\n  eventAttrib.colorType = NVTX_COLOR_ARGB;\n  eventAttrib.color = colormap[hash % 14];\n\n  // these field could be filled with useful stuff\n  eventAttrib.payloadType = NVTX_PAYLOAD_TYPE_INT64;\n  eventAttrib.payload.llValue = 123;\n  eventAttrib.category = 42;\n\n  int level = nvtxRangePushEx(&eventAttrib);\n  return (level);\n}\n\n//==============================================================================\nextern \"C\" int cuda_nvtx_range_pop_cu() {\n  int level = nvtxRangePop();\n  return (level);\n}\n\n//==============================================================================\nextern \"C\" void cuda_nvtx_name_osthread_cu(char* name) { nvtxNameOsThread(pthread_self(), name); }\n\n#endif\n"
  },
  {
    "path": "src/acc/cuda/dbcsr_cuda_profiling.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_cuda_profiling\n   !! routines for profiling cuda\n   USE ISO_C_BINDING, ONLY: C_CHAR, &\n                            C_INT, &\n                            C_NULL_CHAR, &\n                            C_SIZE_T\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          int_8\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC  :: cuda_nvtx_init, cuda_nvtx_range_push, cuda_nvtx_range_pop\n\n#if defined( __CUDA_PROFILING )\n\n   INTERFACE\n      FUNCTION cuda_nvtx_range_push_dc(message) RESULT(level) &\n         BIND(C, name=\"cuda_nvtx_range_push_cu\")\n         IMPORT\n         CHARACTER(kind=C_CHAR), DIMENSION(*), &\n            INTENT(IN)                             :: message\n         INTEGER(KIND=C_INT)                      :: level\n\n      END FUNCTION cuda_nvtx_range_push_dc\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION cuda_nvtx_range_pop_dc() RESULT(level) &\n         BIND(C, name=\"cuda_nvtx_range_pop_cu\")\n         IMPORT\n         INTEGER(KIND=C_INT)                      :: level\n\n      END FUNCTION cuda_nvtx_range_pop_dc\n   END INTERFACE\n\n   INTERFACE\n      SUBROUTINE cuda_nvtx_name_osthread_cu(name) &\n         BIND(C, name=\"cuda_nvtx_name_osthread_cu\")\n         IMPORT\n         CHARACTER(KIND=C_CHAR), DIMENSION(*)     :: name\n\n      END SUBROUTINE cuda_nvtx_name_osthread_cu\n   END INTERFACE\n\n#endif\n\nCONTAINS\n\n   SUBROUTINE cuda_nvtx_init()\n#if defined( __CUDA_PROFILING )\n      CHARACTER(len=default_string_length)     :: threadname\n      INTEGER                                  :: ithread\n\n!$OMP     PARALLEL DEFAULT (NONE), PRIVATE (ithread,threadname)\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      WRITE (threadname, \"(I3,A,I2,A)\") ithread\n      CALL cuda_nvtx_name_osthread_cu(TRIM(threadname)//c_null_char)\n!$OMP     END PARALLEL\n#endif\n   END SUBROUTINE cuda_nvtx_init\n\n   SUBROUTINE cuda_nvtx_range_push(routineN)\n      CHARACTER(LEN=*), INTENT(IN)             :: routineN\n#if defined( __CUDA_PROFILING )\n      INTEGER                                  :: level\n      level = cuda_nvtx_range_push_dc(TRIM(routineN)//CHAR(0))\n#else\n      CALL dbcsr_abort(__LOCATION__, \"cuda_nvtx_range_push: \"// &\n                       \"__CUDA_PROFILING not compiled in, but called with:\"//TRIM(routineN))\n#endif\n   END SUBROUTINE cuda_nvtx_range_push\n\n   SUBROUTINE cuda_nvtx_range_pop()\n#if defined( __CUDA_PROFILING )\n      INTEGER                                  :: level\n      level = cuda_nvtx_range_pop_dc()\n#else\n      DBCSR_ABORT(\"cuda_nvtx_range_push: __CUDA_PROFILING not compiled in.\")\n#endif\n   END SUBROUTINE cuda_nvtx_range_pop\n\nEND MODULE dbcsr_cuda_profiling\n"
  },
  {
    "path": "src/acc/cuda_hip/PACKAGE",
    "content": "{\n\"description\": \"CUDA/HIP backend for accelerator API\",\n\"archive\":\"libdbcsr\",\n\"requires\": [\"../../base\", \"..\", \"../cuda\", \"../hip\"]\n}\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_blas.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include <stdio.h>\n\n#include \"acc_blas.h\"\n#include \"acc_error.h\"\n\n\n/****************************************************************************/\nint acc_blas_create(ACC_BLAS(Handle_t) * *handle) {\n  *handle = (ACC_BLAS(Handle_t)*)malloc(sizeof(ACC_BLAS(Handle_t)));\n  ACC_BLAS_CALL(Create, (*handle));\n  return (0);\n}\n\n/****************************************************************************/\nint acc_blas_destroy(ACC_BLAS(Handle_t) * handle) {\n  ACC_BLAS(Status_t) cStatus = ACC_BLAS(Destroy)(*handle);\n  free(handle);\n  if (cStatus != ACC_BLAS_STATUS_SUCCESS) {\n    printf(\"ACC BLAS finalization failed\\n\");\n    return (-1);\n  }\n  return (0);\n}\n\n/****************************************************************************/\nint acc_blas_dgemm(ACC_BLAS(Handle_t) * handle, char transa, char transb, int m, int n, int k, int a_offset, int b_offset,\n  int c_offset, const double* a_data, const double* b_data, double* c_data, double alpha, double beta, ACC(Stream_t) * stream) {\n  ACC_BLAS(Operation_t) cTransa = transa == 'N' ? ACC_BLAS_OP_N : ACC_BLAS_OP_T;\n  ACC_BLAS(Operation_t) cTransb = transb == 'N' ? ACC_BLAS_OP_N : ACC_BLAS_OP_T;\n  int& lda = transa == 'N' ? m : k;\n  int& ldb = transb == 'N' ? k : n;\n\n  ACC_BLAS_CALL(SetStream, (*handle, *stream));\n\n  ACC_BLAS_CALL(Dgemm,\n    (*handle, cTransa, cTransb, m, n, k, &alpha, &a_data[a_offset], lda, &b_data[b_offset], ldb, &beta, &c_data[c_offset], lda));\n\n  return (0);\n}\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_blas.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef ACC_BLAS_H\n#define ACC_BLAS_H\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n#include <stdio.h>\n#include \"acc_error.h\"\n\n/****************************************************************************/\nint acc_blas_create(ACC_BLAS(Handle_t) * *handle);\n\n/****************************************************************************/\nint acc_blas_destroy(ACC_BLAS(Handle_t) * handle);\n\n/****************************************************************************/\nint acc_blas_dgemm(ACC_BLAS(Handle_t) * handle, char transa, char transb, int m, int n, int k, int a_offset, int b_offset,\n  int c_offset, const double* a_data, const double* b_data, double* c_data, double alpha, double beta, ACC(Stream_t) * stream);\n\n#endif /* ACC_BLAS_H */\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_dev.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved                          */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n#include \"acc_error.h\"\n#include \"../acc.h\"\n\n#include <stdio.h>\n#include <math.h>\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_get_ndevices(int* n_devices) {\n  ACC_API_CALL(GetDeviceCount, (n_devices));\n  return 0;\n}\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_device_synchronize() {\n  ACC_API_CALL(DeviceSynchronize, ());\n  return 0;\n}\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_set_active_device(int device_id) {\n  int myDevice;\n\n  ACC_API_CALL(SetDevice, (device_id));\n  ACC_API_CALL(GetDevice, (&myDevice));\n\n  if (myDevice != device_id) return -1;\n\n  // establish context\n  ACC_API_CALL(Free, (0));\n\n#if defined(__CUDA) || defined(__HIP_PLATFORM_NVCC__)\n  static bool once = false;\n  if (!once) {\n    ACC_API_CALL(DeviceSetLimit, (ACC(LimitPrintfFifoSize), (size_t)1000000000));\n    once = true;\n  }\n#endif\n\n  return 0;\n}\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_error.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n#include \"acc_error.h\"\n\n#include <stdio.h>\n#include <math.h>\n\n/****************************************************************************/\nint acc_error_check(ACC(Error_t) error) {\n  if (error != ACC(Success)) {\n    printf(BACKEND \" error: %s\\n\", ACC(GetErrorString)(error));\n    return -1;\n  }\n  return 0;\n}\n\nextern \"C\" void c_dbcsr_acc_clear_errors() { ACC(GetLastError)(); }\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_error.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef LIBSMM_ACC_H\n#define LIBSMM_ACC_H\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\nint acc_error_check(ACC(Error_t) acc_error);\n\n#endif /* LIBSMM_ACC_H */\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_event.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n#include \"acc_error.h\"\n#include \"../acc.h\"\n\n#include <stdio.h>\n#include <math.h>\n\nstatic const int verbose_print = 0;\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_event_create(void** event_p) {\n  *event_p = malloc(sizeof(ACC(Event_t)));\n  ACC(Event_t)* acc_event = (ACC(Event_t)*)*event_p;\n\n  ACC(Error_t) cErr = ACC(EventCreate)(acc_event);\n  if (verbose_print) printf(\"EventCreate) :  %p -> %ld\\n\", *event_p, (long int)*acc_event);\n  if (acc_error_check(cErr)) return -1;\n  if (acc_error_check(ACC(GetLastError)())) return -1;\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_event_destroy(void* event) {\n  ACC(Event_t)* acc_event = (ACC(Event_t*))event;\n\n  c_dbcsr_acc_clear_errors();\n  if (verbose_print) printf(\"EventDestroy, called\\n\");\n  if (event == NULL) return 0; /* not an error */\n  ACC(Error_t) cErr = ACC(EventDestroy)(*acc_event);\n  free(acc_event);\n  if (acc_error_check(cErr)) return -1;\n  if (acc_error_check(ACC(GetLastError)())) return -1;\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_event_record(void* event, void* stream) {\n  ACC(Event_t)* acc_event = (ACC(Event_t)*)event;\n  ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream;\n\n  if (verbose_print)\n    printf(\"EventRecord): %p -> %ld,  %p -> %ld\\n\", (const void*)acc_event, (long int)*acc_event, (const void*)acc_stream,\n      (long int)*acc_stream);\n  ACC_API_CALL(EventRecord, (*acc_event, *acc_stream));\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_event_query(void* event, int* has_occurred) {\n  if (verbose_print) printf(\"dbcsr_acc_event_query called\\n\");\n\n  ACC(Event_t)* acc_event = (ACC(Event_t)*)event;\n  ACC(Error_t) cErr = ACC(EventQuery)(*acc_event);\n  if (cErr == ACC(Success)) {\n    *has_occurred = 1;\n    return 0;\n  }\n\n  if (cErr == ACC(ErrorNotReady)) {\n    *has_occurred = 0;\n    return 0;\n  }\n\n  return -1; // something went wrong\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_stream_wait_event(void* stream, void* event) {\n  if (verbose_print) printf(\"c_dbcsr_acc_stream_wait_event called\\n\");\n\n  ACC(Event_t)* acc_event = (ACC(Event_t)*)event;\n  ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream;\n\n  // flags: Parameters for the operation (must be 0)\n  ACC_API_CALL(StreamWaitEvent, (*acc_stream, *acc_event, 0));\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_event_synchronize(void* event) {\n  if (verbose_print) printf(\"EventSynchronize called\\n\");\n  ACC(Event_t)* acc_event = (ACC(Event_t)*)event;\n  ACC_API_CALL(EventSynchronize, (*acc_event));\n  return 0;\n}\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_init.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n#include \"../acc.h\"\n#include \"../acc_libsmm.h\"\n\n#include <stdio.h>\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_init() {\n  int myDevice, runtimeVersion;\n  // Driver boilerplate\n  ACC_DRV_CALL(Init, (0));\n  ACC_DRV(device) acc_device;\n  ACC_API_CALL(GetDevice, (&myDevice));\n  ACC_DRV_CALL(DeviceGet, (&acc_device, myDevice));\n#if defined(__CUDA)\n  ACC_DRV(context) ctx;\n  ACC_DRV_CALL(DevicePrimaryCtxRetain, (&ctx, acc_device));\n#endif\n  ACC_API_CALL(RuntimeGetVersion, (&runtimeVersion));\n\n  // Initialize libsmm_acc, DBCSR's GPU backend\n  return libsmm_acc_init();\n}\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_finalize() {\n  int myDevice;\n  // Release driver resources\n  ACC_DRV(device) acc_device;\n  ACC_API_CALL(GetDevice, (&myDevice));\n  ACC_DRV_CALL(DeviceGet, (&acc_device, myDevice));\n#if defined(__CUDA)\n  ACC_DRV_CALL(DevicePrimaryCtxRelease, (acc_device));\n#endif\n  return libsmm_acc_finalize();\n}\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_mem.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n#include \"acc_error.h\"\n#include \"../acc.h\"\n\n#include <stdio.h>\n#include <math.h>\n\nstatic const int verbose_print = 0;\n\n// some api calls have changed, but we wrap them internally\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_dev_mem_allocate(void** dev_mem, size_t n) {\n  ACC_API_CALL(Malloc, ((void**)dev_mem, (size_t)n));\n  if (dev_mem == NULL) return -2;\n  if (verbose_print) printf(\"Device allocation address %p, size %ld\\n\", *dev_mem, (long)n);\n\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_dev_mem_deallocate(void* dev_mem) {\n  if (verbose_print) printf(\"Device deallocation address %p\\n\", dev_mem);\n  ACC_API_CALL(Free, ((void*)dev_mem));\n\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_host_mem_allocate(void** host_mem, size_t n, void* stream) {\n  unsigned int flag = ACC(HostAllocDefault);\n\n  DBCSR_MARK_USED(stream);\n\n  ACC_API_CALL(HostAlloc, ((void**)host_mem, (size_t)n, flag));\n  if (host_mem == NULL) return -2;\n  if (verbose_print) printf(\"Allocating %zd bytes of host pinned memory at %p\\n\", n, *host_mem);\n\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_host_mem_deallocate(void* host_mem, void* stream) {\n  DBCSR_MARK_USED(stream);\n\n  if (verbose_print) printf(\"Host pinned deallocation address %p\\n\", host_mem);\n  ACC_API_CALL(FreeHost, ((void*)host_mem));\n\n  return 0;\n}\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_dev_mem_set_ptr(void** dev_mem, void* other, size_t lb) {\n  (*dev_mem) = ((char*)other) + lb;\n\n  return 0;\n}\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_memcpy_h2d(const void* host_mem, void* dev_mem, size_t count, void* stream) {\n  ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream;\n  if (verbose_print) printf(\"Copying %zd bytes from host address %p to device address %p \\n\", count, host_mem, dev_mem);\n\n  ACC_API_CALL(MemcpyAsync, (dev_mem, host_mem, count, ACC(MemcpyHostToDevice), *acc_stream));\n\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_memcpy_d2h(const void* dev_mem, void* host_mem, size_t count, void* stream) {\n  ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream;\n  if (verbose_print) printf(\"Copying %zd bytes from device address %p to host address %p\\n\", count, dev_mem, host_mem);\n\n  ACC_API_CALL(MemcpyAsync, (host_mem, dev_mem, count, ACC(MemcpyDeviceToHost), *acc_stream));\n\n  if (verbose_print) printf(\"d2h %f\\n\", *((double*)host_mem));\n\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_memcpy_d2d(const void* devmem_src, void* devmem_dst, size_t count, void* stream) {\n  ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream;\n  if (verbose_print) printf(\"Copying %zd bytes from device address %p to device address %p \\n\", count, devmem_src, devmem_dst);\n\n\n  if (stream == NULL) {\n    ACC_API_CALL(Memcpy, (devmem_dst, devmem_src, count, ACC(MemcpyDeviceToDevice)));\n  }\n  else {\n    ACC_API_CALL(MemcpyAsync, (devmem_dst, devmem_src, count, ACC(MemcpyDeviceToDevice), *acc_stream));\n  }\n\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_memset_zero(void* dev_mem, size_t offset, size_t length, void* stream) {\n  ACC(Error_t) cErr;\n  ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream;\n  if (stream == NULL) {\n    cErr = ACC(Memset)((void*)(((char*)dev_mem) + offset), (int)0, length);\n  }\n  else {\n    cErr = ACC(MemsetAsync)((void*)(((char*)dev_mem) + offset), (int)0, length, *acc_stream);\n  }\n\n  if (verbose_print) printf(\"Zero at device address %p, offset %d, len %d\\n\", dev_mem, (int)offset, (int)length);\n  if (acc_error_check(cErr)) return -1;\n  if (acc_error_check(ACC(GetLastError)())) return -1;\n\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_dev_mem_info(size_t* free, size_t* avail) {\n  ACC_API_CALL(MemGetInfo, (free, avail));\n  return 0;\n}\n\n#pragma GCC diagnostic pop\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_stream.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n#include \"acc_error.h\"\n#include \"../acc.h\"\n\n#include <stdio.h>\n#include <math.h>\n\n#if defined(__CUDA_PROFILING)\n#  include <nvToolsExtCudaRt.h>\n#endif\n\nstatic const int verbose_print = 0;\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_stream_priority_range(int* least, int* greatest) {\n  *least = -1;\n  *greatest = -1;\n  ACC_API_CALL(DeviceGetStreamPriorityRange, (least, greatest));\n\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_stream_create(void** stream_p, const char* name, int priority) {\n  ACC(Error_t) cErr;\n  *stream_p = malloc(sizeof(ACC(Stream_t)));\n\n  ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)*stream_p;\n\n  if (priority > 0) {\n    unsigned int flags = ACC(StreamNonBlocking);\n    cErr = ACC(StreamCreateWithPriority)(acc_stream, flags, priority);\n  }\n  else {\n    cErr = ACC(StreamCreate)(acc_stream);\n  }\n\n  if (verbose_print) printf(\"StreamCreate : %p -> %p \\n\", *stream_p, (const void*)*acc_stream);\n  if (acc_error_check(cErr)) return -1;\n  if (acc_error_check(ACC(GetLastError)())) return -1;\n\n#if defined(__CUDA_PROFILING)\n  nvtxNameCudaStreamA(*acc_stream, name);\n#else\n  DBCSR_MARK_USED(name);\n#endif\n\n  return 0;\n}\n\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_stream_destroy(void* stream) {\n  ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream;\n\n  c_dbcsr_acc_clear_errors();\n  if (verbose_print) printf(\"StreamDestroy called\\n\");\n  if (stream == NULL) return 0; /* not an error */\n  ACC(Error_t) cErr = ACC(StreamDestroy)(*acc_stream);\n  free(acc_stream);\n  if (acc_error_check(cErr)) return -1;\n  if (acc_error_check(ACC(GetLastError)())) return -1;\n  return 0;\n}\n\n/****************************************************************************/\nextern \"C\" int c_dbcsr_acc_stream_sync(void* stream) {\n  ACC(Stream_t)* acc_stream = (ACC(Stream_t)*)stream;\n  c_dbcsr_acc_clear_errors();\n  ACC_API_CALL(StreamSynchronize, (*acc_stream));\n  return 0;\n}\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_utils.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include \"acc_utils.h\"\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n//===========================================================================\nint acc_get_gpu_warp_size() {\n  int device = 0;\n  ACC(DeviceProp) prop;\n  ACC_API_CALL(GetDevice, (&device));\n  ACC_API_CALL(GetDeviceProperties, (&prop, device));\n  return prop.warpSize;\n}\n"
  },
  {
    "path": "src/acc/cuda_hip/acc_utils.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef ACC_UTILS_H\n#define ACC_UTILS_H\n\nint acc_get_gpu_warp_size(void);\n\n#endif /*ACC_UTILS_H*/\n"
  },
  {
    "path": "src/acc/cuda_hip/calculate_norms.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved                          */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n/*****************************************************************************\n *  Authors: Gina Sitaraman <gina.sitaraman@amd.com>                         *\n *****************************************************************************/\n\n/*\n * Execution configuration:\n * gridDim.x = number of matrix blocks in this batched norms calculation\n *           = length of the batched norms calculation stack\n * blockIdx.x = {0, ..., gridDim.x-1}\n * blockDim.x = warp size (for now, assuming warp size is going to be 64 or 32)\n * threadIdx.x = {0, ..., blockDim.x-1}\n\n * Execute batched norms calculation\n\n * Function arguments\n * --- norms: (pointer to global memory):\n *     output array of norms, one per matrix in the stack\n * --- offsets: (pointer to global memory):\n *     array of offsets, indicating where each block starts in the \"mat\" buffer\n * --- nelems: (pointer to global memory):\n *     array of integers, indicating the number of elements in each matrix/block\n * --- mat (pointer to global memory):\n *     arrays containing the matrices for which norms are calculated\n\n * Algorithm specificities:\n * --- warp level primitives are used to reduce within a warp/wavefront, and\n *     shared memory is used if more than one warp/wavefront is detected\n */\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n#include \"acc_utils.h\"\n\ntemplate<int warpsz, int blocksz>\n__global__ void calculate_norms_d(\n  float* __restrict__ norms, const int* __restrict__ offsets, const int* __restrict__ nelems, const double* __restrict__ mat) {\n  __shared__ double buf[(blocksz + warpsz - 1) / warpsz];\n  double d, sum = 0.0;\n\n  /* Get the offset in the stack that this thread block should handle */\n  int blkoffset = offsets[blockIdx.x];\n\n  /* Get the number of elements in this matrix */\n  int nelem = nelems[blockIdx.x];\n\n  /* Loop over nelem matrix elements for this block */\n  for (int i = threadIdx.x; i < nelem; i += blockDim.x) {\n    /* Load matrix elements, reduce in register */\n    d = mat[blkoffset + i];\n    sum += d * d;\n  }\n  __syncthreads();\n\n  /* reduce in warp to one value using warp level primitives */\n#if defined(__CUDA)\n  unsigned mask = 0xffffffff;\n  for (int offset = warpsz / 2; offset > 0; offset /= 2) {\n    sum += __shfl_down_sync(mask, sum, offset);\n  }\n#elif defined(__HIP)\n  for (int offset = warpsz / 2; offset > 0; offset /= 2) {\n    sum += __shfl_down(sum, offset);\n  }\n#endif\n\n  /* reduce between warps if needed */\n  if (blocksz > warpsz) {\n    if (threadIdx.x % warpsz == 0) {\n      int warpid = threadIdx.x / warpsz;\n      buf[warpid] = sum;\n    }\n    __syncthreads();\n    if (threadIdx.x == 0) {\n      for (int i = 1; i < blocksz / warpsz; ++i) {\n        sum += buf[i];\n      }\n    }\n  }\n  if (threadIdx.x == 0) {\n    /* write out this stack's dot product */\n    norms[blockIdx.x] = sum;\n  }\n}\n\nextern \"C\" int c_calculate_norms(\n  const double* mat, int nblks, const int* offsets, const int* nelems, float* norms, void* stream_ptr) {\n  int warp_size = acc_get_gpu_warp_size();\n\n  dim3 grid(nblks);\n  dim3 block(warp_size);\n\n  ACC_DRV(stream) stream = *((ACC_DRV(stream)*)stream_ptr);\n  /* block size may be a multiple of warp_size as well */\n  if (warp_size == 64) {\n    calculate_norms_d<64, 64><<<grid, block, 0, stream>>>(norms, offsets, nelems, mat);\n  }\n  else if (warp_size == 32) {\n    calculate_norms_d<32, 32><<<grid, block, 0, stream>>>(norms, offsets, nelems, mat);\n  }\n  else {\n    fprintf(stderr, \"Found warp size other than 64 or 32, aborting..\\n\");\n    return -1;\n  }\n  return 0;\n}\n"
  },
  {
    "path": "src/acc/dbcsr_acc_device.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_acc_device\n#if defined (__DBCSR_ACC)\n   USE ISO_C_BINDING, ONLY: C_INT\n#endif\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_level\n\n   IMPLICIT NONE\n\n   PUBLIC :: dbcsr_acc_get_ndevices, dbcsr_acc_set_active_device, dbcsr_acc_clear_errors\n   PUBLIC :: acc_device_synchronize\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_device'\n\n#if defined (__DBCSR_ACC)\n   INTERFACE\n      FUNCTION acc_get_ndevices_cu(n_devices) RESULT(istat) &\n         BIND(C, name=\"c_dbcsr_acc_get_ndevices\")\n         IMPORT\n         INTEGER(KIND=C_INT), INTENT(OUT)         :: n_devices\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_get_ndevices_cu\n\n      FUNCTION acc_set_active_device_cu(device_id) RESULT(istat) &\n         BIND(C, name=\"c_dbcsr_acc_set_active_device\")\n         IMPORT\n         INTEGER(KIND=C_INT), INTENT(IN), VALUE   :: device_id\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_set_active_device_cu\n\n      FUNCTION acc_device_synchronize_cu() RESULT(istat) &\n         BIND(C, name=\"c_dbcsr_acc_device_synchronize\")\n         IMPORT\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_device_synchronize_cu\n\n      SUBROUTINE acc_clear_errors_cu() &\n         BIND(C, name=\"c_dbcsr_acc_clear_errors\")\n      END SUBROUTINE acc_clear_errors_cu\n\n   END INTERFACE\n\n#endif\n\nCONTAINS\n\n   FUNCTION dbcsr_acc_get_ndevices() RESULT(n)\n      !! Get number of accelerator devices\n\n      INTEGER                                  :: n\n         !! number of accelerator devices\n\n#if defined (__DBCSR_ACC)\n      INTEGER                                  :: istat\n#endif\n\n      n = 0\n#if defined (__DBCSR_ACC)\n      istat = acc_get_ndevices_cu(n)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"dbcsr_acc_get_ndevices: failed\")\n#endif\n   END FUNCTION dbcsr_acc_get_ndevices\n\n   SUBROUTINE dbcsr_acc_set_active_device(device_id)\n      !! Set active accelerator device\n\n      INTEGER :: device_id\n\n#if defined (__DBCSR_ACC)\n      INTEGER :: istat\n\n!$    IF (0 == omp_get_level()) THEN\n         istat = 0\n!$OMP    PARALLEL DEFAULT(NONE) SHARED(device_id) REDUCTION(MAX:istat)\n         istat = acc_set_active_device_cu(device_id)\n!$OMP    END PARALLEL\n!$    ELSE\n         istat = acc_set_active_device_cu(device_id)\n!$    END IF\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"dbcsr_acc_set_active_device: failed\")\n\n#else\n      MARK_USED(device_id)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in\")\n#endif\n   END SUBROUTINE dbcsr_acc_set_active_device\n\n   SUBROUTINE dbcsr_acc_clear_errors()\n      !! Clear GPU errors\n#if defined (__DBCSR_ACC)\n      CALL acc_clear_errors_cu()\n#else\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in\")\n#endif\n   END SUBROUTINE dbcsr_acc_clear_errors\n\n   SUBROUTINE acc_device_synchronize()\n      !! Fortran-wrapper for waiting for work on all streams to complete\n\n#if defined (__DBCSR_ACC)\n      INTEGER                                  :: istat\n      istat = acc_device_synchronize_cu()\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_device_synchronize failed\")\n#else\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in\")\n#endif\n   END SUBROUTINE acc_device_synchronize\n\nEND MODULE dbcsr_acc_device\n"
  },
  {
    "path": "src/acc/dbcsr_acc_devmem.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_acc_devmem\n   !! Accelerator support\n#if  defined (__DBCSR_ACC)\n   USE ISO_C_BINDING, ONLY: C_INT, C_SIZE_T, C_PTR, C_LOC, C_NULL_PTR, C_ASSOCIATED\n#endif\n   USE dbcsr_kinds, ONLY: int_4, &\n                          int_4_size, &\n                          int_8, &\n                          int_8_size, &\n                          real_4, &\n                          real_4_size, &\n                          real_8, &\n                          real_8_size\n   USE dbcsr_acc_stream, ONLY: acc_stream_associated, &\n                               acc_stream_cptr, &\n                               acc_stream_synchronize, &\n                               acc_stream_type\n   USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device\n   USE dbcsr_config, ONLY: get_accdrv_active_device_id\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC :: acc_devmem_type\n   PUBLIC :: acc_devmem_allocate_bytes, acc_devmem_deallocate\n   PUBLIC :: acc_devmem_setzero_bytes\n   PUBLIC :: acc_devmem_allocated\n   PUBLIC :: acc_devmem_dev2host, acc_devmem_host2dev\n   PUBLIC :: acc_devmem_size_in_bytes\n   PUBLIC :: acc_devmem_ensure_size_bytes\n   PUBLIC :: acc_devmem_cptr\n   PUBLIC :: acc_devmem_set_cptr\n   PUBLIC :: acc_devmem_info\n\n   INTERFACE acc_devmem_dev2host\n      MODULE PROCEDURE dev2host_i4_1D\n      MODULE PROCEDURE dev2host_i8_1D\n      MODULE PROCEDURE dev2host_r4_1D\n      MODULE PROCEDURE dev2host_r8_1D\n      MODULE PROCEDURE dev2host_c4_1D\n      MODULE PROCEDURE dev2host_c8_1D\n   END INTERFACE acc_devmem_dev2host\n\n   INTERFACE acc_devmem_host2dev\n      MODULE PROCEDURE host2dev_i4_1D\n      MODULE PROCEDURE host2dev_i8_1D\n      MODULE PROCEDURE host2dev_r4_1D\n      MODULE PROCEDURE host2dev_r8_1D\n      MODULE PROCEDURE host2dev_c4_1D\n      MODULE PROCEDURE host2dev_c8_1D\n      MODULE PROCEDURE host2dev_i4_2D\n      MODULE PROCEDURE host2dev_i8_2D\n      MODULE PROCEDURE host2dev_r4_2D\n      MODULE PROCEDURE host2dev_r8_2D\n      MODULE PROCEDURE host2dev_c4_2D\n      MODULE PROCEDURE host2dev_c8_2D\n   END INTERFACE acc_devmem_host2dev\n\n   TYPE acc_devmem_type\n      PRIVATE\n      INTEGER                      :: size_in_bytes = -1\n#if  defined (__DBCSR_ACC)\n      TYPE(C_PTR)                  :: cptr = C_NULL_PTR\n#endif\n   END TYPE acc_devmem_type\n\n#if  defined (__DBCSR_ACC)\n\n   INTERFACE\n      FUNCTION acc_interface_dev_mem_info(free, avail) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_dev_mem_info\")\n         IMPORT\n         INTEGER(KIND=C_SIZE_T), INTENT(OUT)      :: free, avail\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_dev_mem_info\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_dev_mem_alloc(mem, n) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_dev_mem_allocate\")\n         IMPORT\n         TYPE(C_PTR)                              :: mem\n         INTEGER(KIND=C_SIZE_T), INTENT(IN), &\n            VALUE                                  :: n\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_dev_mem_alloc\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_dev_mem_dealloc(mem) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_dev_mem_deallocate\")\n         IMPORT\n         TYPE(C_PTR), VALUE                       :: mem\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_dev_mem_dealloc\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_dev_mem_set_ptr(mem, other, lb) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_dev_mem_set_ptr\")\n         IMPORT\n         TYPE(C_PTR)                              :: mem\n         TYPE(C_PTR), VALUE                       :: other\n         INTEGER(KIND=C_SIZE_T), INTENT(IN), &\n            VALUE                                :: lb\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_dev_mem_set_ptr\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_memzero(this, offset, length, stream_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_memset_zero\")\n         IMPORT\n         TYPE(C_PTR), INTENT(IN), VALUE           :: this\n         INTEGER(KIND=C_SIZE_T), INTENT(IN), &\n            VALUE                                  :: offset, length\n         TYPE(C_PTR), VALUE                       :: stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_memzero\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_memcpy_h2d(host, dev, count, stream_ptr) RESULT(istat) &\n         BIND(C, name=\"c_dbcsr_acc_memcpy_h2d\")\n         IMPORT\n         TYPE(C_PTR), INTENT(IN), VALUE           :: host\n         TYPE(C_PTR), VALUE                       :: dev\n         INTEGER(KIND=C_SIZE_T), INTENT(IN), &\n            VALUE                                  :: count\n         TYPE(C_PTR), VALUE                       :: stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_memcpy_h2d\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_memcpy_d2h(dev, host, count, stream_ptr) RESULT(istat) &\n         BIND(C, name=\"c_dbcsr_acc_memcpy_d2h\")\n         IMPORT\n         TYPE(C_PTR), INTENT(IN), VALUE           :: dev\n         TYPE(C_PTR), VALUE                       :: host\n         INTEGER(KIND=C_SIZE_T), INTENT(IN), &\n            VALUE                                  :: count\n         TYPE(C_PTR), VALUE                       :: stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_memcpy_d2h\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_memcpy_d2d(dev_src, dev_dst, count, stream_ptr) RESULT(istat) &\n         BIND(C, name=\"c_dbcsr_acc_memcpy_d2d\")\n         IMPORT\n         TYPE(C_PTR), INTENT(IN), VALUE           :: dev_src\n         TYPE(C_PTR), VALUE                       :: dev_dst\n         INTEGER(KIND=C_SIZE_T), INTENT(IN), &\n            VALUE                                  :: count\n         TYPE(C_PTR), VALUE                       :: stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_memcpy_d2d\n   END INTERFACE\n\n#endif\n\nCONTAINS\n\n   SUBROUTINE acc_devmem_ensure_size_bytes(this, stream, requested_size_in_bytes, nocopy, zero_pad)\n      !! Ensures that given devmem has at least the requested size.\n\n      TYPE(acc_devmem_type), &\n         INTENT(INOUT)                          :: this\n         !! device memory\n      TYPE(acc_stream_type), INTENT(IN) :: stream\n         !! on which zeroing and memcopying is performed\n      INTEGER, INTENT(IN)                      :: requested_size_in_bytes\n         !! requested size in bytes\n      LOGICAL, INTENT(IN), OPTIONAL            :: nocopy, zero_pad\n         !! if after growin old content should NOT be copied over. Default: false.\n         !! if after growing the new memory should be zeroed. Default: false.\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      MARK_USED(stream)\n      MARK_USED(requested_size_in_bytes)\n      MARK_USED(nocopy)\n      MARK_USED(zero_pad)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n\n      LOGICAL                                  :: my_nocopy, my_zero_pad\n      TYPE(C_PTR)                              :: old_cptr, new_cptr, stream_cptr\n      INTEGER                                  :: new_size, old_size, istat\n\n      IF (this%size_in_bytes < 0) &\n         DBCSR_ABORT(\"acc_devmem_ensure_size_bytes: not allocated\")\n      IF (.NOT. acc_stream_associated(stream)) &\n         DBCSR_ABORT(\"acc_devmem_ensure_size_bytes: stream not associated\")\n\n      IF (this%size_in_bytes < requested_size_in_bytes) THEN\n         !WRITE (*,*) \"acc_devmem_ensure_size_bytes: growing dev_mem to: \", data_size\n\n         CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n\n         new_size = requested_size_in_bytes\n         old_size = this%size_in_bytes\n         old_cptr = this%cptr\n\n         new_cptr = C_NULL_PTR\n         istat = acc_interface_dev_mem_alloc(new_cptr, INT(new_size, KIND=C_SIZE_T))\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"acc_devmem_ensure_size_bytes: alloc failed\")\n\n         this%cptr = new_cptr\n         this%size_in_bytes = requested_size_in_bytes\n\n         my_zero_pad = .FALSE.\n         IF (PRESENT(zero_pad)) my_zero_pad = zero_pad\n         IF (my_zero_pad) &\n            CALL acc_devmem_setzero_bytes(this, first_byte=old_size + 1, stream=stream)\n\n         my_nocopy = .FALSE.\n         IF (PRESENT(nocopy)) my_nocopy = nocopy\n         IF (.NOT. my_nocopy) THEN\n            stream_cptr = acc_stream_cptr(stream)\n            istat = acc_interface_memcpy_d2d(old_cptr, new_cptr, INT(old_size, KIND=C_SIZE_T), stream_cptr)\n            IF (istat /= 0) &\n               DBCSR_ABORT(\"acc_devmem_ensure_size_bytes: memcpy failed\")\n         END IF\n\n         CALL acc_stream_synchronize(stream)\n         istat = acc_interface_dev_mem_dealloc(old_cptr)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"acc_devmem_ensure_size_bytes: dealloc failed\")\n\n      END IF\n#endif\n   END SUBROUTINE acc_devmem_ensure_size_bytes\n\n   FUNCTION acc_devmem_allocated(this) RESULT(res)\n      !! Returns a logical, which indicates if the given devmem is allocated.\n\n      TYPE(acc_devmem_type), INTENT(IN)                  :: this\n      LOGICAL                                            :: res\n         !! true if device memory is allocated, false otherwise\n\n#if defined (__DBCSR_ACC)\n      DBCSR_ASSERT(C_ASSOCIATED(this%cptr) .OR. this%size_in_bytes <= 0)\n#endif\n\n      res = this%size_in_bytes >= 0\n   END FUNCTION acc_devmem_allocated\n\n   FUNCTION acc_devmem_size_in_bytes(this) RESULT(res)\n      !! Returns size of given devmem in terms of item count (not bytes!)\n\n      TYPE(acc_devmem_type), INTENT(IN)                  :: this\n      INTEGER                                            :: res\n         !! size of device memory (item count)\n\n      IF (this%size_in_bytes < 0) &\n         DBCSR_ABORT(\"acc_devmem_len: not allocated\")\n      res = this%size_in_bytes\n   END FUNCTION acc_devmem_size_in_bytes\n\n#if ! defined (__DBCSR_ACC)\n   FUNCTION acc_devmem_cptr(this) RESULT(res)\n      !! Returns C-pointer to data of given devmem.\n\n      INTEGER, INTENT(IN)                                :: this\n         !! device memory\n      LOGICAL                                            :: res\n         !! false (accelerator support is not enabled)\n\n      MARK_USED(this)\n      res = .FALSE.\n   END FUNCTION acc_devmem_cptr\n#else\n   FUNCTION acc_devmem_cptr(this) RESULT(res)\n      !! Returns C-pointer to data of given devmem.\n\n      TYPE(acc_devmem_type), INTENT(IN)                  :: this\n      TYPE(C_PTR)                                        :: res\n         !! C-pointer to data of given devmem\n\n      IF (this%size_in_bytes < 0) &\n         DBCSR_ABORT(\"acc_devmem_cptr: not allocated\")\n      res = this%cptr\n   END FUNCTION acc_devmem_cptr\n#endif\n\n   SUBROUTINE acc_devmem_set_cptr(this, pointee, size_in_bytes, lb_in_bytes)\n      !! Allocates a given devmem.\n\n      TYPE(acc_devmem_type), INTENT(INOUT)     :: this\n      TYPE(acc_devmem_type), INTENT(IN)        :: pointee\n      INTEGER, INTENT(IN)                      :: size_in_bytes, lb_in_bytes\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      MARK_USED(pointee)\n      MARK_USED(size_in_bytes)\n      MARK_USED(lb_in_bytes)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n\n      INTEGER                                  :: istat\n\n      IF (this%size_in_bytes >= 0) &\n         DBCSR_ABORT(\"acc_devmem_set_cptr: already allocated\")\n      IF (pointee%size_in_bytes < 0 .AND. size_in_bytes > 0) &\n         DBCSR_ABORT(\"acc_devmem_set_cptr: out-of-bounds\")\n      IF (size_in_bytes > 0) THEN\n         IF ((lb_in_bytes + size_in_bytes) .GT. pointee%size_in_bytes) &\n            DBCSR_ABORT(\"acc_devmem_set_cptr: out-of-bounds\")\n         this%size_in_bytes = size_in_bytes\n         istat = acc_interface_dev_mem_set_ptr(this%cptr, pointee%cptr, INT(lb_in_bytes, KIND=C_SIZE_T))\n      ELSE\n         ! Empty buffers\n         this%size_in_bytes = pointee%size_in_bytes\n         this%cptr = pointee%cptr\n      END IF\n#endif\n   END SUBROUTINE acc_devmem_set_cptr\n\n   SUBROUTINE acc_devmem_info(free, total)\n      INTEGER(KIND=int_8), INTENT(OUT)         :: free, total\n#if defined(__DBCSR_ACC)\n      INTEGER(KIND=C_INT)                      :: istat\n      INTEGER(KIND=C_SIZE_T)                   :: free_c, total_c\n\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_dev_mem_info(free_c, total_c)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_devmem_info: failed\")\n      free = free_c\n      total = total_c\n#else\n      free = 0\n      total = 0\n#endif\n   END SUBROUTINE acc_devmem_info\n\n   SUBROUTINE acc_devmem_allocate_bytes(this, size_in_bytes)\n      !! Allocates a given devmem.\n\n      TYPE(acc_devmem_type), INTENT(INOUT)     :: this\n      INTEGER, INTENT(IN)                      :: size_in_bytes\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      MARK_USED(size_in_bytes)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n\n      IF (this%size_in_bytes >= 0) &\n         DBCSR_ABORT(\"acc_devmem_alloc: already allocated\")\n      this%size_in_bytes = size_in_bytes\n      IF (size_in_bytes > 0) THEN\n         CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n         istat = acc_interface_dev_mem_alloc(this%cptr, INT(this%size_in_bytes, KIND=C_SIZE_T))\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"acc_devmem_allocate: failed\")\n      END IF\n#endif\n   END SUBROUTINE acc_devmem_allocate_bytes\n\n   SUBROUTINE acc_devmem_deallocate(this)\n      !! Deallocates a given devmem.\n\n      TYPE(acc_devmem_type), INTENT(INOUT) :: this\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n\n      IF (this%size_in_bytes < 0) &\n         DBCSR_ABORT(\"acc_devmem_deallocate: double free\")\n      IF (this%size_in_bytes > 0) THEN\n         CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n         istat = acc_interface_dev_mem_dealloc(this%cptr)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"acc_devmem_deallocate: failed\")\n      END IF\n\n      this%size_in_bytes = -1\n\n#endif\n   END SUBROUTINE acc_devmem_deallocate\n\n   SUBROUTINE acc_devmem_setzero_bytes(this, first_byte, last_byte, stream)\n      !! Sets entries in given devmem to zero, asynchronously.\n\n      TYPE(acc_devmem_type), INTENT(INOUT) :: this\n      INTEGER, INTENT(IN), OPTIONAL        :: first_byte, last_byte\n         !! begin of region to zero, defaults to 1 if not given.\n         !! end of region to zero, defaults to size if not given.\n      TYPE(acc_stream_type), INTENT(IN)    :: stream\n         !! stream on which zeroing is performed.\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      MARK_USED(first_byte)\n      MARK_USED(last_byte)\n      MARK_USED(stream)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n      INTEGER(KIND=C_SIZE_T)                   :: length, offset\n      TYPE(C_PTR)                              :: stream_cptr\n\n      offset = 0\n      length = this%size_in_bytes\n      IF (PRESENT(first_byte)) THEN\n         offset = first_byte - 1\n         length = length - offset\n      END IF\n      IF (PRESENT(last_byte)) THEN\n         length = last_byte\n         IF (PRESENT(first_byte)) length = length - first_byte\n      END IF\n\n      stream_cptr = acc_stream_cptr(stream)\n\n      IF (length > 0) THEN\n         CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n         istat = acc_interface_memzero(this%cptr, offset, length, stream_cptr)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"acc_devmem_setzero: failed\")\n      END IF\n#endif\n   END SUBROUTINE acc_devmem_setzero_bytes\n\n#if defined (__DBCSR_ACC)\n   SUBROUTINE host2dev_raw(this, hostmem_cptr, n_bytes, stream)\n      !! Helper-routine performing actuall host2dev transfers.\n\n      TYPE(acc_devmem_type), INTENT(IN)                  :: this\n      TYPE(C_PTR)                                        :: hostmem_cptr\n      INTEGER, INTENT(IN)                                :: n_bytes\n      TYPE(acc_stream_type), INTENT(IN)                  :: stream\n         !! stream used for memory transfer\n\n      INTEGER                                            :: istat\n      TYPE(C_PTR)                                        :: stream_cptr\n\n      IF (this%size_in_bytes < n_bytes) &\n         DBCSR_ABORT(\"acc_devmem_host2dev: devmem too small\")\n\n      stream_cptr = acc_stream_cptr(stream)\n      IF (n_bytes > 0) THEN\n         CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n         istat = acc_interface_memcpy_h2d(hostmem_cptr, this%cptr, &\n                                          INT(n_bytes, KIND=C_SIZE_T), stream_cptr)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"acc_devmem_host2dev: failed\")\n      END IF\n   END SUBROUTINE host2dev_raw\n#endif\n\n#if defined (__DBCSR_ACC)\n   SUBROUTINE dev2host_raw(this, hostmem_cptr, n_bytes, stream)\n      !! Helper-routine performing actual dev2host transfers.\n\n      TYPE(acc_devmem_type), INTENT(IN)                  :: this\n      TYPE(C_PTR)                                        :: hostmem_cptr\n      INTEGER, INTENT(IN)                                :: n_bytes\n      TYPE(acc_stream_type), INTENT(IN)                  :: stream\n\n      INTEGER                                            :: istat\n      TYPE(C_PTR)                                        :: stream_cptr\n\n      IF (.NOT. acc_devmem_allocated(this)) RETURN\n\n      IF (this%size_in_bytes < n_bytes) &\n         DBCSR_ABORT(\"acc_devmem_dev2host: this too small\")\n\n      stream_cptr = acc_stream_cptr(stream)\n\n      IF (n_bytes > 0) THEN\n         CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n         istat = acc_interface_memcpy_d2h(this%cptr, hostmem_cptr, &\n                                          INT(n_bytes, KIND=C_SIZE_T), stream_cptr)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"acc_devmem_dev2host: failed\")\n      END IF\n   END SUBROUTINE dev2host_raw\n#endif\n\n   #:set instances = [ ('i4', 'int_4_size',    'INTEGER(kind=int_4)'), &\n      ('i8', 'int_8_size',    'INTEGER(kind=int_8)'), &\n      ('r4', 'real_4_size',   'REAL(kind=real_4)'), &\n      ('r8', 'real_8_size',   'REAL(kind=real_8)'), &\n      ('c4', '2*real_4_size', 'COMPLEX(kind=real_4)'), &\n      ('c8', '2*real_8_size', 'COMPLEX(kind=real_8)') ]\n\n   #:for nametype, size, type in instances\n\n      SUBROUTINE host2dev_${nametype}$_1D(this, hostmem, stream)\n      !! Transfers 1D fortran-array from host to GPU devmem.\n\n         TYPE(acc_devmem_type), INTENT(IN)        :: this\n         ${type}$, DIMENSION(:), POINTER          :: hostmem\n         TYPE(acc_stream_type), INTENT(IN)        :: stream\n\n#if ! defined (__DBCSR_ACC)\n         MARK_USED(this)\n         MARK_USED(hostmem)\n         MARK_USED(stream)\n         DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n         CALL host2dev_raw(this, C_LOC(hostmem(1)), ${size}$*SIZE(hostmem), stream)\n#endif\n      END SUBROUTINE host2dev_${nametype}$_1D\n\n      SUBROUTINE host2dev_${nametype}$_2D(this, hostmem, stream)\n      !! Transfers 2D fortran-array from host to GPU devmem.\n\n         TYPE(acc_devmem_type), INTENT(IN)        :: this\n         ${type}$, DIMENSION(:, :), POINTER       :: hostmem\n         TYPE(acc_stream_type), INTENT(IN)        :: stream\n\n#if ! defined (__DBCSR_ACC)\n         MARK_USED(this)\n         MARK_USED(hostmem)\n         MARK_USED(stream)\n         DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n         CALL host2dev_raw(this, C_LOC(hostmem(1, 1)), ${size}$*SIZE(hostmem), stream)\n#endif\n      END SUBROUTINE host2dev_${nametype}$_2D\n\n      SUBROUTINE dev2host_${nametype}$_1D(this, hostmem, stream)\n      !! Transfers GPU devmem to 1D fortran-array.\n\n         TYPE(acc_devmem_type), INTENT(IN)        :: this\n         ${type}$, DIMENSION(:), POINTER          :: hostmem\n         TYPE(acc_stream_type), INTENT(IN)        :: stream\n\n#if ! defined (__DBCSR_ACC)\n         MARK_USED(this)\n         MARK_USED(hostmem)\n         MARK_USED(stream)\n         DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n         CALL dev2host_raw(this, C_LOC(hostmem(1)), ${size}$*SIZE(hostmem), stream)\n#endif\n      END SUBROUTINE dev2host_${nametype}$_1D\n\n   #:endfor\n\nEND MODULE dbcsr_acc_devmem\n"
  },
  {
    "path": "src/acc/dbcsr_acc_event.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_acc_event\n   !! Accelerator support\n#if defined (__DBCSR_ACC)\n   USE ISO_C_BINDING, ONLY: C_INT, C_NULL_PTR, C_PTR, C_ASSOCIATED, C_NULL_PTR\n#endif\n   USE dbcsr_acc_stream, ONLY: acc_stream_cptr, &\n                               acc_stream_type\n   USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device\n   USE dbcsr_config, ONLY: get_accdrv_active_device_id\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_event'\n\n   PUBLIC :: acc_event_type\n   PUBLIC :: acc_event_create, acc_event_destroy\n   PUBLIC :: acc_event_record, acc_event_query\n   PUBLIC :: acc_stream_wait_event, acc_event_synchronize\n\n   TYPE acc_event_type\n      PRIVATE\n#if defined (__DBCSR_ACC)\n      TYPE(C_PTR) :: cptr = C_NULL_PTR\n#else\n      INTEGER :: dummy = 1\n#endif\n   END TYPE acc_event_type\n\n#if defined (__DBCSR_ACC)\n\n   INTERFACE\n      FUNCTION acc_interface_event_create(event_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_event_create\")\n         IMPORT\n         TYPE(C_PTR)                              :: event_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_event_create\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_event_destroy(event_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_event_destroy\")\n         IMPORT\n         TYPE(C_PTR), VALUE                       :: event_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_event_destroy\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_event_query(event_ptr, has_occurred) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_event_query\")\n         IMPORT\n         TYPE(C_PTR), VALUE                       :: event_ptr\n         INTEGER(KIND=C_INT)                      :: has_occurred, istat\n\n      END FUNCTION acc_interface_event_query\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_event_record(event_ptr, stream_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_event_record\")\n         IMPORT\n         TYPE(C_PTR), VALUE                       :: event_ptr, stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_event_record\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_stream_wait_event(stream_ptr, event_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_stream_wait_event\")\n         IMPORT\n         TYPE(C_PTR), VALUE                       :: stream_ptr, event_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_stream_wait_event\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_event_synchronize(event_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_event_synchronize\")\n         IMPORT\n         TYPE(C_PTR), VALUE                       :: event_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_event_synchronize\n   END INTERFACE\n#endif\n\nCONTAINS\n\n   SUBROUTINE acc_stream_wait_event(stream, event)\n      !! Fortran-wrapper for making a GPU compute stream wait on an event.\n      !! Because of fortran circular dependency restriction this can not go into acc_stream.F\n\n      TYPE(acc_stream_type), INTENT(IN) :: stream\n      TYPE(acc_event_type), INTENT(IN)  :: event\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(stream)\n      MARK_USED(event)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n      TYPE(C_PTR)                              :: stream_cptr\n\n      stream_cptr = acc_stream_cptr(stream)\n      IF (.NOT. C_ASSOCIATED(event%cptr)) &\n         DBCSR_ABORT(\"acc_stream_wait_event: event not allocated\")\n      IF (.NOT. C_ASSOCIATED(stream_cptr)) &\n         DBCSR_ABORT(\"acc_stream_wait_event: stream not allocated\")\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_stream_wait_event(stream_cptr, event%cptr)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_stream_wait_event failed\")\n#endif\n   END SUBROUTINE acc_stream_wait_event\n\n   SUBROUTINE acc_event_record(this, stream)\n      !! Fortran-wrapper for recording a CUDA/HIP event.\n\n      TYPE(acc_event_type), INTENT(IN)  :: this\n      TYPE(acc_stream_type), INTENT(IN) :: stream\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      MARK_USED(stream)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n      TYPE(C_PTR)                              :: stream_cptr\n\n      stream_cptr = acc_stream_cptr(stream)\n      IF (.NOT. C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_event_record: event not allocated\")\n      IF (.NOT. C_ASSOCIATED(stream_cptr)) &\n         DBCSR_ABORT(\"acc_event_record: stream not allocated\")\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_event_record(this%cptr, stream_cptr)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_event_record failed\")\n#endif\n   END SUBROUTINE acc_event_record\n\n   SUBROUTINE acc_event_create(this)\n      !! Fortran-wrapper for creation of a CUDA/HIP event.\n\n      TYPE(acc_event_type), &\n         INTENT(INOUT)                          :: this\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n\n      IF (C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_event_create: already allocated\")\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_event_create(this%cptr)\n      IF (istat /= 0 .OR. .NOT. C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_event_create: failed\")\n#endif\n   END SUBROUTINE acc_event_create\n\n   SUBROUTINE acc_event_destroy(this)\n      !! Fortran-wrapper for destruction of a CUDA/HIP event.\n\n      TYPE(acc_event_type), &\n         INTENT(INOUT)                          :: this\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n      IF (.NOT. C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_event_destroy: event not allocated\")\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_event_destroy(this%cptr)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_event_destroy failed\")\n      this%cptr = C_NULL_PTR\n#endif\n   END SUBROUTINE acc_event_destroy\n\n   FUNCTION acc_event_query(this) RESULT(res)\n      !! Fortran-wrapper for querying a CUDA/HIP event's status.\n\n      TYPE(acc_event_type), INTENT(IN)         :: this\n      LOGICAL                                  :: res\n         !! true if event has occurred, false otherwise\n\n#if ! defined (__DBCSR_ACC)\n      res = .FALSE.\n      MARK_USED(this)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat, has_occurred\n      IF (.NOT. C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_event_query: event not allocated\")\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_event_query(this%cptr, has_occurred)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_event_query failed\")\n      res = (has_occurred == 1)\n#endif\n   END FUNCTION acc_event_query\n\n   SUBROUTINE acc_event_synchronize(this)\n      !! Fortran-wrapper for waiting for the completion of a HIP/CUDA event.\n\n      TYPE(acc_event_type), INTENT(IN)  :: this\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n      IF (.NOT. C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_event_synchronize: event not allocated\")\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_event_synchronize(this%cptr)\n      IF (istat < 0) &\n         DBCSR_ABORT(\"acc_event_synchronize failed\")\n#endif\n   END SUBROUTINE acc_event_synchronize\n\nEND MODULE dbcsr_acc_event\n"
  },
  {
    "path": "src/acc/dbcsr_acc_hostmem.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_acc_hostmem\n   !! Accelerator support\n#if defined (__DBCSR_ACC)\n   USE ISO_C_BINDING, ONLY: C_INT, C_SIZE_T, C_PTR, C_LOC, C_F_POINTER\n#endif\n   USE dbcsr_kinds, ONLY: int_4, &\n                          int_4_size, &\n                          int_8, &\n                          int_8_size, &\n                          real_4, &\n                          real_4_size, &\n                          real_8, &\n                          real_8_size\n   USE dbcsr_acc_stream, ONLY: acc_stream_associated, &\n                               acc_stream_cptr, &\n                               acc_stream_type\n   USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device\n   USE dbcsr_config, ONLY: get_accdrv_active_device_id\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_hostmem'\n\n   LOGICAL, PARAMETER :: careful_mod = .TRUE.\n\n   PUBLIC :: acc_hostmem_allocate, acc_hostmem_deallocate\n\n   INTERFACE acc_hostmem_allocate\n      MODULE PROCEDURE acc_hostmem_alloc_i4, acc_hostmem_alloc_i8\n      MODULE PROCEDURE acc_hostmem_alloc_r4, acc_hostmem_alloc_r8\n      MODULE PROCEDURE acc_hostmem_alloc_c4, acc_hostmem_alloc_c8\n      MODULE PROCEDURE acc_hostmem_alloc_i4_2D, acc_hostmem_alloc_i8_2D\n      MODULE PROCEDURE acc_hostmem_alloc_r4_2D, acc_hostmem_alloc_r8_2D\n      MODULE PROCEDURE acc_hostmem_alloc_c4_2D, acc_hostmem_alloc_c8_2D\n   END INTERFACE\n\n   INTERFACE acc_hostmem_deallocate\n      MODULE PROCEDURE acc_hostmem_dealloc_i4, acc_hostmem_dealloc_i8\n      MODULE PROCEDURE acc_hostmem_dealloc_r4, acc_hostmem_dealloc_r8\n      MODULE PROCEDURE acc_hostmem_dealloc_c4, acc_hostmem_dealloc_c8\n      MODULE PROCEDURE acc_hostmem_dealloc_i4_2D, acc_hostmem_dealloc_i8_2D\n      MODULE PROCEDURE acc_hostmem_dealloc_r4_2D, acc_hostmem_dealloc_r8_2D\n      MODULE PROCEDURE acc_hostmem_dealloc_c4_2D, acc_hostmem_dealloc_c8_2D\n   END INTERFACE\n\n#if defined (__DBCSR_ACC)\n\n   INTERFACE\n      FUNCTION acc_interface_host_mem_alloc(mem, n, stream_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_host_mem_allocate\")\n         IMPORT\n         TYPE(C_PTR)                              :: mem\n         INTEGER(KIND=C_SIZE_T), INTENT(IN), &\n            VALUE                                  :: n\n         TYPE(C_PTR), VALUE                       :: stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_host_mem_alloc\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_host_mem_dealloc(mem, stream_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_host_mem_deallocate\")\n         IMPORT\n         TYPE(C_PTR), VALUE                       :: mem, stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_host_mem_dealloc\n   END INTERFACE\n\n#endif\n\nCONTAINS\n\n#if defined (__DBCSR_ACC)\n   SUBROUTINE acc_hostmem_alloc_raw(host_mem_c_ptr, n_bytes, stream)\n      !! Helper-routine performing allocation of host-pinned GPU memory.\n\n      TYPE(C_PTR), INTENT(OUT)                           :: host_mem_c_ptr\n      !! pointer to allocated memory\n      INTEGER(KIND=C_SIZE_T), INTENT(IN)                 :: n_bytes\n      !! number of bytes to allocate\n      TYPE(acc_stream_type), INTENT(IN)                  :: stream\n\n      INTEGER                                            :: istat\n      TYPE(C_PTR)                                        :: stream_cptr\n\n      IF (.NOT. acc_stream_associated(stream)) &\n         DBCSR_ABORT(\"acc_hostmem_alloc_raw: stream not associated\")\n\n      stream_cptr = acc_stream_cptr(stream)\n\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_host_mem_alloc(host_mem_c_ptr, n_bytes, stream_cptr)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_hostmem_alloc_raw: Could not allocate host pinned memory\")\n   END SUBROUTINE acc_hostmem_alloc_raw\n#endif\n\n#if defined (__DBCSR_ACC)\n   SUBROUTINE acc_hostmem_dealloc_raw(host_mem_c_ptr, stream)\n      TYPE(C_PTR), INTENT(IN)                            :: host_mem_c_ptr\n      TYPE(acc_stream_type), INTENT(IN)                  :: stream\n\n      INTEGER                                            :: istat\n      TYPE(C_PTR)                                        :: stream_cptr\n\n! Workaround for a segmentation fault on ORNL's Summit\n!$OMP CRITICAL\n\n      IF (.NOT. acc_stream_associated(stream)) &\n         DBCSR_ABORT(\"acc_hostmem_dealloc_raw: stream not associated\")\n\n      stream_cptr = acc_stream_cptr(stream)\n\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_host_mem_dealloc(host_mem_c_ptr, stream_cptr)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_hostmem_dealloc_raw: Could not deallocate host pinned memory\")\n!$OMP END CRITICAL\n   END SUBROUTINE acc_hostmem_dealloc_raw\n#endif\n\n   #:set instances = [ &\n      ('i4', 'int_4_size',    'INTEGER(kind=int_4)'), &\n      ('i8', 'int_8_size',    'INTEGER(kind=int_8)'), &\n      ('r4', 'real_4_size',   'REAL(kind=real_4)'), &\n      ('r8', 'real_8_size',   'REAL(kind=real_8)'), &\n      ('c4', '2*real_4_size', 'COMPLEX(kind=real_4)'), &\n      ('c8', '2*real_8_size', 'COMPLEX(kind=real_8)') ]\n\n   #:for nametype, size, type in instances\n\n      SUBROUTINE acc_hostmem_alloc_${nametype}$ (host_mem, n, stream)\n      !! Allocates 1D fortan-array as GPU host-pinned memory.\n\n         ${type}$, DIMENSION(:), POINTER          :: host_mem\n         !! pointer to array\n         INTEGER, INTENT(IN)                      :: n\n         !! size given in terms of item-count (not bytes!)\n         TYPE(acc_stream_type), INTENT(IN)        :: stream\n#if defined (__DBCSR_ACC)\n         TYPE(C_PTR)                              :: host_mem_c_ptr\n         INTEGER(KIND=C_SIZE_T)                   :: n_bytes\n\n         n_bytes = INT(${size}$, KIND=C_SIZE_T)* &\n                   INT(MAX(1, n), KIND=C_SIZE_T)\n         CALL acc_hostmem_alloc_raw(host_mem_c_ptr, n_bytes, stream)\n         CALL C_F_POINTER(host_mem_c_ptr, host_mem, (/MAX(1, n)/))\n#else\n         MARK_USED(host_mem)\n         MARK_USED(n)\n         MARK_USED(stream)\n         DBCSR_ABORT(\"acc_hostmem_alloc_${nametype}$: ACC not compiled in.\")\n#endif\n      END SUBROUTINE acc_hostmem_alloc_${nametype}$\n\n      SUBROUTINE acc_hostmem_alloc_${nametype}$_2D(host_mem, n1, n2, stream)\n      !! Allocates 2D fortan-array as GPU host-pinned memory.\n\n         ${type}$, DIMENSION(:, :), POINTER        :: host_mem\n         !! pointer to array\n         INTEGER, INTENT(IN)                      :: n1, n2\n         !! sizes given in terms of item-count (not bytes!)\n         !! sizes given in terms of item-count (not bytes!)\n         TYPE(acc_stream_type), INTENT(IN)        :: stream\n#if defined (__DBCSR_ACC)\n         TYPE(C_PTR)                              :: host_mem_c_ptr\n         INTEGER(KIND=C_SIZE_T)                   :: n_bytes\n\n         n_bytes = INT(${size}$, KIND=C_SIZE_T)* &\n                   INT(MAX(1, n1), KIND=C_SIZE_T)*INT(MAX(1, n2), KIND=C_SIZE_T)\n         CALL acc_hostmem_alloc_raw(host_mem_c_ptr, n_bytes, stream)\n         CALL C_F_POINTER(host_mem_c_ptr, host_mem, (/MAX(1, n1), MAX(1, n2)/))\n#else\n         MARK_USED(host_mem)\n         MARK_USED(n1)\n         MARK_USED(n2)\n         MARK_USED(stream)\n         DBCSR_ABORT(\"acc_hostmem_alloc_${nametype}$_2D: ACC not compiled in.\")\n#endif\n      END SUBROUTINE acc_hostmem_alloc_${nametype}$_2D\n\n      SUBROUTINE acc_hostmem_dealloc_${nametype}$ (host_mem, stream)\n      !! Deallocates a 1D fortan-array, which is GPU host-pinned memory.\n\n         ${type}$, DIMENSION(:), POINTER          :: host_mem\n         !! pointer to array\n         TYPE(acc_stream_type), INTENT(IN)        :: stream\n\n         IF (SIZE(host_mem) == 0) RETURN\n#if defined (__DBCSR_ACC)\n         CALL acc_hostmem_dealloc_raw(C_LOC(host_mem(1)), stream)\n#else\n         MARK_USED(host_mem)\n         MARK_USED(stream)\n         DBCSR_ABORT(\"acc_hostmem_dealloc_${nametype}$: ACC not compiled in.\")\n#endif\n      END SUBROUTINE acc_hostmem_dealloc_${nametype}$\n\n      SUBROUTINE acc_hostmem_dealloc_${nametype}$_2D(host_mem, stream)\n      !! Deallocates a 2D fortan-array, which is GPU host-pinned memory.\n\n         ${type}$, DIMENSION(:, :), POINTER        :: host_mem\n         !! pointer to array\n         TYPE(acc_stream_type), INTENT(IN)        :: stream\n\n         IF (SIZE(host_mem) == 0) RETURN\n#if defined (__DBCSR_ACC)\n         CALL acc_hostmem_dealloc_raw(C_LOC(host_mem(1, 1)), stream)\n#else\n         MARK_USED(host_mem)\n         MARK_USED(stream)\n         DBCSR_ABORT(\"acc_hostmem_dealloc_${nametype}$: ACC not compiled in.\")\n#endif\n      END SUBROUTINE acc_hostmem_dealloc_${nametype}$_2D\n\n   #:endfor\n\nEND MODULE dbcsr_acc_hostmem\n"
  },
  {
    "path": "src/acc/dbcsr_acc_init.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_acc_init\n   !! Accelerator support\n#if defined (__DBCSR_ACC)\n   USE ISO_C_BINDING, ONLY: C_INT, C_CHAR, C_PTR, C_NULL_PTR, C_NULL_CHAR, C_ASSOCIATED\n#endif\n   USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device\n   USE dbcsr_config, ONLY: get_accdrv_active_device_id\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_init'\n\n   PUBLIC :: acc_init, acc_finalize\n\n#if defined (__DBCSR_ACC)\n\n   INTERFACE\n      FUNCTION acc_interface_drv_init() RESULT(istat) BIND(C, name=\"c_dbcsr_acc_init\")\n         IMPORT\n         INTEGER(KIND=C_INT)                      :: istat\n      END FUNCTION acc_interface_drv_init\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_drv_finalize() RESULT(istat) BIND(C, name=\"c_dbcsr_acc_finalize\")\n         IMPORT\n         INTEGER(KIND=C_INT)                      :: istat\n      END FUNCTION acc_interface_drv_finalize\n   END INTERFACE\n\n#endif\nCONTAINS\n\n   SUBROUTINE acc_init()\n\n#if ! defined (__DBCSR_ACC)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n      ! Set active device first\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n!$OMP    PARALLEL DEFAULT(NONE) PRIVATE(istat)\n!$OMP    MASTER\n      istat = acc_interface_drv_init()\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_init failed\")\n!$OMP    END MASTER\n!$OMP    END PARALLEL\n#endif\n   END SUBROUTINE acc_init\n\n   SUBROUTINE acc_finalize()\n\n#if ! defined (__DBCSR_ACC)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                :: istat\n!$OMP    PARALLEL DEFAULT(NONE) PRIVATE(istat)\n!$OMP    MASTER\n      istat = acc_interface_drv_finalize()\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_finalize failed\")\n!$OMP    END MASTER\n!$OMP    END PARALLEL\n#endif\n   END SUBROUTINE acc_finalize\n\nEND MODULE dbcsr_acc_init\n"
  },
  {
    "path": "src/acc/dbcsr_acc_stream.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_acc_stream\n   !! Accelerator support\n#if defined (__DBCSR_ACC)\n   USE ISO_C_BINDING, ONLY: C_INT, C_CHAR, C_PTR, C_NULL_PTR, C_NULL_CHAR, C_ASSOCIATED\n#endif\n   USE dbcsr_acc_device, ONLY: dbcsr_acc_set_active_device\n   USE dbcsr_config, ONLY: get_accdrv_active_device_id\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_stream'\n\n   PUBLIC :: acc_stream_type\n   PUBLIC :: acc_stream_create, acc_stream_destroy\n   PUBLIC :: acc_stream_synchronize\n   PUBLIC :: acc_stream_priority_range\n   PUBLIC :: acc_stream_equal, acc_stream_associated\n   PUBLIC :: acc_stream_cptr\n\n   TYPE acc_stream_type\n      PRIVATE\n#if defined (__DBCSR_ACC)\n      TYPE(C_PTR) :: cptr = C_NULL_PTR\n#else\n      INTEGER :: dummy = 1\n#endif\n   END TYPE acc_stream_type\n\n#if defined (__DBCSR_ACC)\n\n   INTERFACE\n      FUNCTION acc_interface_stream_create(stream_ptr, name, priority) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_stream_create\")\n         IMPORT\n         TYPE(C_PTR)                              :: stream_ptr\n         CHARACTER(KIND=C_CHAR), DIMENSION(*)     :: name\n         INTEGER(KIND=C_INT), VALUE               :: priority\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_stream_create\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_stream_priority_range(least, greatest) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_stream_priority_range\")\n         IMPORT\n         INTEGER(KIND=C_INT)                      :: least, greatest, istat\n\n      END FUNCTION acc_interface_stream_priority_range\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_stream_destroy(stream_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_stream_destroy\")\n         IMPORT\n         TYPE(C_PTR), VALUE                       :: stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_stream_destroy\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION acc_interface_stream_sync(stream_ptr) RESULT(istat) BIND(C, name=\"c_dbcsr_acc_stream_sync\")\n         IMPORT\n         TYPE(C_PTR), VALUE                       :: stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_stream_sync\n   END INTERFACE\n\n#endif\nCONTAINS\n\n#if ! defined (__DBCSR_ACC)\n   FUNCTION acc_stream_cptr(this) RESULT(res)\n      !! Returns C-pointer of given stream.\n\n      INTEGER, INTENT(in)                                :: this\n         !! stream ID\n      LOGICAL                                            :: res\n         !! false (accelerator support is not enabled)\n\n      MARK_USED(this)\n      res = .FALSE.\n   END FUNCTION acc_stream_cptr\n\n#else\n   FUNCTION acc_stream_cptr(this) RESULT(res)\n      !! Returns C-pointer of given stream.\n\n      TYPE(acc_stream_type), INTENT(in)                  :: this\n         !! stream ID\n      TYPE(C_PTR)                                        :: res\n         !! C-pointer of a given stream\n\n      res = this%cptr\n   END FUNCTION acc_stream_cptr\n#endif\n\n   SUBROUTINE acc_stream_create(this, name, priority)\n      !! Fortran-wrapper for creation of a CUDA/HIP stream.\n\n      TYPE(acc_stream_type), INTENT(OUT) :: this\n      CHARACTER(LEN=*), INTENT(IN)             :: name\n      INTEGER, INTENT(IN), OPTIONAL            :: priority\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      MARK_USED(name)\n      MARK_USED(priority)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat, my_priority\n\n      my_priority = -1\n      IF (PRESENT(priority)) &\n         my_priority = priority\n\n      IF (C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_stream_create: stream already allocated\")\n\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_stream_create(this%cptr, name//c_null_char, my_priority)\n\n      IF (istat /= 0 .OR. .NOT. C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_stream_create failed\")\n#endif\n   END SUBROUTINE acc_stream_create\n\n   SUBROUTINE acc_stream_destroy(this)\n      !! Fortran-wrapper for destruction of a CUDA/HIP stream.\n\n      TYPE(acc_stream_type), &\n         INTENT(INOUT)                          :: this\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n      IF (.NOT. C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_stream_destroy: stream not allocated\")\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_stream_destroy(this%cptr)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_stream_destroy failed\")\n      this%cptr = C_NULL_PTR\n#endif\n   END SUBROUTINE acc_stream_destroy\n\n   SUBROUTINE acc_stream_synchronize(this)\n      !! Fortran-wrapper for waiting for CUDA/HIP stream tasks to complete.\n\n      TYPE(acc_stream_type), &\n         INTENT(IN)                             :: this\n\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n      IF (.NOT. C_ASSOCIATED(this%cptr)) &\n         DBCSR_ABORT(\"acc_stream_synchronize: stream not allocated\")\n      CALL dbcsr_acc_set_active_device(get_accdrv_active_device_id())\n      istat = acc_interface_stream_sync(this%cptr)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_stream_synchronize failed\")\n#endif\n   END SUBROUTINE acc_stream_synchronize\n\n   SUBROUTINE acc_stream_priority_range(least, greatest)\n      !! Fortran-wrapper for getting CUDA/HIP streams' priority range.\n\n      INTEGER, INTENT(OUT)                     :: least, greatest\n\n#if ! defined (__DBCSR_ACC)\n      least = -1; greatest = -1 ! assign intent-out arguments to silence compiler warnings\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      INTEGER                                  :: istat\n      istat = acc_interface_stream_priority_range(least, greatest)\n      IF (istat /= 0) &\n         DBCSR_ABORT(\"acc_stream_priority_range failed\")\n#endif\n   END SUBROUTINE acc_stream_priority_range\n\n   FUNCTION acc_stream_equal(this, other) RESULT(res)\n      !! Checks if two streams are equal\n\n      TYPE(acc_stream_type), INTENT(IN) :: this, other\n      LOGICAL                                  :: res\n         !! true if equal, false otherwise\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      MARK_USED(other)\n      res = .TRUE.\n#else\n      res = C_ASSOCIATED(this%cptr, other%cptr)\n#endif\n   END FUNCTION acc_stream_equal\n\n   FUNCTION acc_stream_associated(this) RESULT(res)\n      !! Checks if a streams is associated\n\n      TYPE(acc_stream_type), INTENT(IN) :: this\n      LOGICAL                                  :: res\n         !! true if associated, false otherwise\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(this)\n      res = .FALSE.\n#else\n      res = C_ASSOCIATED(this%cptr)\n#endif\n   END FUNCTION acc_stream_associated\n\nEND MODULE dbcsr_acc_stream\n"
  },
  {
    "path": "src/acc/dbcsr_acc_timings.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_acc_timings\n   !! Accelerator support\n   USE ISO_C_BINDING, ONLY: C_INT, C_PTR, C_F_POINTER\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_acc_timings'\n\nCONTAINS\n\n   SUBROUTINE f_dbcsr_timeset(routineN, routineN_len, handle) BIND(C, name=\"c_dbcsr_timeset\")\n\n      TYPE(C_PTR), INTENT(IN)      :: routineN\n      INTEGER(KIND=C_INT), INTENT(IN)        :: routineN_len\n      INTEGER(KIND=C_INT), INTENT(OUT)       :: handle\n\n      CHARACTER, POINTER                     :: a(:)\n      CHARACTER(len=routineN_len)            :: routineName\n      INTEGER                                :: i\n\n      CALL C_F_POINTER(routineN, a, [routineN_len])\n\n      ! Convert character array \"a\" to scalar character string\n      ! \"routineName\"\n      DO i = 1, routineN_len\n         routineName(i:i) = a(i)\n      END DO\n\n      CALL timeset(routineName, handle)\n   END SUBROUTINE f_dbcsr_timeset\n\n   SUBROUTINE f_dbcsr_timestop(handle) BIND(C, name=\"c_dbcsr_timestop\")\n\n      INTEGER(KIND=C_INT), INTENT(IN)        :: handle\n\n      CALL timestop(handle)\n   END SUBROUTINE f_dbcsr_timestop\n\nEND MODULE dbcsr_acc_timings\n"
  },
  {
    "path": "src/acc/hip/PACKAGE",
    "content": "{\n\"description\": \"HIP backend for accelerator API\",\n\"archive\":\"libdbcsr\",\n\"requires\": [\"../../base\"]\n}\n"
  },
  {
    "path": "src/acc/hip/acc_hip.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include \"acc_hip.h\"\n\n#if !defined(__HIP_PLATFORM_NVCC__)\nhipError_t hipHostAlloc(void** ptr, size_t size, unsigned int flags) { return hipHostMalloc(ptr, size, flags); }\n\nhipError_t hipFreeHost(void* ptr) { return hipHostFree(ptr); }\n#endif\n\nhiprtcResult hiprtcGetLowLevelCode(hiprtcProgram prog, char* code) { return hiprtcGetCode(prog, code); }\n\nhiprtcResult hiprtcGetLowLevelCodeSize(hiprtcProgram prog, size_t* codeSizeRet) { return hiprtcGetCodeSize(prog, codeSizeRet); }\n\nhipError_t hipEventCreate(hipEvent_t* event, unsigned flags) { return hipEventCreateWithFlags(event, flags); }\n\nhipError_t hipStreamCreate(hipStream_t* stream, unsigned int flags) { return hipStreamCreateWithFlags(stream, flags); }\n\nhipError_t hipLaunchJITKernel(hipFunction_t f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ,\n  unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, hipStream_t stream,\n  void** kernelParams, void** extra) {\n  return hipModuleLaunchKernel(\n    f, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, sharedMemBytes, stream, kernelParams, extra);\n}\n\nhipblasStatus_t ACC_BLAS_STATUS_SUCCESS = HIPBLAS_STATUS_SUCCESS;\nhipblasOperation_t ACC_BLAS_OP_N = HIPBLAS_OP_N;\nhipblasOperation_t ACC_BLAS_OP_T = HIPBLAS_OP_T;\nhiprtcResult ACC_RTC_SUCCESS = HIPRTC_SUCCESS;\n"
  },
  {
    "path": "src/acc/hip/acc_hip.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef ACC_HIP_H\n#define ACC_HIP_H\n\n#include <hip/hip_runtime.h>\n#include <hip/hip_runtime_api.h>\n#if __has_include(<hipblas/hipblas.h>)\n#  include <hipblas/hipblas.h>\n#else\n#  include <hipblas.h>\n#endif\n#include <hip/hiprtc.h>\n#include <stdio.h>\n\n#define ACC(x) hip##x\n#define ACC_DRV(x) ACC(x)\n#define ACC_BLAS(x) hipblas##x\n#define ACC_RTC(x) hiprtc##x\n#define BACKEND \"HIP\"\n\n/* Macro for HIP error handling\n * Wrap calls to HIP API\n */\n#define HIP_API_CALL(func, args) \\\n  do { \\\n    hipError_t result = ACC(func) args; \\\n    if (result != hipSuccess) { \\\n      printf(\"\\nHIP error: %s failed with error %s (%s::%d)\\n\", #func, hipGetErrorName(result), __FILE__, __LINE__); \\\n      exit(1); \\\n    } \\\n  } while (0)\n\n/* HIP does not differentiate between \"runtime\" API and \"driver\" API */\n#define ACC_API_CALL(func, args) HIP_API_CALL(func, args)\n#define ACC_DRV_CALL(func, args) HIP_API_CALL(func, args)\n\n/* Wrap calls to HIPRTC API */\n#define ACC_RTC_CALL(func, args) \\\n  do { \\\n    hiprtcResult result = ACC_RTC(func) args; \\\n    if (result != HIPRTC_SUCCESS) { \\\n      printf(\"\\nHIPRTC ERROR: %s failed with error %s (%s::%d)\\n\", #func, hiprtcGetErrorString(result), __FILE__, __LINE__); \\\n      exit(1); \\\n    } \\\n  } while (0)\n\n/* Wrap calls to HIPBLAS API */\n#define ACC_BLAS_CALL(func, args) \\\n  do { \\\n    hipblasStatus_t result = ACC_BLAS(func) args; \\\n    if (result != HIPBLAS_STATUS_SUCCESS) { \\\n      const char* error_name = \"HIPBLAS_ERRROR\"; \\\n      if (result == HIPBLAS_STATUS_NOT_INITIALIZED) { \\\n        error_name = \"HIPBLAS_STATUS_NOT_INITIALIZED \"; \\\n      } \\\n      else if (result == HIPBLAS_STATUS_ALLOC_FAILED) { \\\n        error_name = \"HIPBLAS_STATUS_ALLOC_FAILED \"; \\\n      } \\\n      else if (result == HIPBLAS_STATUS_INVALID_VALUE) { \\\n        error_name = \"HIPBLAS_STATUS_INVALID_VALUE \"; \\\n      } \\\n      else if (result == HIPBLAS_STATUS_MAPPING_ERROR) { \\\n        error_name = \"HIPBLAS_STATUS_MAPPING_ERROR \"; \\\n      } \\\n      else if (result == HIPBLAS_STATUS_EXECUTION_FAILED) { \\\n        error_name = \"HIPBLAS_STATUS_EXECUTION_FAILED \"; \\\n      } \\\n      else if (result == HIPBLAS_STATUS_INTERNAL_ERROR) { \\\n        error_name = \"HIPBLAS_STATUS_INTERNAL_ERROR \"; \\\n      } \\\n      else if (result == HIPBLAS_STATUS_NOT_SUPPORTED) { \\\n        error_name = \"HIPBLAS_STATUS_NOT_SUPPORTED \"; \\\n      } \\\n      else if (result == HIPBLAS_STATUS_ARCH_MISMATCH) { \\\n        error_name = \"HIPBLAS_STATUS_ARCH_MISMATCH \"; \\\n      } \\\n      else if (result == HIPBLAS_STATUS_HANDLE_IS_NULLPTR) { \\\n        error_name = \"HIPBLAS_STATUS_HANDLE_IS_NULLPTR \"; \\\n      } \\\n      printf(\"\\nHIPBLAS ERROR: %s failed with error %s\\n\", #func, error_name); \\\n      exit(1); \\\n    } \\\n  } while (0)\n\nextern hipError_t hipHostAlloc(void** ptr, size_t size, unsigned int flags);\nextern hipError_t hipFreeHost(void* ptr);\nextern hiprtcResult hiprtcGetLowLevelCode(hiprtcProgram prog, char* code);\nextern hiprtcResult hiprtcGetLowLevelCodeSize(hiprtcProgram prog, size_t* codeSizeRet);\nextern hipError_t hipEventCreate(hipEvent_t* event, unsigned flags);\nextern hipError_t hipStreamCreate(hipStream_t* stream, unsigned int flags);\nextern hipError_t hipLaunchJITKernel(hipFunction_t f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ,\n  unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, hipStream_t stream,\n  void** kernelParams, void** extra);\n\n/* HIP API: types\n * In the HIP API, there is no difference between runtime API and driver API\n * we therefore remap what the Driver API types would look like back to runtime API\n */\nusing hipfunction = hipFunction_t;\nusing hipstream = hipStream_t;\nusing hipevent = hipEvent_t;\nusing hipmodule = hipModule_t;\nusing hipdevice = hipDevice_t;\nusing hipDeviceProp = hipDeviceProp_t;\nusing hipcontext = hipCtx_t;\n\n/* HIPBLAS status and operations */\nextern hipblasStatus_t ACC_BLAS_STATUS_SUCCESS;\nextern hipblasOperation_t ACC_BLAS_OP_N;\nextern hipblasOperation_t ACC_BLAS_OP_T;\n\n/* HIPRTC error status */\nextern hiprtcResult ACC_RTC_SUCCESS;\n\n\n#endif /*ACC_HIP_H*/\n"
  },
  {
    "path": "src/acc/hip/dbcsr_hip_profiling.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! Copyright(C) 2021 Advanced Micro Devices, Inc. All rights reserved.                              !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_hip_profiling\n\n   INTERFACE\n      SUBROUTINE roctxMarkA(message) BIND(c, name=\"roctxMarkA\")\n         USE ISO_C_BINDING, ONLY: C_CHAR\n         IMPLICIT NONE\n         CHARACTER(C_CHAR) :: message(*)\n      END SUBROUTINE roctxMarkA\n\n      FUNCTION roctxRangePushA(message) BIND(c, name=\"roctxRangePushA\")\n         USE ISO_C_BINDING, ONLY: C_INT, &\n                                  C_CHAR\n         IMPLICIT NONE\n         INTEGER(C_INT) :: roctxRangePushA\n         CHARACTER(C_CHAR) :: message(*)\n      END FUNCTION roctxRangePushA\n\n      SUBROUTINE roctxRangePop() BIND(c, name=\"roctxRangePop\")\n         IMPLICIT NONE\n      END SUBROUTINE roctxRangePop\n   END INTERFACE\n\nEND MODULE dbcsr_hip_profiling\n\n"
  },
  {
    "path": "src/acc/libsmm_acc/.gitignore",
    "content": "# Files generated at build stage\nparameters.h\nsmm_acc_kernels.h\n*.so\n.with_gpu\n"
  },
  {
    "path": "src/acc/libsmm_acc/CMakeLists.txt",
    "content": "set(SMM_ACC_KERNELS\n    kernels/smm_acc_common.h\n    kernels/smm_acc_dnt_largeDB1.h\n    kernels/smm_acc_dnt_largeDB2.h\n    kernels/smm_acc_dnt_medium.h\n    kernels/smm_acc_dnt_small.h\n    kernels/smm_acc_dnt_tiny.h\n    kernels/smm_acc_transpose.h)\n\nadd_custom_target(\n  parameters ALL\n  COMMAND\n    ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_parameters.py\n    --gpu_version=${WITH_GPU} --base_dir=${CMAKE_CURRENT_SOURCE_DIR}/parameters\n  DEPENDS generate_parameters.py parameters/parameters_${WITH_GPU_PARAMS}.json\n  BYPRODUCTS parameters.h\n  COMMENT \"libsmm_acc: generating parameters for GPU ${WITH_GPU_PARAMS}\")\n\nadd_custom_target(\n  smm_acc_kernels ALL\n  COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_kernels.py\n          ${CMAKE_CURRENT_SOURCE_DIR}/kernels\n  DEPENDS generate_kernels.py ${SMM_ACC_KERNELS}\n  BYPRODUCTS smm_acc_kernels.h\n  COMMENT \"libsmm_acc: generating kernels\")\n\nadd_dependencies(dbcsr smm_acc_kernels parameters)\ntarget_include_directories(dbcsr PRIVATE ${CMAKE_CURRENT_BINARY_DIR}\n                                         ${CMAKE_CURRENT_SOURCE_DIR})\n\n# Note: this library is only used in some of the tests, it's just to get include\n# paths to generated header files.\nadd_library(libsmm_acc INTERFACE)\ntarget_include_directories(libsmm_acc INTERFACE ${CMAKE_CURRENT_BINARY_DIR}\n                                                ${CMAKE_CURRENT_SOURCE_DIR})\n"
  },
  {
    "path": "src/acc/libsmm_acc/PACKAGE",
    "content": "{\n\"description\": \"CUDA/HIP-accelerated library for small matrix multiplications\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"..\", \"../cuda\", \"../hip\", \"../cuda_hip\"]\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/README.md",
    "content": "# GPU Accelerated Small Matrix Multiplications\n\n`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.\n\nFor a description of the library (some details are outdated, but this nevertheless provides a very good introduction), see Chapter 8.4 of:\n\n> 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).\n\n### Compilation\n\n`libsmm_acc` is compiled from within DBCSR, there is no separate compilation.\n\n## Directory Organization\n\n- [`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.\n- `generate_*.py`: utility scripts for `libsmm_acc` compilation\n- `libsmm_acc*`: libsmm_acc C++ and CUDA / HIP code\n- [`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.\n- [`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)\n\n## Matrix-matrix Multiplication Kernels and Parameters\n\nFor a given matrix-matrix multiplication **triplet** characterized by dimensions\n\n- **m**\n- **n**\n- **k**,\n\n`libsmm_acc` can run 5 different matrix-matrix multiplication **kernels**:\n\n- [tiny](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_tiny.h)\n- [small](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_small.h)\n- [medium](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_medium.h)\n- [largeDB1](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB1.h) (\"large double-buffering 1\")\n- [largeDB2](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB2.h) (\"large double-buffering 2\")\n\nwhich take between 3 - 7 **parameters** (see figure at the top):\n\n- **threads**: number of threads per block in the execution configuration of the CUDA/HIP kernels\n- **grouping**: how many stack entries are grouped together into a CUDA/HIP thread block (if `grouping` is bigger, less blocks are launched)\n- **minblocks**: specifies the desired minimum number of resident blocks per multiprocessor\n- **tile_m**: (on the figure: **M**), `tile_m` * `tile_n` = dimensions of the result block `T`\n- **tile_n** : (on the figure: **N**)\n- **w**: input slab width (width of slab `P_A` and `P_B`)\n- **v**: output slab width (width of slab `P_C`)\n\nThe 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.\n\n## Contributing to libsmm_acc\n\nWe expect users to contribute to the library by providing new optimized kernels and support for new GPUs.\n\n#### Autotuning procedure\n\nFollow the [autotuning procedure](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/tune/README.md)\n\n#### Adding a new kernel\n\n1. Choose a kernel `name`\n\n2. Add the kernel's code (must be able to compile by both `nvcc` and `hip`) in file `kernels/smm_acc_dnt_name.h`\n\n3. Add Python kernel class inheriting from base class `kernels/smm_acc_dnt_name.py`\n\n#### Adding support for a new GPU card\n\n1. 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).\n\n2. 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).\n\n3. 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).\n\n4. Add a minimal JSON file `parameters_GPU.json`, containing:\n\n```json\n{\n}\n```\n\nthen add matrix-matrix multiplication parameters for this GPU using *autotuning*.\n"
  },
  {
    "path": "src/acc/libsmm_acc/generate_kernels.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport re\nimport argparse\nfrom pathlib import Path\n\n# ===============================================================================\n# Helper variables\nseparator = (\n    \"//===========================================================================\\n\"\n)\nline_in_string = \"{:<70}\\\\n\\\\\"\nvariable_declaration = (\n    'std::string {var_name} = \"                                     \\\\n\\\\'\n)\nend_string = '\";'\ncommented_line = r\"\\s*(//|/\\*.*/*/)\"\nopen_comment = r\"\\s*/\\*\"\nclose_comment = r\".*\\*/\"\nsmm_acc_header = \"\"\"\\\n/*------------------------------------------------------------------------------------------------*\n * Copyright (C) by the DBCSR developers group - All rights reserved                              *\n * This file is part of the DBCSR library.                                                        *\n *                                                                                                *\n * For information on the license, see the LICENSE file.                                          *\n * For further information please visit https://dbcsr.cp2k.org                                    *\n * SPDX-License-Identifier: GPL-2.0+                                                              *\n *------------------------------------------------------------------------------------------------*/\n\n/*****************************************************************************\n *  FILE GENERATED BY SCRIPT 'generate_kernels.py' DO NOT EDIT               *\n *****************************************************************************/\n\n#ifndef SMM_ACC_H\n#define SMM_ACC_H\n#include <string>\n\"\"\"\n\n\n# ===============================================================================\ndef main(kernels_folder: Path):\n    \"\"\"\n    Find files corresponding to CUDA/HIP kernels and write them as strings into a\n    C++ header file to be read for JIT-ing\n    \"\"\"\n    # Find all files containing \"smm_acc\" kernels in the \"kernel\" subfolder\n    kernels_folder_files = kernels_folder.iterdir()\n    kernel_files = list()\n    for kfile in kernels_folder_files:\n        if kfile.name.startswith(\"smm_acc_\") and kfile.suffix == \".h\":\n            kernel_files.append(kfile)\n    print(f\"Found {len(kernel_files)} kernel files:\")\n    print(*(f\"<- {kf}\" for kf in kernel_files), sep=\"\\n\")\n\n    # Read\n    kernels_h = (\n        dict()\n    )  # key: path to kernel file (string), value: file content (list of string)\n    for kernel_file in kernel_files:\n        kernels_h[kernel_file] = kernel_file.read_text().splitlines()\n\n    # Construct file containing the kernels as strings\n    print(\"Re-write kernels as strings...\")\n    file_h = smm_acc_header\n    for kernel_file, kernel in kernels_h.items():\n        kernel_name = kernel_file.stem  # use the filename as name for the kernel\n        file_h += f\"\\n{separator}{cpp_function_to_string(kernel, kernel_name)}\\n\"\n    file_h += \"#endif  // SMM_ACC_H\\n\"\n    file_h += \"//EOF\"\n    file_h += \"\\n\\n\"\n\n    # Write\n    file_h_path = \"smm_acc_kernels.h\"\n    with open(file_h_path, \"w\") as fhandle:\n        fhandle.write(file_h)\n    print(f\"Wrote kernel string to file\\n-> {file_h_path}\")\n\n\n# ===============================================================================\ndef cpp_function_to_string(cpp_file, kernel_name):\n    \"\"\"\n    Transform a C++ function into a char array\n    :param cpp_file: file content\n                    (list of strings, each element is a line in the original file)\n    :param kernel_name: name of the kernel (string, must be usable as a C++ variable name)\n    :return: string containing the kernel written as a C++ char array\n    \"\"\"\n    assert re.match(\n        r\"^[a-zA-Z]\\w*\", kernel_name\n    ), \"kernel_name must be a valid C/C++ variable name\"\n\n    out = f\"{variable_declaration.format(var_name=kernel_name)}\\n\"\n    in_comment = False\n    for line in cpp_file:\n        if not in_comment:\n            # ignore comments and empty lines\n            if (\n                re.match(commented_line, line) is not None\n                or len(line) == 0\n                or '#include \"smm_acc_common.h\"' in line\n            ):\n                pass\n            elif re.match(open_comment, line) is not None:\n                in_comment = True\n            else:\n                out += (\n                    line_in_string.format(\n                        line.replace('\"', '\\\\\"').replace(\"\\\\\", \"\\\\\\\\\")\n                    )\n                    + \"\\n\"\n                )\n        elif re.match(close_comment, line):  # in_comment == True\n            in_comment = False\n\n    return out + end_string\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"Pack CUDA/HIP kernels for JIT'ing\")\n    parser.add_argument(\n        \"kernels_folder\",\n        metavar=\"KERNELS_FOLDER\",\n        type=Path,\n        nargs=\"?\",\n        default=\"./kernels\",\n        help=\"directory with the kernel header files. Default: %(default)s\",\n    )\n\n    args = parser.parse_args()\n    main(args.kernels_folder)\n"
  },
  {
    "path": "src/acc/libsmm_acc/generate_parameters.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport json\nimport argparse\nfrom pathlib import Path\n\nfrom kernels.smm_acc import params_dict_to_kernel, gpu_architectures\n\n\n# ===============================================================================\ndef main(gpu_version: str, base_dir: Path):\n    param_fn = base_dir / f\"parameters_{gpu_version}.json\"\n\n    try:  # Read existing parameters\n        with param_fn.open(\"r\") as fhandle:\n            print(f\"GPU version: {gpu_version}\")\n            all_kernels = [\n                params_dict_to_kernel(**params) for params in json.load(fhandle)\n            ]\n        print(f\"About to process {len(all_kernels):,} kernels from file {param_fn}\")\n    except:  # noqa: E722\n        all_kernels = []\n        pass\n\n    try:  # Read GPU properties (warp size)\n        gpu_props_fn = base_dir / \"../kernels/gpu_properties.json\"\n        arch_code = gpu_architectures[param_fn.name]\n        with gpu_props_fn.open(\"r\") as fhandle:\n            gpu_warp_size = json.load(fhandle)[arch_code][\"Threads_/_Warp\"]\n    except:  # noqa: E722\n        gpu_warp_size = 32\n        pass\n\n    print(f\"GPU warp size: {gpu_warp_size}\")\n\n    # Construct output\n    out = write_parameters_file(all_kernels, gpu_warp_size)\n\n    # Write to c++ header-file\n    file_h = \"parameters.h\"\n    if all_kernels:\n        print(f\"Found {len(all_kernels):,} kernels in file {param_fn}\")\n    print(f\"Printing them to file {file_h}\")\n    with open(file_h, \"w\") as f:\n        f.write(out)\n\n\n# ===============================================================================\ndef write_parameters_file(all_pars, gpu_warp_size):\n    # Header\n    out = \"\"\"\\\n/*------------------------------------------------------------------------------------------------*\n * Copyright (C) by the DBCSR developers group - All rights reserved                              *\n * This file is part of the DBCSR library.                                                        *\n *                                                                                                *\n * For information on the license, see the LICENSE file.                                          *\n * For further information please visit https://dbcsr.cp2k.org                                    *\n * SPDX-License-Identifier: GPL-2.0+                                                              *\n *------------------------------------------------------------------------------------------------*/\n\n/*****************************************************************************\n *  FILE GENERATED BY SCRIPT 'generate_parameters.py' DO NOT EDIT            *\n *****************************************************************************/\n\n#ifndef PARAMETERS_H\n#define PARAMETERS_H\n\n#include \"parameters_utils.h\"\n\n/*\n * Lookup table: given a triplet (m, n, k) describing a matrix-matrix multiplication,\n * look up its optimal kernel parameters\n *\n * Keys:\n *   (m, n, k)\n *\n * Values: array of 8 integers with elements:\n *   0: mm algorithm (enum defined in libsmm_acc.h, possible values: 1, 2, 3, 4, 5)\n *   1: tile_m\n *   2: tile_n\n *   3: w\n *   4: v\n *   5: threads\n *   6: grouping\n *   7: minblocks\n *\n * Note: for the matrix matrix multiplication algorithms which take less than 8 parameters (i.e. tiny, small, medium),\n * the superfluous parameters are set to 0\n */\n\n\"\"\"\n\n    # Warp size\n    out += f\"extern const int warp_size = {gpu_warp_size};\\n\\n\"\n\n    # Map of kernel parameters\n    out += \"\"\"\\\nextern const std::unordered_map<Triplet, KernelParameters> ht = {\n\"\"\"\n    # Initializer list body\n    print(\"Get parameters and write to file\")\n    init_list_line = (\n        \"    {{ {{{{{m:3}, {n:3}, {k:3}}}}},\"\n        + \" {{{{ {algorithm:1}, {tile_m:2}, {tile_n:2}, {w:2}, {v:2}, {threads:3}, {grouping:2}, {minblocks:2} }}}} }},\"\n        + \"  // perf: {perf} {source}\\n\"\n    )\n    for pars in all_pars:\n        out += init_list_line.format(**pars.as_dict_for_parameters_h)\n\n    # Footer\n    out += \"\"\"\\\n};\n\n#endif\n//EOF\n\"\"\"\n\n    return out\n\n\n# ===============================================================================\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"Generator of libsmm_acc. The Library for Small Matrix Multiplications on GPU.\",\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter,\n    )\n    parser.add_argument(\n        \"-g\",\n        \"--gpu_version\",\n        metavar=\"GPU_VERSION\",\n        default=\"P100\",\n        help=\"GPU card version, used to select the appropriate libsmm_acc parameters file. Default: %(default)s\",\n    )\n    parser.add_argument(\n        \"-d\",\n        \"--base_dir\",\n        metavar=\"BASE_DIR\",\n        default=\"parameters/\",\n        type=Path,\n        help=\"Set the base directory to look for the parameter files. Default: %(default)s\",\n    )\n    args = parser.parse_args()\n    main(args.gpu_version, args.base_dir)\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/PACKAGE",
    "content": "{\n\"description\": \"Kernel templates for libsmm_acc\",\n\"archive\": \"libdbcsr\",\n\"requires\": []\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/README.md",
    "content": "# LIBSMM_ACC Kernels\n\n## Directory Organization\n\n* [`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)\n\n* [`gpu_properties.json`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/gpu_properties.json) GPU card properties\n\n* [`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\n\n* [`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\n\n  * `smm_acc_dnt_ALGORITHM.py` Kernel class in python\n\n  * `smm_acc_dnt_ALGORITHM.h` Batched Multiply Kernel CUDA/HIP code\n\n* [`smm_acc_transpose.h`](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/kernels/smm_acc_transpose.h) Transpose CUDA/HIP code\n\n## Batched Multiplication Kernels\n\nAll kernels have following signature:\n\n```\ntemplate <int m, int n, int k, int M, int N, int w, int v, int threads, int grouping, int minblocks >\n\n__global__ void\n__launch_bounds__(threads, minblocks)\nsmm_acc_dnt_ALGORITHM\n(const int *__restrict__ param_stack, const int stack_size,\nconst double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data);\n```\n\nAt 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.\n\n`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.\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\"\"\"Manage libsmm_acc kernels: their kernel code (CUDA and HIP), their parameters, and predictive features\"\"\"\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/autotuning_properties.json",
    "content": "{\n    \"info\": {\n        \"header\": \"Autotuning characteristics\",\n        \"stack_size\": \"Number of block multiplications computed in one DBCSR stack\",\n        \"npar\": \"Number of parameters in one DBCSR stack entry\",\n        \"sizeof_int\": \"size of an int (bytes)\",\n        \"sizeof_double\": \"size of a double (bytes)\"\n    },\n    \"stack_size\": 16005,\n    \"npars\": 3,\n    \"sizeof_int\": 4,\n    \"sizeof_double\": 8\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/gpu_properties.json",
    "content": "{\n    \"info\": {\n        \"header\": \"Hardware-dependent constraints (GPU P100, compute capability 6.0)\",\n        \"nvidia_source_url\": [\n            \"https://docs.nvidia.com/cuda/cuda-occupancy-calculator/index.html\",\n            \"https://devblogs.nvidia.com/inside-pascal/\",\n            \"https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Center/tesla-product-literature/volta-architecture-whitepaper.pdf\",\n            \"https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications\"\n        ],\n        \"amd_source_url\": [\n            \"https://www.amd.com/en/products/professional-graphics/radeon-pro-wx-9100\",\n            \"https://www.amd.com/en/products/professional-graphics/instinct-mi50\",\n\t    \"https://www.amd.com/en/products/server-accelerators/instinct-mi100\",\n\t    \"https://www.amd.com/en/products/server-accelerators/instinct-mi250\"\n        ]\n    },\n    \"sm_35\": {\n        \"Compute_Capability\": 3.5,\n        \"SM_Version\": \"sm_35\",\n        \"Threads_/_Warp\" : 32,\n        \"Warps_/_Multiprocessor\": 64,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 16,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 49152,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 49152,\n        \"Register_File_Size_/_Multiprocessor_(32-bit_registers)\": 65536,\n        \"Max_Registers_/_Block\": 65536,\n        \"Register_Allocation_Unit_Size\": 256,\n        \"Register_Allocation_Granularity\": \"warp\",\n        \"Max_Registers_/_Thread\": 255,\n        \"Shared_Memory_Allocation_Unit_Size\": 256,\n        \"Warp_Allocation_Granularity\": 4,\n        \"Shared_Memory_Size_Configurations_(bytes)\": 49152,\n        \"Warp_register_allocation_granularities\": 256\n    },\n    \"sm_37\": {\n        \"Compute_Capability\": 3.7,\n        \"SM_Version\": \"sm_37\",\n        \"Threads_/_Warp\" : 32,\n        \"Warps_/_Multiprocessor\": 64,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 16,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 114688,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 49152,\n        \"Register_File_Size_/_Multiprocessor_(32-bit_registers)\": 131072,\n        \"Max_Registers_/_Block\": 65536,\n        \"Register_Allocation_Unit_Size\": 256,\n        \"Register_Allocation_Granularity\": \"warp\",\n        \"Max_Registers_/_Thread\": 255,\n        \"Shared_Memory_Allocation_Unit_Size\": 256,\n        \"Warp_Allocation_Granularity\": 4,\n        \"Shared_Memory_Size_Configurations_(bytes)\": 114688,\n        \"Warp_register_allocation_granularities\": 256\n    },\n    \"sm_60\": {\n        \"Compute_Capability\": 6.0,\n        \"SM_Version\": \"sm_60\",\n        \"Threads_/_Warp\" : 32,\n        \"Warps_/_Multiprocessor\": 64,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 32,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 65536,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 49152,\n        \"Register_File_Size_/_Multiprocessor_(32-bit_registers)\": 65536,\n        \"Max_Registers_/_Block\": 65536,\n        \"Register_Allocation_Unit_Size\": 256,\n        \"Register_Allocation_Granularity\": \"warp\",\n        \"Max_Registers_/_Thread\": 255,\n        \"Shared_Memory_Allocation_Unit_Size\": 256,\n        \"Warp_Allocation_Granularity\": 2,\n        \"Shared_Memory_Size_Configurations_(bytes)\": 65536,\n        \"Warp_register_allocation_granularities\": 256,\n        \"Shared_memory_access_latency\": 4,\n        \"Global_memory_access_latency\": 500\n    },\n    \"sm_70\": {\n        \"Compute_Capability\": 7.0,\n        \"SM_Version\": \"sm_70\",\n        \"Threads_/_Warp\" : 32,\n        \"Warps_/_Multiprocessor\": 64,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 32,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 114688,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 49152,\n        \"Register_File_Size_/_Multiprocessor_(32-bit_registers)\": 65536,\n        \"Max_Registers_/_Block\": 65536,\n        \"Register_Allocation_Unit_Size\": 256,\n        \"Register_Allocation_Granularity\": \"warp\",\n        \"Max_Registers_/_Thread\": 255,\n        \"Shared_Memory_Allocation_Unit_Size\": 256,\n        \"Warp_Allocation_Granularity\": 4,\n        \"Shared_Memory_Size_Configurations_(bytes)\": 114688,\n        \"Warp_register_allocation_granularities\": 256,\n        \"Shared_memory_access_latency\": 4,\n        \"Global_memory_access_latency\": 500\n    },\n    \"sm_80\": {\n        \"Compute_Capability\": 8.0,\n        \"SM_Version\": \"sm_80\",\n        \"Threads_/_Warp\" : 32,\n        \"Warps_/_Multiprocessor\": 64,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 32,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 65536,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 65536,\n        \"Register_File_Size_/_Multiprocessor_(32-bit_registers)\": 65536,\n        \"Max_Registers_/_Block\": 65536,\n        \"Register_Allocation_Unit_Size\": 256,\n        \"Register_Allocation_Granularity\": \"warp\",\n        \"Max_Registers_/_Thread\": 255,\n        \"Shared_Memory_Allocation_Unit_Size\": 128,\n        \"Warp_Allocation_Granularity\": 4,\n        \"Shared_Memory_Size_Configurations_(bytes)\": 114688,\n        \"Warp_register_allocation_granularities\": 256,\n        \"Shared_memory_access_latency\": 4,\n        \"Global_memory_access_latency\": 500\n    },\n    \"sm_90\": {\n        \"Compute_Capability\": 9.0,\n        \"SM_Version\": \"sm_90\",\n        \"Threads_/_Warp\" : 32,\n        \"Warps_/_Multiprocessor\": 64,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 32,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 65536,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 65536,\n        \"Register_File_Size_/_Multiprocessor_(32-bit_registers)\": 65536,\n        \"Max_Registers_/_Block\": 65536,\n        \"Register_Allocation_Unit_Size\": 256,\n        \"Register_Allocation_Granularity\": \"warp\",\n        \"Max_Registers_/_Thread\": 255,\n        \"Shared_Memory_Allocation_Unit_Size\": 128,\n        \"Warp_Allocation_Granularity\": 4,\n        \"Shared_Memory_Size_Configurations_(bytes)\": 114688,\n        \"Warp_register_allocation_granularities\": 256,\n        \"Shared_memory_access_latency\": 4,\n        \"Global_memory_access_latency\": 500\n    },\n    \"nvidia_lingo_to_amd\" : {\n\t\"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\",\n        \"Thread\": \"Work_Item, (a single element of work: one element from the dispatch grid)\",\n        \"Warp\": \" Wavefront (a collection of 64 work-items that execute in parallel on a single GCN processor)\",\n        \"Thread_Block\": \"Workgroup (a collection of wavefronts running on the same compute unit which can synchronize and share data)\",\n        \"Multiprocessor\": \"Compute_Unit\",\n        \"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.)\"\n    },\n    \"gfx900\" : {\n        \"GPU_Architecture\": \"Vega\",\n        \"Product_Names\": [\"Radeon PRO WX 9100\"],\n        \"Threads_/_Warp\" : 64,\n        \"Warps_/_Multiprocessor\": 16,\n        \"Threads_/_Multiprocessor\": 1024,\n        \"Thread_Blocks_/_Multiprocessor\": 16,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 64000,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 64000,\n        \"Compute_Units\": 64,\n        \"Stream_Multiprocessors\": 4096,\n        \"Memory_Size_(GB)\": 16,\n        \"Memory_Interface_(bits)\": 2048\n    },\n    \"gfx906\" : {\n        \"GPU_Architecture\": \"Vega20\",\n        \"Product_Names\": [\"Instinct MI50\"],\n        \"Threads_/_Warp\" : 64,\n        \"Warps_/_Multiprocessor\": 16,\n        \"Threads_/_Multiprocessor\": 1024,\n        \"Thread_Blocks_/_Multiprocessor\": 16,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 64000,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 64000,\n        \"Compute_Units\": 60,\n        \"Stream_Multiprocessors\": 3840,\n        \"Memory_Size_(GB)\": 16,\n        \"Memory_Interface_(bits)\": 4096\n    },\n    \"gfx908\" : {\n        \"GPU_Architecture\": \"CDNA\",\n        \"Product_Names\": [\"Instinct MI100\"],\n        \"Threads_/_Warp\" : 64,\n        \"Warps_/_Multiprocessor\": 32,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 16,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 64000,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 64000,\n        \"Compute_Units\": 120,\n        \"Stream_Multiprocessors\": 7860,\n        \"Memory_Size_(GB)\": 32,\n        \"Memory_Interface_(bits)\": 4096\n    },\n    \"gfx90a\" : {\n        \"GPU_Architecture\": \"CDNA2\",\n        \"Product_Names\": [\"Instinct MI250\"],\n        \"Threads_/_Warp\" : 64,\n        \"Warps_/_Multiprocessor\": 32,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 16,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 64000,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 64000,\n        \"Compute_Units\": 208,\n        \"Stream_Multiprocessors\": 13312,\n        \"Memory_Size_(GB)\": 128,\n        \"Memory_Interface_(bits)\": 8192\n    },\n    \"gfx942\" : {\n        \"GPU_Architecture\": \"CDNA3\",\n        \"Product_Names\": [\"Instinct MI300A\"],\n        \"Threads_/_Warp\" : 64,\n        \"Warps_/_Multiprocessor\": 32,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 32,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 64000,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 64000,\n        \"Compute_Units\": 228,\n        \"Stream_Multiprocessors\": 14592,\n        \"Memory_Size_(GB)\": 128,\n        \"Memory_Interface_(bits)\": 8192\n    },\n    \"gfx950\" : {\n        \"GPU_Architecture\": \"CDNA4\",\n        \"Product_Names\": [\"Instinct MI350X\"],\n        \"Threads_/_Warp\" : 64,\n        \"Warps_/_Multiprocessor\": 32,\n        \"Threads_/_Multiprocessor\": 2048,\n        \"Thread_Blocks_/_Multiprocessor\": 32,\n        \"Max_Thread_Block_Size\": 1024,\n        \"Max_Shared_Memory_/_Block_(bytes)\": 64000,\n        \"Shared_Memory_/_Multiprocessor_(bytes)\": 64000,\n        \"Compute_Units\": 256,\n        \"Stream_Multiprocessors\": 16384,\n        \"Memory_Size_(GB)\": 288,\n        \"Memory_Interface_(bits)\": 8192\n    }\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc.py",
    "content": "####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport re\n\n# ===============================================================================\n# Dictionary of available kernel algorithms\n# keys: kernel name\n# values: kernel implementation class\nfrom kernels.smm_acc_dnt_largeDB1 import Kernel_dnt_largeDB1\nfrom kernels.smm_acc_dnt_largeDB2 import Kernel_dnt_largeDB2\nfrom kernels.smm_acc_dnt_medium import Kernel_dnt_medium\nfrom kernels.smm_acc_dnt_small import Kernel_dnt_small\nfrom kernels.smm_acc_dnt_tiny import Kernel_dnt_tiny\n\nkernel_algorithm = {\n    \"tiny\": Kernel_dnt_tiny,\n    \"small\": Kernel_dnt_small,\n    \"medium\": Kernel_dnt_medium,\n    \"largeDB1\": Kernel_dnt_largeDB1,\n    \"largeDB2\": Kernel_dnt_largeDB2,\n}\n\n\n# ===============================================================================\n# Dictionary of parameter types\n# keys: parameter name\n# values: type of the parameter\nparameter_types = {\n    \"m\": int,\n    \"n\": int,\n    \"k\": int,\n    \"algorithm\": str,\n    \"threads\": int,\n    \"grouping\": int,\n    \"minblocks\": int,\n    \"tile_m\": int,\n    \"tile_n\": int,\n    \"w\": int,\n    \"v\": int,\n    \"perf (Gflop/s)\": float,\n}\n\n\n# ===============================================================================\n# Dictionary of available GPU architectures.\n# keys: parameter_file\n# values: CUDA compute versions / AMD processor versions\ngpu_architectures = {\n    \"parameters_K20X.json\": \"sm_35\",\n    \"parameters_K40.json\": \"sm_35\",\n    \"parameters_K80.json\": \"sm_37\",\n    \"parameters_P100.json\": \"sm_60\",\n    \"parameters_V100.json\": \"sm_70\",\n    \"parameters_A100.json\": \"sm_80\",\n    \"parameters_H100.json\": \"sm_90\",\n    \"parameters_Vega10.json\": \"gfx900\",\n    \"parameters_Mi50.json\": \"gfx906\",\n    \"parameters_Mi100.json\": \"gfx908\",\n    \"parameters_Mi250.json\": \"gfx90a\",\n    \"parameters_Mi300.json\": \"gfx942\",\n    \"parameters_Mi350.json\": \"gfx950\",\n}\n\n\n# ===============================================================================\ndef compatible_mnk(algo, m, n, k):\n    \"\"\"Determine whether a given algorithm is compatible with given m, n, k values\"\"\"\n\n    max_sizes = max(m * k, n * k, m * n)\n    compatible = True\n    if algo == \"tiny\":\n        if max_sizes > 64:\n            compatible = False\n    elif algo == \"small\":\n        if max_sizes > 128:\n            compatible = False\n    elif algo in [\"largeDB1\", \"largeDB2\"]:\n        if max_sizes < 250:\n            compatible = False\n    else:\n        if algo != \"medium\":\n            raise AssertionError(f\"Cannot identify algorithm:{str(algo)}\")\n\n    return compatible\n\n\n# ===============================================================================\ndef params_dict_to_kernel(**params):\n    \"\"\"Given a dictionary of parameters, return the corresponding Kernel class instance\"\"\"\n\n    # Get the 'algorithm' field\n    algo = params.pop(\"algorithm\")\n\n    # Get the list of fields needed to initialize a Kernel instance of this given algorithm\n    kernel_init_params = kernel_algorithm[algo].launch_parameters + [\"perf\", \"source\"]\n\n    # Fill in dictionary fields\n    kernel_init_params_dict = dict()\n    for k in kernel_init_params:\n        if (\n            k == \"perf\"\n            and \"perf\" not in params.keys()\n            and params[\"source\"] == \"predicted\"\n        ):\n            # the performance of predicted parameter sets is not given\n            kernel_init_params_dict[\"perf\"] = None\n        else:\n            kernel_init_params_dict[k] = params[k]\n\n    return kernel_algorithm[algo](**kernel_init_params_dict)\n\n\ndef descr_to_kernel(kernel_descr, source=\"autotuned\"):\n    \"\"\"Given a kernel description from the autotuning output, return the corresponding Kernel class instance\"\"\"\n\n    from ast import literal_eval\n\n    re_kernel_descr = re.compile(\n        r\"Kernel_dnt_(\\w+)(\\(.*\\)) , # (\\d+(?:\\.\\d+)?) GFlop/s\"\n    )\n    kernel_descr_matched = re_kernel_descr.search(kernel_descr)\n    assert (\n        kernel_descr_matched is not None\n    ), f'Could not match kernel description in \"{kernel_descr}\"'\n    match = kernel_descr_matched.groups()\n    algo = match[0]\n    m = (\n        match[1]\n        .replace(\"=\", \"':\")\n        .replace(\", \", \", '\")\n        .replace(\"(\", \"{'\")\n        .replace(\")\", \"}\")\n    )\n    params = dict(literal_eval(m))\n    params[\"perf\"] = float(match[2])\n    params[\"source\"] = source\n    return kernel_algorithm[algo](**params)\n\n\ndef to_string(*iterable):\n    \"\"\"\n    Given a (list of) m,n,k-triplet(s), return the corresponding (list of) string(s) \"mxnxk\"\n    \"\"\"\n    mnk_string = \"{}x{}x{}\"\n    if len(iterable) == 3 and isinstance(iterable[0], int):\n        m, n, k = iterable\n        iterable_to_string = mnk_string.format(m, n, k)\n    else:\n        iterable_to_string = [mnk_string.format(m, n, k) for m, n, k in iterable]\n    if len(iterable_to_string) == 1:\n        iterable_to_string = iterable_to_string[0]\n    return iterable_to_string\n\n\nmnk_pattern = re.compile(r\"(\\d+)x(\\d+)x(\\d+)\")\n\n\ndef to_tuple(*iterable):\n    \"\"\"\n    Given a (list of) string(s) \"mxnxk\", return the corresponding (list of) m,n,k-triplet(s)\n    \"\"\"\n    tuple_mnks = list()\n    for mnk in iterable:\n        m, n, k = mnk_pattern.match(mnk).groups()\n        tuple_mnks.append((int(m), int(n), int(k)))\n    if len(tuple_mnks) == 1:\n        tuple_mnks = tuple_mnks[0]\n    return tuple_mnks\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_common.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n// work around an issue where -D flags are not propagated in hiprtcCompileProgram (tested on 3.9.0)\n#if defined(__HIP_ROCclr__)\n#  if !defined(__HIP)\n#    define __HIP\n#  endif\n#endif\n#if defined(__HIP) && !defined(__HIP_PLATFORM_NVCC__) && !defined(__HIPCC_RTC__)\n#  include <hip/hip_runtime.h>\n#endif\n\n#define MAX(x, y) (((x) > (y)) ? (x) : (y))\n#define MIN(x, y) (((x) < (y)) ? (x) : (y))\n\n/******************************************************************************\n * There is no native support for atomicAdd on doubles in Cuda 5.0. However   *\n * the following implementation is provided in the CUDA C Programing guide.   *\n ******************************************************************************/\n#if defined(__CUDA)\n#  if (__CUDACC_VER_MAJOR__ < 8) || (defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 600))\nstatic __device__ double atomicAdd(double* address, double val) {\n  unsigned long long int* address_as_ull = (unsigned long long int*)address;\n  unsigned long long int old = *address_as_ull, assumed;\n  do {\n    assumed = old;\n    old = atomicCAS(address_as_ull, assumed, __double_as_longlong(val + __longlong_as_double(assumed)));\n  } while (assumed != old);\n  return __longlong_as_double(old);\n}\n#  endif\n#endif\n\n/******************************************************************************\n * A simple __ldg replacement for older cuda devices.                         *\n ******************************************************************************/\n#if defined(__CUDA)\n#  if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 350)\n#    define __ldg(x) (*(x))\n#  endif\n#endif\n\n/******************************************************************************\n * syncthreads macro                                                          *\n ******************************************************************************/\n// clang-format off\n#if (defined(__HIP) && not defined(__HIP_PLATFORM_NVCC__)) || (defined(__CUDA) && ((__CUDACC_VER_MAJOR__ >= 8) || (defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 600))))\n#  define syncthreads(x) __syncthreads(x)\n#endif\n// clang-format on\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_base.py",
    "content": "# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\n# ===============================================================================\n#  Computing helpers\n\n\ndef round_up_to_nearest_multiple(x, step):\n    \"\"\"This should work for integers or numpy arrays of integers\"\"\"\n    return ((x + step - 1) // step) * step\n\n\ndef round_down_to_nearest_multiple(x, step):\n    import numpy as np\n\n    result = np.where(x % step == 0, x, x - x % step).astype(float)\n    if result.size == 1:\n        result = result.item()  # extract single element of numpy array\n    return result\n\n\n# ===============================================================================\nclass Kernel:\n    \"\"\"\n    Base class for libsmm_acc's kernels\n    \"\"\"\n\n    def __repr__(self):\n        return f\"<{self.name}>\"\n\n    def can_handle(self, m, n, k):\n        return self.m == m and self.n == n and self.k == k\n\n    @property\n    def include(self):\n        return f\"smm_acc_dnt_{self.algorithm}.h\"\n\n    @property\n    def name(self):\n        return f\"smm_acc_dnt_{self.algorithm}_{'_'.join([str(self.__dict__[k]) for k in self.launch_parameters])}\"\n\n    @property\n    def autotuned(self):\n        return True if self.source == \"autotuned\" else False\n\n    @property\n    def as_dict(self):\n        return dict(algorithm=self.algorithm, **self.__dict__)\n\n    @property\n    def as_dict_for_parameters_json(self):\n        \"\"\"\n        Return the kernel as a dictionary in such a way that it is convenient to write in a JSON file and parameters\n        always appear in the same order\n        \"\"\"\n        # Add common fields\n        fields = [\n            \"m\",\n            \"n\",\n            \"k\",\n            \"tile_m\",\n            \"tile_n\",\n            \"w\",\n            \"v\",\n            \"threads\",\n            \"grouping\",\n            \"minblocks\",\n            \"algorithm\",\n        ]\n        d = dict()\n        for f in fields:\n            if f in self.as_dict.keys():\n                d[f] = self.as_dict[f]\n\n        # Only add the performance if it was autotuned. If it was predicted, we only have a value scaled in (0,1)\n        if self.as_dict[\"source\"] == \"autotuned\":\n            d[\"perf\"] = self.as_dict[\"perf\"]\n\n        # Add the source of this parameter set (autotuned or predicted)\n        d[\"source\"] = self.as_dict[\"source\"]\n\n        return d\n\n    @property\n    def as_dict_for_parameters_h(self):\n        \"\"\"\n        Return the kernel as a dictionary in such a way that it is convenient to write into the parameters.h file and\n        parameters always appear in the same order\n        \"\"\"\n        # Add common fields\n        fields = [\n            \"m\",\n            \"n\",\n            \"k\",\n            \"tile_m\",\n            \"tile_n\",\n            \"w\",\n            \"v\",\n            \"threads\",\n            \"grouping\",\n            \"minblocks\",\n            \"perf\",\n            \"source\",\n        ]\n        d = dict()\n        for f in fields:\n            d[f] = self.as_dict[f] if f in self.as_dict.keys() else 0\n\n        # Add algorithm and source\n        d[\"algorithm\"] = self.algorithm_num\n        d[\"source\"] = \"(predicted)\" if not self.autotuned else \"\"\n        return d\n\n    def launcher_code(self, compiler):\n        \"\"\"\n        Compiler: either \"nvcc\" or \"hipcc\": determines the C++ dialect to use for kernel launching: either CUDA or HIP\n        \"\"\"\n\n        if compiler == \"nvcc\":\n            stream_type = \"cudaStream_t\"\n            # The syntax for kernel launching is different in CUDA and HIP\n            kern_func = (\n                \"kern_func<<<\"\n                \" ((stack_size + %(grouping)d - 1) / %(grouping)d), %(threads)d, shared_size, stream\"\n                \" >>>(\"\n            ) % self.__dict__\n        else:\n            stream_type = \"hipStream_t\"\n            kern_func = (\n                \"hipLaunchKernelGGL(\"\n                \"kern_func, (stack_size + %(grouping)d - 1) / %(grouping)d, %(threads)d, shared_size, stream, \"\n            ) % self.__dict__\n\n        return f\"\"\"\\\nint 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) {{\n  int shared_size = 0;\n  // {str(self.__dict__)}\n  typedef void (*kernel)(const int*, int, const double*, const double*, double*);\n  static kernel kern_func = {self.func_signature}\n  {kern_func}param_stack, stack_size, a_data, b_data, c_data);\n  return 0;\n}}\n\"\"\"  # noqa: E501\n\n    @property\n    def func_signature(self):\n        raise NotImplementedError(\"func_signature must be implemented in subclass\")\n\n    @staticmethod\n    def promising_parameters(m, n, k, gpu, autotuning):\n        raise NotImplementedError(\n            \"promising_parameters must be implemented in subclass\"\n        )\n\n    @staticmethod\n    def baseline(m, n, k, gpu, autotuning):\n        \"\"\"Compute a baseline parameter set, whose performance can be compared against\"\"\"\n        raise NotImplementedError(\"baseline must be implemented in subclass\")\n\n    @classmethod\n    def parameter_set_distance(cls, par_set1, par_set2):\n        \"\"\"\n        Compute a distance-score between two parameter sets.\n        The lower the score, the closer the two parameter sets are\n        par_set1, par_set2 are parameter set dictionaries of the form\n        {m, n, k, algorithm, minblocks, grouping, threads, tile_m, tile_n, w, v}\n        \"\"\"\n        # Check that ('m', 'n', 'k') are the same\n        assert (\n            par_set1[\"m\"] == par_set2[\"m\"]\n        ), \"The two parameter sets have different 'm'-parameters: {} and {}\".format(\n            par_set1[\"m\"], par_set2[\"m\"]\n        )\n        assert (\n            par_set1[\"n\"] == par_set2[\"n\"]\n        ), \"The two parameter sets have different 'n'-parameters: {} and {}\".format(\n            par_set1[\"n\"], par_set2[\"n\"]\n        )\n        assert (\n            par_set1[\"k\"] == par_set2[\"k\"]\n        ), \"The two parameter sets have different 'k'-parameters: {} and {}\".format(\n            par_set1[\"k\"], par_set2[\"k\"]\n        )\n\n        # Compute distance in number of threads\n        score = abs(par_set1[\"threads\"] - par_set2[\"threads\"]) / 32\n        par_entries = [\n            p for p in cls.launch_parameters if p not in (\"m\", \"n\", \"k\", \"threads\")\n        ]\n\n        # Compute distance in other parameters\n        for par in par_entries:\n            score += abs(par_set1[par] - par_set2[par])\n\n        return score\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB1.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n/*****************************************************************************/\n/*  Authors: Peter Messmer <pmessmer@nvidia.com>,                            */\n/*           Nikolay Markovskiy <nmarkovskiy@nvidia.com>                     */\n/*           Ole Schuett <ole.schuett@mat.ethz.ch>                           */\n/*****************************************************************************/\n\n#include \"smm_acc_common.h\"\n\n\nnamespace ns_smm_acc_dnt_largeDB1 {\n/****************************************************************************/\n__device__ static inline void load_gmem_into_smem(\n  const double* __restrict__ from, double* dest, const int length, const int threads) {\n  if (length < threads) { /* are there enough threads to load in one step? */\n    if (threadIdx.x < length) dest[threadIdx.x] = __ldg(&from[threadIdx.x]);\n  }\n  else {\n    for (int i = threadIdx.x; i < length; i += threads) dest[i] = __ldg(&from[i]);\n  }\n}\n\n\n/****************************************************************************/\n__device__ static inline void load_gmem_into_regs(\n  const double* __restrict__ from, double* dest, const int length, const int threads) {\n  const int NR = (length + threads - 1) / threads;\n\n  if (length < threads) { /* are there enough threads to load in one step? */\n    if (threadIdx.x < length) dest[0] = __ldg(&from[threadIdx.x]);\n  }\n  else {\n    int i = threadIdx.x;\n    for (int ri = 0; ri < NR; ri++) { /* loop with fixed bounds */\n      if (i < length) dest[ri] = __ldg(&from[i]);\n      i += threads;\n    }\n  }\n}\n\n\n/****************************************************************************/\n__device__ static inline void load_regs_into_smem(double* from, double* dest, const int length, const int threads) {\n  const int NR = (length + threads - 1) / threads;\n\n  if (length < threads) { /* are there enough threads to load in one step? */\n    if (threadIdx.x < length) dest[threadIdx.x] = from[0];\n  }\n  else {\n    int i = threadIdx.x;\n    for (int ri = 0; ri < NR; ri++) { /* loop with fixed bounds */\n      if (i < length) dest[i] = from[ri];\n      i += threads;\n    }\n  }\n}\n\n\n/****************************************************************************/\n__device__ static inline void multiply(\n  double* buff_a, double* buff_b, double* buff_c, const int w, const int m, const int n, const int M, const int N) {\n  /* There might be more threads than needed for the calculation.\n   * Only the first cmax*rmax threads participate in the calculation.\n   */\n  const int cmax = (n + N - 1) / N; /* max tile-column */\n  const int rmax = (m + M - 1) / M; /* max tile-row */\n  const int c = threadIdx.x / rmax; /* this thread's tile-column */\n  const int r = threadIdx.x - c * rmax; /* this thread's tile-row */\n\n  if (c < cmax && r < rmax) /* is this thread participating? */\n    for (int l = 0; l < w; l++)\n      for (int i = 0; i < N; i++)\n        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];\n}\n\n\n/****************************************************************************/\n__device__ static inline void store_results_into_smem(\n  double* from, double* dest, const int t, const int v, const int m, const int n, const int M, const int N) {\n  const int rmax = (m + M - 1) / M; /* max tile-row */\n  const int c = threadIdx.x / rmax; /* this thread's tile-column */\n  const int r = threadIdx.x - c * rmax; /* this thread's tile-row */\n\n  int ctmp = c * N - t;\n  if (ctmp >= -(N - 1) && ctmp < v)\n    for (int i = 0; i < N; i++)\n      if (ctmp + i >= 0 && ctmp + i < v)\n        for (int j = 0; j < M; j++)\n          if (M * r + j < m) {\n            dest[(ctmp + i) * m + M * r + j] = from[M * i + j];\n            from[M * i + j] = 0.0; /* reset result tile */\n          }\n}\n\n} // namespace ns_smm_acc_dnt_largeDB1\n\n/****************************************************************************/\n/*\n * Execution configuration:\n * gridDim.x = (stack_size + (grouping-1))/grouping\n * blockIdx.x = {0, ..., gridDim.x-1}\n * blockDim.x = threads\n * threadIdx.x = {0, ..., threads-1}\n\n * Execute sparse matrix-matrix multiplication C += A*B\n * according to a stack parameter list, decomposed into mutliple block\n * multiplications c_block += a_block * b_block\n *     c_block, dimension (m x n)\n *     a_block, dimension (m x k)\n *     b_block, dimension (k x n)\n\n * Template parameters\n * --- m, n, k: triplet of integers characterising the block multiplication dimensions\n * --- M, N: dimensions of the tile T (submatrix of c_block) to compute by one thread\n * --- w: matrices a_block and b_block are processed (i.e. copied from global memory to shared memory) in slabs of width 'w'\n * --- v: matrix c_block is written back from registers to smem in slabs of width 'v'\n * --- threads: number of CUDA threads (in HIP linguo, \"work items\") this kernel is run with\n * --- grouping: number of stack parameter entries to process per thread block\n * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, \"workgroup\") per multiprocessor (in HIP linguo, \"compute units\") (used in __launch_bounds__)\n\n * Function arguments\n * --- param_stack: parameter stack array (pointers to global memory):\n *     array of stack entries (index triplets), indicating which elements of\n *     a_data, b_data to multiply and to which element of c_data to add them to\n * --- stack_size: number of entries (3 integer triplets) in param_stack,\n *     corresponds to the number of block-matrix multiplications to run in total\n * --- a_data, b_data, c_data (pointers to global memory):\n *     arrays containing the values of matrices A, B, C\n\n * Algorithm specificities:\n * 'DB' stands for double-buffering\n * In order to limit shared memory utilization (indeed, large shared memory\n * utilization can limit the number of concurrent thread blocks launched on one\n * streaming multiprocessor), a_block and b_block are copied to shared memory in\n * slabs P_a, P_b instead of all at once.\n * For coalesced writes: slabs of C (P_c with width 'v') are put in shared memory\n * and only then added to the C in global memory using atomic compare-and-swap\n */\ntemplate<int m, int n, int k, int M, int N, int w, int v, int threads, int grouping, int minblocks>\n__global__ __launch_bounds__(threads, minblocks) void smm_acc_dnt_largeDB1(\n  const int* param_stack, const int stack_size, const double* a_data, const double* b_data, double* c_data) {\n  using namespace ns_smm_acc_dnt_largeDB1;\n\n  /* Number of parameters per stack entry in parameter stack */\n  const int npar = 3;\n\n  /* nrun: number of runs: number of stack entries to process in this thread */\n  const int nrun = (((blockIdx.x + 1) * grouping) > stack_size) ? stack_size % grouping : grouping;\n\n  /* Registers to store input slabs during double buffering\n   * If there are too few thread, each thread has to store\n   * multiple elements of the input slabs in its registers.\n   * slab P_a has dimensions (m x w)\n   * slab P_b has dimensions (w x n)\n   * registers are thread-local, so we divide the amount of memory needed to store\n   * the slabs by the number of threads to get the amount of memory that THIS thread needs */\n  const int mya_size = (w * m + threads - 1) / threads;\n  const int myb_size = (w * n + threads - 1) / threads;\n  const int buff_tmp = MAX((w - 1) * m + ((m + M - 1) / M) * M, m * w + (w - 1) * n + ((n + N - 1) / N) * N);\n  /* v x m = number of elements in P_c */\n  const int buff_size = MAX(buff_tmp, v * m);\n\n  /* Registers to buffer/store input slabs P_a, P_b during double-buffering */\n  double mya[mya_size];\n  double myb[myb_size];\n\n  /* Registers to store the partial result of the tile T of c_block that this thread will compute */\n  double myc[M * N];\n\n  /* Arrays in shared memory\n   * buff: shared memory buffer containing the elements of P_c to be written from regs to smem in slabs */\n  __shared__ double buff[buff_size];\n\n  /* param_stack_s: shared memory buffer containing the stack entries this thread should process\n   *                number of stack entries in param_stack_s = grouping,\n   *                number of integers per stack entry: 3 */\n  __shared__ int param_stack_s[npar * grouping];\n\n  double* buff_l = buff; /* pointer to the beginning of a_block in buffer */\n  double* buff_r = &(buff[m * w]); /* pointer to the beginning of b_block in buffer */\n\n  /* Set the partial sum (tile T) to zero */\n  for (int i = 0; i < M * N; i++) myc[i] = 0.0;\n\n  /* Load and pack stack data for current block from global memory into smem\n   * Get parameter stack entries from index \"psp\" to \"psp + (nrun-1)*npar + 2\"\n   * Each triplet indicates the beginning of a submatrix to multiply */\n  int psp = blockIdx.x * npar * grouping;\n#pragma unroll 3\n  for (int i = threadIdx.x; i < nrun; i += threads) {\n    // param_stack is 1-based, convert to 0-based here\n    param_stack_s[i * npar] = __ldg(&param_stack[psp + i * npar]) - 1; /* value = index in a_data */\n    param_stack_s[i * npar + 1] = __ldg(&param_stack[psp + i * npar + 1]) - 1; /* value = index in b_data */\n    param_stack_s[i * npar + 2] = __ldg(&param_stack[psp + i * npar + 2]) - 1; /* value = index in c_data */\n  }\n\n  /* In each run, we process one stack entry from param_stack_s */\n  for (int run = 0; run < nrun; run++) {\n    psp = run * npar;\n\n    syncthreads();\n\n    /* Index in a_data, b_data and c_data arrays\n     * indicating where to fetch resp. write back matrix elements for this run\n     * srcA, B, C corresponding to the starting indices (i.e. offsets) of block submatrices to multiply */\n    int srcA = param_stack_s[psp];\n    int srcB = param_stack_s[psp + 1];\n\n    /* Start off double buffering by loading the first\n     * input slab directly from global into shared memory\n     */\n    load_gmem_into_smem(&a_data[srcA], buff_l, m * w, threads);\n    load_gmem_into_smem(&b_data[srcB], buff_r, n * w, threads);\n\n    /* Actual double buffering loop: */\n    for (int t = 0; t < (k / w - 1) * w; t += w) {\n      syncthreads();\n      /* load next input slab from global memory into registers\n       * increment block submatrices offset to next input slab\n       */\n      srcA += m * w;\n      srcB += n * w;\n      load_gmem_into_regs(&a_data[srcA], mya, m * w, threads);\n      load_gmem_into_regs(&b_data[srcB], myb, n * w, threads);\n      /* multiply previous slab, which is stored in shared memory,\n       * and accumulate the results in the registers myc\n       */\n      multiply(buff_l, buff_r, myc, w, m, n, M, N);\n      /* wait for multiplication to be done before overwriting smem buffers in next step */\n      syncthreads();\n      /* copy next slab from registers to shared memory */\n      load_regs_into_smem(mya, buff_l, m * w, threads);\n      load_regs_into_smem(myb, buff_r, n * w, threads);\n    }\n\n    syncthreads();\n\n    /* If the input slab witdh w is not a divisor of k,\n     * a smaller tail-slab of width wa has to be process\n     */\n    const int wa = k - (k / w) * w;\n    if (wa != 0) { /* is there a tail-slab? */\n      /* load tail-slab into registers */\n      srcA += m * w;\n      srcB += n * w;\n      load_gmem_into_regs(&a_data[srcA], mya, m * wa, threads);\n      load_gmem_into_regs(&b_data[srcB], myb, n * wa, threads);\n    }\n\n    /* multiply last regular slab, which the loop left in shared memory */\n    multiply(buff_l, buff_r, myc, w, m, n, M, N);\n    syncthreads();\n\n    if (wa != 0) { /* is there a tail-slab? */\n      /* copy tail-slab from register into shared mem */\n      load_regs_into_smem(mya, buff_l, m * wa, threads);\n      load_regs_into_smem(myb, buff_r, n * wa, threads);\n      syncthreads();\n      /* multiply the tail-slab */\n      multiply(buff_l, buff_r, myc, wa, m, n, M, N);\n      syncthreads();\n    }\n\n\n    /* multiplication for this run done\n     * do we have to flush the result tile?\n     */\n    if (run == nrun - 1 || param_stack_s[psp + 2] != param_stack_s[psp + 2 + npar]) {\n      int srcC = param_stack_s[psp + 2];\n\n      syncthreads();\n\n      /* results are written in output-slabs of width v */\n      for (int t = 0; t < (n / v) * v; t += v) {\n        /* copy output slab from registers to shared memory */\n        store_results_into_smem(myc, buff, t, v, m, n, M, N);\n        syncthreads();\n        /* Add our results to the accumulator in global memory */\n        for (int i = threadIdx.x; i < m * v; i += threads) atomicAdd(&c_data[srcC + i], buff[i]);\n        srcC += m * v;\n        syncthreads();\n      }\n\n      /* If the output slab witdh v is not a divisor of n,\n       * a smaller tail-slab of width va has to be process\n       */\n      const int va = n - (n / v) * v;\n      if (va != 0) { /* is there a tail-slab? */\n        int t = (n / v) * v;\n        store_results_into_smem(myc, buff, t, va, m, n, M, N);\n        syncthreads();\n        for (int i = threadIdx.x; i < m * va; i += threads) atomicAdd(&c_data[srcC + i], buff[i]);\n        syncthreads();\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB1.py",
    "content": "# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nfrom kernels.smm_acc_dnt_base import Kernel\n\n\nclass Kernel_dnt_largeDB1(Kernel):\n    \"\"\"Kernel 'large double-buffering' 1\"\"\"\n\n    algorithm = \"largeDB1\"\n    algorithm_num = 1\n    launch_parameters = [\n        \"m\",\n        \"n\",\n        \"k\",\n        \"tile_m\",\n        \"tile_n\",\n        \"w\",\n        \"v\",\n        \"threads\",\n        \"grouping\",\n        \"minblocks\",\n    ]\n\n    def __init__(\n        self, m, n, k, threads, tile_m, tile_n, w, v, grouping, minblocks, perf, source\n    ):\n        self.m = m\n        self.n = n\n        self.k = k\n        self.tile_m = tile_m\n        self.tile_n = tile_n\n        self.w = w\n        self.v = v\n        self.threads = threads\n        self.grouping = grouping\n        self.minblocks = minblocks\n        self.perf = perf\n        self.source = source\n        assert self.threads * self.minblocks <= 2048\n        min_threads = ((self.m + self.tile_m - 1) // self.tile_m) * (\n            (self.n + self.tile_n - 1) // self.tile_n\n        )\n        assert min_threads <= self.threads\n        assert self.tile_m <= self.v\n        assert self.tile_n <= self.w\n\n    @property\n    def func_signature(self):\n        return (\n            \"smm_acc_dnt_largeDB1\"\n            + \"< {m}, {n}, {k}, {tile_m}, {tile_n}, {w}, {v}, {threads}, {grouping}, {minblocks} >;\\n\".format(\n                **self.__dict__\n            )\n        )\n\n    @staticmethod\n    def promising_parameters(\n        m,\n        n,\n        k,\n        gpu,\n        autotuning,\n        threads=None,\n        grouping=None,\n        minblocks=None,\n        tile_m=None,\n        tile_n=None,\n        w=None,\n        v=None,\n    ):\n        \"\"\"\n        Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible\n        kernel parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        params = []\n        grouping = 16\n\n        for minblocks_ in (1, 2, 4, 8, 12) if minblocks is None else [minblocks]:\n            # for exhaustive search, it should be: range(1, gpu[\"Thread_Blocks_/_Multiprocessor\"] + 1):\n            # but heuristically reduce the search space\n            for threads_ in (\n                range(\n                    gpu[\"Threads_/_Warp\"],\n                    gpu[\"Max_Thread_Block_Size\"] + 1,\n                    gpu[\"Threads_/_Warp\"],\n                )\n                if threads is None\n                else [threads]\n            ):\n                if threads_ * minblocks_ > gpu[\"Threads_/_Multiprocessor\"]:\n                    continue\n\n                for tm in range(1, min(12, m + 1)) if tile_m is None else [tile_m]:\n                    for tn in range(1, min(12, n + 1)) if tile_n is None else [tile_n]:\n                        if tm * tn > 49:\n                            continue  # heuristic: performance decreases for very large tiles\n\n                        # Number of tiled columns, rows\n                        cmax = (n + tn - 1) // tn\n                        rmax = (m + tm - 1) // tm\n\n                        # Minimum number of threads required to have one thread per tile,\n                        # i.e., cover the result matrix\n                        min_threads = cmax * rmax\n                        if threads_ < min_threads:\n                            continue\n                        if min_threads < (threads_ - 32):\n                            continue  # heuristic: too many threads unused during calculation\n\n                        for w_ in range(4, (k + 1) // 2, 2) if w is None else [w]:\n                            # heuristic: even numbers yield better performance\n                            if w_ < tn:\n                                continue  # invalid: input slap too small\n                            if 2 * w_ > k:\n                                continue  # heuristic: do at least one double-buffering step\n\n                            for v_ in range(2, n + 1, 2) if v is None else [v]:\n                                # heuristic: even numbers yield better performance\n\n                                if v_ < tm:\n                                    continue  # invalid: output slab too small\n\n                                # Number of registers\n                                n_regs = (\n                                    tm * tn\n                                    + (w_ * m + threads_ - 1) // threads_\n                                    + (w_ * n + threads_ - 1) // threads_\n                                )\n                                if n_regs * threads_ * minblocks_ > 15000:\n                                    continue  # heuristic: too many registers used\n\n                                # Max work (\"operations\") which can be run concurrently\n                                max_concurrent_work = max(\n                                    grouping, m * w_, w_ * n, m * v_, cmax * rmax\n                                )\n                                if threads_ > round_up_to_nearest_multiple(\n                                    max_concurrent_work, gpu[\"Threads_/_Warp\"]\n                                ):\n                                    continue  # heuristics: too much concurrency harms performance\n\n                                # Shared memory buffer size\n                                buf_sz = max(\n                                    (w_ - 1) * m + rmax * tm,\n                                    m * w_ + (w_ - 1) * n + cmax * tn,\n                                    v_ * m,\n                                )\n                                smem_tot = (\n                                    buf_sz * autotuning[\"sizeof_double\"]\n                                    + autotuning[\"npars\"]\n                                    * grouping\n                                    * autotuning[\"sizeof_int\"]\n                                )\n                                if smem_tot > gpu[\"Max_Shared_Memory_/_Block_(bytes)\"]:\n                                    continue  # invalid: uses too much shared memory\n                                if (\n                                    smem_tot * minblocks_\n                                    > gpu[\"Shared_Memory_/_Multiprocessor_(bytes)\"]\n                                ):\n                                    continue  # invalid: uses too much shared memory\n\n                                params.append(\n                                    {\n                                        \"m\": m,\n                                        \"n\": n,\n                                        \"k\": k,\n                                        \"tile_m\": tm,\n                                        \"tile_n\": tn,\n                                        \"w\": w_,\n                                        \"v\": v_,\n                                        \"threads\": threads_,\n                                        \"grouping\": grouping,\n                                        \"minblocks\": minblocks_,\n                                    }\n                                )\n        return params\n\n    @staticmethod\n    def baseline(m, n, k, gpu, autotuning):\n        \"\"\"\n        Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a\n        baseline (\"educated guess\") of the kernel's optimal parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        grouping = 16\n        minblk = 2\n        tm = 2\n        tn = 2\n        cmax = (n + tn - 1) // tn\n        rmax = (m + tm - 1) // tm\n        min_threads = cmax * rmax\n        w = 8\n        v = 8\n\n        while True:\n            base = {\n                \"threads\": round_up_to_nearest_multiple(min_threads, 32),\n                \"grouping\": grouping,\n                \"minblocks\": minblk,\n                \"tile_m\": tn,\n                \"tile_n\": tn,\n                \"w\": w,\n                \"v\": v,\n            }\n            if (\n                len(\n                    Kernel_dnt_largeDB1.promising_parameters(\n                        m, n, k, gpu, autotuning, **base\n                    )\n                )\n                > 0\n            ):\n                break\n            else:\n                if w > 1:\n                    w /= 2\n                else:\n                    base = Kernel_dnt_largeDB1.promising_parameters(\n                        m, n, k, gpu, autotuning\n                    )[0]\n                    break\n\n        base.update(\n            dict(\n                [\n                    (\"m\", m),\n                    (\"n\", n),\n                    (\"k\", k),\n                    (\"algorithm\", \"largeDB1\"),\n                    (\"perf\", 0),\n                    (\"source\", \"predicted\"),\n                ]\n            )\n        )\n        return base\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB2.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n/*****************************************************************************/\n/*  Authors: Peter Messmer <pmessmer@nvidia.com>,                            */\n/*           Nikolay Markovskiy <nmarkovskiy@nvidia.com>                     */\n/*           Ole Schuett <ole.schuett@mat.ethz.ch>                           */\n/*****************************************************************************/\n\n#include \"smm_acc_common.h\"\n\n\nnamespace ns_smm_acc_dnt_largeDB2 {\n\n/****************************************************************************/\n__device__ static inline void load_gmem_into_regs(\n  const double* __restrict__ from, double* dest, const int length, const int threads) {\n  const int NR = (length + threads - 1) / threads;\n  int i = threadIdx.x;\n\n  /* length >= threads, which is usually given for large blocks with medium tile-sizes */\n  for (int ri = 0; ri < NR - 1; ri++) { /* loop with fixed bounds */\n    dest[ri] = __ldg(&from[i]);\n    i += threads;\n  }\n  if (i < length) dest[NR - 1] = __ldg(&from[i]);\n}\n\n\n/****************************************************************************/\n__device__ static inline void load_regs_into_smem(double* from, double* dest, const int length, const int threads) {\n  const int NR = (length + threads - 1) / threads;\n  int i = threadIdx.x;\n\n  /* length >= threads, which is usually given for large blocks with medium tile-sizes */\n  for (int ri = 0; ri < NR - 1; ri++) { /* loop with fixed bounds */\n    dest[i] = from[ri];\n    i += threads;\n  }\n  if (i < length) dest[i] = from[NR - 1];\n}\n\n\n/****************************************************************************/\n__device__ static inline void multiply(\n  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) {\n  /* There might be more threads than needed for the calculation.\n   * Only the first cmax*rmax threads participate in the calculation.\n   */\n  const int cmax = (n + N - 1) / N; /* max tile-column */\n  const int rmax = (m + M - 1) / M; /* max tile-row */\n  const int c = threadIdx.x / rmax; /* this thread's tile-column */\n  const int r = threadIdx.x - c * rmax; /* this thread's tile-row */\n\n  if (c < cmax && r < rmax) /* is this thread participating? */\n    for (int l = 0; l < w; l++)\n      for (int i = 0; i < N; i++)\n        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];\n}\n\n\n/****************************************************************************/\n__device__ static inline void store_results_into_smem(\n  double* from, double* dest, const int t, const int v, const int m, const int n, const int M, const int N) {\n  const int rmax = (m + M - 1) / M; /* max tile-row */\n  const int c = threadIdx.x / rmax; /* this thread's tile-column */\n  const int r = threadIdx.x - c * rmax; /* this thread's tile-row */\n\n  const int ctmp = c * N - t;\n\n  if (t > c * N - v && t <= (c + 1) * N - 1)\n    for (int i = 0; i < N; i++)\n      if (ctmp + i >= 0 && ctmp + i < v)\n        for (int j = 0; j < M; j++)\n          if (M * r + j < m) {\n            dest[(ctmp + i) * m + M * r + j] = from[M * i + j];\n            from[M * i + j] = 0.0; /* reset result tile */\n          }\n}\n\n/****************************************************************************/\n__device__ static inline void writeback_results(\n  double* from, double* dest, double* buff, const int m, const int n, const int M, const int N, const int v, const int threads) {\n  /* results are written in output-slabs of width v */\n  for (int t = 0; t < (n / v) * v; t += v) {\n    /* copy output slab from registers to shared memory */\n    store_results_into_smem(from, buff, t, v, m, n, M, N);\n    syncthreads();\n    /* Add our results to the accumulator in global memory */\n    for (int i = threadIdx.x; i < m * v; i += threads) atomicAdd(&dest[i], buff[i]);\n    dest += m * v;\n    syncthreads();\n  }\n\n  /* If the output slab width v is not a divisor of n,\n   * a smaller tail-slab of width va has to be process\n   */\n  const int va = n - (n / v) * v;\n  if (va != 0) { /* is there a tail-slab? */\n    int t = (n / v) * v;\n    store_results_into_smem(from, buff, t, va, m, n, M, N);\n    syncthreads();\n    for (int i = threadIdx.x; i < m * va; i += threads) atomicAdd(&dest[i], buff[i]);\n    syncthreads();\n  }\n}\n\n} // namespace ns_smm_acc_dnt_largeDB2\n\n\n/****************************************************************************/\n/*\n * Execution configuration:\n * gridDim.x = (stack_size + (grouping-1))/grouping\n * blockIdx.x = {0, ..., gridDim.x-1}\n * blockDim.x = threads\n * threadIdx.x = {0, ..., threads-1}\n\n * Execute sparse matrix-matrix multiplication C += A*B\n * according to a stack parameter list, decomposed into mutliple block\n * multiplications c_block += a_block * b_block\n *     c_block, dimension (m x n)\n *     a_block, dimension (m x k)\n *     b_block, dimension (k x n)\n\n * Template parameters\n * --- m, n, k: triplet of integers characterising the block multiplication dimensions\n * --- M, N: dimensions of the tile T (submatrix of c_block) to compute by one thread\n * --- w: matrices a_block and b_block are processed (i.e. copied from global memory to shared memory) in slabs of width 'w'\n * --- v: matrix c_block is written back from registers to smem in slabs of width 'v'\n * --- threads: number of CUDA threads (in HIP linguo, \"work items\") this kernel is run with\n * --- grouping: number of stack parameter entries to process per thread block\n * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, \"workgroup\") per multiprocessor (in HIP linguo, \"compute units\") (used in __launch_bounds__)\n\n * Function arguments\n * --- param_stack: parameter stack array (pointers to global memory):\n *     array of stack entries (index triplets), indicating which elements of\n *     a_data, b_data to multiply and to which element of c_data to add them to\n * --- stack_size: number of entries (3 integer triplets) in param_stack,\n *     corresponds to the number of block-matrix multiplications to run in total\n * --- a_data, b_data, c_data (pointers to global memory):\n *     arrays containing the values of matrices A, B, C\n\n * Algorithm specificities:\n * 'DB' stands for double-buffering\n * In order to limit shared memory utilization (indeed, large shared memory\n * utilization can limit the number of concurrent thread blocks launched on one\n * streaming multiprocessor), a_block and b_block are copied to shared memory in\n * slabs P_a, P_b instead of all at once.\n * For coalesced writes: slabs of C (P_c with width 'v') are put in shared memory\n * and only then added to the C in global memory using atomic compare-and-swap\n */\ntemplate<int m, int n, int k, int M, int N, int w, int v, int threads, int grouping, int minblocks>\n__global__ void __launch_bounds__(threads, minblocks) smm_acc_dnt_largeDB2(const int* __restrict__ param_stack,\n  const int stack_size, const double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data) {\n  using namespace ns_smm_acc_dnt_largeDB2;\n\n  const int mw = m * w;\n  const int wn = w * n;\n  const int wa = k - (k / w) * w;\n  const int npar = 3;\n\n  const int bidx = blockIdx.x;\n  const int tidx = threadIdx.x;\n\n  /* Registers to store input slabs during double buffering\n   * If there are too few thread, each thread has to store\n   * multiple elements of the input slabs in its registers.\n   * slab P_a has dimensions (m x w)\n   * slab P_b has dimensions (w x n)\n   * registers are thread-local, so we divide the amount of memory needed to store\n   * the slabs by the number of threads to get the amount of memory that THIS thread needs */\n  const int mya_size = (mw + threads - 1) / threads;\n  const int myb_size = (wn + threads - 1) / threads;\n  const int buff_tmp = MAX((w - 1) * m + ((m + M - 1) / M) * M, mw + (w - 1) * n + ((n + N - 1) / N) * N);\n  /* v x m = number of elements in P_c */\n  const int buff_size = MAX(buff_tmp, v * m);\n\n  /* Registers to buffer/store input slabs P_a, P_b during double-buffering */\n  double mya[mya_size];\n  double myb[myb_size];\n\n  /* Registers to store the partial result of the tile T of c_block that this thread will compute */\n  double myc[M * N];\n\n  int psp, nrun;\n  int srcA, srcB, srcC;\n\n  /* Arrays in shared memory\n   * param_stack_s: shared memory buffer containing the stack entries this thread should process\n   *                number of stack entries in param_stack_s = grouping,\n   *                number of integers per stack entry: 3 */\n  __shared__ int param_stack_s[npar * grouping];\n\n  /* buff: shared memory buffer containing the elements of P_c to be written from regs to smem in slabs */\n  __shared__ double buff[buff_size];\n\n  double* buff_l = buff; /* pointer to the beginning of a_block in buffer */\n  double* buff_r = &(buff[mw]); /* pointer to the beginning of b_block in buffer */\n\n  /* nrun: number of runs: number of stack entries to process in this thread */\n  nrun = grouping;\n  if (((bidx + 1) * grouping) > stack_size) nrun = stack_size % grouping;\n\n  /* Set the partial sum (tile T) to zero */\n  for (int i = 0; i < M * N; i++) myc[i] = 0.0;\n\n  /* Load and pack stack data for current block from global memory into smem\n   * Get parameter stack entries from index \"psp\" to \"psp + (nrun-1)*npar + 2\"\n   * Each triplet indicates the beginning of a submatrix to multiply */\n  psp = bidx * npar * grouping;\n#pragma unroll 3\n  for (int i = tidx; i < nrun; i += threads) {\n    // param_stack is 1-based, convert to 0-based here\n    param_stack_s[i * npar] = __ldg(&param_stack[psp + i * npar]) - 1;\n    param_stack_s[i * npar + 1] = __ldg(&param_stack[psp + i * npar + 1]) - 1;\n    param_stack_s[i * npar + 2] = __ldg(&param_stack[psp + i * npar + 2]) - 1;\n  }\n\n  syncthreads();\n\n  psp = 0;\n\n  /* Index in a_data, b_data and c_data arrays\n   * indicating where to fetch resp. write back matrix elements for this run\n   * srcA, B, C corresponding to the starting indices (i.e. offsets) of block submatrices to multiply */\n  srcA = param_stack_s[psp];\n  srcB = param_stack_s[psp + 1];\n\n  /* Start off double buffering by loading the first data from gmem into registers */\n  load_gmem_into_regs(&a_data[srcA], mya, mw, threads);\n  load_gmem_into_regs(&b_data[srcB], myb, wn, threads);\n  syncthreads();\n\n  /* In each run, we process one stack entry from param_stack_s */\n  for (int run = 0; run < nrun; run++) {\n    /* load first data for run from regs to smem */\n    load_regs_into_smem(mya, buff_l, mw, threads);\n    load_regs_into_smem(myb, buff_r, wn, threads);\n    syncthreads();\n\n    /* Actual double buffering loop: */\n    for (int t = 0; t < (k / w - 1) * w; t += w) {\n      /* load next input slab from global memory into registers */\n      srcA += mw;\n      srcB += wn;\n      load_gmem_into_regs(&a_data[srcA], mya, mw, threads);\n      load_gmem_into_regs(&b_data[srcB], myb, wn, threads);\n      /* multiply previous slab, which is stored in shared memory,\n       * and accumulate the results in the registers myc\n       */\n      multiply(buff_l, buff_r, myc, w, m, n, M, N);\n      syncthreads();\n      /* copy next slab from registers to shared memory */\n      load_regs_into_smem(mya, buff_l, mw, threads);\n      load_regs_into_smem(myb, buff_r, wn, threads);\n      syncthreads();\n    }\n\n    if (wa != 0) { /* is there a tail-slab? */\n      /* If the input slab witdh w is not a divisor of k,\n       * a smaller tail-slab of width wa has to be process\n       * load tail-slab into registers\n       */\n      srcA += mw;\n      srcB += wn;\n      load_gmem_into_regs(&a_data[srcA], mya, m * wa, threads);\n      load_gmem_into_regs(&b_data[srcB], myb, n * wa, threads);\n      /* multiply last regular slab, which the loop left in shared memory */\n      multiply(buff_l, buff_r, myc, w, m, n, M, N);\n      syncthreads();\n      /* copy tail-slab from register into shared mem */\n      load_regs_into_smem(mya, buff_l, m * wa, threads);\n      load_regs_into_smem(myb, buff_r, n * wa, threads);\n      syncthreads();\n    }\n\n    psp += npar;\n\n    if (run < nrun - 1) { /* If this is not the last run */\n      /* get the offsets for the a-block and the b-block from the stack */\n      srcA = param_stack_s[psp];\n      srcB = param_stack_s[psp + 1];\n\n      /* load the data for the next iteration of the loop */\n      load_gmem_into_regs(&a_data[srcA], mya, mw, threads);\n      load_gmem_into_regs(&b_data[srcB], myb, wn, threads);\n    }\n\n    if (wa != 0) { /* is there a tail-slab? */\n      /* multiply the tail-slab */\n      multiply(buff_l, buff_r, myc, wa, m, n, M, N);\n    }\n    else {\n      /* multiply last regular slab, which the loop left in shared memory */\n      multiply(buff_l, buff_r, myc, w, m, n, M, N);\n    }\n    syncthreads();\n\n    /* multiplication for this run done\n     * do we have to flush the result tile?\n     */\n    if (run == nrun - 1 || param_stack_s[psp - 1] != param_stack_s[psp + 2]) {\n      srcC = param_stack_s[psp - 1];\n      writeback_results(myc, &c_data[srcC], buff, m, n, M, N, v, threads);\n    }\n  }\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_largeDB2.py",
    "content": "# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nfrom kernels.smm_acc_dnt_base import Kernel\n\n\nclass Kernel_dnt_largeDB2(Kernel):\n    \"\"\"Kernel 'large double-buffering' 2\"\"\"\n\n    algorithm = \"largeDB2\"\n    algorithm_num = 2\n    launch_parameters = [\n        \"m\",\n        \"n\",\n        \"k\",\n        \"tile_m\",\n        \"tile_n\",\n        \"w\",\n        \"v\",\n        \"threads\",\n        \"grouping\",\n        \"minblocks\",\n    ]\n\n    def __init__(\n        self, m, n, k, threads, tile_m, tile_n, w, v, grouping, minblocks, perf, source\n    ):\n        self.m = m\n        self.n = n\n        self.k = k\n        self.tile_m = tile_m\n        self.tile_n = tile_n\n        self.w = w\n        self.v = v\n        self.threads = threads\n        self.grouping = grouping\n        self.minblocks = minblocks\n        self.perf = perf\n        self.source = source\n        assert self.threads * self.minblocks <= 2048\n        min_threads = ((self.m + self.tile_m - 1) // self.tile_m) * (\n            (self.n + self.tile_n - 1) // self.tile_n\n        )\n        assert min_threads <= self.threads\n        assert self.tile_m <= self.v\n        assert self.tile_n <= self.w\n\n    @property\n    def func_signature(self):\n        return (\n            \"smm_acc_dnt_largeDB2\"\n            + \"< {m}, {n}, {k}, {tile_m}, {tile_n}, {w}, {v}, {threads}, {grouping}, {minblocks} >;\\n\".format(\n                **self.__dict__\n            )\n        )\n\n    @staticmethod\n    def promising_parameters(\n        m,\n        n,\n        k,\n        gpu,\n        autotuning,\n        threads=None,\n        grouping=None,\n        minblocks=None,\n        tile_m=None,\n        tile_n=None,\n        w=None,\n        v=None,\n    ):\n        \"\"\"\n        Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible\n        kernel parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        params = []\n        grouping = 16\n\n        for minblocks_ in (1, 2, 4, 8, 12) if minblocks is None else [minblocks]:\n            # for exhaustive search, it should be: range(1, gpu.maxBLOCKSperSM + 1):\n            # but heuristically reduce the search space\n            for threads_ in (\n                range(\n                    gpu[\"Threads_/_Warp\"],\n                    gpu[\"Max_Thread_Block_Size\"] + 1,\n                    gpu[\"Threads_/_Warp\"],\n                )\n                if threads is None\n                else [threads]\n            ):\n                if threads_ * minblocks_ > gpu[\"Threads_/_Multiprocessor\"]:\n                    continue\n\n                for tm in range(1, min(12, m + 1)) if tile_m is None else [tile_m]:\n                    for tn in range(1, min(12, n + 1)) if tile_n is None else [tile_n]:\n                        if tm * tn > 49:\n                            continue  # heuristic: performance decreases for very large tiles\n\n                        # Number of tiled columns, rows\n                        cmax = (n + tn - 1) // tn\n                        rmax = (m + tm - 1) // tm\n\n                        # Minimum number of threads required to have one thread per tile\n                        # i.e., cover the result matrix\n                        min_threads = cmax * rmax\n                        if threads_ < min_threads:\n                            continue\n                        if min_threads < (threads_ - 32):\n                            continue  # heuristic: too many threads unused during calculation\n\n                        for w_ in range(4, (k + 1) // 2, 2) if w is None else [w]:\n                            # heuristic: even numbers yield better performance\n\n                            if w_ < tn:\n                                continue  # invalid: input slap too small\n                            if 2 * w_ > k:\n                                continue  # heuristic: do at least one double-buffering step\n\n                            for v_ in range(4, n + 1, 2) if v is None else [v]:\n                                # heuristic: even numbers yield better performance\n\n                                if v_ < tm:\n                                    continue  # invalid: output slab too small\n\n                                # Number of registers\n                                n_regs = (\n                                    tm * tn\n                                    + (w_ * m + threads_ - 1) // threads_\n                                    + (w_ * n + threads_ - 1) // threads_\n                                )\n                                if n_regs * threads_ * minblocks_ > 15000:\n                                    continue  # heuristic: too many registers used\n\n                                # Max work (\"operations\") which can be run concurrently\n                                max_concurrent_work = max(\n                                    grouping, m * w_, w_ * n, m * v_, cmax * rmax\n                                )\n                                if threads_ > round_up_to_nearest_multiple(\n                                    max_concurrent_work, gpu[\"Threads_/_Warp\"]\n                                ):\n                                    continue  # heuristics: too much concurrency harms performance\n\n                                # Shared memory buffer size\n                                buf_sz = max(\n                                    (w_ - 1) * m + rmax * tm,\n                                    m * w_ + (w_ - 1) * n + cmax * tn,\n                                    v_ * m,\n                                )\n                                smem_tot = (\n                                    buf_sz * autotuning[\"sizeof_double\"]\n                                    + autotuning[\"npars\"]\n                                    * grouping\n                                    * autotuning[\"sizeof_int\"]\n                                )\n                                if smem_tot > gpu[\"Max_Shared_Memory_/_Block_(bytes)\"]:\n                                    continue  # invalid: uses too much shared memory\n                                if (\n                                    smem_tot * minblocks_\n                                    > gpu[\"Shared_Memory_/_Multiprocessor_(bytes)\"]\n                                ):\n                                    continue  # invalid: uses too much shared memory\n\n                                params.append(\n                                    {\n                                        \"m\": m,\n                                        \"n\": n,\n                                        \"k\": k,\n                                        \"tile_m\": tm,\n                                        \"tile_n\": tn,\n                                        \"w\": w_,\n                                        \"v\": v_,\n                                        \"threads\": threads_,\n                                        \"grouping\": grouping,\n                                        \"minblocks\": minblocks_,\n                                    }\n                                )\n        return params\n\n    @staticmethod\n    def baseline(m, n, k, gpu, autotuning):\n        \"\"\"\n        Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a\n        baseline (\"educated guess\") of the kernel's optimal parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        grouping = 16\n        minblk = 2\n        tm = 2\n        tn = 2\n        cmax = (n + tn - 1) // tn\n        rmax = (m + tm - 1) // tm\n        min_threads = cmax * rmax\n        w = 8\n        v = 8\n\n        while True:\n            base = {\n                \"threads\": round_up_to_nearest_multiple(min_threads, 32),\n                \"grouping\": grouping,\n                \"minblocks\": minblk,\n                \"tile_m\": tn,\n                \"tile_n\": tn,\n                \"w\": w,\n                \"v\": v,\n            }\n            if (\n                len(\n                    Kernel_dnt_largeDB2.promising_parameters(\n                        m, n, k, gpu, autotuning, **base\n                    )\n                )\n                > 0\n            ):\n                break\n            else:\n                if w > 1:\n                    w /= 2\n                else:\n                    base = Kernel_dnt_largeDB2.promising_parameters(\n                        m, n, k, gpu, autotuning\n                    )[0]\n                    break\n\n        base.update(\n            dict(\n                [\n                    (\"m\", m),\n                    (\"n\", n),\n                    (\"k\", k),\n                    (\"algorithm\", \"largeDB2\"),\n                    (\"perf\", 0),\n                    (\"source\", \"predicted\"),\n                ]\n            )\n        )\n        return base\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_medium.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n/*****************************************************************************/\n/*  Authors: Peter Messmer <pmessmer@nvidia.com>,                            */\n/*           Nikolay Markovskiy <nmarkovskiy@nvidia.com>                     */\n/*  Simplified, cleanup & refacture: Based on 'cusmm_dnt_small.h'            */\n/*           Andreas Gloess <andreas.gloess@chem.uzh.ch>                     */\n/*                                                                           */\n/*****************************************************************************/\n\n#include \"smm_acc_common.h\"\n\n/*\n * Execution configuration:\n * gridDim.x = (stack_size + (grouping-1))/grouping\n * blockIdx.x = {0, ..., gridDim.x-1}\n * blockDim.x = threads\n * threadIdx.x = {0, ..., threads-1}\n\n * Execute sparse matrix-matrix multiplication C += A*B\n * according to a stack parameter list, decomposed into mutliple block\n * multiplications c_block += a_block * b_block\n *     c_block, dimension (m x n)\n *     a_block, dimension (m x k)\n *     b_block, dimension (k x n)\n\n * Template parameters\n * --- m, n, k: triplet of integers characterising the block multiplication dimensions\n * --- M, N: dimensions of the tile T (submatrix of c_block) to compute with one thread\n * --- threads: number of CUDA threads (in HIP linguo, \"work items\") this kernel is run with\n * --- grouping: number of stack parameter entries to process per thread block\n * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, \"workgroup\") per multiprocessor (in HIP linguo, \"compute units\") (used in __launch_bounds__)\n\n * Function arguments\n * --- param_stack: parameter stack array (pointers to global memory):\n *     array of stack entries (index triplets), indicating which elements of\n *     a_data, b_data to multiply and to which element of c_data to add them to\n * --- stack_size: number of entries (3 integer triplets) in param_stack,\n *     corresponds to the number of block-matrix multiplications to run in total\n * --- a_data, b_data, c_data (pointers to global memory):\n *     arrays containing the values of matrices A, B, C\n\n * Algorithm specificities:\n * - a_block and b_block are not copied directly from global memory to shared memory,\n *   but rather via registers\n */\ntemplate<int m, int n, int k, int M, int N, int threads, int grouping, int minblocks>\n__global__ void __launch_bounds__(threads, minblocks) smm_acc_dnt_medium(const int* __restrict__ param_stack, int stack_size,\n  const double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data) {\n  /* Total number of elements in block matrices */\n  const int mn = m * n; /* c_block */\n  const int mk = m * k; /* a_block */\n  const int kn = n * k; /* b_block */\n\n  /* Block and thread index */\n  const int bidx = blockIdx.x;\n  const int tidx = threadIdx.x;\n\n  /* Number of columns and rows used to divide c_block into tiles */\n  const int cmax = (n % N == 0) ? n / N : n / N + 1;\n  const int rmax = (m % M == 0) ? m / M : m / M + 1;\n\n  /* buff_l and buff_r can overlap in the multiplication step\n   * (still better than 'if' in inner loop, see ^ref1)\n   */\n  const int buf_tmp = (mk + k * N * cmax < M * rmax * k + 1) ? M * rmax * k + 1 : mk + k * N * cmax;\n  const int buf_sz = (buf_tmp < mn) ? mn : buf_tmp;\n\n  /* Column and row starting index of the tile T this thread will compute\n   * Each thread computes all elements of one tile T */\n  const int c = tidx / rmax;\n  const int r = tidx - rmax * c;\n\n  /* Number of loads to perform by each thread in order to load matrices a_block, b_block into shared memory */\n  const int load_unroll_factor_1 = mk / threads + 1;\n  const int load_unroll_factor_2 = kn / threads + 1;\n\n  const int n_mkloads = mk / (load_unroll_factor_1 * threads);\n  const int n_knloads = kn / (load_unroll_factor_2 * threads);\n\n  /* Remainder */\n  const int mkloads_remained = (mk - n_mkloads * load_unroll_factor_1 * threads) / threads;\n  const int knloads_remained = (kn - n_knloads * load_unroll_factor_2 * threads) / threads;\n\n  /* ... */\n  const int mkloads_tail = ((mkloads_remained + n_mkloads * load_unroll_factor_1) * threads == mk) ? 0 : 1;\n  const int knloads_tail = ((knloads_remained + n_knloads * load_unroll_factor_2) * threads == kn) ? 0 : 1;\n\n  /* ... */\n  const int m_loads_to_finish = n_mkloads * (load_unroll_factor_1 * threads) + mkloads_remained * threads;\n  const int n_loads_to_finish = n_knloads * (load_unroll_factor_2 * threads) + knloads_remained * threads;\n  const int left_to_finish_1 = m_loads_to_finish + tidx;\n  const int left_to_finish_2 = n_loads_to_finish + tidx;\n\n  /* Number of parameters per stack entry in parameter stack */\n  const int npar = 3;\n\n  /* If multiple warps (in HIP linguo, \"wavefronts\") are running a single block multiplication,\n   * synchronization is needed */\n  const bool need_sync = (mn > warpSize || mk > warpSize || kn > warpSize || threads > warpSize);\n\n  /* Partial result of the tile T of c_block that this thread will compute */\n  /* Registers */\n  double myc[N * M];\n\n  /* ... */\n  double lba_r[load_unroll_factor_1 + mkloads_remained + mkloads_tail];\n  double lbb_r[load_unroll_factor_2 + knloads_remained + knloads_tail];\n\n  /* ... */\n  const double* __restrict__ buff_l;\n  const double* __restrict__ buff_r;\n\n  /* psp: parameter stack position:\n   *      index in the parameter stack of the first parameter stack entry to be processed by this thread\n   * nrun: number of runs: number of stack entries to process in this thread */\n  int psp, nrun;\n  bool is_loaded = false;\n\n  /* Arrays in shared memory\n   *(common to all threads in a thread block, but different from thread-block to thread-block):\n   * param_stack_s: shared memory buffer containing the stack entries this thread should process\n   *                number of stack entries in param_stack_s = grouping,\n   *                number of integers per stack entry: 3 */\n  __shared__ int param_stack_s[npar * grouping];\n\n  /* buff: shared memory buffer containing a_block (block submatrix of A) and b_block to multiply */\n  __shared__ double buff[buf_sz];\n  buff_l = buff; /* pointer to the beginning of a_block in buffer */\n  buff_r = &(buff[mk]); /* pointer to the beginning of b_block in buffer */\n\n  /* Set the number of runs (i.e. how many stack entries to process in this thread)\n   * If the current block is the last block set the number of stack entries to process in\n   * this thread to the remainder of stack_size / grouping */\n  nrun = grouping;\n  if (((bidx + 1) * grouping) > stack_size) nrun = stack_size % grouping;\n\n  /* Set the partial sum (tile T) to zero */\n  /* WHY NO PRAGMA UNROLL ???? */\n  for (int i = 0; i < M * N; i++) myc[i] = 0.0;\n\n  /* Load and pack stack data for current block from global memory into smem\n   * Get parameter stack entries from index \"psp\" to \"psp + (nrun-1)*npar + 2\"\n   * Each triplet indicates the beginning of a submatrix to multiply */\n  psp = bidx * npar * grouping;\n#pragma unroll 3\n  for (int i = tidx; i < nrun; i += threads) {\n    // param_stack is 1-based, convert to 0-based here\n    param_stack_s[i * npar] = __ldg(&param_stack[psp + i * npar]) - 1; /* value = index in a_data */\n    param_stack_s[i * npar + 1] = __ldg(&param_stack[psp + i * npar + 1]) - 1; /* value = index in b_data */\n    param_stack_s[i * npar + 2] = __ldg(&param_stack[psp + i * npar + 2]) - 1; /* value = index in c_data */\n  }\n\n  /* Wait until all the data has been loaded */\n  if (need_sync) syncthreads();\n\n  /* In each run, we process one stack entry from param_stack_s */\n  for (int run = 0; run < nrun; run++) {\n    /* Index in shared memory buffers to read from */\n    psp = run * npar;\n\n    int srcA, srcB;\n\n    if (!is_loaded) { /* If a_block, b_block are not loaded into registers yet */\n\n      /* Index in a_data, b_data and c_data arrays\n       * indicating where to fetch resp. write back matrix elements for this run\n       * srcA, B, C corresponding to the starting indices (i.e. offsets) of block submatrices to multiply */\n      srcA = param_stack_s[psp];\n      srcB = param_stack_s[psp + 1];\n\n      /* Copy a_block, b_block from global memory to registers */\n      if (m == n) {\n#pragma unroll 3\n        for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) {\n#pragma unroll\n          for (int l = 0; l < load_unroll_factor_1; l++) {\n            lba_r[l] = __ldg(&a_data[srcA + i + l * threads]);\n            lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]);\n          }\n        }\n\n#pragma unroll 3\n        for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) {\n#pragma unroll\n          for (int l = 0; l < mkloads_remained; l++) {\n            lba_r[l] = __ldg(&a_data[srcA + i + l * threads]);\n            lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]);\n          }\n        }\n\n        if (left_to_finish_1 < mk) {\n          lba_r[load_unroll_factor_1 + mkloads_remained] = __ldg(&a_data[srcA + left_to_finish_1]);\n          lbb_r[load_unroll_factor_2 + knloads_remained] = __ldg(&b_data[srcB + left_to_finish_2]);\n        }\n      }\n      else {\n#pragma unroll 3\n        for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) {\n#pragma unroll\n          for (int l = 0; l < load_unroll_factor_1; l++) {\n            lba_r[l] = __ldg(&a_data[srcA + i + l * threads]);\n          }\n        }\n\n#pragma unroll 3\n        for (int i = tidx; i < n_knloads * (load_unroll_factor_2 * threads); i += load_unroll_factor_2 * threads) {\n#pragma unroll\n          for (int l = 0; l < load_unroll_factor_2; l++) {\n            lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]);\n          }\n        }\n\n#pragma unroll 3\n        for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) {\n#pragma unroll\n          for (int l = 0; l < mkloads_remained; l++) {\n            lba_r[l] = __ldg(&a_data[srcA + i + l * threads]);\n          }\n        }\n\n#pragma unroll 3\n        for (int i = n_knloads * (load_unroll_factor_2 * threads) + tidx; i < n_loads_to_finish; i += knloads_remained * threads) {\n#pragma unroll\n          for (int l = 0; l < knloads_remained; l++) {\n            lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]);\n          }\n        }\n\n        if (left_to_finish_1 < mk) lba_r[load_unroll_factor_1 + mkloads_remained] = __ldg(&a_data[srcA + left_to_finish_1]);\n        if (left_to_finish_2 < kn) lbb_r[load_unroll_factor_2 + knloads_remained] = __ldg(&b_data[srcB + left_to_finish_2]);\n      }\n\n      /* Wait until all the data has been loaded to registers */\n      syncthreads();\n    }\n    else {\n      is_loaded = false;\n    }\n\n    /* Copy a_block, b_block from registers to shared memory */\n    if (m == n) {\n#pragma unroll 3\n      for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) {\n#pragma unroll\n        for (int l = 0; l < mkloads_remained; l++) {\n          buff[i + l * threads] = lba_r[l];\n          buff[i + mk + l * threads] = lbb_r[l];\n        }\n      }\n\n#pragma unroll 3\n      for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) {\n#pragma unroll\n        for (int l = 0; l < load_unroll_factor_1; l++) {\n          buff[i + l * threads] = lba_r[l];\n          buff[i + mk + l * threads] = lbb_r[l];\n        }\n      }\n\n      if (left_to_finish_1 < mk) {\n        buff[left_to_finish_1] = lba_r[load_unroll_factor_1 + mkloads_remained];\n        buff[mk + left_to_finish_2] = lbb_r[load_unroll_factor_2 + knloads_remained];\n      }\n    }\n    else {\n#pragma unroll 3\n      for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) {\n#pragma unroll\n        for (int l = 0; l < mkloads_remained; l++) {\n          buff[i + l * threads] = lba_r[l];\n        }\n      }\n\n#pragma unroll 3\n      for (int i = n_knloads * (load_unroll_factor_2 * threads) + tidx; i < n_loads_to_finish; i += knloads_remained * threads) {\n#pragma unroll\n        for (int l = 0; l < knloads_remained; l++) {\n          buff[i + mk + l * threads] = lbb_r[l];\n        }\n      }\n\n#pragma unroll 3\n      for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) {\n#pragma unroll\n        for (int l = 0; l < load_unroll_factor_1; l++) {\n          buff[i + l * threads] = lba_r[l];\n        }\n      }\n\n#pragma unroll 3\n      for (int i = tidx; i < n_knloads * (load_unroll_factor_2 * threads); i += load_unroll_factor_2 * threads) {\n#pragma unroll\n        for (int l = 0; l < load_unroll_factor_2; l++) {\n          buff[i + mk + l * threads] = lbb_r[l];\n        }\n      }\n\n      if (left_to_finish_1 < mk) buff[left_to_finish_1] = lba_r[load_unroll_factor_1 + mkloads_remained];\n      if (left_to_finish_2 < kn) buff[mk + left_to_finish_2] = lbb_r[load_unroll_factor_2 + knloads_remained];\n    }\n\n    /* Wait until all the data has been loaded to shared memory */\n    if (need_sync) syncthreads();\n\n\n    int next_run = run + 1;\n    if (next_run >= nrun) is_loaded = true;\n\n    if (!is_loaded || (run == 0 && nrun > 1)) {\n      /* Next parameter stack position */\n      int next_psp = next_run * npar;\n\n      /* Index in a_data, b_data and c_data arrays\n       * indicating where to fetch resp. write back matrix elements for this run\n       * srcA, B, C corresponding to the strting indices of block submatrices to multiply */\n      srcA = param_stack_s[next_psp];\n      srcB = param_stack_s[next_psp + 1];\n\n      /* Buffering: copy the input data for the next run from global memory to registers */\n      if (m == n) {\n#pragma unroll 3\n        for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) {\n#pragma unroll\n          for (int l = 0; l < load_unroll_factor_1; l++) {\n            lba_r[l] = __ldg(&a_data[srcA + i + l * threads]);\n            lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]);\n          }\n        }\n\n#pragma unroll 3\n        for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) {\n#pragma unroll\n          for (int l = 0; l < mkloads_remained; l++) {\n            lba_r[l] = __ldg(&a_data[srcA + i + l * threads]);\n            lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]);\n          }\n        }\n\n        if (left_to_finish_1 < mk) {\n          lba_r[load_unroll_factor_1 + mkloads_remained] = __ldg(&a_data[srcA + left_to_finish_1]);\n          lbb_r[load_unroll_factor_2 + knloads_remained] = __ldg(&b_data[srcB + left_to_finish_2]);\n        }\n      }\n      else {\n#pragma unroll 3\n        for (int i = tidx; i < n_mkloads * (load_unroll_factor_1 * threads); i += load_unroll_factor_1 * threads) {\n#pragma unroll\n          for (int l = 0; l < load_unroll_factor_1; l++) {\n            lba_r[l] = __ldg(&a_data[srcA + i + l * threads]);\n          }\n        }\n\n#pragma unroll 3\n        for (int i = tidx; i < n_knloads * (load_unroll_factor_2 * threads); i += load_unroll_factor_2 * threads) {\n#pragma unroll\n          for (int l = 0; l < load_unroll_factor_2; l++) {\n            lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]);\n          }\n        }\n\n#pragma unroll 3\n        for (int i = n_mkloads * (load_unroll_factor_1 * threads) + tidx; i < m_loads_to_finish; i += mkloads_remained * threads) {\n#pragma unroll\n          for (int l = 0; l < mkloads_remained; l++) {\n            lba_r[l] = __ldg(&a_data[srcA + i + l * threads]);\n          }\n        }\n\n#pragma unroll 3\n        for (int i = n_knloads * (load_unroll_factor_2 * threads) + tidx; i < n_loads_to_finish; i += knloads_remained * threads) {\n#pragma unroll\n          for (int l = 0; l < knloads_remained; l++) {\n            lbb_r[l] = __ldg(&b_data[srcB + i + l * threads]);\n          }\n        }\n\n        if (left_to_finish_1 < mk) lba_r[load_unroll_factor_1 + mkloads_remained] = __ldg(&a_data[srcA + left_to_finish_1]);\n        if (left_to_finish_2 < kn) lbb_r[load_unroll_factor_2 + knloads_remained] = __ldg(&b_data[srcB + left_to_finish_2]);\n      }\n\n      is_loaded = true;\n    }\n\n    /* Do actual multiplication. */\n    if (c < cmax && r < rmax) {\n      for (int l = 0; l < k; l++) {\n        /* Loop over all elements c_ij of tile T */\n        for (int i = 0; i < M; i++) {\n          for (int j = 0; j < N; j++) {\n            /* Compute c_ij = sum_k (a_ik * b_kj) in shared memory */\n            myc[N * i + j] += buff_l[l * m + M * r + i] * buff_r[l * n + N * c + j];\n          }\n        }\n      }\n    }\n\n\n    if (run == nrun - 1 || param_stack_s[psp + 2] != param_stack_s[psp + 2 + npar]) {\n      /* Index in c_data indicating where to write back matrix elements for this run */\n      int srcC = param_stack_s[psp + 2];\n\n      if (M > 1 || N > 1) {\n        if (need_sync) syncthreads();\n        /* Decompress results to buffer and set tile elements back to 0 */\n        if (c < cmax && r < rmax) {\n          for (int i = 0; i < M; i++) {\n            for (int j = 0; j < N; j++) {\n              if (M * r + i < m && N * c + j < n) {\n                buff[(N * c + j) * m + M * r + i] = myc[N * i + j];\n                myc[N * i + j] = 0.0;\n              }\n            }\n          }\n        }\n        if (need_sync) syncthreads();\n\n        /* Add results from shared memory buffer to global C block. */\n#pragma unroll\n        for (int i = tidx; i < mn; i += threads) {\n          atomicAdd(&c_data[srcC + i], buff[i]);\n        }\n      }\n      else {\n        /* Add results from registers to global C block. */\n#pragma unroll\n        for (int i = tidx; i < mn; i += threads) {\n          atomicAdd(&c_data[srcC + i], myc[0]);\n        }\n        myc[0] = 0.0;\n      }\n    }\n    if (need_sync) syncthreads();\n  }\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_medium.py",
    "content": "# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nfrom kernels.smm_acc_dnt_base import Kernel\n\n\nclass Kernel_dnt_medium(Kernel):\n    algorithm = \"medium\"\n    algorithm_num = 3\n    launch_parameters = [\n        \"m\",\n        \"n\",\n        \"k\",\n        \"tile_m\",\n        \"tile_n\",\n        \"threads\",\n        \"grouping\",\n        \"minblocks\",\n    ]\n\n    def __init__(\n        self, m, n, k, threads, tile_m, tile_n, grouping, minblocks, perf, source\n    ):\n        self.m = m\n        self.n = n\n        self.k = k\n        self.tile_m = tile_m\n        self.tile_n = tile_n\n        self.threads = threads\n        self.grouping = grouping\n        self.minblocks = minblocks\n        self.perf = perf\n        self.source = source\n        assert self.threads * self.minblocks <= 2048\n        min_threads = ((self.m + self.tile_m - 1) // self.tile_m) * (\n            (self.n + self.tile_n - 1) // self.tile_n\n        )\n        assert min_threads <= self.threads\n\n    @property\n    def func_signature(self):\n        return (\n            \"smm_acc_dnt_medium\"\n            + \"<{m}, {n}, {k}, {tile_m}, {tile_n}, {threads}, {grouping}, {minblocks} >;\\n\".format(\n                **self.__dict__\n            )\n        )\n\n    @staticmethod\n    def promising_parameters(\n        m,\n        n,\n        k,\n        gpu,\n        autotuning,\n        threads=None,\n        grouping=None,\n        minblocks=None,\n        tile_m=None,\n        tile_n=None,\n        w=None,\n        v=None,\n    ):\n        \"\"\"\n        Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible\n        kernel parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        params = []\n        for minblocks_ in range(1, 28) if minblocks is None else [minblocks]:\n            # for exhaustive search: range(1, gpu[\"Thread_Blocks_/_Multiprocessor\"] + 1):\n            # heuristic: the optimal minblocks is never > 28\n            for grouping_ in range(1, 32 + 1, 1) if grouping is None else [grouping]:\n                if m >= 28 and grouping_ not in (3, 4, 5, 24, 26, 29, 32):\n                    continue  # heuristic: investigate a smaller search space of grouping for large matrices\n\n                for tm in (\n                    range(1, min(12, m) + 1) if tile_m is None else [tile_m]\n                ):  # heuristic: the optimal tile_m is never above 12\n                    for tn in (\n                        range(1, min(12, n) + 1) if tile_n is None else [tile_n]\n                    ):  # heuristic: the optimal tile_m is never above 12\n                        if tm * tn > 16:\n                            continue  # heuristic: performance decreases for very large tiles\n\n                        # Number of tiled columns, rows\n                        cmax = (n + tn - 1) // tn\n                        rmax = (m + tm - 1) // tm\n\n                        # Max work (\"operations\") which can be run concurrently\n                        max_concurrent_work = max(\n                            grouping_, m * k, k * n, m * n, cmax * rmax\n                        )\n\n                        # Minimum number of threads required to have one thread per tile\n                        # i.e., cover the result matrix\n                        min_threads = cmax * rmax\n\n                        # Shared memory buffer size\n                        buf_sz = max(m * n, m * k + k * tn * cmax, tm * rmax * k + 1)\n                        smem_tot = (\n                            buf_sz * autotuning[\"sizeof_double\"]\n                            + autotuning[\"npars\"] * grouping_ * autotuning[\"sizeof_int\"]\n                        )\n                        if smem_tot > gpu[\"Max_Shared_Memory_/_Block_(bytes)\"]:\n                            continue\n                        if (\n                            smem_tot * minblocks_\n                            > gpu[\"Shared_Memory_/_Multiprocessor_(bytes)\"]\n                        ):\n                            continue\n\n                        # Use all concurrency available: fill warps\n                        for threads_ in (\n                            range(\n                                gpu[\"Threads_/_Warp\"],\n                                gpu[\"Max_Thread_Block_Size\"] + 1,\n                                gpu[\"Threads_/_Warp\"],\n                            )\n                            if threads is None\n                            else [threads]\n                        ):\n                            if threads_ > round_up_to_nearest_multiple(\n                                max_concurrent_work, gpu[\"Threads_/_Warp\"]\n                            ):\n                                continue  # soft: too much concurrency harms performance\n                            if threads_ * minblocks_ > gpu[\"Threads_/_Multiprocessor\"]:\n                                continue\n                            if threads_ < min_threads:\n                                continue\n\n                            params.append(\n                                {\n                                    \"m\": m,\n                                    \"n\": n,\n                                    \"k\": k,\n                                    \"tile_m\": tm,\n                                    \"tile_n\": tn,\n                                    \"threads\": threads_,\n                                    \"grouping\": grouping_,\n                                    \"minblocks\": minblocks_,\n                                }\n                            )\n        return params\n\n    @staticmethod\n    def baseline(m, n, k, gpu, autotuning):\n        \"\"\"\n        Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a\n        baseline (\"educated guess\") of the kernel's optimal parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        grp = 16\n        minblk = 2\n        tm = 2\n        tn = 2\n        cmax = (n + tn - 1) // tn\n        rmax = (m + tm - 1) // tm\n        min_threads = cmax * rmax\n\n        while True:\n            base = {\n                \"threads\": round_up_to_nearest_multiple(min_threads, 32),\n                \"grouping\": grp,\n                \"minblocks\": minblk,\n                \"tile_m\": tn,\n                \"tile_n\": tn,\n                \"w\": float(\"nan\"),\n                \"v\": float(\"nan\"),\n            }\n\n            if (\n                len(\n                    Kernel_dnt_medium.promising_parameters(\n                        m, n, k, gpu, autotuning, **base\n                    )\n                )\n                > 0\n            ):\n                break\n            else:\n                grp -= 1\n                if grp == 0:\n                    base = Kernel_dnt_medium.promising_parameters(\n                        m, n, k, gpu, autotuning\n                    )[0]\n                    base.update(dict([(\"w\", float(\"nan\")), (\"v\", float(\"nan\"))]))\n                    break\n\n        base.update(\n            dict(\n                [\n                    (\"m\", m),\n                    (\"n\", n),\n                    (\"k\", k),\n                    (\"algorithm\", \"medium\"),\n                    (\"perf\", 0),\n                    (\"source\", \"predicted\"),\n                ]\n            )\n        )\n        return base\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_small.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n/*****************************************************************************/\n/*  Authors: Peter Messmer <pmessmer@nvidia.com>,                            */\n/*           Nikolay Markovskiy <nmarkovskiy@nvidia.com>                     */\n/*  Simplified, cleanup & refacture: Based on 'cusmm_dnt_small.h'            */\n/*           Andreas Gloess <andreas.gloess@chem.uzh.ch>                     */\n/*                                                                           */\n/*****************************************************************************/\n\n#include \"smm_acc_common.h\"\n\n/*\n * Execution configuration:\n * gridDim.x = (stack_size + (grouping-1))/grouping\n * blockIdx.x = {0, ..., gridDim.x-1}\n * blockDim.x = threads\n * threadIdx.x = {0, ..., threads-1}\n\n * Execute sparse matrix-matrix multiplication C += A*B\n * according to a stack parameter list, decomposed into mutliple block\n * multiplications c_block += a_block * b_block\n *     c_block, dimension (m x n)\n *     a_block, dimension (m x k)\n *     b_block, dimension (k x n)\n\n * Template parameters\n * --- m, n, k: triplet of integers characterising the block multiplication dimensions\n * --- M, N: dimensions of the tile T (submatrix of c_block) to compute with one thread\n * --- threads: number of CUDA threads (in HIP linguo, \"work items\") this kernel is run with\n * --- grouping: number of stack parameter entries to process per thread block\n * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, \"workgroup\") per multiprocessor (in HIP linguo, \"compute units\") (used in __launch_bounds__)\n\n * Function arguments\n * --- param_stack: parameter stack array (pointers to global memory):\n *     array of stack entries (index triplets), indicating which elements of\n *     a_data, b_data to multiply and to which element of c_data to add them to\n * --- stack_size: number of entries (3 integer triplets) in param_stack,\n *     corresponds to the number of block-matrix multiplications to run in total\n * --- a_data, b_data, c_data (pointers to global memory):\n *     arrays containing the values of matrices A, B, C\n\n * Algorithm specificities:\n * - each thread computes a tile T (of size tile_m * tile_n) of c_block, in order to increase\n *   ILP per thread and given the large number of registers allowed per thread.\n * - the result tiles do not need to be shared between threads, it is therefore stored in registers\n * - T get decompressed to shared memory buffer before being written back to global memory via an atomic add\n */\ntemplate<int m, int n, int k, int M, int N, int threads, int grouping, int minblocks>\n__global__ void __launch_bounds__(threads, minblocks) smm_acc_dnt_small(const int* __restrict__ param_stack, int stack_size,\n  const double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data) {\n  /* Total number of elements in block matrices */\n  const int mn = m * n; /* c_block */\n  const int mk = m * k; /* a_block */\n  const int kn = n * k; /* b_block */\n\n  /* Block and thread index */\n  const int bidx = blockIdx.x;\n  const int tidx = threadIdx.x;\n\n  /* Number of columns and rows used to divide c_block into tiles */\n  const int cmax = (n % N == 0) ? n / N : n / N + 1;\n  const int rmax = (m % M == 0) ? m / M : m / M + 1;\n\n  /* buff_l and buff_r can overlap in the multiplication step\n   * (still better than 'if' in inner loop, see ^ref1)\n   */\n  const int buf_tmp = (mk + k * N * cmax < M * rmax * k + 1) ? M * rmax * k + 1 : mk + k * N * cmax;\n  const int buf_sz = (buf_tmp < mn) ? mn : buf_tmp;\n\n  /* Column and row starting index of the tile T this thread will compute\n   * Each thread computes all elements of one tile T */\n  const int c = tidx / rmax;\n  const int r = tidx - c * rmax;\n\n  /* Number of parameters per stack entry in parameter stack */\n  const int npar = 3;\n\n  /* If multiple warps (in HIP linguo, \"wavefronts\") are running a single block multiplication,\n   * synchronization is needed */\n  const bool need_sync = (mn > warpSize || mk > warpSize || kn > warpSize || threads > warpSize);\n\n  /* psp: parameter stack position:\n   *      index in the parameter stack of the first parameter stack entry to be processed by this thread\n   * nrun: number of runs: number of stack entries to process in this thread */\n  int nrun, psp;\n\n  /* Partial sum of the tile T of block_c that this thread will compute */\n  double myc[M * N];\n\n  /* Arrays in shared memory\n   *(common to all threads in a thread block, but different from thread-block to thread-block):\n   * param_stack_s: shared memory buffer containing the stack entries this thread should process\n   *                number of stack entries in param_stack_s = grouping,\n   *                number of integers per stack entry: 3 */\n  __shared__ int param_stack_s[npar * grouping];\n\n  /* buff: shared memory buffer containing a_block (block submatrix of A) and b_block to multiply\n   * and to which c-results are decompressed */\n  __shared__ double buff[buf_sz];\n  double* buff_l = buff; /* pointer to the beginning of a_block in buffer */\n  double* buff_r = &buff[mk]; /* pointer to the beginning of b_block in buffer */\n\n  /* Set the number of runs (i.e. how many stack entries to process in this thread)\n   * If the current block is the last block set the number of stack entries to process in\n   * this thread to the remainder of stack_size / grouping */\n  nrun = grouping;\n  if (((bidx + 1) * grouping) > stack_size) nrun = stack_size % grouping;\n\n  /* Set the partial sum (tile T) to zero */\n#pragma unroll\n  for (int i = 0; i < M * N; i++) myc[i] = 0.0;\n\n  /* Load and pack stack data for current block from global memory into shared memory\n   * Get parameter stack entries from index \"psp\" to \"psp + (nrun-1)*npar + 2\"\n   * Each triplet indicates the beginning of a submatrix to multiply */\n  psp = bidx * npar * grouping;\n#pragma unroll\n  for (int i = tidx; i < nrun; i += threads) {\n    // param_stack is 1-based, convert to 0-based here\n    param_stack_s[i * npar] = __ldg(&param_stack[psp + i * npar]) - 1; /* value = index in a_data */\n    param_stack_s[i * npar + 1] = __ldg(&param_stack[psp + i * npar + 1]) - 1; /* value = index in b_data */\n    param_stack_s[i * npar + 2] = __ldg(&param_stack[psp + i * npar + 2]) - 1; /* value = index in c_data */\n  }\n\n  /* Wait until all the data has been loaded */\n  if (need_sync) syncthreads();\n\n  /* In each run, we process one stack entry from param_stack_s */\n  for (int run = 0; run < nrun; run++) {\n    /* Index in shared memory buffers to read from */\n    psp = run * npar;\n\n    /* Index in a_data, b_data and c_data arrays\n     * indicating where to fetch resp. write back matrix elements for this run\n     * srcA, B, C corresponding to the strting indices of block submatrices to multiply */\n    int srcA = param_stack_s[psp];\n    int srcB = param_stack_s[psp + 1];\n    int srcC = param_stack_s[psp + 2];\n\n    /* Load block matrices a_block and b_block for current block and stack into smem */\n    if (m == n) {\n#pragma unroll\n      for (int i = tidx; i < mk; i += threads) {\n        buff_l[i] = __ldg(&a_data[srcA + i]);\n        buff_r[i] = __ldg(&b_data[srcB + i]);\n      }\n    }\n    else {\n#pragma unroll\n      for (int i = tidx; i < mk; i += threads) {\n        buff_l[i] = __ldg(&a_data[srcA + i]);\n      }\n#pragma unroll\n      for (int i = tidx; i < kn; i += threads) {\n        buff_r[i] = __ldg(&b_data[srcB + i]);\n      }\n    }\n\n    /* Wait until all the data has been loaded */\n    if (need_sync) syncthreads();\n\n    /* Do actual multiplication. */\n    if (c < cmax && r < rmax) {\n      for (int l = 0; l < k; l++) {\n        /* Loop over all elements c_ij of tile T */\n#pragma unroll\n        for (int i = 0; i < N; i++) {\n#pragma unroll\n          for (int j = 0; j < M; j++) {\n            /* Compute c_ij = sum_k (a_ik * b_kj) in shared memory */\n            myc[M * i + j] += buff_l[l * m + M * r + j] * buff_r[l * n + N * c + i];\n          }\n        }\n      }\n    }\n\n    /* last loop or C_idx for next stack entry is different */\n    if ((run == (nrun - 1)) || (srcC != param_stack_s[psp + 2 + npar])) {\n      if ((M > 1) || (N > 1)) {\n        if (need_sync) syncthreads();\n\n        /* Decompress results to buffer and set tile elements back to 0 */\n        if (c < cmax && r < rmax) {\n#pragma unroll\n          for (int i = 0; i < N; i++) {\n#pragma unroll\n            for (int j = 0; j < M; j++) {\n              if (M * r + j < m && N * c + i < n) {\n                buff[(N * c + i) * m + M * r + j] = myc[M * i + j];\n                myc[M * i + j] = 0.0;\n              }\n            }\n          }\n        }\n\n        if (need_sync) syncthreads();\n\n        /* Add results from shared memory buffer to global C block. */\n#pragma unroll\n        for (int i = tidx; i < mn; i += threads) atomicAdd(&c_data[srcC + i], buff[i]);\n      }\n      else {\n        /* Add results from registers to global C block. */\n#pragma unroll\n        for (int i = tidx; i < mn; i += threads) atomicAdd(&c_data[srcC + i], myc[0]);\n        myc[0] = 0.0;\n      }\n    }\n\n    if (need_sync) syncthreads();\n  }\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_small.py",
    "content": "# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nfrom kernels.smm_acc_dnt_base import Kernel\n\n\nclass Kernel_dnt_small(Kernel):\n    algorithm = \"small\"\n    algorithm_num = 4\n    launch_parameters = [\n        \"m\",\n        \"n\",\n        \"k\",\n        \"tile_m\",\n        \"tile_n\",\n        \"threads\",\n        \"grouping\",\n        \"minblocks\",\n    ]\n\n    def __init__(\n        self, m, n, k, threads, tile_m, tile_n, grouping, minblocks, perf, source\n    ):\n        self.m = m\n        self.n = n\n        self.k = k\n        self.tile_m = tile_m\n        self.tile_n = tile_n\n        self.threads = threads\n        self.grouping = grouping\n        self.minblocks = minblocks\n        self.perf = perf\n        self.source = source\n\n    @property\n    def func_signature(self):\n        return (\n            \"smm_acc_dnt_small\"\n            + \"< {m}, {n}, {k}, {tile_m}, {tile_n}, {threads}, {grouping}, {minblocks} >;\\n\".format(\n                **self.__dict__\n            )\n        )\n\n    @staticmethod\n    def promising_parameters(\n        m,\n        n,\n        k,\n        gpu,\n        autotuning,\n        threads=None,\n        grouping=None,\n        minblocks=None,\n        tile_m=None,\n        tile_n=None,\n        w=None,\n        v=None,\n    ):\n        \"\"\"\n        Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible\n        kernel parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        # Parameter space:\n        params = []\n        for minblocks_ in (\n            range(1, gpu[\"Thread_Blocks_/_Multiprocessor\"] + 1)\n            if minblocks is None\n            else [minblocks]\n        ):\n            for grouping_ in (\n                range(2, 32 + 1, 1) if grouping is None else [grouping]\n            ):  # heuristic: never seen optimal=1 hence start from 2\n                for tm in (\n                    range(1, min(12, m) + 1) if tile_m is None else [tile_m]\n                ):  # heuristic: the optimal tile_m is never above 12\n                    for tn in (\n                        range(1, min(12, n) + 1) if tile_n is None else [tile_n]\n                    ):  # heuristic: the optimal tile_n is never above 12\n                        if tm * tn > 16:\n                            continue  # heuristic: performance decreases for very large tiles\n\n                        # Number of tiled columns, rows\n                        cmax = (n + tn - 1) // tn\n                        rmax = (m + tm - 1) // tm\n\n                        # Minimum number of threads required to have one thread per tile\n                        min_threads = cmax * rmax\n\n                        # Max work (\"operations\") which can be run concurrently\n                        max_concurrent_work = max(\n                            grouping_, m * k, k * n, m * n, min_threads\n                        )\n\n                        # Shared memory buffer size\n                        buf_sz = max(m * n, m * k + k * tn * cmax, tm * rmax * k + 1)\n                        smem_tot = (\n                            buf_sz * autotuning[\"sizeof_double\"]\n                            + autotuning[\"npars\"] * grouping_ * autotuning[\"sizeof_int\"]\n                        )\n                        if smem_tot > gpu[\"Max_Shared_Memory_/_Block_(bytes)\"]:\n                            continue\n                        if (\n                            smem_tot * minblocks_\n                            > gpu[\"Shared_Memory_/_Multiprocessor_(bytes)\"]\n                        ):\n                            continue\n\n                        # Use all concurrency available: fill warps\n                        for threads_ in (\n                            range(\n                                gpu[\"Threads_/_Warp\"],\n                                gpu[\"Max_Thread_Block_Size\"] + 1,\n                                gpu[\"Threads_/_Warp\"],\n                            )\n                            if threads is None\n                            else [threads]\n                        ):\n                            if threads_ > round_up_to_nearest_multiple(\n                                max_concurrent_work, gpu[\"Threads_/_Warp\"]\n                            ):\n                                continue  # soft: too much concurrency harms performance\n                            if threads_ * minblocks_ > gpu[\"Threads_/_Multiprocessor\"]:\n                                continue\n                            if threads_ < min_threads:\n                                continue\n\n                            params.append(\n                                {\n                                    \"m\": m,\n                                    \"n\": n,\n                                    \"k\": k,\n                                    \"tile_m\": tm,\n                                    \"tile_n\": tn,\n                                    \"threads\": threads_,\n                                    \"grouping\": grouping_,\n                                    \"minblocks\": minblocks_,\n                                }\n                            )\n        return params\n\n    @staticmethod\n    def baseline(m, n, k, gpu, autotuning):\n        \"\"\"\n        Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a\n        baseline (\"educated guess\") of the kernel's optimal parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        grp = 16\n        minblk = 2\n        tm = 2\n        tn = 2\n        cmax = (n + tn - 1) // tn\n        rmax = (m + tm - 1) // tm\n        min_threads = cmax * rmax\n\n        base = {\n            \"threads\": round_up_to_nearest_multiple(min_threads, 32),\n            \"grouping\": grp,\n            \"minblocks\": minblk,\n            \"tile_m\": tn,\n            \"tile_n\": tn,\n            \"w\": float(\"nan\"),\n            \"v\": float(\"nan\"),\n        }\n\n        if (\n            len(Kernel_dnt_small.promising_parameters(m, n, k, gpu, autotuning, **base))\n            > 0\n        ):\n            base = Kernel_dnt_small.promising_parameters(m, n, k, gpu, autotuning)[0]\n            base.update(\n                dict(\n                    [\n                        (\"tile_m\", float(\"nan\")),\n                        (\"tile_n\", float(\"nan\")),\n                        (\"w\", float(\"nan\")),\n                        (\"v\", float(\"nan\")),\n                    ]\n                )\n            )\n\n        base.update(\n            dict(\n                [\n                    (\"m\", m),\n                    (\"n\", n),\n                    (\"k\", k),\n                    (\"algorithm\", \"small\"),\n                    (\"perf\", 0),\n                    (\"source\", \"predicted\"),\n                ]\n            )\n        )\n        return base\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_tiny.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n/*****************************************************************************/\n/*  Authors: Peter Messmer <pmessmer@nvidia.com>,                            */\n/*           Nikolay Markovskiy <nmarkovskiy@nvidia.com>                     */\n/*  Simplified, cleanup & refacture: Based on 'cusmm_dnt_tiny.h'             */\n/*           Andreas Gloess <andreas.gloess@chem.uzh.ch>                     */\n/*                                                                           */\n/*****************************************************************************/\n\n#include \"smm_acc_common.h\"\n\n/*\n * Execution configuration:\n * gridDim.x = (stack_size + (grouping-1))/grouping\n * blockIdx.x = {0, ..., gridDim.x-1}\n * blockDim.x = threads\n * threadIdx.x = {0, ..., threads-1}\n\n * Execute sparse matrix-matrix multiplication C += A*B\n * according to a stack parameter list, decomposed into mutliple block\n * multiplications c_block += a_block * b_block\n *     c_block, dimension (m x n)\n *     a_block, dimension (m x k)\n *     b_block, dimension (k x n)\n\n * Template parameters\n * --- m, n, k: triplet of integers characterising the block multiplication dimensions\n * --- threads: number of CUDA threads (in HIP linguo, \"work items\") this kernel is run with\n * --- grouping: number of stack parameter entries to process per thread block\n * --- minblocks: the desired minimum number of resident blocks (in HIP linguo, \"workgroup\") per multiprocessor (in HIP linguo, \"compute units\") (used in __launch_bounds__)\n\n * Function arguments\n * --- param_stack: parameter stack array (pointers to global memory):\n *     array of stack entries (index triplets), indicating which elements of\n *     a_data, b_data to multiply and to which element of c_data to add them to\n * --- stack_size: number of entries (3 integer triplets) in param_stack,\n *     corresponds to the number of block-matrix multiplications to run in total\n * --- a_data, b_data, c_data (pointers to global memory):\n *     arrays containing the values of matrices A, B, C\n\n * Algorithm specificities:\n * - optimized for block matrices that fit entirely into shared memory\n * - each element of c_block is computed by one thread\n * - no overlap between computation and memory loads\n */\ntemplate<int m, int n, int k, int threads, int grouping, int minblocks>\n__global__ void __launch_bounds__(threads, minblocks) smm_acc_dnt_tiny(const int* __restrict__ param_stack, int stack_size,\n  const double* __restrict__ a_data, const double* __restrict__ b_data, double* c_data) {\n  /* Total number of elements in block matrices */\n  const int mn = m * n; /* c_block */\n  const int mk = m * k; /* a_block */\n  const int kn = n * k; /* b_block */\n\n  /* Block and thread index */\n  const int bidx = blockIdx.x;\n  const int tidx = threadIdx.x;\n\n  /* Column and row index of the block matrix c_block that this thread will compute\n   * Each thread computes exactly one element of block_c */\n  const int c = tidx / m;\n  const int r = tidx - c * m;\n\n  /* Number of parameters per stack entry in parameter stack */\n  const int npar = 3;\n\n  /* If multiple warps (in HIP linguo, \"wavefronts\") are running a single block multiplication,\n   * synchronization is needed */\n  const bool need_sync = (mn > warpSize || mk > warpSize || kn > warpSize || threads > warpSize);\n\n  /* psp: parameter stack position:\n   *      index in the parameter stack of the first parameter stack entry to be processed by this thread\n   * nrun: number of runs: number of stack entries to process in this thread */\n  int psp, nrun;\n\n  /* Partial sum of the element of block_c that this thread will compute */\n  double myc;\n\n  /* Arrays in shared memory\n   * (common to all threads in a thread block, but different from thread-block to thread-block):\n   * param_stack_s: shared memory buffer containing the stack entries this thread should process\n   *                number of stack entries in param_stack_s = grouping,\n   *                number of integers per stack entry: 3 */\n  __shared__ int param_stack_s[npar * grouping];\n  /* buff_a, buff_b: shared memory buffer containing a_block (block submatrix of A),\n   * resp. b_block to multiply */\n  __shared__ double buff_a[mk];\n  __shared__ double buff_b[kn];\n\n  /* Set the number of runs (i.e. how many stack entries to process in this thread)\n   * If the current block is the last block, set the number of stack entries to process in\n   * this thread to the remainder of stack_size / grouping */\n  nrun = grouping;\n  if (((bidx + 1) * grouping) > stack_size) nrun = stack_size % grouping;\n\n  /* Set the partial sum to zero */\n  myc = 0.0;\n\n  /* Load and pack stack data for current block from global memory into shared memory\n   * Get parameter stack entries from index \"psp\" to \"psp + (nrun-1)*npar + 2\"\n   * Each triplet indicates the beginning of a submatrix to multiply */\n  psp = bidx * npar * grouping;\n#pragma unroll\n  for (int i = tidx; i < nrun; i += threads) {\n    // param_stack is 1-based, convert to 0-based here\n    param_stack_s[i * npar] = __ldg(&param_stack[psp + i * npar]) - 1; /* value = index in a_data */\n    param_stack_s[i * npar + 1] = __ldg(&param_stack[psp + i * npar + 1]) - 1; /* value = index in b_data */\n    param_stack_s[i * npar + 2] = __ldg(&param_stack[psp + i * npar + 2]) - 1; /* value = index in c_data */\n  }\n\n  /* Wait until all the data has been loaded */\n  if (need_sync) syncthreads();\n\n  /* In each run, we process one stack entry from param_stack_s */\n  for (int run = 0; run < nrun; run++) {\n    /* Parameter stack position: index in shared memory buffers to read from */\n    psp = npar * run;\n\n    /* Index in a_data, b_data and c_data arrays\n     * indicating where to fetch resp. write back matrix elements for this run\n     * srcA, B, C corresponding to the starting indices of block submatrices to multiply */\n    int srcA = param_stack_s[psp];\n    int srcB = param_stack_s[psp + 1];\n    int srcC = param_stack_s[psp + 2];\n\n    /* Load block matrices a_block and b_block for current block and stack from global memory into shared memory\n     * (no overlap between computation and loading)\n     * once an element s loaded into shared memory, it is available for all threads of the thread block to use */\n    if (m == n) {\n#pragma unroll\n      for (int i = tidx; i < mk; i += threads) {\n        buff_a[i] = __ldg(&a_data[srcA + i]);\n        buff_b[i] = __ldg(&b_data[srcB + i]);\n      }\n    }\n    else {\n#pragma unroll\n      for (int i = tidx; i < mk; i += threads) {\n        buff_a[i] = __ldg(&a_data[srcA + i]);\n      }\n#pragma unroll\n      for (int i = tidx; i < kn; i += threads) {\n        buff_b[i] = __ldg(&b_data[srcB + i]);\n      }\n    }\n\n    /* Wait until all the data has been loaded */\n    if (need_sync) syncthreads();\n\n    if (tidx < mn) {\n      /* Compute c_ij = sum_k (a_ik * b_kj) in shared memory */\n#pragma unroll\n      for (int l = 0; l < k; l++) {\n        myc += buff_a[l * m + r] * buff_b[l * n + c];\n      }\n      /* Store result in global memory without conflicting with other concurrent writes */\n      atomicAdd(&c_data[srcC + tidx], myc);\n      myc = 0.0;\n    }\n\n    if (need_sync) syncthreads();\n  }\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_dnt_tiny.py",
    "content": "# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nfrom kernels.smm_acc_dnt_base import Kernel\n\n\nclass Kernel_dnt_tiny(Kernel):\n    algorithm = \"tiny\"\n    algorithm_num = 5\n    launch_parameters = [\"m\", \"n\", \"k\", \"threads\", \"grouping\", \"minblocks\"]\n\n    def __init__(self, m, n, k, threads, grouping, minblocks, perf, source):\n        self.m = m\n        self.n = n\n        self.k = k\n        self.threads = threads\n        self.grouping = grouping\n        self.minblocks = minblocks\n        self.perf = perf\n        self.source = source\n        assert self.m * self.n <= self.threads\n\n    @property\n    def func_signature(self):\n        return \"smm_acc_dnt_tiny< {m}, {n}, {k}, {threads}, {grouping}, {minblocks} >;\\n\".format(\n            **self.__dict__\n        )\n\n    @staticmethod\n    def promising_parameters(\n        m,\n        n,\n        k,\n        gpu,\n        autotuning,\n        threads=None,\n        grouping=None,\n        minblocks=None,\n        tile_m=None,\n        tile_n=None,\n        w=None,\n        v=None,\n    ):\n        \"\"\"\n        Given a certain (m,n,k)-triplet, GPU properties and autotuning properties, return a list of all possible\n        kernel parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        # Shared memory buffer size\n        buf_sz = k * (\n            m + n\n        )  # number of elements in the a_block buffer = mk, and in the b_block buffer = kn\n\n        # Minimum number of threads required to cover the result matrix c\n        min_threads = m * n\n\n        # Parameter space:\n        params = []\n        for minblocks_ in (\n            range(1, gpu[\"Thread_Blocks_/_Multiprocessor\"] + 1)\n            if minblocks is None\n            else [minblocks]\n        ):\n            # heuristic: never seen optimal=1 hence start from 2\n            for grouping_ in range(2, 32 + 1, 1) if grouping is None else [grouping]:\n                # Max work (\"operations\")  which can be run concurrently\n                max_concurrent_work = max(grouping_, m * k, k * n, m * n)\n\n                # Shared memory utilisation (bytes)\n                smem_tot = (\n                    buf_sz * autotuning[\"sizeof_double\"]\n                    + autotuning[\"npars\"] * grouping_ * autotuning[\"sizeof_int\"]\n                )\n                if smem_tot > gpu[\"Max_Shared_Memory_/_Block_(bytes)\"]:\n                    continue\n                if smem_tot * minblocks_ > gpu[\"Max_Shared_Memory_/_Block_(bytes)\"]:\n                    continue\n\n                # Use all concurrency available: fill warps\n                for threads_ in (\n                    range(\n                        gpu[\"Threads_/_Warp\"],\n                        gpu[\"Max_Thread_Block_Size\"] + 1,\n                        gpu[\"Threads_/_Warp\"],\n                    )\n                    if threads is None\n                    else [threads]\n                ):\n                    if threads_ > round_up_to_nearest_multiple(\n                        max_concurrent_work, gpu[\"Threads_/_Warp\"]\n                    ):\n                        continue  # soft: too much concurrency harms performance\n                    if threads_ * minblocks_ > gpu[\"Threads_/_Multiprocessor\"]:\n                        continue\n                    if threads_ < min_threads:\n                        continue\n\n                    params.append(\n                        {\n                            \"m\": m,\n                            \"n\": n,\n                            \"k\": k,\n                            \"threads\": threads_,\n                            \"grouping\": grouping_,\n                            \"minblocks\": minblocks_,\n                        }\n                    )\n        return params\n\n    @staticmethod\n    def baseline(m, n, k, gpu, autotuning):\n        \"\"\"\n        Given an (m, n, k)-triplet and GPu and autotuning properties, return a set of parameters corresponding to a\n        baseline (\"educated guess\") of the kernel's optimal parameters\n        \"\"\"\n        from kernels.smm_acc_dnt_base import round_up_to_nearest_multiple\n\n        grp = 16\n        minblk = 2\n        min_threads = m * n\n\n        base = {\n            \"threads\": round_up_to_nearest_multiple(min_threads, 32),\n            \"grouping\": grp,\n            \"minblocks\": minblk,\n            \"tile_m\": float(\"nan\"),\n            \"tile_n\": float(\"nan\"),\n            \"w\": float(\"nan\"),\n            \"v\": float(\"nan\"),\n        }\n\n        if (\n            len(Kernel_dnt_tiny.promising_parameters(m, n, k, gpu, autotuning, **base))\n            > 0\n        ):\n            base = Kernel_dnt_tiny.promising_parameters(m, n, k, gpu, autotuning)[0]\n            base.update(\n                dict(\n                    [\n                        (\"tile_m\", float(\"nan\")),\n                        (\"tile_n\", float(\"nan\")),\n                        (\"w\", float(\"nan\")),\n                        (\"v\", float(\"nan\")),\n                    ]\n                )\n            )\n\n        base.update(\n            dict(\n                [\n                    (\"m\", m),\n                    (\"n\", n),\n                    (\"k\", k),\n                    (\"algorithm\", \"tiny\"),\n                    (\"perf\", 0),\n                    (\"source\", \"predicted\"),\n                ]\n            )\n        )\n        return base\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_predict.py",
    "content": "####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport numpy as np\n\nfrom kernels.smm_acc import (  # noqa: F401\n    kernel_algorithm,\n    gpu_architectures,\n    params_dict_to_kernel,\n    compatible_mnk,\n)\n\n# ===============================================================================\n# Lists of derived parameters to use as training data for the predictive modelling\n# Some of the computable features are commented out because they are constant or (almost) linearly dependent on another\n# feature, and therefore they do not contribute to the decision tree model.\nraw_parameters = [\n    \"m\",\n    \"n\",\n    \"k\",\n    \"threads_per_blk\",\n    \"grouping\",\n    \"minblocks\",\n    \"tile_m\",\n    \"tile_n\",\n    \"w\",\n    \"v\",\n    \"perf (Gflop/s)\",\n]\nderived_parameters = {\n    \"common\": [\n        \"perf_scaled\",\n        # 'Gflops', # linearly dependent on mxnxk\n        \"mxnxk\",\n        \"size_a\",\n        \"size_b\",\n        \"size_c\",\n        # 'nblks', 'nthreads',  # constant value for largeDB, since the grouping is always = 16\n        \"sm_desired\",\n        # 'warps_per_blk', 'nwarps',  # linearly dependent on threads, nthreads\n        # 'ru_param_stack_unroll_factor',  # constant values for each algo\n    ],\n    \"tiny\": [\n        \"nblks\",\n        \"nthreads\",\n        # tiny, small, medium: resource occupation\n        \"ru_tinysmallmed_unroll_factor_a\",\n        \"ru_tinysmallmed_unroll_factor_a_total\",\n        \"ru_tinysmallmed_unroll_factor_b\",\n        \"ru_tinysmallmed_unroll_factor_b_total\",\n        \"ru_tinysmallmed_unroll_factor_c_total\",\n        # tiny: resource occupation\n        \"ru_tiny_max_parallel_work\",\n        \"ru_tiny_smem_per_block\",\n        # 'ru_tiny_min_threads',  # equal to size_c\n        # 'ru_tiny_nblks_per_sm',  # always = 32, so also removing: 'ru_tiny_nwarps_per_sm', 'ru_tiny_occupancy'\n        \"ru_tiny_nsm\",  # 'ru_tiny_ngpu',  # highly correlated with ru_tiny_n_sm\n        # tiny: performance counter estimations based on:\n        # Kothapalli, Kishore & Mukherjee, Rishabh & Rehman, M & Patidar, Suryakant & J. Narayanan, P & Srinathan, Kannan. 2009\n        # A performance prediction model for the CUDA GPGPU platform. 16th International Conference onHigh Performance Computing\n        # HiPC 2009 - Proceedings. 463-472. 10.1109/HIPC.2009.5433179.\n        \"tiny_estimate_Nmem\",\n        \"tiny_estimate_perf\",\n    ],\n    \"small\": [\n        \"nblks\",\n        \"nthreads\",\n        # tiny, small, medium: resource occupation\n        \"ru_tinysmallmed_unroll_factor_a\",\n        \"ru_tinysmallmed_unroll_factor_a_total\",\n        \"ru_tinysmallmed_unroll_factor_b\",\n        \"ru_tinysmallmed_unroll_factor_b_total\",\n        \"ru_tinysmallmed_unroll_factor_c_total\",\n        # small, medium: resource occupation\n        \"ru_smallmed_unroll_factor_c\",\n        \"ru_smallmed_loop_matmul\",\n        \"ru_smallmed_max_parallel_work\",\n        # 'ru_smallmed_buf_size',  # highly correlated with ru_smallmed_smem_per_block\n        \"ru_smallmed_smem_per_block\",\n        \"ru_smallmed_regs_per_thread\",\n        # small, medium, large: resource occupation\n        \"ru_smallmedlarge_cmax\",\n        \"ru_smallmedlarge_rmax\",\n        \"ru_smallmedlarge_T\",\n        \"ru_smallmedlarge_min_threads\",\n    ],\n    \"medium\": [\n        \"nblks\",\n        \"nthreads\",\n        # tiny, small, medium: resource occupation\n        \"ru_tinysmallmed_unroll_factor_a\",\n        \"ru_tinysmallmed_unroll_factor_a_total\",\n        \"ru_tinysmallmed_unroll_factor_b\",\n        \"ru_tinysmallmed_unroll_factor_b_total\",\n        \"ru_tinysmallmed_unroll_factor_c_total\",\n        # medium: resource occupation\n        # 'load_unroll_factor_1', 'load_unroll_factor_2',  # highly correlated with ru_tinysmallmed_unroll_factor_a,b\n        # 'n_mkloads', 'n_knloads',  # constant value\n        # small, medium: resource occupation\n        \"ru_smallmed_unroll_factor_c\",\n        \"ru_smallmed_loop_matmul\",\n        \"ru_smallmed_max_parallel_work\",\n        # 'ru_smallmed_buf_size',  # highly correlated with ru_smallmed_smem_per_block\n        \"ru_smallmed_smem_per_block\",\n        \"ru_smallmed_regs_per_thread\",\n        # small, medium, large: resource occupation\n        \"ru_smallmedlarge_cmax\",\n        \"ru_smallmedlarge_rmax\",\n        \"ru_smallmedlarge_T\",\n        \"ru_smallmedlarge_min_threads\",\n    ],\n    \"largeDB1\": [\n        # largeDB: resource occupation\n        \"ru_large_Pa\",\n        \"ru_large_Pb\",\n        \"ru_large_unroll_factor_a\",\n        \"ru_large_unroll_factor_b\",\n        \"ru_large_unroll_factor_c\",\n        \"ru_large_loop_matmul\",\n        \"ru_large_max_concurrent_work\",\n        \"ru_large_n_DB_iter\",\n        \"ru_large_regs_per_thread\",\n        # 'ru_large_buf_size',  # highly correlated with ru_large_smem_per_block\n        \"ru_large_smem_per_block\",\n        # small, medium, large: resource occupation\n        \"ru_smallmedlarge_cmax\",\n        \"ru_smallmedlarge_rmax\",\n        \"ru_smallmedlarge_T\",\n        \"ru_smallmedlarge_min_threads\",\n    ],\n    \"largeDB2\": [\n        # largeDB: resource occupation\n        \"ru_large_Pa\",\n        \"ru_large_Pb\",\n        \"ru_large_unroll_factor_a\",\n        \"ru_large_unroll_factor_b\",\n        \"ru_large_unroll_factor_c\",\n        \"ru_large_loop_matmul\",\n        \"ru_large_max_concurrent_work\",\n        \"ru_large_n_DB_iter\",\n        \"ru_large_regs_per_thread\",\n        # 'ru_large_buf_size',  # highly correlated with ru_large_smem_per_block\n        \"ru_large_smem_per_block\",\n        # small, medium, large: resource occupation\n        \"ru_smallmedlarge_cmax\",\n        \"ru_smallmedlarge_rmax\",\n        \"ru_smallmedlarge_T\",\n        \"ru_smallmedlarge_min_threads\",\n    ],\n}\n\n\n# ===============================================================================\ndef get_max_performances_per_mnk(data):\n    \"\"\"\n    data: pandas DataFrame containing columns \"m\", \"n\", \"k\", \"perf (Gflop/s)\"\n    Construct dictionary:\n        keys: (m, n, k)-tuple,\n        values: maximum performance found in this data chunk for this given (m, n, k)\n    \"\"\"\n    # Get list of different (m, n, k)s occurring in this chunk of data\n    data[\"mnk_\"] = list(zip(data[\"m\"], data[\"n\"], data[\"k\"]))\n    mnks = np.unique(data[\"mnk_\"])\n\n    # Get max. performance per (m, n, k)\n    max_perf = dict()\n\n    for mnk in mnks:\n        # Get indices corresponding to this mnk\n        idx_mnk = np.where(data[\"mnk_\"] == mnk)[0].tolist()\n\n        # Get performances per mnk\n        perf_mnk_algo = data[\"perf (Gflop/s)\"].values[idx_mnk]\n\n        # Store maxperf\n        maxperf = float(\n            perf_mnk_algo.max(axis=0)\n        )  # max. performance found through autotuning\n        max_perf[mnk] = maxperf\n\n    return max_perf\n\n\n# ===============================================================================\ndef get_baseline_performances_per_mnk(data, algorithm, gpu, autotuning):\n    \"\"\"\n    data: pandas DataFrame containing columns \"m\", \"n\", \"k\", \"perf (Gflop/s)\"\n    algorithm: algorithm for which to get the baseline performance\n    gpu: gpu properties\n    autotuning: autotuning properties\n    Construct dictionary:\n        keys: (m, n, k)-tuple,\n        values: baseline performance for this given (m, n, k) and the given algorithm\n    \"\"\"\n\n    # Get list of different (m, n, k)s occurring in this instance\n    data[\"mnk_\"] = list(zip(data[\"m\"], data[\"n\"], data[\"k\"]))\n    mnks = np.unique(data[\"mnk_\"])\n\n    # Get baseline performance per (m, n, k)\n    baseline_perf = dict()\n\n    for mnk in mnks:\n        m, n, k = mnk\n\n        baseline_pars = kernel_algorithm[algorithm].baseline(m, n, k, gpu, autotuning)\n\n        # Look for this configuration in the data.\n        # If found, save it. Otherwise, skip: it must be in a different data chunk\n        if algorithm == \"tiny\":\n            idx_baseline = data[\n                (data.m == baseline_pars[\"m\"])\n                & (data.n == baseline_pars[\"n\"])\n                & (data.k == baseline_pars[\"k\"])\n                & (data.threads == baseline_pars[\"threads\"])\n                & (data.grouping == baseline_pars[\"grouping\"])\n                & (data.minblocks == baseline_pars[\"minblocks\"])\n            ].index.tolist()\n        elif algorithm in [\"small\", \"medium\"]:\n            idx_baseline = data[\n                (data.m == baseline_pars[\"m\"])\n                & (data.n == baseline_pars[\"n\"])\n                & (data.k == baseline_pars[\"k\"])\n                & (data.threads == baseline_pars[\"threads\"])\n                & (data.grouping == baseline_pars[\"grouping\"])\n                & (data.minblocks == baseline_pars[\"minblocks\"])\n                & (data.tile_m == baseline_pars[\"tile_m\"])\n                & (data.tile_n == baseline_pars[\"tile_n\"])\n            ].index.tolist()\n        elif algorithm in [\"largeDB1\", \"largeDB2\"]:\n            idx_baseline = data[\n                (data.m == baseline_pars[\"m\"])\n                & (data.n == baseline_pars[\"n\"])\n                & (data.k == baseline_pars[\"k\"])\n                & (data.threads == baseline_pars[\"threads\"])\n                & (data.grouping == baseline_pars[\"grouping\"])\n                & (data.minblocks == baseline_pars[\"minblocks\"])\n                & (data.tile_m == baseline_pars[\"tile_m\"])\n                & (data.tile_n == baseline_pars[\"tile_n\"])\n                & (data.w == baseline_pars[\"w\"])\n                & (data.v == baseline_pars[\"v\"])\n            ].index.tolist()\n        else:\n            raise AssertionError(f\"Cannot recognize algorithm: {algorithm}\")\n\n        if len(idx_baseline) == 1:\n            idx_baseline = idx_baseline[0]\n            baseline_perf[mnk] = data[\"perf (Gflop/s)\"][idx_baseline]\n        elif len(idx_baseline) > 1:\n            raise AssertionError(\n                \"Found more than one corresponding index: \" + str(idx_baseline)\n            )\n        else:\n            pass  # if none were found, they're in another data chunk. Do nothing.\n\n    return baseline_perf\n\n\n# ===============================================================================\nclass PredictiveParameters:\n    \"\"\"\n    Class handling predictive features for the predictive modelling of libsmm_acc's performance\n    \"\"\"\n\n    def __init__(\n        self, params_df, gpu, autotuning, max_performances, partial_initialization=False\n    ):\n        \"\"\"\n        params_df: pandas Dataframe where each row corresponds to a kernel parameter set\n        \"\"\"\n        assert \"m\" in params_df.columns.values\n        assert \"n\" in params_df.columns.values\n        assert \"k\" in params_df.columns.values\n        self.gpu = gpu  # GPU card properties\n        self.autotuning = autotuning  # autotuning properties\n        self.max_performances = max_performances  # dictionary of max. performances\n        # keys: (m, n, k)-tuple, values: maximum performance\n        # found over all algorithms for this given (m, n, k)\n\n        if not partial_initialization:\n            assert (\n                \"threads\" in params_df.columns.values\n            ), \"Missing column: threads. Available columns:\\n\" + str(\n                params_df.columns.values\n            )\n            assert (\n                \"grouping\" in params_df.columns.values\n            ), \"Missing column: grouping. Available columns:\\n\" + str(\n                params_df.columns.values\n            )\n            assert (\n                \"minblocks\" in params_df.columns.values\n            ), \"Missing column: minblocks. Available columns:\\n\" + str(\n                params_df.columns.values\n            )\n            algos = np.unique(params_df[\"algorithm\"].values)\n            assert len(algos) == 1\n            algo = algos[0]\n            if algo in [\"small\", \"medium\", \"largeDB1\", \"largeDB2\"]:\n                assert (\n                    \"tile_m\" in params_df.columns.values\n                ), \"Missing column: tile_m. Available columns:\\n\" + str(\n                    params_df.columns.values\n                )\n                assert (\n                    \"tile_n\" in params_df.columns.values\n                ), \"Missing column: tile_n. Available columns:\\n\" + str(\n                    params_df.columns.values\n                )\n                if algo in [\"largeDB1\", \"largeDB2\"]:\n                    assert (\n                        \"w\" in params_df.columns.values\n                    ), \"Missing column: w. Available columns:\\n\" + str(\n                        params_df.columns.values\n                    )\n                    assert (\n                        \"v\" in params_df.columns.values\n                    ), \"Missing column: v. Available columns:\\n\" + str(\n                        params_df.columns.values\n                    )\n\n        self.params = params_df\n\n    def get(self, feature_name):\n        \"\"\"Generic function to compute any feature given by name\"\"\"\n\n        if feature_name not in self.params.columns.values:\n            if feature_name != \"perf_scaled\":  # not vectorizable\n                vget = getattr(self, f\"get_{feature_name}\")\n            else:\n                vget = np.vectorize(getattr(self, f\"get_{feature_name}\"))\n            feature_val = vget()\n        else:\n            feature_val = self.params[feature_name].values\n        return feature_val\n\n    def get_features(self, feature_names):\n        \"\"\"\n        Compute a list of features given by name and return them as a pandas Dataframe.\n        :param feature_names: list of names of features to compute\n        \"\"\"\n        for feat in feature_names:\n            self.params.loc[:, feat] = self.get(feat)\n        return self.params[feature_names]\n\n    # ===============================================================================\n    # Performances\n    def get_perf_scaled(self):\n        \"\"\"\n        Scale raw performances in [Gflop/s] between 0 and 1, where\n            0 = 0 Gflop/s\n            1 = performance equal to autotuned maximum FOR ALL ALGORITHMS\n        :return: numpy array of scaled performances\n        \"\"\"\n\n        def scale_perf(perf, mnk):\n            \"\"\"For a given mnk and a given performance on this mnk, return the scaled performance\"\"\"\n            return round(perf / self.max_performances[mnk], 6)\n\n        vec_scale_perf = np.vectorize(scale_perf)\n        ret = vec_scale_perf(self.get(\"perf (Gflop/s)\"), self.get(\"mnk_string\"))\n        return ret\n\n    # ===============================================================================\n    # Matrix sizes\n    def get_size_a(self):\n        \"\"\"Size of matrix A (first operand of A * B = C)\"\"\"\n        return self.get(\"m\") * self.get(\"k\")  # int\n\n    def get_size_b(self):\n        \"\"\"Size of matrix B (second operand of A * B = C)\"\"\"\n        return self.get(\"k\") * self.get(\"n\")  # int\n\n    def get_size_c(self):\n        \"\"\"Size of matrix B (result of of A * B = C)\"\"\"\n        return self.get(\"m\") * self.get(\"n\")  # int\n\n    def get_mnk_string(self):\n        \"\"\"Return (m, n, k) as a descriptive string\"\"\"\n        return [\n            f\"{m}x{n}x{k}\"\n            for m, n, k in zip(self.get(\"m\"), self.get(\"n\"), self.get(\"k\"))\n        ]  # str\n\n    def get_mnk(self):\n        \"\"\"Return (m, n, k) as a tuple\"\"\"\n        return self.get(\"m\"), self.get(\"n\"), self.get(\"k\")  # (int, int, int)\n\n    def get_mxnxk(self):\n        \"\"\"Return the product m*n*k\"\"\"\n        return self.get(\"m\") * self.get(\"n\") * self.get(\"k\")  # int\n\n    # ===============================================================================\n    # Launch parameters\n    def get_need_sync(self):\n        \"\"\"(mn > warp_size || mk > warp_size || kn > warp_size || threads > warp_size)\"\"\"\n        return (\n            np.where(self.get(\"size_c\") > self.gpu[\"Threads_/_Warp\"], True, False)\n            | np.where(self.get(\"size_a\") > self.gpu[\"Threads_/_Warp\"], True, False)\n            | np.where(self.get(\"size_b\") > self.gpu[\"Threads_/_Warp\"], True, False)\n            | np.where(self.get(\"threads\") > self.gpu[\"Threads_/_Warp\"], True, False)\n        )  # bool\n\n    def get_nblks(self):\n        \"\"\"Number of thread blocks needed to multiply all matrices on the stack\"\"\"\n        return np.ceil(self.autotuning[\"stack_size\"] / self.get(\"grouping\")).astype(\n            \"int\"\n        )  # int\n\n    def get_warps_per_blk(self):\n        \"\"\"Number of warps per block\"\"\"\n        return np.ceil(self.get(\"threads\") / self.gpu[\"Threads_/_Warp\"]).astype(\n            \"int\"\n        )  # int\n\n    def get_nwarps(self):\n        \"\"\"Total number of warps needed to multiply all matrices on the stack\"\"\"\n        return self.get(\"warps_per_blk\") * self.get(\"nblks\")  # int\n\n    def get_sm_desired(self):\n        \"\"\"\n        Number of multiprocessors desired to multiply all matrices on the stack.\n        For more details, see https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#launch-bounds\n        \"\"\"\n        return np.ceil(self.get(\"nblks\") / self.get(\"minblocks\")).astype(\"int\")  # int\n\n    def get_threads_per_blk(self):\n        \"\"\"Number of threads per block. Sometimes named 'threads', sometimes 'threads_per_blk'\"\"\"\n        return self.get(\"threads\")  # int\n\n    def get_nthreads(self):\n        \"\"\"Total number of threads needed to multiply all matrices on the stack\"\"\"\n        return self.get(\"threads\") * self.get(\"nblks\")  # int\n\n    # ===============================================================================\n    # Resource usage (common)\n    def get_ru_param_stack_unroll_factor(self):\n        \"\"\"Number of executions of the body of the loop that loads data from the parameter stack\"\"\"\n        return np.ceil(self.get(\"grouping\") / self.get(\"threads\")).astype(\"int\")  # int\n\n    def get_n_iter(self):\n        \"\"\"\n        Number of benchmark repetitions in autotuning procedure.\n        Corresponds to the variable `n_iter` in function `libcusmm_benchmark` in file `libcusmm_benchmark.cu`\n        \"\"\"\n        return np.maximum(\n            3, (12500 // (self.get(\"m\") * self.get(\"n\") * self.get(\"k\")))\n        )  # int\n\n    def get_Gflops(self):\n        \"\"\"Number of floating point operations in [Gflops] carried out during autotuning\"\"\"\n        return (\n            self.get(\"n_iter\")\n            * self.autotuning[\"stack_size\"]\n            * self.get(\"m\")\n            * self.get(\"n\")\n            * self.get(\"k\")\n            * 2\n            * 10 ** (-9)\n        )  # float\n\n    # ===============================================================================\n    # Resource occupancy estimations\n    def get_nblocks_per_sm_lim_blks_warps(self):\n        \"\"\"Resource occupations in terms of warps and blocks (Follows CUDA calculator sheet)\"\"\"\n        return np.minimum(\n            self.gpu[\"Thread_Blocks_/_Multiprocessor\"],\n            np.floor(self.gpu[\"Warps_/_Multiprocessor\"] / self.get(\"warps_per_blk\")),\n        )  # int\n\n    # ===============================================================================\n    # Resource usage (tiny, small, medium)\n    def get_ru_tinysmallmed_unroll_factor_a(self):\n        \"\"\"loop unroll factor of the loop on m*k\"\"\"\n        return np.ceil(self.get(\"size_a\") / self.get(\"threads\")).astype(\"int\")  # int\n\n    def get_ru_tinysmallmed_unroll_factor_b(self):\n        \"\"\"loop unroll factor of the loop on k*m\"\"\"\n        return np.ceil(self.get(\"size_b\") / self.get(\"threads\")).astype(\"int\")  # int\n\n    def get_ru_tinysmallmed_unroll_factor_a_total(self):\n        \"\"\"loop unroll factor multiplied by number of times the loop is run\"\"\"\n        return self.get(\"ru_tinysmallmed_unroll_factor_a\") * self.get(\"grouping\")  # int\n\n    def get_ru_tinysmallmed_unroll_factor_b_total(self):\n        \"\"\"loop unroll factor multiplied by number of times the loop is run\"\"\"\n        return self.get(\"ru_tinysmallmed_unroll_factor_b\") * self.get(\"grouping\")  # int\n\n    def get_ru_tinysmallmed_unroll_factor_c_total(self):\n        \"\"\"loop unroll factor of the loop writing back to C multiplied by number of times the loop is run\"\"\"\n        return self.get(\"k\") * self.get(\"grouping\")  # int\n\n    # ===============================================================================\n    # Resource usage (tiny)\n    def get_ru_tiny_max_parallel_work(self):\n        \"\"\"Total number of iterations in each loop\"\"\"\n        return np.maximum.reduce(\n            [\n                self.get(\"grouping\"),\n                self.get(\"size_a\"),\n                self.get(\"size_b\"),\n                self.get(\"size_c\"),\n            ]\n        )  # int\n\n    def get_ru_tiny_min_threads(self):\n        \"\"\"Minimum number of threads required to run the kernel and produce correct results\"\"\"\n        return self.get(\"size_c\")  # int\n\n    def get_ru_tiny_buf_size(self):\n        \"\"\"Buffer size\"\"\"\n        return self.get(\"k\") * (self.get(\"m\") + self.get(\"n\"))  # int\n\n    def get_ru_tiny_smem_per_block(self):\n        \"\"\"Shared memory usage per block (estimate)\"\"\"\n        return (self.get(\"ru_tiny_buf_size\") * self.autotuning[\"sizeof_double\"]) + (\n            self.autotuning[\"npars\"]\n            * self.get(\"grouping\")\n            * self.autotuning[\"sizeof_int\"]\n        )  # int\n\n    def get_ru_tiny_nblks_per_sm(self):\n        \"\"\"\n        Occupancy estimation: assumption (verified on a sample of mnks): nblks is always limited by number of threads\n        for algorithm tiny\n        \"\"\"\n        return self.get(\"nblocks_per_sm_lim_blks_warps\")  # int\n\n    def get_ru_tiny_nwarps_per_sm(self):\n        \"\"\"Number of wars per multiprocessor\"\"\"\n        return self.get(\"ru_tiny_nblks_per_sm\") * self.get(\"warps_per_blk\")  # int\n\n    def get_ru_tiny_nsm(self):\n        \"\"\"Number of multiprocessors\"\"\"\n        return np.ceil(self.get(\"nblks\") / self.get(\"ru_tiny_nblks_per_sm\")).astype(\n            \"int\"\n        )  # int\n\n    def get_ru_tiny_ngpu(self):\n        \"\"\"Number of GPUs\"\"\"\n        return np.ceil(self.get(\"ru_tiny_nsm\") / self.gpu[\"Multiprocessors\"]).astype(\n            \"int\"\n        )  # int\n\n    def get_ru_tiny_occupancy(self):\n        return (\n            self.get(\"ru_tiny_nwarps_per_sm\") / self.gpu[\"Warps_/_Multiprocessor\"]\n        )  # float\n\n    def get_tiny_estimate_Nmem_shared(self):\n        \"\"\"\n        Estimation of the number of cycles required for all the shared memory accesses by a thread,\n        based on Kothapalli et al., \"A performance prediction model for the CUDA GPGPU platform\"\n        \"\"\"\n        return 3 * self.get(\"grouping\") + self.get(\"grouping\") * (\n            3\n            + self.get(\"ru_tinysmallmed_unroll_factor_a\")\n            + self.get(\"ru_tinysmallmed_unroll_factor_b\")\n            + 2 * self.get(\"k\")\n        )  # int\n\n    def get_tiny_estimate_Nmem_global(self):\n        \"\"\"\n        Estimation of the number of cycles required for all the global memory accesses by a thread,\n        based on Kothapalli et al., \"A performance prediction model for the CUDA GPGPU platform\"\n        \"\"\"\n        return 3 * self.get(\"grouping\") + self.get(\"grouping\") * (\n            self.get(\"ru_tinysmallmed_unroll_factor_a\")\n            + self.get(\"ru_tinysmallmed_unroll_factor_b\")\n        )  # int\n\n    def get_tiny_estimate_Nmem(self):\n        \"\"\"\n        Estimation of the number of cycles required for all the memory accesses (shared and global) by a thread,\n        based on Kothapalli et al., \"A performance prediction model for the CUDA GPGPU platform\"\n        \"\"\"\n        return self.gpu[\"Global_memory_access_latency\"] * self.get(\n            \"tiny_estimate_Nmem_global\"\n        ) + self.gpu[\"Shared_memory_access_latency\"] * self.get(\n            \"tiny_estimate_Nmem_shared\"\n        )\n        # int\n\n    def get_tiny_estimate_perf(self):\n        \"\"\"\n        Estimation of the kernel's performance,\n        based on Kothapalli et al., \"A performance prediction model for the CUDA GPGPU platform\"\n        \"\"\"\n        c_K = self.get(\"nblks\") * self.get(\"threads\") * self.get(\"tiny_estimate_Nmem\")\n        return (\n            self.get(\"Gflops\") / c_K\n        )  # ignore clock rate since it is a constant factor\n        # float\n\n    # ===============================================================================\n    # Resource usage (small, medium, large)\n    def get_ru_smallmedlarge_cmax(self):\n        return np.ceil(self.get(\"n\") / self.get(\"tile_n\")).astype(\"int\")  # int\n\n    def get_ru_smallmedlarge_rmax(self):\n        return np.ceil(self.get(\"m\") / self.get(\"tile_m\")).astype(\"int\")  # int\n\n    def get_ru_smallmedlarge_T(self):\n        return self.get(\"tile_m\") * self.get(\"tile_n\")  # int\n\n    def get_ru_smallmedlarge_min_threads(self):\n        return self.get(\"ru_smallmedlarge_cmax\") * self.get(\n            \"ru_smallmedlarge_rmax\"\n        )  # int\n\n    # ===============================================================================\n    # Resource usage estimation and loop counts (small, medium)\n    def get_ru_smallmed_tm_max(self):\n        return self.get(\"m\")  # int\n\n    def get_ru_smallmed_tn_max(self):\n        return self.get(\"n\")  # int\n\n    def get_ru_smallmed_unroll_factor_c(self):\n        \"\"\"loop unroll factor of the loop on m*n\"\"\"\n        return np.ceil(self.get(\"size_c\") / self.get(\"threads\")).astype(\"int\")  # int\n\n    def get_ru_smallmed_loop_matmul(self):\n        \"\"\"Actual multiplication loop\"\"\"\n        return self.get(\"k\") * self.get(\"tile_m\") * self.get(\"tile_n\")  # int\n\n    def get_ru_smallmed_max_parallel_work(self):\n        \"\"\"Maximum parallel work\"\"\"\n        return np.maximum.reduce(\n            [\n                self.get(\"grouping\"),\n                self.get(\"size_a\"),\n                self.get(\"size_b\"),\n                self.get(\"size_c\"),\n                self.get(\"ru_smallmedlarge_min_threads\"),\n            ]  # int\n        )\n\n    def get_ru_smallmed_buf_size(self):\n        \"\"\"Buffer size\"\"\"\n        intermediate1 = self.get(\"size_a\") + self.get(\"k\") * self.get(\n            \"tile_n\"\n        ) * self.get(\"ru_smallmedlarge_cmax\")\n        intermediate2 = (\n            self.get(\"tile_m\") * self.get(\"ru_smallmedlarge_rmax\") * self.get(\"k\") + 1\n        )\n        return np.maximum.reduce(\n            [self.get(\"size_c\"), intermediate1, intermediate2]\n        )  # int\n\n    def get_ru_smallmed_smem_per_block(self):\n        \"\"\"Shared memory usage per block\"\"\"\n        return (self.get(\"ru_smallmed_buf_size\") * self.autotuning[\"sizeof_double\"]) + (\n            self.autotuning[\"npars\"]\n            * self.get(\"grouping\")\n            * self.autotuning[\"sizeof_int\"]\n        )  # int\n\n    def get_ru_smallmed_regs_per_thread(self):\n        \"\"\"Register usage per thread (estimated)\"\"\"\n        return (\n            self.get(\"tile_m\") * self.get(\"tile_n\")\n            + (self.get(\"m\") * self.get(\"k\") + self.get(\"threads\") - 1)\n            // self.get(\"threads\")\n            + (self.get(\"k\") * self.get(\"n\") + self.get(\"threads\") - 1)\n            // self.get(\"threads\")\n        )  # int\n\n    # ===============================================================================\n    # Resource usage (medium)\n    # Loop bounds\n    def get_load_unroll_factor_1(self):\n        return self.get(\"size_a\") // self.get(\"threads\") + 1  # int\n\n    def get_load_unroll_factor_2(self):\n        return self.get(\"size_b\") // self.get(\"threads\") + 1  # int\n\n    def get_n_mkloads(self):\n        return self.get(\"size_a\") // (\n            self.get(\"load_unroll_factor_1\") * self.get(\"threads\")\n        )  # int\n\n    def get_n_knloads(self):\n        return self.get(\"size_b\") // (\n            self.get(\"load_unroll_factor_2\") * self.get(\"threads\")\n        )  # int\n\n    # ===============================================================================\n    # Resource usage (large)\n    def get_ru_large_Pa(self):\n        \"\"\"Input slab size\"\"\"\n        return self.get(\"m\") * self.get(\"w\")  # int\n\n    def get_ru_large_Pb(self):\n        \"\"\"Input slab size\"\"\"\n        return self.get(\"w\") * self.get(\"n\")  # int\n\n    def get_ru_large_Pc(self):\n        \"\"\"Output slab size\"\"\"\n        return self.get(\"m\") * self.get(\"v\")  # int\n\n    def get_ru_large_unroll_factor_a(self):\n        return np.ceil(self.get(\"ru_large_Pa\") / self.get(\"threads\")).astype(\n            \"int\"\n        )  # int\n\n    def get_ru_large_unroll_factor_b(self):\n        return np.ceil(self.get(\"ru_large_Pb\") / self.get(\"threads\")).astype(\n            \"int\"\n        )  # int\n\n    def get_ru_large_unroll_factor_c(self):\n        return np.ceil(self.get(\"ru_large_Pc\") / self.get(\"threads\")).astype(\n            \"int\"\n        )  # int\n\n    def get_ru_large_loop_matmul(self):\n        return self.get(\"w\") * self.get(\"tile_m\") * self.get(\"tile_n\")  # int\n\n    def get_ru_large_max_concurrent_work(self):\n        \"\"\"Maximum concurrent work\"\"\"\n        return np.maximum.reduce(\n            [\n                self.get(\"grouping\"),\n                self.get(\"ru_large_Pa\"),\n                self.get(\"ru_large_Pb\"),\n                self.get(\"ru_large_Pc\"),\n                self.get(\"ru_smallmedlarge_T\"),\n            ]\n        )  # int\n\n    def get_ru_large_regs_per_thread(self):\n        \"\"\"Register usage per thread (estimated)\"\"\"\n        return (\n            self.get(\"tile_m\") * self.get(\"tile_n\")\n            + (self.get(\"w\") * self.get(\"m\") + self.get(\"threads\") - 1)\n            // self.get(\"threads\")\n            + (self.get(\"w\") * self.get(\"n\") + self.get(\"threads\") - 1)\n            // self.get(\"threads\")\n        )  # int\n\n    def get_ru_large_n_DB_iter(self):\n        \"\"\"Number of double-buffering iterations\"\"\"\n        return self.get(\"k\") // (2 * self.get(\"w\"))  # int\n\n    def get_ru_large_buf_size(self):\n        \"\"\"Buffer size\"\"\"\n        intermediate1 = (self.get(\"w\") - 1) * self.get(\"m\") + self.get(\n            \"ru_smallmedlarge_rmax\"\n        ) * self.get(\"tile_m\")\n        intermediate2 = (\n            self.get(\"m\") * self.get(\"w\")\n            + (self.get(\"w\") - 1) * self.get(\"n\")\n            + self.get(\"ru_smallmedlarge_cmax\") * self.get(\"tile_n\")\n        )\n        return np.maximum.reduce(\n            [self.get(\"ru_large_Pc\"), intermediate1, intermediate2]\n        )  # int\n\n    def get_ru_large_smem_per_block(self):\n        \"\"\"Shared memory usage per block\"\"\"\n        return (\n            self.get(\"ru_large_buf_size\") * self.autotuning[\"sizeof_double\"]\n            + self.autotuning[\"npars\"]\n            * self.get(\"grouping\")\n            * self.autotuning[\"sizeof_int\"]\n        )  # int\n"
  },
  {
    "path": "src/acc/libsmm_acc/kernels/smm_acc_transpose.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n/*****************************************************************************\n *  Authors: Peter Messmer <pmessmer@nvidia.com>,                            *\n *           Nikolay Markovskiy <nmarkovskiy@nvidia.com>                     *\n *****************************************************************************/\n\n#include \"smm_acc_common.h\"\n\n/*\n * Execution configuration:\n * gridDim.x = number of matrix blocks in this batched matrix transpose\n *           = length of the batched transpose stack\n * blockIdx.x = {0, ..., gridDim.x-1}\n * blockDim.x = 128 or the smallest multiple of warp_size larger or equal to m*n\n * threadIdx.x = {0, ..., blockDim.x-1}\n\n * Execute batched matrix transpose in place\n\n * Template parameters\n * --- m, n: pair of integers characterising the dimensions of the matrix to transpose\n\n * Function arguments\n * --- trs_stack: transpose stack (pointer to global memory):\n *     array of stack entries (indices), indicating where each matrix to transpose starts in the \"mat\" array\n * --- mat (pointer to global memory):\n *     arrays containing the values of the matrix to be transposed\n *     mat is column major: m = number of rows, n = number of columns\n\n * Algorithm specificities:\n * - 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.\n */\n\ntemplate<int m, int n> __global__ void transpose_d(int* trs_stack, double* mat) {\n  __shared__ double buf[m * n];\n\n  /* Get the offset in the transpose-stack that this block ID should handle */\n  int offset = trs_stack[blockIdx.x];\n\n  /* Loop over m*n matrix elements */\n  for (int i = threadIdx.x; i < m * n; i += blockDim.x) {\n    /* Load matrix elements into a temporary buffer */\n    buf[i] = mat[offset + i];\n  }\n  syncthreads();\n\n  /* Loop over elements of the matrix to be overwritten */\n  for (int i = threadIdx.x; i < m * n; i += blockDim.x) {\n    /* Compute old row and column index of matrix element */\n    int r_out = i % n;\n    int c_out = i / n;\n    /* Compute the corresponding old 1D index of matrix element */\n    int idx = r_out * m + c_out;\n    /* Overwrite the matrix element */\n    mat[offset + i] = buf[idx];\n  }\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/libcusmm/.gitignore",
    "content": "cusmm_kernels.h\n"
  },
  {
    "path": "src/acc/libsmm_acc/libcusmm/PACKAGE",
    "content": "{\n\"description\": \"Cuda accelerated Small Matrix Multiplications\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"kernels\", \"..\", \"../../include\"]\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/libsmm_acc.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved                          */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include \"parameters.h\"\n#include \"libsmm_acc.h\"\n#include \"libsmm_acc_benchmark.h\"\n#include \"smm_acc_kernels.h\"\n#include \"../cuda_hip/acc_blas.h\"\n#include \"../acc_libsmm.h\"\n\n#include <sstream>\n#include <fstream>\n#include <cstring>\n#include <algorithm>\n#include <array>\n#include <iostream>\n\n#if defined(_OPENMP)\n#  include <omp.h>\n#endif\n\n// MACRO HELPERS\n#define STRINGIFY_NX(x) #x\n#define STRINGIFY(x) STRINGIFY_NX(x)\n\n// The macro ARCH_OPTION, when expanded, is a string literal containing the\n// jit compiler option specifying the target architecture\n#if defined(__CUDA) || defined(__HIP_PLATFORM_NVCC__)\n#  define ARCH_OPTION_NAME \"--gpu-architecture=compute_\"\n#else\n#  define ARCH_OPTION_NAME \"--gpu-architecture=\"\n#endif\n#define ARCH_OPTION ARCH_OPTION_NAME STRINGIFY(ARCH_NUMBER)\n\n\n//===========================================================================\ninline int launch_kernel_from_handle(\n  ACC_DRV(function) const& kern_func, int nblks, int threads, ACC_DRV(stream) stream, void** args) {\n  ACC_DRV_CALL(LaunchJITKernel, (kern_func, // kernel function,\n                                  nblks, 1, 1, // grid dimension x, y, z\n                                  threads, 1, 1, // block dimension x, y, z\n                                  0, stream, // shared memory size and stream\n                                  args, NULL)); // arguments\n  return 0;\n}\n\n//===========================================================================\ninline int validate_kernel(ACC_DRV(function) & kern_func, ACC_DRV(stream) stream, int threads, int grouping, int m, int n, int k) {\n  libsmm_acc_benchmark_t* h;\n  libsmm_acc_benchmark_init(&h, test, m, n, k);\n\n  // Run the matrix-matrix multiplication on the CPU\n  memset(h->mat_c, 0, h->n_c * m * n * sizeof(double));\n  matInit(h->mat_a, h->n_a, m, k, 42);\n  matInit(h->mat_b, h->n_b, k, n, 24);\n  stackInit(h->stack, h->n_stack, h->n_c, h->n_a, h->n_b, m, n, k);\n\n  stackCalc(h->stack, h->n_stack, h->mat_c, h->mat_a, h->mat_b, m, n, k);\n  double sumCPU = checkSum(h->mat_c, h->n_c, m, n);\n\n  // Run the matrix-matrix multiplication kernel on the GPU\n  ACC_API_CALL(Memcpy, (h->d_mat_a, h->mat_a, h->n_a * m * k * sizeof(double), ACC(MemcpyHostToDevice)));\n  ACC_API_CALL(Memcpy, (h->d_mat_b, h->mat_b, h->n_b * k * n * sizeof(double), ACC(MemcpyHostToDevice)));\n  ACC_API_CALL(Memcpy, (h->d_stack, h->stack, h->n_stack * 3 * sizeof(int), ACC(MemcpyHostToDevice)));\n  ACC_API_CALL(Memset, (h->d_mat_c, 0, h->n_c * m * n * sizeof(double)));\n\n  void* args[] = {&h->d_stack, &h->n_stack, &h->d_mat_a, &h->d_mat_b, &h->d_mat_c};\n  launch_kernel_from_handle(kern_func, ((h->n_stack + grouping - 1) / grouping), threads, stream, args);\n  ACC_API_CALL(Memcpy, (h->mat_c, h->d_mat_c, h->n_c * m * n * sizeof(double), ACC(MemcpyDeviceToHost)));\n\n  // Validate the kernel based on results\n  double sumGPU = checkSum(h->mat_c, h->n_c, m, n);\n  libsmm_acc_benchmark_finalize(h);\n  if (sumGPU != sumCPU) {\n    //    printf(\"Kernel validation failed for multiplication kernel %ix%ix%i\\nchecksum CPU: %g, checksum GPU: %g\\nchecksum_diff: %g\\n\",\n    //      m, n, k, sumCPU, sumGPU, sumGPU - sumCPU);\n    return 1;\n  }\n  return 0;\n}\n\n//===========================================================================\ninline void jit_kernel(ACC_DRV(function) & kern_func, libsmm_acc_algo algo, int tile_m, int tile_n, int w, int v, int threads,\n  int grouping, int minblocks, int m, int n, int k) {\n  std::string routineN = LIBSMM_ACC_PROCESS_ROUTINE_NAME_STR;\n  int handle;\n\n  timeset(routineN, handle);\n\n  // Get the code and the lowered name corresponding the kernel to launch\n  std::string kernel_code = smm_acc_common; // prepend include file content to code\n  std::string kernel_name;\n  switch (algo) {\n    case 1:\n      kernel_code += smm_acc_dnt_largeDB1;\n      kernel_name = \"smm_acc_dnt_largeDB1<\" + std::to_string(m) + \", \" + std::to_string(n) + \", \" + std::to_string(k) + \", \" +\n                    std::to_string(tile_m) + \", \" + std::to_string(tile_n) + \", \" + std::to_string(w) + \", \" + std::to_string(v) +\n                    \", \" + std::to_string(threads) + \", \" + std::to_string(grouping) + \", \" + std::to_string(minblocks) + \">\";\n      break;\n    case 2:\n      kernel_code += smm_acc_dnt_largeDB2;\n      kernel_name = \"smm_acc_dnt_largeDB2<\" + std::to_string(m) + \", \" + std::to_string(n) + \", \" + std::to_string(k) + \", \" +\n                    std::to_string(tile_m) + \", \" + std::to_string(tile_n) + \", \" + std::to_string(w) + \", \" + std::to_string(v) +\n                    \", \" + std::to_string(threads) + \", \" + std::to_string(grouping) + \", \" + std::to_string(minblocks) + \">\";\n      break;\n    case 3:\n      kernel_code += smm_acc_dnt_medium;\n      kernel_name = \"smm_acc_dnt_medium<\" + std::to_string(m) + \", \" + std::to_string(n) + \", \" + std::to_string(k) + \", \" +\n                    std::to_string(tile_m) + \", \" + std::to_string(tile_n) + \", \" + std::to_string(threads) + \", \" +\n                    std::to_string(grouping) + \", \" + std::to_string(minblocks) + \">\";\n      break;\n    case 4:\n      kernel_code += smm_acc_dnt_small;\n      kernel_name = \"smm_acc_dnt_small<\" + std::to_string(m) + \", \" + std::to_string(n) + \", \" + std::to_string(k) + \", \" +\n                    std::to_string(tile_m) + \", \" + std::to_string(tile_n) + \", \" + std::to_string(threads) + \", \" +\n                    std::to_string(grouping) + \", \" + std::to_string(minblocks) + \">\";\n      break;\n    case 5:\n      kernel_code += smm_acc_dnt_tiny;\n      kernel_name = \"smm_acc_dnt_tiny<\" + std::to_string(m) + \", \" + std::to_string(n) + \", \" + std::to_string(k) + \", \" +\n                    std::to_string(threads) + \", \" + std::to_string(grouping) + \", \" + std::to_string(minblocks) + \">\";\n      break;\n    default: printf(\"\\nERROR: algorithm number %i is not encoded.\\n\", algo); exit(1);\n  }\n\n  // Create JIT program\n  ACC_RTC(Program) kernel_program;\n  ACC_RTC_CALL(CreateProgram, (&kernel_program, kernel_code.c_str(), \"smm_acc_kernel.cu\", 0, NULL, NULL));\n\n  // Add lowered name\n  ACC_RTC_CALL(AddNameExpression, (kernel_program, kernel_name.c_str()));\n\n  // (JIT-)compile kernel program\n#if defined(__CUDA) || defined(__HIP_PLATFORM_NVCC__)\n  const char* compileOptions[] = {\"-D__CUDA\", \"-w\", ARCH_OPTION};\n  size_t nOptions = 3;\n#else\n  const char* compileOptions[] = {\"-D__HIP\", \"-O3\", \"-w\", \"-munsafe-fp-atomics\"};\n  size_t nOptions = 4;\n#endif\n  ACC_RTC(Result) compileResult = ACC_RTC(CompileProgram)(kernel_program, nOptions, compileOptions);\n  if (compileResult != ACC_RTC_SUCCESS) {\n    // if compilation fails:\n    // print source, compilation options and compilation log\n    size_t logSize;\n    ACC_RTC_CALL(GetProgramLogSize, (kernel_program, &logSize));\n    char* log = new char[logSize];\n    ACC_RTC_CALL(GetProgramLog, (kernel_program, log));\n    std::cout << \"---------------------------------------------------------------------------------\" << std::endl\n              << \"Compile source : \" << std::endl\n              << kernel_code.c_str() << std::endl\n              << \"---------------------------------------------------------------------------------\" << std::endl\n              << \"Compile lowered name : \" << kernel_name.c_str() << std::endl\n              << \"---------------------------------------------------------------------------------\" << std::endl\n              << \"Compile options : \" << *compileOptions << std::endl\n              << \"---------------------------------------------------------------------------------\" << std::endl\n              << \"Compile log : \" << std::endl\n              << log << '\\n';\n    delete[] log;\n    exit(1);\n  }\n\n  // Obtain PTX from the program.\n  size_t codeSize;\n  ACC_RTC_CALL(GetLowLevelCodeSize, (kernel_program, &codeSize));\n  char* code = new char[codeSize];\n  ACC_RTC_CALL(GetLowLevelCode, (kernel_program, code));\n\n  // Get lowered name\n  const char* lowered_kernel_name;\n  ACC_RTC_CALL(GetLoweredName, (kernel_program, kernel_name.c_str(), &lowered_kernel_name));\n\n  // Get pointer to kernel from PTX\n  ACC_DRV(module) module;\n  ACC_DRV_CALL(ModuleLoadDataEx, (&module, code, 0, 0, 0));\n  delete[] code;\n  ACC_DRV_CALL(ModuleGetFunction, (&kern_func, module, lowered_kernel_name));\n\n  // Set shared memory configuration\n#if defined(__CUDA)\n  ACC_DRV_CALL(FuncSetSharedMemConfig, (kern_func, ACC_DRV(SharedMemBankSizeEightByte)));\n#endif\n\n  // Destroy program\n  ACC_RTC_CALL(DestroyProgram, (&kernel_program));\n\n  timestop(handle);\n}\n\n\nkernel_map_iterator add_kernel_handle_to_jitted_kernels(\n  ACC_DRV(function) kern_func, ACC_DRV(stream) stream, Triplet h_mnk, int& threads, int& grouping, bool& generated_acc_untuned) {\n  kernel_map_iterator kernel_it = kernel_handles.end();\n\n  // Check if the kernel was already generated and failed or if it is too big\n  if (failed_acc_kernels.find(h_mnk) != failed_acc_kernels.end()) return kernel_it;\n\n  libsmm_acc_algo algo;\n  int tile_m, tile_n, w, v, minblocks;\n\n  // Check whether autotuned parameters are given for this kernel, and if so, retrieve them\n  if (ht.find(h_mnk) != ht.end()) {\n    // Retrieve launching parameters\n    const KernelParameters params = ht.at(h_mnk);\n    algo = libsmm_acc_algo(params[0]); // enum {largeDB1, largeDB2, medium, small, tiny}\n    tile_m = params[1];\n    tile_n = params[2];\n    w = params[3];\n    v = params[4];\n    threads = params[5];\n    grouping = params[6];\n    minblocks = params[7];\n    generated_acc_untuned = false;\n  }\n  else if (h_mnk[0] < 50 && h_mnk[1] < 50 && h_mnk[2] < 50) { // Use a default untuned kernel\n    algo = medium;\n    tile_m = 2;\n    tile_n = 2;\n    w = 0;\n    v = 0;\n    threads = 256;\n    grouping = 30;\n    minblocks = 1;\n    generated_acc_untuned = true;\n  }\n  else {\n    failed_acc_kernels.insert(h_mnk);\n    return kernel_it;\n  }\n\n  // JIT and validate the kernel\n  jit_kernel(kern_func, algo, tile_m, tile_n, w, v, threads, grouping, minblocks, h_mnk[0], h_mnk[1], h_mnk[2]);\n  if (validate_kernel(kern_func, stream, threads, grouping, h_mnk[0], h_mnk[1], h_mnk[2]) == 0) {\n    // Store the handle to the JIT-ed kernel\n    auto kernel_it_emplaced = kernel_handles.emplace(h_mnk, kernel_launcher(kern_func, threads, grouping));\n    kernel_it = kernel_it_emplaced.first;\n  }\n  else {\n    // The generated kernel gave wrong values, discard it\n    free(kern_func);\n    generated_acc_untuned = false;\n    failed_acc_kernels.insert(h_mnk);\n  }\n\n  return kernel_it;\n}\n\n//===========================================================================\nint 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,\n  const double* a_data, const double* b_data, double* c_data) {\n#if defined _OPENMP\n  int ithread = omp_get_thread_num();\n#else\n  int ithread = 0;\n#endif\n\n  int istat = 0;\n\n  char transb = 'N';\n  if (n <= max_kernel_dim && k <= max_kernel_dim) {\n    transb = 'T';\n  }\n\n  for (int stack_entry = 0; stack_entry < stack_size && istat == 0; stack_entry++) {\n    istat = acc_blas_dgemm(acc_blashandles[ithread], 'N', transb, m, n, k, param_stack[7 * stack_entry + 3] - 1,\n      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);\n  }\n  ACC_API_CALL(StreamSynchronize, (stream));\n\n  return istat;\n}\n\n//===========================================================================\nint 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,\n  const double* b_data, double* c_data) {\n  ACC_DRV(function) kern_func = NULL;\n  int threads, grouping;\n  Triplet h_mnk = {m, n, k};\n  kernel_map_iterator kernel_it;\n\n  bool generated_acc_untuned = false;\n\n#if defined _OPENMP\n#  pragma omp critical(jit_multiplication)\n#endif\n  {\n    // Look up the kernel in the table of already JITed kernels\n    kernel_it = kernel_handles.find(h_mnk);\n    if (kernel_it == kernel_handles.end()) { // the kernel has not been JIT-ed yet\n\n      kernel_it = add_kernel_handle_to_jitted_kernels(kern_func, stream, h_mnk, threads, grouping, generated_acc_untuned);\n\n    } // if the kernel could be jited successfully, the kernel_it iterator now points to the kernel_launcher.\n    // if this wasn't possible, is set to kernel_handles.end()\n  }\n\n  if (kernel_it == kernel_handles.end()) { // the kernel could not be JIT-ed, so we should fall back to CPU\n\n    return -20; // fall back to CPU\n  }\n  else {\n    // Retrieve kernel launching parameters\n    kern_func = kernel_it->second.kernel_function;\n    threads = kernel_it->second.threads;\n    grouping = kernel_it->second.grouping;\n\n    // Construct argument pointer list and launch kernel\n    void* args[] = {&param_stack, &stack_size, &a_data, &b_data, &c_data};\n\n    int return_value = launch_kernel_from_handle(kern_func, ((stack_size + grouping - 1) / grouping), threads, stream, args);\n\n    return ((return_value != 0) or (!generated_acc_untuned)) ? return_value : 10; // return 10 for generated default untuned kernel\n  }\n}\n\n//===========================================================================\nint libsmm_acc_process(const int* param_stack_host, const int* param_stack_dev, int stack_size, libsmm_acc_data_t datatype,\n  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,\n  void* c_stream) {\n  if (def_mnk != 1) return -1; // inhomogeneous stacks not supported\n  if (datatype == dbcsr_type_real_8) {\n    if (m > max_kernel_dim || n > max_kernel_dim || k > max_kernel_dim)\n      // maximum size over any dimension\n      return (libsmm_acc_process_blas((const int*)param_stack_host, stack_size, *((ACC_DRV(stream)*)c_stream), m, n, k,\n        max_kernel_dim, (const double*)a_data, (const double*)b_data, (double*)c_data));\n    else {\n      return (libsmm_acc_process_d((const int*)param_stack_dev, stack_size, *((ACC_DRV(stream)*)stack_stream), m, n, k,\n        (const double*)a_data, (const double*)b_data, (double*)c_data));\n    }\n  }\n  return -10; // datatype not supported\n}\n\n//===========================================================================\ninline void validate_transpose_kernel(ACC_DRV(function) & kern_func, int threads, ACC_DRV(stream) stream, int m, int n) {\n  libsmm_acc_benchmark_t* h;\n  libsmm_acc_benchmark_init(&h, test, m, 0, n);\n\n  // Initialize arrays\n  matInit(h->mat_a, h->n_a, m, n, 42);\n  memset(h->mat_trs_a, 0, h->n_a * m * n * sizeof(double));\n  stackInitTransp(h->stack_trs_a, h->n_stack_trs_a, m, n);\n\n  // Run the matrix-matrix multiplication on the CPU\n  stackTransp(h->stack_trs_a, h->n_stack_trs_a, h->mat_a, h->mat_trs_a, m, n);\n  double sumCPU = checkSumTransp(h->mat_trs_a, h->n_stack_trs_a, m, n);\n\n  // Run the matrix-matrix multiplication kernel on the GPU\n  ACC_API_CALL(Memcpy, (h->d_mat_a, h->mat_a, h->n_a * m * n * sizeof(double), ACC(MemcpyHostToDevice)));\n  ACC_API_CALL(Memcpy, (h->d_stack_trs_a, h->stack_trs_a, h->n_stack_trs_a * sizeof(int), ACC(MemcpyHostToDevice)));\n\n  void* args[] = {&h->d_stack_trs_a, &h->d_mat_a};\n  launch_kernel_from_handle(kern_func, h->n_stack_trs_a, threads, stream, args);\n  ACC_API_CALL(Memcpy, (h->mat_trs_a, h->d_mat_a, h->n_a * m * n * sizeof(double), ACC(MemcpyDeviceToHost)));\n\n  // Validate the kernel based on results\n  double sumGPU = checkSumTransp(h->mat_trs_a, h->n_stack_trs_a, m, n);\n  libsmm_acc_benchmark_finalize(h);\n  if (sumGPU != sumCPU) {\n    printf(\"Kernel validation failed for transpose kernel %ix%i\\nchecksum CPU: %g, checksum GPU: %g\\nchecksum_diff: %g\\n\", m, n,\n      sumCPU, sumGPU, sumGPU - sumCPU);\n    exit(1);\n  }\n}\n\n//===========================================================================\nvoid jit_transpose_handle(ACC_DRV(function) & kern_func, int m, int n) {\n  std::string routineN = LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_STR;\n  int handle;\n\n  timeset(routineN, handle);\n\n  // Create nvrtcProgram\n  ACC_RTC(Program) kernel_program;\n  std::string transpose_code = smm_acc_common + smm_acc_transpose;\n  ACC_RTC_CALL(CreateProgram, (&kernel_program, transpose_code.c_str(), \"transpose_kernel.cu\", 0, NULL, NULL));\n\n  // Add lowered name\n  std::string kernel_name = \"transpose_d<\" + std::to_string(m) + \", \" + std::to_string(n) + \">\";\n  ACC_RTC_CALL(AddNameExpression, (kernel_program, kernel_name.c_str()));\n\n  // (JIT-)compile\n#if defined(__CUDA) || defined(__HIP_PLATFORM_NVCC__)\n  const char* compileOptions[] = {\"-D__CUDA\", \"-w\", ARCH_OPTION};\n  size_t nOptions = 3;\n#else\n  const char* compileOptions[] = {\"-D__HIP\"};\n  size_t nOptions = 1;\n#endif\n  ACC_RTC(Result) compileResult = ACC_RTC(CompileProgram)(kernel_program, nOptions, compileOptions);\n  if (compileResult != ACC_RTC_SUCCESS) {\n    // if compilation fails:\n    // print source, compilation options and compilation log\n    size_t logSize;\n    ACC_RTC_CALL(GetProgramLogSize, (kernel_program, &logSize));\n    char* log = new char[logSize];\n    ACC_RTC_CALL(GetProgramLog, (kernel_program, log));\n    std::cout << \"---------------------------------------------------------------------------------\" << std::endl\n              << \"Compile source : \" << std::endl\n              << transpose_code.c_str() << std::endl\n              << \"---------------------------------------------------------------------------------\" << std::endl\n              << \"Compile lowered name : \" << kernel_name.c_str() << std::endl\n              << \"---------------------------------------------------------------------------------\" << std::endl\n              << \"Compile options : \" << *compileOptions << std::endl\n              << \"---------------------------------------------------------------------------------\" << std::endl\n              << \"Compile log : \" << std::endl\n              << log << '\\n';\n    delete[] log;\n    exit(1);\n  }\n\n  // Obtain PTX from the program.\n  size_t codeSize;\n  ACC_RTC_CALL(GetLowLevelCodeSize, (kernel_program, &codeSize));\n  char* code = new char[codeSize];\n  ACC_RTC_CALL(GetLowLevelCode, (kernel_program, code));\n\n  // Get lowered name\n  const char* lowered_kernel_name;\n  ACC_RTC_CALL(GetLoweredName, (kernel_program, kernel_name.c_str(), &lowered_kernel_name));\n\n  // Get pointer to kernel from PTX\n  ACC_DRV(module) module;\n  ACC_DRV_CALL(ModuleLoadDataEx, (&module, code, 0, 0, 0));\n  delete[] code;\n  ACC_DRV_CALL(ModuleGetFunction, (&kern_func, module, lowered_kernel_name));\n\n  // Set shared memory configuration\n#if defined(__CUDA)\n  ACC_DRV_CALL(FuncSetSharedMemConfig, (kern_func, ACC_DRV(SharedMemBankSizeEightByte)));\n#endif\n\n  // Destroy program\n  ACC_RTC_CALL(DestroyProgram, (&kernel_program));\n\n  timestop(handle);\n}\n\n//===========================================================================\nint libsmm_acc_transpose_d(const int* trs_stack, int offset, int stack_size, double* buffer, int m, int n, ACC_DRV(stream) stream) {\n  ACC_DRV(function) kern_func;\n  int threads = 128;\n  if (m * n + warp_size <= 128) {\n    threads = m * n - (m * n % warp_size) + warp_size;\n  }\n\n  // Look up the kernel in the table of already JITed kernels\n  Triplet h_mnk = {m, n, 0};\n  std::unordered_map<std::array<int, 3>, ACC_DRV(function)>::iterator kernel_it;\n\n#if defined _OPENMP\n#  pragma omp critical(jit_transpose)\n#endif\n  {\n    kernel_it = transpose_handles.find(h_mnk);\n    if (kernel_it == transpose_handles.end()) { // the kernel has not been JIT-ed yet\n\n      // JIT and store a kernel for this transposition\n      jit_transpose_handle(kern_func, m, n);\n      validate_transpose_kernel(kern_func, threads, stream, m, n);\n      transpose_handles.emplace(h_mnk, kern_func);\n      kernel_it = transpose_handles.find(h_mnk);\n    }\n  }\n\n  // Construct argument pointer list and launch function\n  kern_func = kernel_it->second; // retrieve handle\n  const int* trs_stack_ = trs_stack + offset;\n  void* args[] = {&trs_stack_, &buffer};\n\n  return launch_kernel_from_handle(kern_func, stack_size, threads, stream, args);\n}\n\n//===========================================================================\nextern \"C\" int libsmm_acc_transpose(const int* trs_stack, int offset, int stack_size, void* buffer, libsmm_acc_data_t datatype,\n  int m, int n, int max_kernel_dim, void* stream) {\n  if (datatype != dbcsr_type_real_8) return 0; // transpose not needed\n  if (m > max_kernel_dim || n > max_kernel_dim) return 0; // maximum size over any dimension\n  return libsmm_acc_transpose_d(trs_stack, offset, stack_size, (double*)buffer, m, n, *((ACC_DRV(stream)*)stream));\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/libsmm_acc.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef LIBSMM_ACC_H\n#define LIBSMM_ACC_H\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n#include \"../acc_libsmm.h\"\n#include \"parameters_utils.h\"\n#include \"libsmm_acc_init.h\"\n\n#include <cstdio>\n#include <unordered_map>\n#include <unordered_set>\n#include <vector>\n\nenum libsmm_acc_algo { largeDB1 = 1, largeDB2 = 2, medium = 3, small = 4, tiny = 5 };\n\nstruct kernel_launcher {\n  ACC_DRV(function) kernel_function;\n  int threads;\n  int grouping;\n  kernel_launcher(ACC_DRV(function) const& kf, int th, int gp) : kernel_function(kf), threads(th), grouping(gp) {}\n};\n\ntypedef std::unordered_map<Triplet, kernel_launcher>::iterator kernel_map_iterator;\n\nstatic std::unordered_map<Triplet, kernel_launcher> kernel_handles;\nstatic std::unordered_set<Triplet> failed_acc_kernels;\n\nint libsmm_acc_process_blas(const int* param_stack_host, int stack_size, ACC_DRV(stream) stream, int m, int n, int k,\n  const double* a_data, const double* b_data, double* c_data);\n\nint libsmm_acc_process_d(const int* param_stack_dev, int stack_size, ACC_DRV(stream) stream, int m, int n, int k,\n  const double* a_data, const double* b_data, double* c_data);\n\nstatic std::unordered_map<Triplet, ACC_DRV(function)> transpose_handles;\n\nint libsmm_acc_transpose_d(const int* trs_stack, int offset, int nblks, double* buffer, int m, int n, ACC_DRV(stream) stream);\n\n#endif /*LIBSMM_ACC_H*/\n"
  },
  {
    "path": "src/acc/libsmm_acc/libsmm_acc_benchmark.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include <cstring>\n#include <stdio.h>\n#include <stdlib.h>\n#include <algorithm>\n#include \"libsmm_acc_benchmark.h\"\n#ifdef __TUNING\n#  include \"parameters.h\"\n#endif\n#include \"parameters_utils.h\"\n#include \"../acc_bench.h\"\n\n\n//===========================================================================\n// Allocate memory and accelerator events\nvoid libsmm_acc_benchmark_init(libsmm_acc_benchmark_t** handle, benchmark_mode mode, int max_m, int max_n, int max_k) {\n  libsmm_acc_benchmark_t* h = (libsmm_acc_benchmark_t*)malloc(sizeof(libsmm_acc_benchmark_t));\n  *handle = h;\n  h->mode = mode;\n  h->n_a = 0;\n  h->n_b = 0;\n  h->n_c = 0;\n  h->n_stack = 0;\n  h->n_stack_trs_a = 0;\n  h->n_stack_trs_b = 0;\n\n  switch (h->mode) {\n    case tune:\n    case timing:\n      h->n_a = 10000;\n      h->n_b = 10000;\n      h->n_c = 1000;\n      h->n_stack = 16005;\n      h->n_stack_trs_a = 0;\n      h->n_stack_trs_b = 0;\n      break;\n    case test:\n      h->n_a = 100;\n      h->n_b = 100;\n      h->n_c = 10;\n      h->n_stack = 100;\n      h->n_stack_trs_a = h->n_a;\n      h->n_stack_trs_b = h->n_b;\n      break;\n  }\n\n  h->max_m = max_m;\n  h->max_n = max_n;\n  h->max_k = max_k;\n\n  h->mat_a = (double*)malloc(h->n_a * max_m * max_k * sizeof(double));\n  h->mat_trs_a = (double*)malloc(h->n_a * max_m * max_k * sizeof(double));\n  h->mat_b = (double*)malloc(h->n_b * max_k * max_n * sizeof(double));\n  h->mat_trs_b = (double*)malloc(h->n_b * max_k * max_n * sizeof(double));\n  h->mat_c = (double*)malloc(h->n_c * max_m * max_n * sizeof(double));\n  h->stack = (int*)malloc(h->n_stack * 3 * sizeof(int));\n  h->stack_trs_a = (int*)malloc(h->n_stack_trs_a * sizeof(int));\n  h->stack_trs_b = (int*)malloc(h->n_stack_trs_b * sizeof(int));\n\n  ACC_API_CALL(Malloc, (&h->d_mat_a, h->n_a * max_m * max_k * sizeof(double)));\n  ACC_API_CALL(Malloc, (&h->d_mat_b, h->n_b * max_k * max_n * sizeof(double)));\n  ACC_API_CALL(Malloc, (&h->d_mat_c, h->n_c * max_m * max_n * sizeof(double)));\n  ACC_API_CALL(Malloc, (&h->d_stack, h->n_stack * 3 * sizeof(int)));\n  ACC_API_CALL(Malloc, (&h->d_stack_trs_a, h->n_stack_trs_a * sizeof(int)));\n  ACC_API_CALL(Malloc, (&h->d_stack_trs_b, h->n_stack_trs_b * sizeof(int)));\n\n  ACC_DRV_CALL(EventCreate, (&h->t_start, ACC_DRV(EventDefault)));\n  ACC_DRV_CALL(EventCreate, (&h->t_stop, ACC_DRV(EventDefault)));\n}\n\n//===========================================================================\n// Free memory and accelerator events\nvoid libsmm_acc_benchmark_finalize(libsmm_acc_benchmark_t* handle) {\n  ACC_DRV_CALL(EventDestroy, (handle->t_start));\n  ACC_DRV_CALL(EventDestroy, (handle->t_stop));\n  ACC_API_CALL(Free, (handle->d_stack_trs_b));\n  ACC_API_CALL(Free, (handle->d_stack_trs_a));\n  ACC_API_CALL(Free, (handle->d_stack));\n  ACC_API_CALL(Free, (handle->d_mat_c));\n  ACC_API_CALL(Free, (handle->d_mat_b));\n  ACC_API_CALL(Free, (handle->d_mat_a));\n  free(handle->stack_trs_b);\n  free(handle->stack_trs_a);\n  free(handle->stack);\n  free(handle->mat_c);\n  free(handle->mat_trs_b);\n  free(handle->mat_b);\n  free(handle->mat_trs_a);\n  free(handle->mat_a);\n  free(handle);\n}\n\n//===========================================================================\n// initialize matrix\nvoid matInit(double* mat, int mat_n, int x, int y, int seed) {\n  double* m = mat;\n\n  for (int n = 0; n < mat_n; n++)\n    for (int j = 0; j < y; j++)\n      for (int i = 0; i < x; i++, m++) *m = (double)j * x + i + n + seed;\n}\n\n//===========================================================================\n// initialize the task list (\"stack\" in DBCSR lingo)\n// for each of the result matrices we have a random number\nvoid stackInit(int* stack, int n_stack, int n_c, int n_a, int n_b, int mat_m, int mat_n, int mat_k) {\n  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);\n}\n\n//===========================================================================\n// initialize the task list (\"stack\" in DBCSR lingo)\nvoid stackInitTransp(int* stack, int n_stack, int mat_m, int mat_n) {\n  int* s = stack;\n  for (int p = 0; p < n_stack; p++) *s++ = p * mat_m * mat_n;\n}\n\n//===========================================================================\nvoid stackCalc(int* stack, int n_stack, double* mat_c, double* mat_a, double* mat_b, int mat_m, int mat_n, int mat_k) {\n  for (int s = 0; s < n_stack; s++) {\n    int a_base = stack[3 * s] - 1;\n    int b_base = stack[3 * s + 1] - 1;\n    int c_base = stack[3 * s + 2] - 1;\n\n    for (int n = 0; n < mat_n; n++) {\n      for (int m = 0; m < mat_m; m++) {\n        double res = 0.;\n        for (int k = 0; k < mat_k; k++) {\n          int a_ind = k * mat_m + m;\n          int b_ind = k * mat_n + n;\n          res += mat_a[a_base + a_ind] * mat_b[b_base + b_ind];\n        }\n        int c_ind = n * mat_m + m;\n        mat_c[c_base + c_ind] += res;\n      }\n    }\n  }\n}\n\n//===========================================================================\nvoid stackTransp(int* stack, int n_stack, double* mat, double* mat_trs, int mat_m, int mat_n) {\n  for (int s = 0; s < n_stack; s++) {\n    int offset = stack[s];\n    for (int m = 0; m < mat_m; m++) {\n      for (int n = 0; n < mat_n; n++) {\n        int i = n * mat_m + m;\n        int r_out = i % mat_n;\n        int c_out = i / mat_n;\n        int it = r_out * mat_m + c_out;\n        mat_trs[offset + i] = mat[offset + it];\n      }\n    }\n  }\n}\n\n//===========================================================================\ndouble checkSum(double* mat_c, int n_c, int mat_m, int mat_n) {\n  double res = 0;\n  for (int i = 0; i < n_c * mat_m * mat_n; i++) {\n    res += mat_c[i];\n  }\n  return res;\n}\n\n//===========================================================================\ndouble checkSumTransp(double* mat, int n_stack, int mat_m, int mat_n) {\n  // for transposition, a regular checkSum does not inform about the\n  // transpose's correctness. Instead, we perform a checkSum on a\n  // sample of elements.\n  double res = 0;\n  int size = mat_m * mat_n;\n  int n_samples = size / 3;\n  int step = size;\n\n  if (n_samples > 0) {\n    step = size / n_samples;\n  }\n\n  for (int s = 0; s < n_stack; s++) {\n    int offset = s * size;\n    for (int idx = s % step; idx < size; idx += step) res += mat[offset + idx];\n  }\n  return res;\n}\n\n//===========================================================================\n//Removes special symbols so that the output is useful for awk and gnuplot.\nstatic void clean_string(char* str_in, char* str_out) {\n  for (int i = 0; i < 1000; i++) {\n    if (str_in[i] == '=' || str_in[i] == ',' || str_in[i] == '(' || str_in[i] == ')') {\n      str_out[i] = ' ';\n    }\n    else {\n      str_out[i] = str_in[i];\n    }\n    if (str_in[i] == 0) break;\n  }\n}\n\n//===========================================================================\nint libsmm_acc_benchmark(\n  libsmm_acc_benchmark_t* h, int mat_m, int mat_n, int mat_k, int nkernels, KernelLauncher* launchers, char** kernel_descr) {\n  if (mat_m > h->max_m || mat_n > h->max_n || mat_k > h->max_k) {\n    printf(\"libsmm_acc_benchmark: got handle with too few resources\\n\");\n    exit(1);\n  }\n  extern const std::unordered_map<Triplet, KernelParameters> ht;\n  std::vector<Triplet> blocksizes;\n  get_libsmm_acc_triplets(blocksizes, ht);\n  auto it = std::find(std::begin(blocksizes), std::end(blocksizes), Triplet({mat_m, mat_n, mat_k}));\n  if (it == std::end(blocksizes) && h->mode != tune) {\n    printf(\"Triplet %i x %i x %i is not defined in libsmm_acc\\n\", mat_m, mat_n, mat_k);\n    exit(1);\n  }\n\n\n  int n_iter{0}, n_warm{0};\n  switch (h->mode) {\n    case tune:\n    case timing: // for larger matrices few iteration give enough statistics\n      n_iter = std::max(3, 12500 / (mat_m * mat_n * mat_k));\n      n_warm = std::min(3, n_iter);\n      break;\n    case test:\n      n_iter = 1;\n      n_warm = 1;\n      break;\n  }\n\n  ACC_DRV(stream) stream;\n  ACC_DRV_CALL(StreamCreate, (&stream, ACC_DRV(StreamDefault)));\n\n  int error_counter = 0;\n  int best_kernel = -1;\n  double best_gflops = 0.0;\n  double sumCPU, sumGPU;\n  float t_duration;\n  char descr[1000], msg_prefix[100] = \"\";\n\n  memset(h->mat_c, 0, h->n_c * mat_m * mat_n * sizeof(double));\n  matInit(h->mat_a, h->n_a, mat_m, mat_k, 42);\n  matInit(h->mat_b, h->n_b, mat_k, mat_n, 24);\n\n  if (h->mode == tune) printf(\"Initializing ...\\n\");\n  stackInit(h->stack, h->n_stack, h->n_c, h->n_a, h->n_b, mat_m, mat_n, mat_k);\n\n  // Actually, we would have to calculate the stack n_iter times.\n  // We cheat by simply scaling the results of a single stack calculation.\n  stackCalc(h->stack, h->n_stack, h->mat_c, h->mat_a, h->mat_b, mat_m, mat_n, mat_k);\n  for (int i = 0; i < h->n_c * mat_m * mat_n; i++) h->mat_c[i] *= n_iter;\n\n  sumCPU = checkSum(h->mat_c, h->n_c, mat_m, mat_n);\n\n  ACC_API_CALL(Memcpy, (h->d_mat_a, h->mat_a, h->n_a * mat_m * mat_k * sizeof(double), ACC(MemcpyHostToDevice)));\n  ACC_API_CALL(Memcpy, (h->d_mat_b, h->mat_b, h->n_b * mat_k * mat_n * sizeof(double), ACC(MemcpyHostToDevice)));\n  ACC_API_CALL(Memcpy, (h->d_stack, h->stack, h->n_stack * 3 * sizeof(int), ACC(MemcpyHostToDevice)));\n  // d_mat_c gets zeroed after warmup run\n\n  for (int ikern = 0; ikern < nkernels; ikern++) {\n    // Warmup run (more often if n_iter is small)\n    for (int i = 0; i < n_warm; i++)\n      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);\n    ACC_API_CALL(Memset, (h->d_mat_c, 0, h->n_c * mat_m * mat_n * sizeof(double)));\n\n    ACC_DRV_CALL(EventRecord, (h->t_start, stream));\n\n    for (int i = 0; i < n_iter; i++)\n      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);\n\n    ACC_DRV_CALL(EventRecord, (h->t_stop, stream));\n    ACC_DRV_CALL(EventSynchronize, (h->t_stop));\n    ACC_DRV_CALL(EventElapsedTime, (&t_duration, h->t_start, h->t_stop));\n\n    ACC_API_CALL(Memcpy, (h->mat_c, h->d_mat_c, h->n_c * mat_m * mat_n * sizeof(double), ACC(MemcpyDeviceToHost)));\n\n    clean_string(kernel_descr[ikern], descr);\n\n    if (h->mode == tune) sprintf(msg_prefix, \"params %d / %d\\n\", ikern + 1, nkernels);\n\n    sumGPU = checkSum(h->mat_c, h->n_c, mat_m, mat_n);\n    if (sumGPU != sumCPU) {\n      printf(\"%sERROR %s checksum_diff: %g\\n\", msg_prefix, descr, sumGPU - sumCPU);\n      error_counter++;\n      continue;\n    }\n\n    if (h->mode == tune || h->mode == timing) {\n      double gflops = ((double)n_iter * h->n_stack * mat_m * mat_n * mat_k * 2 / (1e9)) / (t_duration * 1e-3);\n      printf(\"%sOK %s GFlop/s %g\\n\", msg_prefix, descr, gflops);\n      if (best_gflops < gflops) {\n        best_gflops = gflops;\n        best_kernel = ikern;\n      }\n    }\n#if !defined(NDEBUG)\n    else {\n      printf(\"%sOK %s\\n\", msg_prefix, descr);\n    }\n#endif\n  }\n\n  if (h->mode == tune) {\n    printf(\"\\n\\n\");\n    if (best_kernel > -1) {\n      printf(\"WINNER: %d %s , # %g GFlop/s \\n\", best_kernel + 1, kernel_descr[best_kernel], best_gflops);\n    }\n    else {\n      printf(\"WINNER: None\\n\");\n    }\n    printf(\"Number of errors: %d\\n\", error_counter);\n  }\n\n  return (error_counter);\n}\n\n//===========================================================================\nint libsmm_acc_benchmark_transpose_(int n_stack, int* stack, int* d_stack, double* mat, double* mat_trs, double* d_mat, int n,\n  int mat_m, int mat_n, ACC_DRV(event) start, ACC_DRV(event) stop, char** kernel_descr, TransposeLauncher* launcher) {\n  if (mat_m > MAX_KERNEL_DIM || mat_n > MAX_KERNEL_DIM) {\n    printf(\"Cannot transpose matrices with dimensions above %i, got (%i x %i)\\n\", MAX_KERNEL_DIM, mat_m, mat_n);\n    exit(1);\n  }\n\n  ACC_DRV(stream) stream;\n  ACC_DRV_CALL(StreamCreate, (&stream, ACC_DRV(StreamDefault)));\n\n  int offset = 0;\n  int n_warm = 0;\n  int n_iter = 1;\n  int error_counter = 0;\n  double sumCPU, sumGPU;\n  float t_duration;\n  char descr[1000], msg_prefix[100] = \"\";\n\n  // Matrix and stack initialization\n  matInit(mat, n, mat_m, mat_n, 42);\n  memset(mat_trs, 0, n * mat_m * mat_n * sizeof(double));\n  stackInitTransp(stack, n_stack, mat_m, mat_n);\n\n  // Reference result on CPU\n  stackTransp(stack, n_stack, mat, mat_trs, mat_m, mat_n);\n  sumCPU = checkSumTransp(mat_trs, n_stack, mat_m, mat_n);\n\n  // Compute on GPU\n  ACC_API_CALL(Memcpy, (d_mat, mat, n * mat_m * mat_n * sizeof(double), ACC(MemcpyHostToDevice)));\n  ACC_API_CALL(Memcpy, (d_stack, stack, n_stack * sizeof(int), ACC(MemcpyHostToDevice)));\n\n  // Warmup run\n  for (int i = 0; i < n_warm; i++) launcher[0](d_stack, offset, n_stack, d_mat, mat_m, mat_n, stream);\n\n  // Real runs\n  ACC_DRV_CALL(EventRecord, (start, stream));\n\n  for (int i = 0; i < n_iter; i++) launcher[0](d_stack, offset, n_stack, d_mat, mat_m, mat_n, stream);\n\n  ACC_DRV_CALL(EventRecord, (stop, stream));\n  ACC_DRV_CALL(EventSynchronize, (stop));\n  ACC_DRV_CALL(EventElapsedTime, (&t_duration, start, stop));\n\n  // Check for errors and compare libsmm_acc result on GPU to reference\n  ACC_API_CALL(Memcpy, (mat_trs, d_mat, n * mat_m * mat_n * sizeof(double), ACC(MemcpyDeviceToHost)));\n  clean_string(kernel_descr[0], descr);\n\n  sumGPU = checkSumTransp(mat_trs, n_stack, mat_m, mat_n);\n  if (sumGPU != sumCPU) {\n    printf(\"%sERROR %s checksum_diff: %g\\n\", msg_prefix, descr, sumGPU - sumCPU);\n    error_counter++;\n  }\n#if !defined(NDEBUG)\n  else {\n    printf(\"%sOK %s\\n\", msg_prefix, descr);\n  }\n#endif\n  return error_counter;\n}\n\n//===========================================================================\nint libsmm_acc_benchmark_transpose(\n  libsmm_acc_benchmark_t* handle, int mat_m, int mat_n, TransposeLauncher* launcher, char** kernel_descr) {\n  if (mat_m > handle->max_m || mat_n > handle->max_n) {\n    printf(\"libsmm_acc_benchmark_transpose: got handle with too few resources\\n\");\n    exit(1);\n  }\n  if (handle->mode == tune) {\n    printf(\"Tune mode not supported for benchmarking of transpose\");\n    exit(1);\n  }\n\n  int errors = 0;\n  errors += libsmm_acc_benchmark_transpose_(handle->n_stack_trs_a, handle->stack_trs_a, handle->d_stack_trs_a, handle->mat_a,\n    handle->mat_trs_a, handle->d_mat_a, handle->n_a, mat_m, mat_n, handle->t_start, handle->t_stop, kernel_descr, launcher);\n  return errors;\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/libsmm_acc_benchmark.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef LIBSMM_ACC_BENCHMARK_H\n#define LIBSMM_ACC_BENCHMARK_H\n\n#if defined(__CUDA)\n#  include \"../cuda/acc_cuda.h\"\n#elif defined(__HIP)\n#  include \"../hip/acc_hip.h\"\n#endif\n\n#include \"../acc_libsmm.h\"\n\ntypedef int (*KernelLauncher)(const int* param_stack_dev, int stack_size, ACC_DRV(stream) stream, int m, int n, int k,\n  const double* a_data, const double* b_data, double* c_data);\n\ntypedef int (*TransposeLauncher)(\n  const int* param_stack, int offset, int nblks, double* buffer, int m, int n, ACC_DRV(stream) stream);\n\nenum benchmark_mode { test, tune, timing };\n\ntypedef struct {\n  benchmark_mode mode;\n  /* max block-sizes to expect */\n  int max_m, max_n, max_k;\n  /* number of blocks to allocate in each panel */\n  int n_a, n_b, n_c;\n  /* length of stack (multiplication, transpose a, transpose b) */\n  int n_stack, n_stack_trs_a, n_stack_trs_b;\n  /* host-buffers */\n  double *mat_a, *mat_b, *mat_c;\n  double *mat_trs_a, *mat_trs_b;\n  int *stack, *stack_trs_a, *stack_trs_b;\n  /* device-buffers */\n  double *d_mat_a, *d_mat_b, *d_mat_c;\n  int *d_stack, *d_stack_trs_a, *d_stack_trs_b;\n  /* events for measuring the runtime */\n  ACC_DRV(event) t_start, t_stop;\n} libsmm_acc_benchmark_t;\n\nvoid matInit(double* mat, int mat_n, int x, int y, int seed);\n\nvoid stackInit(int* stack, int n_stack, int n_c, int n_a, int n_b, int mat_m, int mat_n, int mat_k);\nvoid stackInitTransp(int* stack, int n_stack, int mat_m, int mat_n);\n\nvoid stackCalc(int* stack, int n_stack, double* mat_c, double* mat_a, double* mat_b, int mat_m, int mat_n, int mat_k);\nvoid stackTransp(int* stack, int n_stack, double* mat_a, double* mat_atrs, int mat_m, int mat_n);\n\ndouble checkSum(double* mat_c, int n_c, int mat_m, int mat_n);\ndouble checkSumTransp(double* mat, int n_stack, int mat_m, int mat_n);\n\nvoid libsmm_acc_benchmark_init(libsmm_acc_benchmark_t** handle, benchmark_mode mode, int max_m, int max_n, int max_k);\n\nvoid libsmm_acc_benchmark_finalize(libsmm_acc_benchmark_t*);\n\nint libsmm_acc_benchmark(\n  libsmm_acc_benchmark_t* handle, int mat_m, int mat_n, int mat_k, int nkernel, KernelLauncher* launchers, char** kernel_descr);\nint libsmm_acc_benchmark_transpose(\n  libsmm_acc_benchmark_t* handle, int mat_m, int mat_n, TransposeLauncher* launcher, char** kernel_descr);\nint libsmm_acc_benchmark_transpose_(int n_stack, int* stack, int* d_stack, double* mat, double* mat_trs, double* d_mat, int n,\n  int mat_m, int mat_n, ACC_DRV(event) start, ACC_DRV(event) stop, char** kernel_descr, TransposeLauncher* launcher);\n\n#endif /*LIBSMM_ACC_BENCHMARK_H*/\n"
  },
  {
    "path": "src/acc/libsmm_acc/libsmm_acc_init.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include \"libsmm_acc_init.h\"\n#include \"../acc_libsmm.h\"\n#include \"../cuda_hip/acc_utils.h\"\n\n#if defined(_OPENMP)\n#  include <omp.h>\n#endif\n\n\nstd::vector<ACC_BLAS(Handle_t)*> acc_blashandles;\n\n//===========================================================================\n#if defined(__DBCSR_ACC)\nvoid timeset(const std::string& routine_name, int& handle) {\n  const char* routine_name_ = routine_name.c_str();\n  int routine_name_length = routine_name.length();\n  c_dbcsr_timeset(&routine_name_, &routine_name_length, &handle);\n}\nvoid timestop(int handle) { c_dbcsr_timestop(&handle); }\n#else\nvoid timeset(const std::string& routine_name, int& handle) {\n  (void)(routine_name);\n  (void)(handle);\n}\nvoid timestop(int handle) { (void)(handle); }\n#endif\n\n//===========================================================================\nint libsmm_acc_gpu_blas_init() {\n  // allocate memory for acc_blas handles\n#if defined _OPENMP\n  const int nthreads = omp_get_num_threads();\n#else\n  const int nthreads = 1;\n#endif\n  const int size = static_cast<int>(acc_blashandles.size());\n\n  if (size < nthreads) {\n    acc_blashandles.resize(nthreads);\n    // initialize acc_blas and store acc_blas handles\n    for (int i = size; i < nthreads; i++) {\n      ACC_BLAS(Handle_t) * c_handle;\n      acc_blas_create(&c_handle);\n      acc_blashandles[i] = c_handle;\n    }\n  }\n  return 0;\n}\n\n//===========================================================================\nextern \"C\" int libsmm_acc_init() {\n  std::string routineN = \"libsmm_acc_init\";\n  int handle;\n\n  timeset(routineN, handle);\n\n  // check warp size consistency\n  libsmm_acc_check_gpu_warp_size_consistency();\n  libsmm_acc_gpu_blas_init();\n\n  timestop(handle);\n\n  return 0;\n}\n\n//===========================================================================\nextern \"C\" int libsmm_acc_finalize() {\n  std::string routineN = \"libsmm_acc_finalize\";\n  int handle;\n\n  timeset(routineN, handle);\n\n  // free acc_blas handle resources; one handle per thread\n  for (size_t i = 0; i < acc_blashandles.size(); i++) {\n    acc_blas_destroy(acc_blashandles[i]);\n  }\n  acc_blashandles.clear();\n\n  timestop(handle);\n\n  return 0;\n}\n\n//===========================================================================\nint libsmm_acc_check_gpu_warp_size_consistency() {\n  int acc_warp_size = acc_get_gpu_warp_size();\n  extern const int warp_size;\n  if (warp_size != acc_warp_size) {\n    printf(\"Inconsistency in warp sizes: Cuda/Hip indicates warp size = %d, while the gpu_properties files indicates warp_size = \"\n           \"%d.\\nPlease check whether src/acc/libsmm_acc/kernels/gpu_properties.json contains the correct data about the GPU you \"\n           \"are using.\",\n      warp_size, acc_warp_size);\n  }\n  return 0;\n}\n\n//===========================================================================\nextern \"C\" int libsmm_acc_is_thread_safe() {\n#if defined(_OPENMP)\n  return 1; // i.e. true, libsmm_acc is threaded\n#else\n  return 0; // i.e. false, libsmm_acc is not threaded\n#endif\n}\n"
  },
  {
    "path": "src/acc/libsmm_acc/libsmm_acc_init.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef LIBSMM_ACC_INIT_H\n#define LIBSMM_ACC_INIT_H\n\n#include \"../cuda_hip/acc_blas.h\"\n\n#include <vector>\n#include <string>\n\nvoid timeset(const std::string& routine_name, int& handle);\nvoid timestop(int handle);\n\nextern \"C\" int libsmm_acc_init(void);\nextern \"C\" int libsmm_acc_finalize(void);\n\nint libsmm_acc_gpu_blas_init();\n\nint libsmm_acc_check_gpu_warp_size_consistency(void);\n\nextern \"C\" int libsmm_acc_is_thread_safe(void);\n\nextern std::vector<ACC_BLAS(Handle_t)*> acc_blashandles;\n\n#endif /*LIBSMM_ACC_INIT_H*/\n"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_H100.json",
    "content": "[\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 8, \"threads\": 32, \"grouping\": 6, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 662.818, \"source\": \"autotuned\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 10, \"threads\": 64, \"grouping\": 7, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 720.571, \"source\": \"autotuned\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 15, \"threads\": 32, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 978.746, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 16, \"threads\": 32, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 1018.3, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]\n"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_K20X.json",
    "content": "[\n{\"m\": 4, \"n\": 4, \"k\": 4, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 16.5663, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 5, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 20.1639, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 6, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 23.5514, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 7, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 27.508, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 8, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 31.7227, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 9, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 34.2669, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 10, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 37.6563, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 13, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 45.9102, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 15, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 51.3947, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 16, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 54.8645, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 17, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 54.3192, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 22, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 62.9255, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 23, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 60.6683, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 62.8983, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 25, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 50.8246, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 26, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 53.309, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 28, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 54.7759, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 32, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 58.5147, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 4, \"k\": 45, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 55.094, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 14.9148, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 18.1077, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 21.2783, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 7, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 25.2832, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 29.5849, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 9, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 30.8254, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 13, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 42.687, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 16, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 52.9062, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 17, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 51.922, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 22, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 48.5357, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 23, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 50.2012, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 24, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 50.9804, \"source\": \"autotuned\", \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 25, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 45.0794, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 26, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 46.9644, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 28, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 44.74, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 32, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 47.0079, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 5, \"k\": 45, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 39.578, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 6, \"k\": 4, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 17.7217, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 6, \"k\": 5, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 21.2885, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 6, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 26.0691, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 6, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 35.3897, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 6, \"k\": 9, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 36.1752, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 6, \"k\": 13, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 50.7414, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 6, \"k\": 16, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 62.3605, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 6, \"k\": 17, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 52.168, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 6, \"k\": 24, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 59.2859, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 7, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 20.3949, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 7, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 25.5066, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 7, \"k\": 7, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 34.4269, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 7, \"k\": 9, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 41.6453, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 7, \"k\": 13, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 57.6433, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 8, \"k\": 4, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 24.016, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 8, \"k\": 5, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 28.6828, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 8, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 34.4605, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 8, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 45.9955, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 8, \"k\": 9, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 48.4776, \"source\": \"autotuned\"},\n{\"m\": 4, \"n\": 8, \"k\": 13, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 54.9661, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 16, \"k\": 6, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 56.7665, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 24, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 58.0271, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 26, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 61.4438, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 28, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 65.6686, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 32, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 74.5054, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 14.8425, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 17.8923, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 20.6833, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 7, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 25.0033, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 28.7395, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 9, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 30.3363, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 13, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 35.8017, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 16, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 35.9461, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 17, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 34.9185, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 50.5776, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 25, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 42.9798, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 26, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 46.6834, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 28, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 44.9266, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 32, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 46.7652, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 4, \"k\": 45, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 39.2713, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 5, \"k\": 4, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 23.8033, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 5, \"k\": 5, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 29.5496, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 5, \"k\": 6, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 33.673, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 5, \"k\": 7, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 39.8149, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 5, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 37.8978, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 5, \"k\": 9, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 48.7651, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 5, \"k\": 13, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 55.6173, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 6, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 20.9988, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 6, \"k\": 5, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 25.4954, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 6, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 31.0513, \"source\": \"autotuned\"},\n{\"m\": 5, \"n\": 6, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 39.6543, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 8, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 47.0366, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 22, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 64.6247, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 23, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 66.9592, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 23, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 16, \"minblocks\": 12, \"algorithm\": \"medium\", \"perf\": 140, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 24, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 70.2727, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 17.3648, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 4, \"k\": 5, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 20.891, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 25.3088, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 34.4029, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 4, \"k\": 9, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 30.9154, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 5, \"k\": 4, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 21.0382, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 5, \"k\": 5, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 25.6146, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 5, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 30.7386, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 5, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 39.7844, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 5, \"k\": 9, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 37.5717, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 6, \"k\": 5, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 34.7398, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 6, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 41.3431, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 8, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 56.4219, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 17, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 60.5441, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 20.321, \"source\": \"autotuned\"},\n{\"m\": 7, \"n\": 4, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 25.1685, \"source\": \"autotuned\"},\n{\"m\": 7, \"n\": 4, \"k\": 7, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 33.8708, \"source\": \"autotuned\"},\n{\"m\": 7, \"n\": 4, \"k\": 9, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 41.5372, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 7, \"k\": 4, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 40.7019, \"source\": \"autotuned\"},\n{\"m\": 7, \"n\": 7, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 49.7395, \"source\": \"autotuned\"},\n{\"m\": 7, \"n\": 7, \"k\": 7, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 64.2082, \"source\": \"autotuned\"},\n{\"m\": 7, \"n\": 7, \"k\": 9, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 74.9724, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 4, \"k\": 4, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 23.9735, \"source\": \"autotuned\"},\n{\"m\": 8, \"n\": 4, \"k\": 5, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 28.4815, \"source\": \"autotuned\"},\n{\"m\": 8, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 34.2353, \"source\": \"autotuned\"},\n{\"m\": 8, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 45.8575, \"source\": \"autotuned\"},\n{\"m\": 8, \"n\": 4, \"k\": 9, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 48.5061, \"source\": \"autotuned\"},\n{\"m\": 8, \"n\": 4, \"k\": 13, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 55.0971, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 8, \"k\": 4, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 52.7483, \"source\": \"autotuned\"},\n{\"m\": 8, \"n\": 8, \"k\": 5, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 62.8469, \"source\": \"autotuned\"},\n{\"m\": 8, \"n\": 8, \"k\": 6, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 72.9942, \"source\": \"autotuned\"},\n{\"m\": 8, \"n\": 8, \"k\": 8, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 90.7763, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 13, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 63.3347, \"source\": \"autotuned\"},\n{\"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\"},\n{\"m\": 8, \"n\": 13, \"k\": 6, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 86.1038, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 16, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 77.4084, \"source\": \"autotuned\"},\n{\"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\"},\n{\"m\": 8, \"n\": 16, \"k\": 6, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 102.56, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 9, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 62.4312, \"source\": \"autotuned\"},\n{\"m\": 9, \"n\": 9, \"k\": 5, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 74.0588, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 13, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 81.5548, \"source\": \"autotuned\"},\n{\"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\"},\n{\"m\": 9, \"n\": 13, \"k\": 7, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 104.773, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 10, \"n\": 10, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 74.7338, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 8, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 64.3202, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 9, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 68.6834, \"source\": \"autotuned\"},\n{\"m\": 13, \"n\": 9, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 82.6413, \"source\": \"autotuned\"},\n{\"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\"},\n{\"m\": 13, \"n\": 9, \"k\": 7, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 105.779, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 4, \"k\": 6, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 56.0623, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 5, \"k\": 6, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 68.9342, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 6, \"k\": 6, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 81.9641, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 8, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 78.0533, \"source\": \"autotuned\"},\n{\"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\"},\n{\"m\": 16, \"n\": 8, \"k\": 6, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 105.373, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 6, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 60.0659, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 5, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 64.238, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 5, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 66.3956, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 24, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 58.8119, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 24, \"n\": 5, \"k\": 4, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 70.448, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 4, \"k\": 5, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 75.2026, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]\n\n"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_K40.json",
    "content": "[\n{\"m\": 5, \"n\": 5, \"k\": 5, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 30.4899, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 6, \"k\": 6, \"threads\": 128, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 44.1711, \"source\": \"autotuned\"},\n{\"m\": 7, \"n\": 7, \"k\": 7, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 64.2483, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_K80.json",
    "content": "[\n{\"m\": 5, \"n\": 5, \"k\": 5, \"threads\": 64, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 33.4544, \"source\": \"autotuned\"},\n{\"m\": 6, \"n\": 6, \"k\": 6, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 47.3645, \"source\": \"autotuned\"},\n{\"m\": 7, \"n\": 7, \"k\": 7, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 70.7194, \"source\": \"autotuned\"},\n{\"m\": 8, \"n\": 8, \"k\": 8, \"threads\": 96, \"grouping\": 16, \"minblocks\": 1, \"algorithm\": \"tiny\", \"perf\": 103.662, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_Mi100.json",
    "content": "[\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 14, \"n\": 29, \"k\": 32, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"perf\": 2134, \"source\": \"autotuned\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_Mi250.json",
    "content": "[\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_Mi300.json",
    "content": "[\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_Mi350.json",
    "content": "[\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_Mi50.json",
    "content": "[\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]"
  },
  {
    "path": "src/acc/libsmm_acc/parameters/parameters_V100.json",
    "content": "[\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 11, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 4, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 38, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 4, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 5, \"k\": 10, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 11, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 5, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 5, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 16, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 22, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 5, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 5, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 5, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 5, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 38, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 5, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 6, \"k\": 10, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 13, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 20, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 22, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 23, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 25, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 26, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 28, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 31, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 32, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 6, \"k\": 45, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 7, \"k\": 9, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 10, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 7, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 22, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 23, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 7, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 7, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 7, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 7, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 8, \"k\": 10, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 13, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 22, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 23, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 25, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 26, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 28, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 32, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 8, \"k\": 45, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 9, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 11, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 5, \"minblocks\": 27, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 9, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 18, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 9, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 9, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 9, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 9, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 39, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 9, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 10, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 10, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 14, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 22, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 10, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 37, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 10, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 11, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 9, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 27, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 20, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 38, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 12, \"k\": 45, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 13, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 13, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 13, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 13, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 13, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 13, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 13, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 13, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 13, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 14, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 2, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 31, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 36, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 14, \"k\": 45, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 15, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 7, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 32, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 15, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 14, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 22, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 15, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 17, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 24, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 34, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 15, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 11, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 18, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 25, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 39, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 16, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 9, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 18, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 44, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 17, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 18, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 22, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 31, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 36, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 19, \"k\": 45, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 20, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 9, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 18, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 27, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 36, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 21, \"k\": 45, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 22, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 22, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 22, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 15, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 22, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 22, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 43, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 22, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 23, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 23, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 23, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 23, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 23, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 24, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 25, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 25, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 25, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 25, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 25, \"k\": 27, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 25, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 25, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 37, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 25, \"k\": 44, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 256, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 26, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 26, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 26, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 12, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 26, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 17, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 26, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 26, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 26, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 30, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 26, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 34, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 43, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 384, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 26, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 27, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 36, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 27, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 28, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 28, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 28, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 11, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 28, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 18, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 28, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 28, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 28, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 28, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 29, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 29, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 6, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 15, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 17, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 34, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 43, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 224, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 30, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 8, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 37, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 384, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 44, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 31, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 32, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 32, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 32, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 12, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 32, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 23, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 32, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 32, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 30, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 32, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 34, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 288, \"grouping\": 9, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 41, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 32, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 33, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 6, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 15, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 20, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 29, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 33, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 34, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 8, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 21, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 26, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 44, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 35, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 36, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 35, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 44, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 37, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 13, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 16, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 38, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 39, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 40, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 15, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 36, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 41, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 32, \"grouping\": 3, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 18, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 42, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 43, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 32, \"grouping\": 4, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 13, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 34, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 41, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 224, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 44, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 45, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 45, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 45, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 45, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 4, \"n\": 45, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 45, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 4, \"n\": 45, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 4, \"n\": 45, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 4, \"k\": 10, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 4, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 4, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 4, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 4, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 4, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 4, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 5, \"k\": 10, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 5, \"k\": 14, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 32, \"grouping\": 10, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 5, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 5, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 5, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 5, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 5, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 6, \"k\": 10, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 13, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 22, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 23, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 24, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 25, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 26, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 28, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 32, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 37, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 6, \"k\": 45, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 7, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 12, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 10, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 7, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 7, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 7, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 7, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 39, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 7, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 8, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 8, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 9, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 9, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 15, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 9, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 20, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 9, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 9, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 9, \"k\": 29, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 9, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 42, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 9, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 10, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 10, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 13, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 17, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 24, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 38, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 10, \"k\": 45, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 11, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 12, \"k\": 6, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 32, \"grouping\": 9, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 9, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 5, \"minblocks\": 22, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 12, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 12, \"k\": 27, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 12, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 12, \"k\": 45, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 1, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 13, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 13, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 13, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 13, \"k\": 14, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 13, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 13, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 13, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 13, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 37, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 42, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 13, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 14, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 14, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 10, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 21, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 28, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 39, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 15, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 16, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 16, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 16, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 16, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 16, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 16, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 39, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 44, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 16, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 17, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 7, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 8, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 6, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 17, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 26, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 18, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 4, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 10, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 19, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 26, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 19, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 20, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 5, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 4, \"minblocks\": 27, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 12, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 23, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 33, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 40, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 21, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 22, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 8, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 22, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 22, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 17, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 22, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 22, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 44, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 22, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 23, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 23, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 23, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 23, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 23, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 23, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 23, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 24, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 24, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 24, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 24, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 24, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 24, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 25, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 25, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 25, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 25, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 22, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 25, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 25, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 25, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 40, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 25, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 26, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 26, \"k\": 8, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 26, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 26, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 19, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 26, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 26, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 26, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 36, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 26, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 27, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 27, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 28, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 28, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 28, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 11, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 28, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 22, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 28, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 28, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 28, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 36, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 28, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 29, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 7, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 12, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 40, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 29, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 30, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 5, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 4, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 12, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 19, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 26, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 31, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 32, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 32, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 32, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 11, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 32, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 32, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 20, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 32, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 32, \"k\": 29, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 32, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 38, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 32, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 33, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 33, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 5, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 32, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 14, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 28, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 43, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 34, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 6, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 13, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 16, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 42, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 35, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 36, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 10, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 17, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 24, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 39, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 37, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 6, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 15, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 20, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 160, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 29, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 43, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 38, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 39, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 40, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 10, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 19, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 160, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 24, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 38, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 192, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 41, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 7, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 14, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 128, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 21, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 28, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 256, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 43, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 42, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 43, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 21, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 28, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 39, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 44, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 45, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 45, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 45, \"k\": 10, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 45, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 19, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 24, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 5, \"n\": 45, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 45, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 5, \"n\": 45, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 5, \"n\": 45, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 4, \"k\": 10, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 12, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 5, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 13, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 21, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 22, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 23, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 25, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 26, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 28, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 32, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 34, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 43, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 4, \"k\": 45, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 5, \"k\": 10, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 13, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 22, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 23, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 25, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 26, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 28, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 32, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 5, \"k\": 45, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 6, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 6, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 7, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 31, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 37, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 44, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 7, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 8, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 15, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 8, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 6, \"n\": 9, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 9, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 32, \"grouping\": 10, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 13, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 27, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 40, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 10, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 9, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 23, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 36, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 11, \"k\": 45, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 12, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 19, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 24, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 36, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 13, \"k\": 45, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 21, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 28, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 39, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 1, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 14, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 9, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 22, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 31, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 44, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 15, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 4, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 32, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 13, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 22, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 31, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 32, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 41, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 16, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 10, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 17, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 17, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 24, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 39, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 17, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 6, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 13, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 20, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 17, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 27, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 18, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 19, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 11, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 23, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 28, \"tile_m\": 6, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 41, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 20, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 21, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 22, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 15, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 18, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 25, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 43, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 288, \"grouping\": 9, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 23, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 13, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 20, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 31, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 41, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 24, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 25, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 24, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 26, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 7, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 25, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 34, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 224, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 43, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 27, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 28, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 8, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 22, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 17, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 38, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 29, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 12, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 27, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 288, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 33, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 352, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 40, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 448, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 30, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 15, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 25, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 34, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 352, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 43, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 448, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 31, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 17, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 25, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 38, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 416, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 32, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 13, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 20, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 31, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 352, \"grouping\": 27, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 38, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 448, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 41, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 288, \"grouping\": 9, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 33, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 15, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 17, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 24, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 36, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 43, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 512, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 34, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 35, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 25, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 39, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 44, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 36, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 37, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 38, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 13, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 20, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 42, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 39, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 25, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 36, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 40, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 41, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 42, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 14, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 19, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 28, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 33, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 480, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 42, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 43, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 44, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 10, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 23, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 28, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 6, \"n\": 45, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 4, \"k\": 10, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 4, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 20, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 22, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 23, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 4, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 4, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 4, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 39, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 4, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 5, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 5, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 12, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 5, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 5, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 23, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 5, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 5, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 30, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 5, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 5, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 6, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 6, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 11, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 13, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 18, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 36, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 6, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 7, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 7, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 12, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 32, \"grouping\": 8, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 7, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 21, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 7, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 7, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 7, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 35, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 40, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 7, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 8, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 21, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 30, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 35, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 8, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 9, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 9, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 22, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 9, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 9, \"k\": 29, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 9, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 9, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 10, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 9, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 13, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 18, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 27, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 39, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 44, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 10, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 11, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 8, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 13, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 1, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 44, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 12, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 13, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 13, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 13, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 13, \"k\": 14, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 19, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 13, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 13, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 13, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 41, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 13, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 14, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 14, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 12, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 15, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 7, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 14, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 17, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 24, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 35, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 42, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 16, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 17, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 18, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 20, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 29, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 33, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 19, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 20, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 14, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 28, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 34, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 41, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 448, \"grouping\": 21, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 21, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 16, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 27, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 38, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 288, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 41, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 22, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 10, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 28, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 33, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 23, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 14, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 33, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 42, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 320, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 24, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 25, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 25, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 25, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 25, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 20, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 25, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 25, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 25, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 34, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 384, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 41, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 25, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 26, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 26, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 26, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 11, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 26, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 16, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 26, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 26, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 26, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 26, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 27, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 27, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 28, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 28, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 28, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 28, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 15, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 28, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 28, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 28, \"k\": 33, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 42, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 28, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 29, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 16, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 25, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 29, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 30, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 10, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 28, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 31, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 32, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 32, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 32, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 12, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 32, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 32, \"k\": 27, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 32, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 32, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 41, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 32, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 33, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 33, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 34, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 18, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 17, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 36, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 35, \"k\": 45, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 36, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 18, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 25, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 37, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 37, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 37, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 12, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 33, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 288, \"grouping\": 9, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 40, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 352, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 38, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 8, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 17, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 39, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 39, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 39, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 12, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 18, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 27, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 40, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 40, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 15, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 18, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 25, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 36, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 41, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 4, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 12, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 13, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 384, \"grouping\": 10, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 352, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 33, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 42, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 43, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 4, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 13, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 18, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 27, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 320, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 352, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 41, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 44, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 45, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 45, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 45, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 45, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 7, \"n\": 45, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 45, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 7, \"n\": 45, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 7, \"n\": 45, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 4, \"k\": 9, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 10, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 11, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 13, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 14, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 15, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 16, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 17, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 18, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 19, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 20, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 21, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 22, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 23, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 24, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 25, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 26, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 27, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 28, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 29, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 30, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 31, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 32, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 33, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 34, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 35, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 36, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 37, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 38, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 39, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 40, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 41, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 42, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 43, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 44, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 4, \"k\": 45, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 5, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 64, \"grouping\": 9, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 23, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 24, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 37, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 5, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 6, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 6, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 43, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 6, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 7, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 7, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 14, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 16, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 5, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 25, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 34, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 43, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 7, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 8, \"n\": 8, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 8, \"k\": 10, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 32, \"grouping\": 4, \"minblocks\": 27, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 21, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 28, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 8, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 8, \"n\": 9, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 8, \"n\": 9, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 8, \"n\": 9, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 9, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 10, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 6, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 13, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 9, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 16, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 27, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 320, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 34, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 384, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 11, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 20, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 29, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 39, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 40, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 12, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 13, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 6, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 13, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 15, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 5, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 20, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 29, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 43, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 14, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 9, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 16, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 15, \"k\": 45, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 384, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 16, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 17, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 26, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 36, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 17, \"k\": 45, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 384, \"grouping\": 23, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 5, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 64, \"grouping\": 5, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 12, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 23, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 96, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 41, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 18, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 19, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 4, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 32, \"grouping\": 10, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 19, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 30, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 26, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 20, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 8, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 17, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 44, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 384, \"grouping\": 12, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 21, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 38, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 41, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 22, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 36, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 23, \"k\": 45, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 12, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 19, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 33, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 40, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 24, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 15, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 17, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 24, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 8, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 25, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 26, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 11, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 25, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 10, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 416, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 27, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 4, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 32, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 13, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 19, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 33, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 288, \"grouping\": 9, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 352, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 28, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 29, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 4, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 32, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 13, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 416, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 30, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 11, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 36, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 31, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 32, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 4, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 14, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 19, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 33, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 11, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 25, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 320, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 34, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 35, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 7, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 14, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 17, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 24, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 320, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 36, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 4, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 64, \"grouping\": 17, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 13, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 19, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 41, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 128, \"grouping\": 19, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 37, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 38, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 5, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 10, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 23, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 320, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 8, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 39, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 15, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 17, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 24, \"tile_m\": 4, \"tile_n\": 1, \"threads\": 320, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 35, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 480, \"grouping\": 18, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 40, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 41, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 11, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 16, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 10, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 42, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 13, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 20, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 31, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 480, \"grouping\": 18, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 33, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 480, \"grouping\": 18, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 43, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 44, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 8, \"n\": 45, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 4, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 4, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 4, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 19, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 4, \"k\": 24, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 4, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 4, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 4, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 37, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 42, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 4, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 5, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 5, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 5, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 5, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 5, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 5, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 5, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 5, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 6, \"k\": 9, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 13, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 22, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 31, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 36, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 6, \"k\": 45, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 7, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 7, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 7, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 11, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 5, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 7, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 21, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 7, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 7, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 7, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 7, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 8, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 8, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 19, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 22, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 26, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 8, \"k\": 45, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 9, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 9, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 9, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 9, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 9, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 9, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 9, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 10, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 10, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 10, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 10, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 4, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 11, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 22, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 29, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 11, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 8, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 7, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 12, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 19, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 26, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 12, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 37, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 44, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 12, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 13, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 7, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 5, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 13, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 12, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 13, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 13, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 21, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 13, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 13, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 40, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 13, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 14, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 12, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 21, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 41, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 15, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 16, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 16, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 16, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 16, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 16, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 16, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 17, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 13, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 19, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 17, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 20, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 17, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 31, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 38, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 17, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 7, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 16, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 25, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 44, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 18, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 19, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 39, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 44, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 20, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 39, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 21, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 22, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 22, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 22, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 15, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 22, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 22, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 25, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 22, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 22, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 23, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 23, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 12, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 23, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 23, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 23, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 23, \"k\": 27, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 23, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 10, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 17, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 36, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 24, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 25, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 26, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 7, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 26, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 26, \"k\": 14, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 16, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 9, \"n\": 26, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 9, \"n\": 26, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 26, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 13, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 20, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 27, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 41, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 27, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 10, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 17, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 12, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 28, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 33, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 29, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 30, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 14, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 28, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 43, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 31, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 32, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 8, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 17, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 256, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 33, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 4, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 19, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 13, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 18, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 34, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 35, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 4, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 19, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 13, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 384, \"grouping\": 14, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 384, \"grouping\": 14, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 36, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 37, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 12, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 18, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 27, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 9, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 39, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 40, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 38, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 15, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 18, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 39, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 5, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 12, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 256, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 288, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 24, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 40, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 8, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 17, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 41, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 42, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 18, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 25, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 36, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 43, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 43, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 4, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 15, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 320, \"grouping\": 10, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 43, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 44, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 8, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 17, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 320, \"grouping\": 10, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 39, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 224, \"grouping\": 23, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 44, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 9, \"n\": 45, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 32, \"grouping\": 10, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 64, \"grouping\": 10, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 19, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 26, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 41, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 4, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 5, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 6, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 8, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 14, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 22, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 36, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 7, \"k\": 45, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 4, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 13, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 26, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 41, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 8, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 11, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 18, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 29, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 36, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 9, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 4, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 10, \"n\": 10, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 13, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 22, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 10, \"n\": 10, \"k\": 33, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 42, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 10, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 11, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 10, \"n\": 12, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 12, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 11, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 18, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 37, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 44, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 13, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 5, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 14, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 12, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 23, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 33, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 40, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 14, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 10, \"n\": 15, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 10, \"n\": 15, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 15, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 16, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 38, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 17, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 13, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 20, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 42, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 18, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 5, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 13, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 14, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 23, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 6, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 43, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 19, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 10, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 21, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 28, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 39, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 20, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 21, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 22, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 15, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 24, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 34, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 43, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 23, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 10, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 20, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 29, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 38, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 24, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 13, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 16, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 27, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 38, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 25, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 15, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 20, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 29, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 26, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 27, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 28, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 16, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 27, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 29, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 7, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 14, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 21, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 28, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 42, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 30, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 14, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 13, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 31, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 32, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 7, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 12, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 384, \"grouping\": 14, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 33, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 8, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 19, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 26, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 352, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 34, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 26, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 352, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 35, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 9, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 384, \"grouping\": 14, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 36, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 37, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 38, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 12, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 26, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 39, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 39, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 9, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 22, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 224, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 40, \"k\": 45, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 7, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 14, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 31, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 25, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 256, \"grouping\": 23, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 42, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 256, \"grouping\": 23, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 41, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 42, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 26, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 43, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 9, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 30, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 39, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 224, \"grouping\": 23, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 44, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 44, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 4, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 15, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 22, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 256, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 25, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 35, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 42, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 10, \"n\": 45, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 4, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 5, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 32, \"grouping\": 8, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 14, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 23, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 24, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 34, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 43, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 5, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 10, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 13, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 21, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 28, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 39, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 1, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 6, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 18, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 27, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 33, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 7, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 7, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 8, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 21, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 4, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 30, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 35, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 44, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 8, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 9, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 10, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 11, \"n\": 11, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 13, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 27, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 38, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 11, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 5, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 15, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 20, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 29, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 35, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 12, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 13, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 12, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 23, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 30, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 34, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 41, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 13, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 8, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 26, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 21, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 26, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 39, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 44, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 14, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 15, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 12, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 23, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 30, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 16, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 15, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 22, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 29, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 43, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 17, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 13, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 19, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 26, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 38, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 41, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 18, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 19, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 20, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 7, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 18, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 21, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 30, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 44, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 21, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 12, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 19, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 26, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 41, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 22, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 21, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 39, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 44, \"tile_m\": 6, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 23, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 14, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 23, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 288, \"grouping\": 30, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 33, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 42, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 24, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 25, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 26, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 11, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 18, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 29, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 36, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 27, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 4, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 13, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 256, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 31, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 33, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 42, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 28, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 7, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 14, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 28, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 43, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 29, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 30, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 31, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 32, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 9, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 20, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 27, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 384, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 38, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 7, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 14, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 34, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 34, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 31, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 36, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 35, \"k\": 45, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 256, \"grouping\": 23, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 18, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 32, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 25, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 36, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 37, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 17, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 14, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 23, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 28, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 39, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 11, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 16, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 25, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 38, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 40, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 41, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 42, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 20, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 224, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 31, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 34, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 43, \"k\": 45, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 11, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 16, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 25, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 37, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 44, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 9, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 27, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 37, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 224, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 44, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 11, \"n\": 45, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 7, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 32, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 14, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 42, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 4, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 5, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 19, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 24, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 6, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 21, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 28, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 39, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 7, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 8, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 13, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 31, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 35, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 42, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 8, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 5, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 13, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 14, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 28, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 43, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 9, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 10, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 11, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 20, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 29, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 38, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 11, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 12, \"n\": 12, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 12, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 7, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 15, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 20, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 29, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 34, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 43, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 13, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 10, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 17, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 39, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 14, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 15, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 22, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 31, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 36, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 16, \"k\": 45, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 17, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 26, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 36, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 18, \"k\": 45, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 4, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 15, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 18, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 29, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 33, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 40, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 19, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 23, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 30, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 44, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 20, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 4, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 22, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 29, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 21, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 22, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 12, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 12, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 18, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 40, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 23, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 15, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 22, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 29, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 24, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 21, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 30, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 32, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 41, \"tile_m\": 6, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 25, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 26, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 4, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 13, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 33, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 27, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 28, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 4, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 13, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 41, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 29, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 19, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 17, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 26, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 37, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 44, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 30, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 31, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 32, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 10, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 17, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 288, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 33, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 15, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 20, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 29, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 42, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 34, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 35, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 10, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 39, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 36, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 37, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 14, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 38, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 16, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 288, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 10, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 24, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 40, \"k\": 45, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 10, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 41, \"k\": 45, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 42, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 16, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 42, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 43, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 44, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 10, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 12, \"n\": 45, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 4, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 4, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 4, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 20, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 4, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 4, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 38, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 41, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 1, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 4, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 5, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 5, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 5, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 5, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 5, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 25, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 5, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 5, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 6, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 15, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 17, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 36, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 43, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 7, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 5, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 10, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 23, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 28, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 8, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 9, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 9, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 9, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 9, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 9, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 9, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 9, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 4, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 13, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 19, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 42, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 10, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 19, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 14, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 17, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 43, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 11, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 12, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 13, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 13, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 11, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 13, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 13, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 13, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 25, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 13, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 36, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 13, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 9, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 14, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 19, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 28, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 33, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 42, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 14, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 15, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 16, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 17, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 16, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 16, \"k\": 14, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 16, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 16, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 28, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 32, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 43, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 16, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 17, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 17, \"k\": 18, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 17, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 27, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 37, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 17, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 18, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 10, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 37, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 19, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 4, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 15, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 32, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 43, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 20, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 21, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 22, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 22, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 22, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 22, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 22, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 28, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 22, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 23, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 23, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 23, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 23, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 23, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 23, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 31, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 38, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 23, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 12, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 32, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 41, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 24, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 25, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 26, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 26, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 26, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 20, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 17, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 13, \"n\": 26, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 13, \"n\": 26, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 29, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 39, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 40, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 26, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 23, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 30, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 37, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 44, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 27, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 28, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 16, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 27, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 29, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 12, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 30, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 30, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 31, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 36, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 32, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 12, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 43, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 33, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 16, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 31, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 34, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 35, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 19, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 26, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 44, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 36, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 15, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 20, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 43, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 37, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 38, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 4, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 11, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 39, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 19, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 320, \"grouping\": 11, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 36, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 40, \"k\": 45, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 41, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 31, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 44, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 42, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 11, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 28, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 39, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 43, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 44, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 4, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 18, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 15, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 18, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 29, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 32, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 43, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 13, \"n\": 45, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 4, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 5, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 6, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 13, \"minblocks\": 22, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 13, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 5, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 20, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 34, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 41, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 6, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 5, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 14, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 23, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 24, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 42, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 7, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 5, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 12, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 10, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 28, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 33, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 8, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 16, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 27, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 38, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 41, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 9, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 27, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 14, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 21, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 28, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 41, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 10, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 11, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 10, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 20, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 29, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 33, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 12, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 13, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 16, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 27, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 13, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 14, \"n\": 14, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 14, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 15, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 18, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 12, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 19, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 26, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 33, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 40, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 16, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 17, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 18, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 31, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 44, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 19, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 20, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 18, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 27, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 39, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 44, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 21, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 4, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 15, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 22, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 29, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 32, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 22, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 8, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 30, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 35, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 23, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 12, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 21, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 26, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 35, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 40, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 24, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 11, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 6, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 18, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 36, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 25, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 5, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 23, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 30, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 32, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 26, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 27, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 4, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 12, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 13, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 26, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 35, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 40, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 28, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 39, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 29, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 30, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 8, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 23, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 30, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 31, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 17, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 24, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 35, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 42, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 32, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 33, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 34, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 11, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 20, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 39, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 35, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 36, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 25, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 15, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 20, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 11, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 35, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 17, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 37, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 16, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 31, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 14, \"n\": 38, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 38, \"k\": 45, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 11, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 28, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 17, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 39, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 40, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 14, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 21, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 160, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 28, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 160, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 42, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 41, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 9, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 16, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 14, \"n\": 42, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 42, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 20, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 43, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 14, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 19, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 288, \"grouping\": 10, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 42, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 44, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 6, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 20, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 320, \"grouping\": 11, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 10, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 42, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 14, \"n\": 45, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 5, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 32, \"grouping\": 10, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 17, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 23, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 26, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 35, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 41, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 4, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 5, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 6, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 39, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 7, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 13, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 8, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 9, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 5, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 64, \"grouping\": 10, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 19, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 32, \"grouping\": 3, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 26, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 64, \"grouping\": 25, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 40, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 10, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 11, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 32, \"grouping\": 10, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 21, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 11, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 12, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 15, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 22, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 64, \"grouping\": 25, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 29, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 42, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 13, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 13, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 19, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 32, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 33, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 14, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 15, \"n\": 15, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 20, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 29, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 96, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 15, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 14, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 15, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 20, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 43, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 16, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 5, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 13, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 23, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 128, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 30, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 33, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 40, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 17, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 7, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 21, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 26, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 38, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 18, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 19, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 21, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 30, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 43, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 20, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 21, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 22, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 13, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 16, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 27, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 41, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 23, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 15, \"tile_m\": 8, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 22, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 32, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 24, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 25, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 38, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 26, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 19, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 18, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 27, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 32, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 41, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 27, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 28, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 6, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 13, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 31, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 192, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 33, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 128, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 40, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 29, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 10, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 29, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 39, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 30, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 4, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 20, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 13, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 18, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 27, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 32, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 41, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 17, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 31, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 10, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 19, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 32, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 10, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 17, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 24, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 39, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 33, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 14, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 23, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 28, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 43, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 17, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 34, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 35, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 10, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 160, \"grouping\": 29, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 19, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 28, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 38, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 36, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 37, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 38, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 14, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 25, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 32, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 43, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 256, \"grouping\": 10, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 39, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 40, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 26, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 39, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 8, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 40, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 8, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 41, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 9, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 64, \"grouping\": 25, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 23, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 30, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 10, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 42, \"k\": 45, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 15, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 16, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 25, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 34, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 96, \"grouping\": 26, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 43, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 43, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 44, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 10, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 24, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 15, \"n\": 45, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 7, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 32, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 64, \"grouping\": 5, \"minblocks\": 22, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 9, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 10, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 12, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 13, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 14, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 15, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 16, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 5, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 18, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 19, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 20, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 21, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 22, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 23, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 24, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 25, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 26, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 27, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 28, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 29, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 30, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 31, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 32, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 33, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 34, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 36, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 37, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 38, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 39, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 40, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 41, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 42, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 43, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 44, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 4, \"k\": 45, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 5, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 5, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 5, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 5, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 5, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 5, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 5, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 38, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 6, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 5, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 23, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 1, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 40, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 7, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 8, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 9, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 9, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 9, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 9, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 9, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 9, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 10, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 4, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 10, \"minblocks\": 23, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 13, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 22, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 11, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 12, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 10, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 13, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 13, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 13, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 13, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 19, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 13, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 32, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 41, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 13, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 7, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 32, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 25, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 14, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 15, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 16, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 16, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 16, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 16, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 16, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 44, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 16, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 17, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 17, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 17, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 28, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 17, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 18, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 4, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 64, \"grouping\": 6, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 29, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 42, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 19, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 6, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 23, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 20, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 21, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 22, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 22, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 22, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 22, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 23, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 23, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 16, \"n\": 23, \"k\": 14, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 23, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 16, \"n\": 23, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 42, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 23, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 12, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 40, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 24, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 25, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 9, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 16, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 37, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 128, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 44, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 26, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 19, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 15, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 29, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 42, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 27, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 28, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 20, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 192, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 38, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 29, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 6, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 9, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 16, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 30, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 192, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 31, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 10, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 6, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 21, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 28, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 32, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 8, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 31, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 38, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 33, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 13, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 34, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 6, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 16, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 27, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 35, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 20, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 39, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 7, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 40, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 36, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 37, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 15, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 20, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 38, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 9, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 16, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 27, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 39, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 8, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 19, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 28, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 26, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 40, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 41, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 14, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 21, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 64, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 43, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 42, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 9, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 18, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 27, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 160, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 37, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 43, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 44, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 10, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 23, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 24, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 37, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 6, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 16, \"n\": 45, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 4, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 32, \"grouping\": 10, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 15, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 22, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 32, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 43, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 4, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 8, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 5, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 17, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 39, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 44, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 5, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 6, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 5, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 18, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 1, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 7, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 7, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 43, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 8, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 8, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 9, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 9, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 9, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 36, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 9, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 10, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 11, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 12, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 8, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 13, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 13, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 13, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 30, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 44, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 13, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 12, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 18, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 27, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 32, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 39, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 40, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 14, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 15, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 7, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 16, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 14, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 16, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 21, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 16, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 28, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 32, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 16, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 17, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 17, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 17, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 17, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 17, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 9, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 20, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 27, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 18, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 9, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 160, \"grouping\": 29, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 16, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 19, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 20, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 20, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 14, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 19, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 24, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 21, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 22, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 22, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 22, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 22, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 23, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 11, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 23, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 23, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 17, \"n\": 23, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 25, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 23, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 14, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 23, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 28, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 24, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 24, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 25, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 224, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 26, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 4, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 19, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 32, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 41, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 17, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 27, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 28, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 14, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 24, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 34, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 29, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 11, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 28, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 30, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 31, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 8, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 6, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 19, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 26, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 32, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 17, \"n\": 33, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 33, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 23, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 30, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 37, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 44, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 192, \"grouping\": 8, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 34, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 4, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 11, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 22, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 32, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 35, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 19, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 26, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 44, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 224, \"grouping\": 10, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 36, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 12, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 21, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 37, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 38, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 12, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 21, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 30, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 32, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 41, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 39, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 8, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 26, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 36, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 40, \"k\": 45, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 4, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 15, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 18, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 33, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 40, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 96, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 41, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 42, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 20, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 34, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 64, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 43, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 43, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 44, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 27, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 12, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 18, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 33, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 40, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 17, \"n\": 45, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 4, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 4, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 32, \"grouping\": 10, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 15, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 22, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 25, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 42, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 5, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 8, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 19, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 64, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 9, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 6, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 17, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 1, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 7, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 6, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 64, \"grouping\": 4, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 8, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 9, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 10, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 11, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 23, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 44, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 12, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 6, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 15, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 16, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 25, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 42, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 13, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 14, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 17, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 15, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 6, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 15, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 32, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 16, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 42, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 16, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 7, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 23, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 17, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 17, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 18, \"n\": 18, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 18, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 19, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 20, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 6, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 9, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 31, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 21, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 10, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 17, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 24, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 22, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 23, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 4, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 7, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 15, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 24, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 25, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 26, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 10, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 27, \"k\": 45, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 8, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 26, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 14, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 35, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 28, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 9, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 22, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 36, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 29, \"k\": 45, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 160, \"grouping\": 25, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 33, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 42, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 30, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 31, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 4, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 13, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 32, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 11, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 25, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 18, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 33, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 4, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 13, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 10, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 34, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 35, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 36, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 37, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 26, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 44, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 37, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 12, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 33, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 40, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 96, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 38, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 288, \"grouping\": 10, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 36, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 43, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 39, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 26, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 38, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 41, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 40, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 41, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 42, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 8, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 192, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 30, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 44, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 43, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 12, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 19, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 26, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 41, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 44, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 11, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 39, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 44, \"tile_m\": 9, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 18, \"n\": 45, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 30, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 32, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 41, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 4, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 5, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 6, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 8, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 32, \"grouping\": 2, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 7, \"k\": 45, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 4, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 32, \"grouping\": 5, \"minblocks\": 27, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 32, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 2, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 8, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 44, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 9, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 5, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 7, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 33, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 40, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 10, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 11, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 12, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 13, \"k\": 45, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 4, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 15, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 15, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 18, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 40, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 14, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 15, \"k\": 45, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 7, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 20, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 43, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 16, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 17, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 18, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 10, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 192, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 19, \"n\": 19, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 19, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 6, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 34, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 43, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 20, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 6, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 23, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 16, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 21, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 22, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 10, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 23, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 13, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 27, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 24, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 14, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 42, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 25, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 26, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 27, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 28, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 16, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 25, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 29, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 13, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 20, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 30, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 10, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 19, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 38, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 31, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 8, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 6, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 26, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 44, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 192, \"grouping\": 8, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 32, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 33, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 34, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 12, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 10, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 35, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 160, \"grouping\": 7, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 8, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 6, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 25, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 36, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 4, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 26, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 37, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 38, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 39, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 35, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 192, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 42, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 40, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 12, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 41, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 11, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 22, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 25, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 42, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 43, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 44, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 4, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 26, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 13, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 41, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 19, \"n\": 45, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 4, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 12, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 5, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 6, \"k\": 45, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 1, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 7, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 5, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 37, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 8, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 9, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 9, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 27, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 10, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 20, \"n\": 11, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 11, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 11, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 11, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 43, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 11, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 8, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 20, \"n\": 12, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 12, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 12, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 31, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 12, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 12, \"k\": 45, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 10, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 13, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 14, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 4, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 13, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 15, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 43, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 15, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 14, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 17, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 16, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 4, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 13, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 13, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 42, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 17, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 18, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 19, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 20, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 20, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 20, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 20, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 20, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 14, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 33, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 42, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 21, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 22, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 23, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 8, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 44, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 24, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 20, \"n\": 25, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 25, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 25, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 25, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 25, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 11, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 25, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 44, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 17, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 26, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 12, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 41, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 27, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 43, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 28, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 12, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 19, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 29, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 30, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 13, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 20, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 31, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 41, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 8, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 31, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 32, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 32, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 32, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 27, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 20, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 40, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 32, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 43, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 33, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 34, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 35, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 36, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 160, \"grouping\": 7, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 16, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 25, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 64, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 34, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 96, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 43, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 37, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 13, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 41, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 38, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 39, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 14, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 33, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 42, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 40, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 41, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 23, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 32, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 41, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 42, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 10, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 17, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 24, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 38, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 43, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 13, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 27, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 33, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 192, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 40, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 44, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 7, \"tile_m\": 10, \"tile_n\": 1, \"threads\": 160, \"grouping\": 6, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 14, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 16, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 34, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 192, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 41, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 20, \"n\": 45, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 4, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 6, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 32, \"grouping\": 4, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 24, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 5, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 5, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 6, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 6, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 7, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 6, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 31, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 42, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 8, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 42, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 10, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 9, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 10, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 11, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 14, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 42, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 12, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 13, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 9, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 27, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 39, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 14, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 16, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 39, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 15, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 16, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 17, \"k\": 45, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 12, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 18, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 18, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 19, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 20, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 8, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 21, \"n\": 21, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 21, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 4, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 13, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 27, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 32, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 22, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 23, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 4, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 33, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 24, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 25, \"k\": 45, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 29, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 26, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 18, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 27, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 27, \"k\": 45, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 29, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 160, \"grouping\": 6, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 12, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 28, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 29, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 4, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 11, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 18, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 30, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 18, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 44, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 31, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 32, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 33, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 14, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 33, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 160, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 34, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 13, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 41, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 35, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 36, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 10, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 256, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 21, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 38, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 37, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 27, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 24, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 42, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 38, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 39, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 13, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 16, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 41, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 40, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 10, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 33, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 192, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 41, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 42, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 6, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 29, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 34, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 21, \"n\": 43, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 43, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 16, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 38, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 41, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 44, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 21, \"n\": 45, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 4, \"k\": 6, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 32, \"grouping\": 4, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 4, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 4, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 16, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 4, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 25, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 4, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 34, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 192, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 4, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 5, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 5, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 5, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 5, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 5, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 5, \"k\": 45, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 26, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 40, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 6, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 7, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 7, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 4, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 14, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 32, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 8, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 8, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 9, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 9, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 9, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 9, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 9, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 9, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 9, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 9, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 10, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 11, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 4, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 15, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 15, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 32, \"grouping\": 2, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 22, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 32, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 43, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 12, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 13, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 13, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 13, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 13, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 13, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 13, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 14, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 19, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 15, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 16, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 16, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 16, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 16, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 4, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 18, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 17, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 15, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 32, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 17, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 17, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 17, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 8, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 192, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 18, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 19, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 22, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 20, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 14, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 32, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 43, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 21, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 22, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 22, \"k\": 10, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 22, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 22, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 22, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 22, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 22, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 37, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 22, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 23, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 23, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 23, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 23, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 23, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 23, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 23, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 23, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 24, \"k\": 45, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 160, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 25, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 26, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 26, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 26, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 22, \"n\": 26, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 26, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 26, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 12, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 7, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 27, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 28, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 30, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 32, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 7, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 29, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 8, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 192, \"grouping\": 10, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 30, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 17, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 26, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 39, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 40, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 31, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 32, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 32, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 32, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 32, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 13, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 33, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 25, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 33, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 15, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 42, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 34, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 23, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 35, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 11, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 224, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 36, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 12, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 19, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 26, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 27, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 40, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 37, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 7, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 160, \"grouping\": 7, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 8, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 224, \"grouping\": 11, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 21, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 8, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 38, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 39, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 11, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 18, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 39, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 40, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 41, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 42, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 14, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 22, \"n\": 43, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 43, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 44, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 5, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 128, \"grouping\": 27, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 10, \"tile_m\": 11, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 22, \"n\": 45, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 4, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 4, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 18, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 4, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 25, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 4, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 44, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 96, \"grouping\": 1, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 4, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 5, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 5, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 5, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 5, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 18, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 5, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 25, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 5, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 5, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 8, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 23, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 30, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 6, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 7, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 9, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 18, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 27, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 36, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 32, \"grouping\": 29, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 8, \"k\": 45, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 9, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 9, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 5, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 9, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 9, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 9, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 9, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 9, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 37, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 32, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 10, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 12, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 32, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 23, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 30, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 32, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 33, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 32, \"grouping\": 25, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 40, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 32, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 11, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 9, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 25, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 27, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 1, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 12, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 13, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 13, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 13, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 13, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 13, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 13, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 13, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 14, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 4, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 15, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 15, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 32, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 22, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 33, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 40, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 15, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 16, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 16, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 16, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 16, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 16, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 16, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 17, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 17, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 17, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 17, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 28, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 38, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 17, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 6, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 17, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 32, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 24, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 35, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 42, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 18, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 14, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 32, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 42, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 19, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 9, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 32, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 20, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 9, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 20, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 27, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 39, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 21, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 22, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 7, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 22, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 22, \"k\": 14, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 25, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 22, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 22, \"k\": 24, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 22, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 35, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 42, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 22, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 23, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 23, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 23, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 23, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 23, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 23, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 23, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 11, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 16, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 25, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 38, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 24, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 9, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 27, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 38, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 96, \"grouping\": 25, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 25, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 26, \"k\": 6, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 26, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 26, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 17, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 23, \"n\": 26, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 26, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 35, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 40, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 25, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 26, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 35, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 25, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 42, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 160, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 27, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 11, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 16, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 25, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 39, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 128, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 28, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 29, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 30, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 20, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 31, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 7, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 35, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 42, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 31, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 32, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 9, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 25, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 22, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 31, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 33, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 4, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 160, \"grouping\": 7, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 15, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 18, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 29, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 32, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 43, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 34, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 8, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 27, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 26, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 39, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 44, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 35, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 22, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 29, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 96, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 36, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 23, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 30, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 36, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 43, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 37, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 5, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 7, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 12, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 18, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 32, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 43, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 38, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 38, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 192, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 39, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 12, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 21, \"tile_m\": 2, \"tile_n\": 8, \"threads\": 64, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 30, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 39, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 40, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 40, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 15, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 22, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 96, \"grouping\": 10, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 29, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 41, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 41, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 13, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 18, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 42, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 43, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 13, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 22, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 128, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 44, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 23, \"n\": 44, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 44, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 23, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 10, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 12, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 13, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 14, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 15, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 16, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 17, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 18, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 19, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 20, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 21, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 22, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 23, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 24, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 25, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 26, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 27, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 28, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 29, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 30, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 31, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 32, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 33, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 34, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 35, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 36, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 37, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 38, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 39, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 40, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 41, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 42, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 43, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 44, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 4, \"k\": 45, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 5, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 5, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 5, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 5, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 5, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 5, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 6, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 7, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 9, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 16, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 26, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 9, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 8, \"k\": 45, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 9, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 9, \"k\": 45, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 10, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 11, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 12, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 13, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 13, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 13, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 13, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 13, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 44, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 13, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 14, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 6, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 96, \"grouping\": 17, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 15, \"k\": 45, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 11, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 192, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 16, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 32, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 25, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 38, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 16, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 17, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 8, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 36, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 18, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 12, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 32, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 34, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 43, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 6, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 19, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 20, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 12, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 39, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 21, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 30, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 22, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 22, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 23, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 24, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 24, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 24, \"k\": 25, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 24, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 24, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 43, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 24, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 4, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 6, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 25, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 25, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 26, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 26, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 26, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 26, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 26, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 26, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 12, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 43, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 128, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 27, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 44, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 192, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 28, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 39, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 128, \"grouping\": 7, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 29, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 30, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 10, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 39, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 44, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 192, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 30, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 4, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 15, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 32, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 43, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 31, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 32, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 32, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 32, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 32, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 32, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 35, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 64, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 44, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 32, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 33, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 13, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 31, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 38, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 34, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 10, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 160, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 35, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 36, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 6, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 15, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 16, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 25, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 96, \"grouping\": 10, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 35, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 37, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 39, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 192, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 38, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 39, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 40, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 14, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 16, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 35, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 192, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 24, \"n\": 41, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 41, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 17, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 42, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 14, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 28, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 34, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 43, \"tile_m\": 12, \"tile_n\": 1, \"threads\": 96, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 13, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 16, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 31, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 192, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 35, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 42, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 24, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 4, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 4, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 4, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 4, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 4, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 4, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 4, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 4, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 5, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 5, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 5, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 5, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 15, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 22, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 5, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 5, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 5, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 35, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 42, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 5, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 6, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 19, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 36, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 6, \"k\": 45, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 7, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 7, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 7, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 7, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 7, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 7, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 7, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 7, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 8, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 6, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 4, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 9, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 6, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 8, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 9, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 9, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 9, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 9, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 9, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 9, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 9, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 9, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 10, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 8, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 6, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 44, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 10, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 10, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 11, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 11, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 11, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 11, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 11, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 12, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 12, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 44, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 12, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 13, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 13, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 13, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 13, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 13, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 13, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 13, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 42, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 13, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 14, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 14, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 19, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 64, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 14, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 14, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 14, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 38, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 15, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 6, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 6, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 15, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 32, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 16, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 32, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 42, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 16, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 30, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 37, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 128, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 44, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 17, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 18, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 39, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 19, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 20, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 20, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 20, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 20, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 20, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 20, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 21, \"k\": 45, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 17, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 17, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 26, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 38, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 22, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 23, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 4, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 7, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 15, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 25, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 22, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 25, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 35, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 42, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 24, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 25, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 25, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 25, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 25, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 25, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 25, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 25, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 25, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 25, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 26, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 26, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 26, \"k\": 10, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 64, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 26, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 17, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 24, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 26, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 26, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 26, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 39, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 25, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 26, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 27, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 26, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 37, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 44, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 128, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 27, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 28, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 28, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 28, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 28, \"k\": 14, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 28, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 28, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 28, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 35, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 28, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 28, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 29, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 22, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 29, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 36, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 29, \"k\": 45, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 30, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 10, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 26, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 19, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 36, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 31, \"k\": 45, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 192, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 32, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 32, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 32, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 32, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 32, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 32, \"k\": 27, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 32, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 32, \"k\": 33, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 13, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 32, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 33, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 10, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 21, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 28, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 7, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 39, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 33, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 34, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 9, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 25, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 27, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 35, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 35, \"k\": 45, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 256, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 36, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 29, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 36, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 37, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 14, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 23, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 24, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 34, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 38, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 38, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 39, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 40, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 39, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 44, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 288, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 31, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 128, \"grouping\": 12, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 34, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 192, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 41, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 192, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 16, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 27, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 25, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 25, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 25, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 4, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 4, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 4, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 2, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 4, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 32, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 43, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 4, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 5, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 5, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 5, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 5, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 5, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 30, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 44, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 5, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 6, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 24, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 34, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 7, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 6, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 7, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 43, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 8, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 9, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 8, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 9, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 9, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 9, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 9, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 36, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 9, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 12, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 39, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 10, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 43, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 11, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 12, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 13, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 7, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 13, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 13, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 13, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 13, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 13, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 4, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 14, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 18, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 32, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 43, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 15, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 21, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 34, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 288, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 16, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 17, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 18, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 37, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 19, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 20, \"k\": 45, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 14, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 64, \"grouping\": 2, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 37, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 21, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 22, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 22, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 22, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 18, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 22, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 22, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 22, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 23, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 23, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 23, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 23, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 23, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 23, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 14, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 23, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 24, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 17, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 34, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 25, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 26, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 26, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 11, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 64, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 26, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 26, \"n\": 26, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 26, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 26, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 26, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 27, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 28, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 224, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 17, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 34, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 29, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 9, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 26, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 25, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 9, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 31, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 37, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 32, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 33, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 34, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 13, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 17, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 33, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 192, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 42, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 192, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 35, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 29, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 36, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 36, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 13, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 37, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 37, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 288, \"grouping\": 11, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 38, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 38, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 39, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 224, \"grouping\": 10, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 41, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 192, \"grouping\": 7, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 224, \"grouping\": 10, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 22, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 18, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 26, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 41, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 26, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 2, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 35, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 192, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 4, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 4, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 32, \"grouping\": 8, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 32, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 5, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 25, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 39, \"tile_m\": 6, \"tile_n\": 1, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 6, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 35, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 7, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 8, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 7, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 16, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 64, \"grouping\": 2, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 44, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 9, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 6, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 16, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 64, \"grouping\": 4, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 38, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 10, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 64, \"grouping\": 4, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 1, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 1, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 11, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 7, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 6, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 17, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 7, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 12, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 13, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 14, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 13, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 32, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 31, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 33, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 40, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 15, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 7, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 31, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 224, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 37, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 44, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 16, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 7, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 2, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 39, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 17, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 6, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 16, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 18, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 26, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 19, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 20, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 21, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 9, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 6, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 16, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 37, \"tile_m\": 6, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 44, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 22, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 6, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 15, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 29, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 42, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 25, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 23, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 24, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 14, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 28, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 25, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 9, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 18, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 27, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 36, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 26, \"k\": 45, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 2, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 7, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 14, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 21, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 27, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 35, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 7, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 27, \"n\": 27, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 27, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 10, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 64, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 36, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 29, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 30, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 15, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 29, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 35, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 31, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 6, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 29, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 1, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 32, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 17, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 32, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 17, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 33, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 160, \"grouping\": 7, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 34, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 27, \"n\": 35, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 27, \"n\": 35, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 35, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 28, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 32, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 26, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 36, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 6, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 27, \"n\": 37, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 37, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 27, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 7, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 15, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 18, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 29, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 33, \"tile_m\": 6, \"tile_n\": 2, \"threads\": 96, \"grouping\": 11, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 40, \"tile_m\": 6, \"tile_n\": 2, \"threads\": 96, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 11, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 29, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 256, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 6, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 18, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 224, \"grouping\": 10, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 19, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 26, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 160, \"grouping\": 1, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 37, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 224, \"grouping\": 1, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 21, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 32, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 13, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 27, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 4, \"k\": 6, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 32, \"grouping\": 3, \"minblocks\": 26, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 4, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 27, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 4, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 33, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 160, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 40, \"tile_m\": 2, \"tile_n\": 1, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 4, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 14, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 5, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 16, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 5, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 5, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 6, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 10, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 17, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 128, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 7, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 8, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 6, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 160, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 34, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 32, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 43, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 9, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 38, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 41, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 10, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 11, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 17, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 12, \"k\": 45, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 13, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 13, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 32, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 14, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 10, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 33, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 15, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 12, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 32, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 21, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 30, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 39, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 40, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 16, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 17, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 34, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 43, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 18, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 8, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 36, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 19, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 26, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 20, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 36, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 21, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 22, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 8, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 37, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 23, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 24, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 22, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 25, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 12, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 18, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 32, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 26, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 27, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 15, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 28, \"k\": 29, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 28, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 29, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 32, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 43, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 30, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 26, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 31, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 10, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 64, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 32, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 33, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 34, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 14, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 35, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 35, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 35, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 320, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 36, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 36, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 160, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 20, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 29, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 28, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 21, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 28, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 16, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 27, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 41, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 4, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 5, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 6, \"tile_m\": 3, \"tile_n\": 1, \"threads\": 64, \"grouping\": 4, \"minblocks\": 18, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 13, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 31, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 33, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 40, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 6, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 4, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 41, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 7, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 8, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 10, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 39, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 32, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 9, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 5, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 64, \"grouping\": 4, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 14, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 33, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 32, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 42, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 10, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 11, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 5, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 32, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 32, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 41, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 12, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 10, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 13, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 14, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 14, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 14, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 14, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 14, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 9, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 32, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 37, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 15, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 11, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 16, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 16, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 29, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 39, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 16, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 4, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 26, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 13, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 35, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 40, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 17, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 18, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 4, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 26, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 13, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 31, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 32, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 41, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 19, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 11, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 18, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 36, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 20, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 21, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 15, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 22, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 29, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 35, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 42, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 22, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 12, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 32, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 23, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 24, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 13, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 26, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 33, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 40, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 25, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 7, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 26, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 8, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 26, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 30, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 35, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 26, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 27, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 28, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 29, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 29, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 26, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 29, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 29, \"k\": 33, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 160, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 24, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 29, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 30, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 30, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 31, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 32, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 20, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 32, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 29, \"n\": 32, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 35, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 32, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 32, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 33, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 27, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 34, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 16, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 35, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 35, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 26, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 35, \"tile_m\": 6, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 26, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 16, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 26, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 14, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 17, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 256, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 224, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 26, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 11, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 28, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 26, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 14, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 288, \"grouping\": 26, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 28, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 26, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 17, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 35, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 29, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 29, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 16, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 41, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 4, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 5, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 6, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 4, \"minblocks\": 17, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 15, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 43, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 7, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 8, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 10, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 39, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 9, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 6, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 64, \"grouping\": 4, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 13, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 31, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 33, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 40, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 10, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 7, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 4, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 34, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 41, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 11, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 5, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 32, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 12, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 13, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 24, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 14, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 15, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 29, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 39, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 16, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 4, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 26, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 35, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 64, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 40, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 17, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 512, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 18, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 19, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 36, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 128, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 20, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 21, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 22, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 5, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 22, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 31, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 32, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 23, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 24, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 19, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 33, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 25, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 15, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 22, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 29, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 35, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 96, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 26, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 32, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 27, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 38, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 28, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 33, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 40, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 29, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 21, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 30, \"n\": 30, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 35, \"tile_m\": 3, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 30, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 31, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 30, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 34, \"tile_m\": 5, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 32, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 30, \"n\": 33, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 30, \"n\": 33, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 30, \"n\": 33, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 33, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 30, \"n\": 34, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 34, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 19, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 14, \"tile_m\": 5, \"tile_n\": 3, \"threads\": 96, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 30, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 30, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 6, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 13, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 15, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 20, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 25, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 26, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 28, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 29, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 32, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 35, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 4, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 23, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 5, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 5, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 24, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 32, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 6, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 10, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 38, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 7, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 8, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 6, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 64, \"grouping\": 4, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 320, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 9, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 13, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 31, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 10, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 33, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 11, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 13, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 33, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 40, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 12, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 7, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 41, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 13, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 41, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 14, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 15, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 30, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 16, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 17, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 18, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 26, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 64, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 37, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 64, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 19, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 20, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 21, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 22, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 19, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 64, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 26, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 36, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 23, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 24, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 31, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 25, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 5, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 15, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 26, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 27, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 28, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 36, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 29, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 31, \"n\": 30, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 30, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 31, \"n\": 31, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 31, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 96, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 31, \"n\": 32, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 32, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 33, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 27, \"tile_m\": 2, \"tile_n\": 8, \"threads\": 96, \"grouping\": 26, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 24, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 24, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 24, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 20, \"tile_m\": 2, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 24, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 31, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 31, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 4, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 5, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 6, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 32, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 7, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 8, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 9, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 10, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 11, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 12, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 4, \"k\": 14, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 16, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 17, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 18, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 19, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 20, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 21, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 22, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 23, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 24, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 4, \"k\": 27, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 4, \"k\": 29, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 30, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 31, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 4, \"k\": 33, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 34, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 36, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 37, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 38, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 39, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 40, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 41, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 42, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 43, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 44, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 4, \"k\": 45, \"threads\": 128, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 5, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 5, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 12, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 5, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 5, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 5, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 6, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 6, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 7, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 7, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 7, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 7, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 16, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 7, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 7, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 38, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 7, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 8, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 9, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 36, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 8, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 9, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 9, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 9, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 9, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 9, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 10, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 10, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 10, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 10, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 5, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 64, \"grouping\": 4, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 11, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 11, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 11, \"k\": 33, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 11, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 12, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 12, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 12, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 12, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 12, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 13, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 13, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 13, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 13, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 13, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 13, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 14, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 14, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 13, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 33, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 15, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 16, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 16, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 16, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 29, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 36, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 17, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 24, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 18, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 19, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 4, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 20, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 20, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 31, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 26, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 20, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 7, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 21, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 22, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 22, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 36, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 23, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 24, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 24, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 24, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 24, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 24, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 44, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 24, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 25, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 25, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 25, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 25, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 25, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 25, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 25, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 26, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 26, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 26, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 26, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 26, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 26, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 26, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 26, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 41, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 26, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 27, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 11, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 27, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 28, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 28, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 28, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 28, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 28, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 28, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 29, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 29, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 29, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 30, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 31, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 32, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 32, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 32, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 32, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 32, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"m\": 32, \"n\": 32, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 32, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 32, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 32, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 96, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 23, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 32, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 32, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 4, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 26, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 41, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 4, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 5, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 4, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 32, \"grouping\": 3, \"minblocks\": 25, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 29, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 6, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 3, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 7, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 4, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 64, \"grouping\": 4, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 13, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 32, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 8, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 11, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 9, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 10, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 11, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 12, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 37, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 13, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 42, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 14, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 37, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 15, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 16, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 17, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 18, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 19, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 20, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 21, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 13, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 22, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 5, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 23, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 23, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 38, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 24, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 16, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 25, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 26, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 27, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 28, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 29, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 30, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 31, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 22, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 96, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 33, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 33, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 22, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 33, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 19, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 24, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 37, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 42, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 4, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 5, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 6, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 4, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 32, \"grouping\": 4, \"minblocks\": 21, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 7, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 8, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 8, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 9, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 38, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 10, \"k\": 45, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 32, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 11, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 12, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 128, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 13, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 29, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 38, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 14, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 15, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 16, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 31, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 38, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 17, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 6, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 18, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 5, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 34, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 19, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 20, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 21, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 22, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 6, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 512, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 34, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 23, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 17, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 24, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 25, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 26, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 34, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 27, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 28, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 29, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 30, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 23, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 128, \"grouping\": 4, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 20, \"tile_m\": 3, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 34, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 34, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 34, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 34, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 4, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 4, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 19, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 33, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 42, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 4, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 5, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 6, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 7, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 5, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 33, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 416, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 8, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 9, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 10, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 30, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 11, \"k\": 45, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 4, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 33, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 40, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 12, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 8, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 512, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 13, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 14, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 15, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 16, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 17, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 6, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 34, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 18, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 16, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 34, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 19, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 40, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 64, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 20, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 21, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 22, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 6, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 23, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 24, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 25, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 26, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 16, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 34, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 27, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 28, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 29, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 14, \"tile_m\": 3, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 35, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 35, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 35, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 35, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 35, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 35, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 16, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 25, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 39, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 4, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 5, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 37, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 44, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 6, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 12, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 7, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 9, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 36, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 8, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 11, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 25, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 32, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 9, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 10, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 4, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 33, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 11, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 12, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 512, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 13, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 22, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 37, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 14, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 15, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 16, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 17, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 17, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 35, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 18, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 22, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 31, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 19, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 22, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 40, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 20, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 21, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 6, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 35, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 42, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 22, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 28, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 23, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 24, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 25, \"k\": 45, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 26, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 35, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 42, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 27, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 28, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 36, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 36, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 36, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 21, \"tile_m\": 2, \"tile_n\": 6, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 36, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 352, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 36, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 36, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 36, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 6, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 4, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 3, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 16, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 25, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 34, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 43, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 4, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 5, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 6, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 12, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 7, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 32, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 416, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 352, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 8, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 9, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 10, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 11, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 12, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 13, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 14, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 26, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 15, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 30, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 16, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 4, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 96, \"grouping\": 26, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 17, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 18, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 19, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 31, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 37, \"tile_m\": 4, \"tile_n\": 2, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 20, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 25, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 21, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 22, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 41, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 23, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 34, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 24, \"k\": 45, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 25, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 44, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 26, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 27, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 37, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 320, \"grouping\": 24, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 37, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 352, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 37, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 37, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 37, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 38, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 4, \"k\": 45, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 6, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 24, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 35, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 480, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 5, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 160, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 6, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 16, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 7, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 6, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 35, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 352, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 8, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 9, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 4, \"tile_m\": 2, \"tile_n\": 2, \"threads\": 96, \"grouping\": 5, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 32, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 41, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 10, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 11, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 7, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 35, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 42, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 12, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 13, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 14, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 25, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 38, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 15, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 31, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 16, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 17, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 18, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 37, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 44, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 19, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 20, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 37, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 21, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 41, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 22, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 25, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 36, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 23, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 15, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 33, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 24, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 17, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 36, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 25, \"k\": 45, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 42, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 26, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 27, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 38, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 320, \"grouping\": 24, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 38, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 38, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 38, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 38, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 38, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 38, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 38, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 38, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 3, \"minblocks\": 20, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 10, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 20, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 31, \"tile_m\": 5, \"tile_n\": 1, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 38, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 224, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 4, \"k\": 45, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 192, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 10, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 5, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 6, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 7, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 37, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 8, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 9, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 10, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 4, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 64, \"grouping\": 4, \"minblocks\": 13, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 29, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 11, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 12, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 5, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 33, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 13, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 9, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 27, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 37, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 14, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 32, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 15, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 16, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 17, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 18, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 19, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 43, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 20, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 21, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 22, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 23, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 17, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 26, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 24, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 25, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 26, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 13, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 41, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 27, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 39, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 35, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 39, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 39, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 39, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 39, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 39, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 4, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 5, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 6, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 7, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 8, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 9, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 11, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 12, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 13, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 14, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 15, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 16, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 17, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 18, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 19, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 21, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 22, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 23, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 24, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 25, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 26, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 27, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 28, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 29, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 30, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 31, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 32, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 33, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 34, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 35, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 36, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 37, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 38, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 39, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 40, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 41, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 42, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 43, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 44, \"threads\": 160, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 4, \"k\": 45, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 5, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 6, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 9, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 31, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 6, \"k\": 45, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 37, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 7, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 8, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 10, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 9, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 512, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 28, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 37, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 10, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 11, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 36, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 12, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 512, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 13, \"k\": 45, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 14, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 25, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 15, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 5, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 16, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 26, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 17, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 18, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 9, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 31, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 19, \"k\": 45, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 32, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 20, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 21, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 35, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 42, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 22, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 30, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 39, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 23, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 24, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 480, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 37, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 25, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 12, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 35, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 40, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 26, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 27, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 21, \"tile_m\": 4, \"tile_n\": 3, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 40, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 40, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 40, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 40, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 40, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 22, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 40, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 40, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 19, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 40, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 40, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 24, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 36, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 4, \"k\": 45, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 7, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 14, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 21, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 34, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 5, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 6, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 11, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 7, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 8, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 6, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 160, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 34, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 9, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 38, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 10, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 11, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 6, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 4, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 12, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 13, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 9, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 31, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 37, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 44, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 14, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 37, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 15, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 8, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 30, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 16, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 17, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 7, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 16, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 34, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 18, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 6, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 19, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 29, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 38, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 20, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 5, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 21, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 22, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 5, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 23, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 24, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 4, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 32, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 13, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 22, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 32, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 25, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 26, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 27, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 41, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 5, \"minblocks\": 1, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 41, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 41, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 41, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 41, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 41, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 512, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 41, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 41, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 41, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 4, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 9, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 64, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 18, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 27, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 320, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 5, \"k\": 45, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 5, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 11, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 16, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 25, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 32, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 6, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 64, \"grouping\": 3, \"minblocks\": 11, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 31, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 35, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 7, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 34, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 8, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 5, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 10, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 4, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 23, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 28, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 33, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 9, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 26, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 29, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 352, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 38, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 10, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 11, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 12, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 33, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 13, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 14, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 44, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 15, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 33, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 16, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 17, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 6, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 13, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 34, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 18, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 19, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 20, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 38, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 21, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 35, \"tile_m\": 7, \"tile_n\": 2, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 22, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 6, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 23, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 24, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 25, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 4, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 32, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 13, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 19, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 32, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 41, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 26, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 7, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 480, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 27, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 5, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 128, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 128, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 192, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 352, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 42, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 42, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 64, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 22, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 29, \"tile_m\": 7, \"tile_n\": 1, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 43, \"tile_m\": 3, \"tile_n\": 2, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 4, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 12, \"tile_m\": 2, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 15, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 21, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 22, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 29, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 35, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 42, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 5, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 4, \"minblocks\": 14, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 6, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 7, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 6, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 7, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 13, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 16, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 30, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 512, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 31, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 34, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 41, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 43, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 8, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 6, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 384, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 9, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 8, \"tile_m\": 1, \"tile_n\": 10, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 13, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 19, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 33, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 40, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 10, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 11, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 12, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 96, \"grouping\": 4, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 6, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 15, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 29, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 33, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 192, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 42, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 13, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 480, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 14, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 11, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 21, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 38, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 43, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 15, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 41, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 16, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 5, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 12, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 26, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 17, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 18, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 4, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 22, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 29, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 32, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 19, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 6, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 31, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 160, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 34, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 41, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 20, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 26, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 33, \"tile_m\": 2, \"tile_n\": 7, \"threads\": 128, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 21, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 9, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 18, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 27, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 39, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 44, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 22, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 23, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 32, \"tile_m\": 2, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 41, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 24, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 17, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 36, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 25, \"k\": 45, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 19, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 33, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 26, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 27, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 28, \"tile_m\": 2, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 352, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 12, \"threads\": 160, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 26, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 43, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 43, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 4, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 4, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 5, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 6, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 7, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 8, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 9, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 10, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 11, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 12, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 13, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 14, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 15, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 96, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 16, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 17, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 18, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 19, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 20, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 21, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 22, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 23, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 24, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 25, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 26, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 27, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 28, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 29, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 30, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 31, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 32, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 33, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 34, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 36, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 37, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 38, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 39, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 40, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 41, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 43, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 44, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 5, \"k\": 45, \"threads\": 224, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 5, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 4, \"minblocks\": 15, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 7, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 160, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 14, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 19, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 21, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 256, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 28, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 34, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 41, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 6, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 7, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 4, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 5, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 6, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 7, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 8, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 9, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 10, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 11, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 12, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 13, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 14, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 15, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 17, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 18, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 19, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 20, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 21, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 22, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 23, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 24, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 25, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 26, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 27, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 28, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 29, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 30, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 31, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 32, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 33, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 34, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 35, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 36, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 37, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 38, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 39, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 40, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 41, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 160, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 42, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 43, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 44, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 8, \"k\": 45, \"threads\": 352, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 16, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 27, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 38, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 41, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 9, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 4, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 5, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 6, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 7, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 8, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 9, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 10, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 11, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 12, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 14, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 15, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 16, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 17, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 18, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 20, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 21, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 22, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 23, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 24, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 25, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 27, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 28, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 29, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 30, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 31, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 32, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 33, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 192, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 34, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 35, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 36, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 37, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 38, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 39, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 41, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 42, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 43, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 44, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 10, \"k\": 45, \"threads\": 448, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 7, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 14, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 17, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 288, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 24, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 29, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 96, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 35, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 42, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 11, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 10, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 20, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 29, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 30, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 33, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 43, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 12, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 4, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 5, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 6, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 10, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 7, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 8, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 9, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 10, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 11, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 12, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 13, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 14, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 16, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 17, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 18, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 19, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 20, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 21, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 22, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 23, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 24, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 25, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 26, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 27, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 28, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 29, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 30, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 31, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 32, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 33, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 34, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 35, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 36, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 37, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 38, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 39, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 40, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 41, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 43, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 44, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 13, \"k\": 45, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 5, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 14, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 32, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 41, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 14, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 4, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 5, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 6, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 7, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 8, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 9, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 10, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 12, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 13, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 14, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 15, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 16, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 17, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 18, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 19, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 20, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 21, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 22, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 23, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 24, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 25, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 26, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 27, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 28, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 29, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 30, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 31, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 32, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 33, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 34, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 35, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 36, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 37, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 38, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 39, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 40, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 41, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 42, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 43, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 44, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 15, \"k\": 45, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 6, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 8, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 288, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 22, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 29, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 31, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 34, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 35, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 43, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 44, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 16, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 5, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 30, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 40, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 128, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 17, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 4, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 5, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 6, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 7, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 8, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 9, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 10, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 11, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 12, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 13, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 14, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 15, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 16, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 17, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 18, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 19, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 20, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 21, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 22, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 23, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 24, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 25, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 26, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 27, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 28, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 29, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 30, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 31, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 32, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 33, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 34, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 35, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 36, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 37, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 38, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 39, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 40, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 41, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 42, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 43, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 44, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 18, \"k\": 45, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 7, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 8, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 21, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 30, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 35, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 19, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 4, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 5, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 6, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 7, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 8, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 9, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 10, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 11, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 12, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 13, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 14, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 15, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 16, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 17, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 18, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 19, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 20, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 21, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 22, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 23, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 24, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 25, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 26, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 27, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 28, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 29, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 30, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 31, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 32, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 33, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 34, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 35, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 36, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 37, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 38, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 39, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 40, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 41, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 42, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 43, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 44, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 20, \"k\": 45, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 6, \"tile_m\": 1, \"tile_n\": 11, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 31, \"tile_m\": 2, \"tile_n\": 4, \"threads\": 160, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 21, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 5, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 8, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 12, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 480, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 23, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 26, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 30, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 32, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 38, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 22, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 4, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 5, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 6, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 7, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 8, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 9, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 10, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 11, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 12, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 13, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 14, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 15, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 16, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 17, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 18, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 19, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 20, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 21, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 22, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 23, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 24, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 25, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 26, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 27, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 28, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 29, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 30, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 31, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 32, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 33, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 34, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 35, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 36, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 37, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 38, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 39, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 40, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 41, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 42, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 43, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 44, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 23, \"k\": 45, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 15, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 224, \"grouping\": 4, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 29, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 43, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 24, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 25, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 29, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 39, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 26, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 576, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 4, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 27, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 32, \"tile_m\": 2, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 41, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 27, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 37, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 31, \"tile_m\": 2, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 672, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 41, \"tile_m\": 2, \"tile_n\": 3, \"threads\": 256, \"grouping\": 26, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 27, \"tile_m\": 2, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 800, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 896, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 352, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 224, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 512, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 352, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 512, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 352, \"grouping\": 26, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 44, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 44, \"n\": 45, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 1024, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 4, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 5, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 6, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 7, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 8, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 9, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 10, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 11, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 12, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 13, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 14, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 15, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 16, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 17, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 18, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 19, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 20, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 21, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 22, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 23, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 24, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 25, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 26, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 27, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 28, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 29, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 30, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 31, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 32, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 33, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 34, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 35, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 36, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 37, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 38, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 39, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 40, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 41, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 42, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 43, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 44, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 4, \"k\": 45, \"threads\": 192, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 4, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 5, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 6, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 7, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 8, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 9, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 10, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 11, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 12, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 13, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 14, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 15, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 16, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 96, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 17, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 18, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 19, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 20, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 21, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 22, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 23, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 24, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 25, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 4, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 26, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 27, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 28, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 29, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 30, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 31, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 32, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 33, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 34, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 35, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 36, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 37, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 38, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 39, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 40, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 41, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 42, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 43, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 44, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 5, \"k\": 45, \"threads\": 256, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 4, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 5, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 6, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 7, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 64, \"grouping\": 3, \"minblocks\": 16, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 8, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 9, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 10, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 11, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 12, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 13, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 128, \"grouping\": 3, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 15, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 16, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 17, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 18, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 19, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 20, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 22, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 23, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 24, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 25, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 26, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 27, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 28, \"tile_m\": 1, \"tile_n\": 1, \"threads\": 480, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 29, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 30, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 31, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 32, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 33, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 35, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 36, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 37, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 38, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 39, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 40, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 320, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 42, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 43, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 44, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 6, \"k\": 45, \"threads\": 288, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 4, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 5, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 6, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 7, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 8, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 9, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 10, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 11, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 12, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 13, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 14, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 15, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 16, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 17, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 18, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 19, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 20, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 21, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 22, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 23, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 24, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 25, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 26, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 27, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 28, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 29, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 30, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 31, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 32, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 33, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 34, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 35, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 36, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 37, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 38, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 39, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 40, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 41, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 42, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 43, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 44, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 7, \"k\": 45, \"threads\": 320, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 4, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 5, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 6, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 7, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 8, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 9, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 10, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 160, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 11, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 12, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 13, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 14, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 15, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 16, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 17, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 18, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 19, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 20, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 21, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 22, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 23, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 128, \"grouping\": 3, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 24, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 25, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 26, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 27, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 28, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 29, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 30, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 31, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 32, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 33, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 34, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 35, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 36, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 37, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 38, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 39, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 40, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 41, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 42, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 43, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 44, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 8, \"k\": 45, \"threads\": 384, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 4, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 5, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 6, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 7, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 8, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 9, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 10, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 11, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 12, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 13, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 14, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 15, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 16, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 17, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 18, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 19, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 20, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 21, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 22, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 23, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 24, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 25, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 26, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 27, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 28, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 29, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 30, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 31, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 32, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 33, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 34, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 35, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 36, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 37, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 38, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 160, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 39, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 40, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 41, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 42, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 43, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 44, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 9, \"k\": 45, \"threads\": 416, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 4, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 5, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 6, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 7, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 8, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 9, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 10, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 11, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 12, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 13, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 14, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 15, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 16, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 17, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 18, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 19, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 20, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 21, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 22, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 23, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 24, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 25, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 26, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 27, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 28, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 29, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 30, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 31, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 32, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 33, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 34, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 35, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 36, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 37, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 38, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 39, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 40, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 41, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 42, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 43, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 44, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 10, \"k\": 45, \"threads\": 480, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 4, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 5, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 6, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 7, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 128, \"grouping\": 4, \"minblocks\": 9, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 8, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 9, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 10, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 11, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 12, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 13, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 15, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 16, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 17, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 18, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 19, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 20, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 21, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 22, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 23, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 384, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 25, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 26, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 27, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 28, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 29, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 30, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 31, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 32, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 33, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 34, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 36, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 37, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 38, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 39, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 40, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 41, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 42, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 43, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 44, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 11, \"k\": 45, \"threads\": 512, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 4, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 5, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 6, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 7, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 8, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 9, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 160, \"grouping\": 29, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 11, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 12, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 13, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 14, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 15, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 16, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 17, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 18, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 19, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 480, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 21, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 22, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 23, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 24, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 25, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 26, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 27, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 28, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 224, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 30, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 31, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 32, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 33, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 160, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 34, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 35, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 36, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 37, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 38, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 39, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 40, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 41, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 42, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 43, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 44, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 12, \"k\": 45, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 4, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 5, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 6, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 7, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 8, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 9, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 10, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 11, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 12, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 13, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 14, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 15, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 16, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 17, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 18, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 19, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 20, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 21, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 22, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 23, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 24, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 25, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 26, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 27, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 28, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 29, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 30, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 31, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 32, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 33, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 34, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 35, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 36, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 37, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 38, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 39, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 40, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 41, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 42, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 43, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 44, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 13, \"k\": 45, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 4, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 5, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 96, \"grouping\": 3, \"minblocks\": 12, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 6, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 7, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 8, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 9, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 10, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 11, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 12, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 13, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 15, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 16, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 17, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 18, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 19, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 20, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 21, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 22, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 23, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 24, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 25, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 26, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 27, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 28, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 29, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 30, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 31, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 33, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 34, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 35, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 36, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 37, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 38, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 39, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 40, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 41, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 42, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 43, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 44, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 14, \"k\": 45, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 4, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 5, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 6, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 7, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 8, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 128, \"grouping\": 3, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 9, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 10, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 11, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 12, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 13, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 14, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 15, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 16, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 17, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 18, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 19, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 20, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 21, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 23, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 24, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 25, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 26, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 27, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 28, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 29, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 30, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 32, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 33, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 34, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 36, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 37, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 38, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 39, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 40, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 41, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 42, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 43, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 44, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 15, \"k\": 45, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 4, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 5, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 192, \"grouping\": 5, \"minblocks\": 7, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 6, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 7, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 8, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 9, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 10, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 11, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 12, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 13, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 14, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 15, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 16, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 17, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 18, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 19, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 20, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 21, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 22, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 23, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 24, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 25, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 26, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 27, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 28, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 29, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 30, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 31, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 32, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 33, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 34, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 35, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 36, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 37, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 38, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 39, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 40, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 41, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 42, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 43, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 44, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 16, \"k\": 45, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 4, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 5, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 6, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 7, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 8, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 9, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 10, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 11, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 12, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 13, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 14, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 15, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 16, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 17, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 18, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 19, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 20, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 21, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 22, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 23, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 24, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 25, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 26, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 27, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 28, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 29, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 30, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 31, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 32, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 33, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 34, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 35, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 36, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 37, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 38, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 39, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 40, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 41, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 42, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 43, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 44, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 17, \"k\": 45, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 4, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 192, \"grouping\": 5, \"minblocks\": 8, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 5, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 6, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 7, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 8, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 9, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 10, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 11, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 12, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 13, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 14, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 15, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 16, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 17, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 18, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 19, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 20, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 21, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 22, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 23, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 24, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 25, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 26, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 27, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 28, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 29, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 30, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 31, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 32, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 33, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 34, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 35, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 36, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 37, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 38, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 39, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 40, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 41, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 42, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 43, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 44, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 18, \"k\": 45, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 4, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 5, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 6, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 7, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 8, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 9, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 10, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 11, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 12, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 13, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 14, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 15, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 16, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 17, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 18, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 19, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 20, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 21, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 22, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 23, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 24, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 25, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 26, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 27, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 28, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 29, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 31, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 32, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 33, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 34, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 35, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 36, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 37, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 38, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 39, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 40, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 41, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 42, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 43, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 44, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 19, \"k\": 45, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 4, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 5, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 6, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 7, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 8, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 9, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 10, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 11, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 12, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 13, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 14, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 15, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 16, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 17, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 18, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 19, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 20, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 21, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 22, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 23, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 24, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 25, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 26, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 27, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 28, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 29, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 30, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 31, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 32, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 33, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 34, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 35, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 36, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 37, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 38, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 39, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 40, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 41, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 42, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 43, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 44, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 20, \"k\": 45, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 4, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 5, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 6, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 7, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 8, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 10, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 11, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 12, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 13, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 14, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 15, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 16, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 17, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 18, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 160, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 19, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 20, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 21, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 22, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 23, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 24, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 25, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 26, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 27, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 28, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 29, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 30, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 31, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 32, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 33, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 34, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 35, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 36, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 37, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 38, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 39, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 40, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 41, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 42, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 43, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 44, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 21, \"k\": 45, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 4, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 5, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 6, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 7, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 8, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 9, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 10, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 11, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 288, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 13, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 14, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 15, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 16, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 17, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 18, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 19, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 20, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 21, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 22, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 24, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 25, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 26, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 27, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 28, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 29, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 31, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 32, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 33, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 34, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 35, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 36, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 37, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 38, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 39, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 40, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 41, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 42, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 43, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 44, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 22, \"k\": 45, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"tiny\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 23, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 7, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 21, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 192, \"grouping\": 3, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 35, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 24, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 544, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 11, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 352, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 480, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 36, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 25, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 26, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 608, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 8, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 224, \"grouping\": 5, \"minblocks\": 5, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 23, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 36, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 27, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 4, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 5, \"minblocks\": 6, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 13, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 26, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 35, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 320, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 40, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 192, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 28, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 640, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 29, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 12, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 21, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 30, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 39, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 30, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 10, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 19, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 38, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 384, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 31, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 14, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 448, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 32, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 32, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 32, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 736, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 34, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 416, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 33, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 33, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 10, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 17, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 24, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 256, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 34, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 34, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 768, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 10, \"tile_m\": 1, \"tile_n\": 4, \"threads\": 480, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 19, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 192, \"grouping\": 24, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 35, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 36, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 832, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 14, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 23, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 28, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 288, \"grouping\": 3, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 37, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 37, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 37, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 10, \"tile_m\": 1, \"tile_n\": 6, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 17, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 24, \"tile_m\": 1, \"tile_n\": 8, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 38, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 864, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 39, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 14, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 16, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 25, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 24, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 40, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 40, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 40, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 928, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 5, \"minblocks\": 4, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 9, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 416, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 20, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 4, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 31, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 320, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 41, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 41, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 42, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 960, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 6, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 10, \"tile_m\": 1, \"tile_n\": 5, \"threads\": 480, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 15, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 16, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 20, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 25, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 34, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 43, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 43, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 43, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 4, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 5, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 6, \"tile_m\": 1, \"tile_n\": 7, \"threads\": 384, \"grouping\": 5, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 7, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 8, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 9, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 10, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 11, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 12, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 13, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 14, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 15, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 16, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 256, \"grouping\": 3, \"minblocks\": 3, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 17, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 18, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 19, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 20, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 21, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 22, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 23, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 24, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 25, \"tile_m\": 1, \"tile_n\": 9, \"threads\": 352, \"grouping\": 4, \"minblocks\": 2, \"algorithm\": \"medium\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 26, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 27, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 28, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 29, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 30, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 31, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 32, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 33, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 44, \"k\": 35, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 36, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 37, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 38, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 39, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 40, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 41, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 42, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"m\": 45, \"n\": 44, \"k\": 44, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 44, \"k\": 45, \"tile_m\": 1, \"tile_n\": 2, \"threads\": 992, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 4, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 5, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 6, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 7, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 8, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 9, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 10, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 11, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 12, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 13, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 14, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 15, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 16, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 17, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 18, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 19, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 20, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 21, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 22, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 23, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 24, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 25, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 26, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 27, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 28, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 29, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 30, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 31, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 32, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 33, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 34, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 35, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 36, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 37, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 38, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 39, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 40, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 41, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 42, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 43, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"m\": 45, \"n\": 45, \"k\": 44, \"tile_m\": 1, \"tile_n\": 3, \"threads\": 704, \"grouping\": 2, \"minblocks\": 1, \"algorithm\": \"small\", \"source\": \"predicted\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"},\n{\"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\"}\n]"
  },
  {
    "path": "src/acc/libsmm_acc/parameters_utils.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef PARAMETERS_UTILS_H\n#define PARAMETERS_UTILS_H\n\n#include <array>\n#include <vector>\n#include <unordered_map>\n#include <functional>\n\ntypedef std::array<int, 3> Triplet;\ntypedef std::array<int, 8> KernelParameters;\n\nnamespace std {\ntemplate<> struct hash<Triplet> {\n  size_t operator()(std::array<int, 3> const& k) const noexcept {\n    /* the hash of an int is the int itself (perfect hash) */\n    size_t seed = k[0];\n    /* then mix the other hashes into it, see also boost::hash_combine */\n    seed ^= static_cast<size_t>(k[1]) + 0x9e3779b9 + (seed << 6) + (seed >> 2);\n    seed ^= static_cast<size_t>(k[2]) + 0x9e3779b9 + (seed << 6) + (seed >> 2);\n    return seed;\n  }\n};\n} // namespace std\n\ninline void get_libsmm_acc_triplets(std::vector<Triplet>& v, std::unordered_map<Triplet, KernelParameters> const& ht) {\n  for (auto it = ht.begin(); it != ht.end(); ++it) v.push_back(it->first);\n}\n\n#endif /*PARAMETERS_UTILS_H*/\n"
  },
  {
    "path": "src/acc/libsmm_acc/tune/.gitignore",
    "content": "tune_*/"
  },
  {
    "path": "src/acc/libsmm_acc/tune/README.md",
    "content": "# Auto-tuning Procedure for Finding Optimal CUDA/HIP Kernel Parameters in `libsmm_acc`\n\nThe 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.\n\n---\n\n### Requirements\n\nPython version required: `python 3.6+`\n\nIf 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).\n\nInstall 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\n\n```bash\npip install -r requirements.txt\n```\n\n---\n\n### Auto-tuning procedure\n\n#### 1. Go to the `libsmm_acc/tune` directory\n\n```bash\n$ cd dbcsr/src/acc/libsmm_acc/tune\n```\n\nThe `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:\n```bash\n$ cp ~/dbcsr/build_dir/src/acc/libsmm_acc/parameters.h ../\n```\n\n#### 2. Adapt `tune_setup.py` to your environment\n\nThe `tune_setup.py` script generates job files. You have to adapt the script to the environment of your supercomputer and your personal settings.\n\n```\n...\n  def gen_jobfile(outdir, m, n, k):\n\n    ...\n\n    output = \"#!/bin/bash -l\\n\"\n    output += \"#SBATCH --nodes=%d\\n\" % num_nodes\n    output += \"#SBATCH --ntasks-per-core=1\\n\"\n    output += \"#SBATCH --ntasks-per-node=1\\n\"\n    output += \"#SBATCH --cpus-per-task=\" + \"%d\\n\" % cpus_per_node\n    output += \"#SBATCH --time=%s\\n\" % time\n    output += \"#SBATCH --partition=normal\\n\"\n    output += \"#SBATCH --constraint=gpu\\n\"\n    output += \"\\n\"\n    output += \"source ${MODULESHOME}/init/sh;\\n\"\n    output += \"module load daint-gpu\\n\"\n    output += \"module unload PrgEnv-cray\\n\"\n    output += \"module load PrgEnv-gnu\\n\"\n    if compiler == \"nvcc\":\n        output += \"module load cudatoolkit/8.0.61_2.4.9-6.0.7.0_17.1__g899857c\\n\"\n    else: # i.e. compiler = hipcc\n        output += \"module load hip\\n\"\n    output += \"module list\\n\"\n    output += \"export CRAY_CUDA_MPS=1\\n\"\n    output += \"cd $SLURM_SUBMIT_DIR \\n\"\n    output += \"\\n\"\n    output += \"date\\n\"\n\n    ...\n...\n```\n\n#### 3. Run the script `tune_setup.py`\n\n##### Script arguments\n\nSpecify which GPU you are auto-tuning for by passing the appropriate `parameters_GPU.json` file as an argument with `-p/--params`.\n\nSpecify which compiler to use for compiling kernel code by passing `nvcc` or `hipcc` as an argument with `-b/--compiler`.\n\nMore arguments can be set, run\n```bash\n$ ./tune_setup.py --help\n```\nfor more information.\n\n##### Script positional arguments (block sizes to autotune)\n\nIn 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.\n\n##### Examples\n\nFor example, if the system you want to autotune for contains blocks of size 5 and 8, run:\n\n```bash\n$ ./tune_setup.py 5 8 -p ../parameters/parameters_P100.json\nReading parameters from parameters_P100.json\nlibsmm_acc: Found 74096 existing parameter sets, of which 1641 are autotuned and 72455 are predicted.\nRequested to autotune 8 triplets\nFound 41824 parameter sets for 5x5x5\nFound 83648 parameter sets for 5x5x8\nFound 103072 parameter sets for 5x8x5\nFound 103072 parameter sets for 5x8x8\nFound 103072 parameter sets for 8x5x5\nFound 103072 parameter sets for 8x5x8\nFound 125344 parameter sets for 8x8x5\nFound 125344 parameter sets for 8x8x8\n```\n\nOr, if you want to obtain, for the NVIDIA P100, the parameters of the same block sizes as recorded for the NVIDIA K40, run:\n\n```bash\n$ ./tune_setup.py -p ../parameters/parameters_P100.json ../parameters/parameters_K40.json\nReading parameters from parameters_P100.json\nlibsmm_acc: Found 74093 existing parameter sets, of which 1638 are autotuned and 72455 are predicted.\nReading parameters to autotune from parameters_K40.json\nRequested to autotune 19 triplets\nFound 41824 parameter sets for 5x5x5\nFound 95648 parameter sets for 6x6x6\nFound 110496 parameter sets for 7x7x7\nFound 125344 parameter sets for 8x8x8\nFound 173764 parameter sets for 9x9x9\n...\n```\n\n##### Output\n\nThe script will create a directory for each combination of the block sizes:\n\n```bash\n$ ls -d tune_*\ntune_5x5x5  tune_5x5x8  tune_5x8x5  tune_5x8x8  tune_8x5x5  tune_8x5x8  tune_8x8x5  tune_8x8x8\n```\n\nEach directory contains a number of files:\n\n```bash\n$ ls -1 tune_8x8x8/\nMakefile\ntune_8x8x8_exe0_main.cu/cpp\ntune_8x8x8_exe0_part0.cu/cpp\ntune_8x8x8_exe0_part1.cu/cpp\ntune_8x8x8_exe0_part2.cu/cpp\ntune_8x8x8_exe0_part3.cu/cpp\ntune_8x8x8_exe0_part4.cu/cpp\ntune_8x8x8.job\n```\n\nFor 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.\n\nIn 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.\n\n#### 4. Adapt `tune_submit.py` to your environment\n\nThe 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.\n\n#### 5. Submit Jobs\n\nEach 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`.\n\nWhen `tune_submit.py` is called without arguments, it will just list the jobs that could be submitted:\n\n```bash\n$ ./tune_submit.py\n          tune_5x5x5: Would submit, run with \"doit!\"\n          tune_5x5x8: Would submit, run with \"doit!\"\n          tune_5x8x5: Would submit, run with \"doit!\"\n          tune_5x8x8: Would submit, run with \"doit!\"\n          tune_8x5x5: Would submit, run with \"doit!\"\n          tune_8x5x8: Would submit, run with \"doit!\"\n          tune_8x8x5: Would submit, run with \"doit!\"\n          tune_8x8x8: Would submit, run with \"doit!\"\nNumber of jobs submitted: 8\n```\n\nOnly when `tune_submit.py` is called with `doit!` as its first argument, will it actually submit jobs:\n\n```bash\n$ ./tune_submit.py doit!\n          tune_5x5x5: Submitting\nSubmitted batch job 277987\n          tune_5x5x8: Submitting\nSubmitted batch job 277988\n          tune_5x8x5: Submitting\nSubmitted batch job 277989\n          tune_5x8x8: Submitting\nSubmitted batch job 277990\n          tune_8x5x5: Submitting\nSubmitted batch job 277991\n          tune_8x5x8: Submitting\nSubmitted batch job 277992\n          tune_8x8x5: Submitting\nSubmitted batch job 277993\n          tune_8x8x8: Submitting\nSubmitted batch job 277994\nNumber of jobs submitted: 8\n```\n\n#### 6. Collect Results\n\nRun `tune_collect.py` to parse all log files and determine the best kernel for each blocksize:\n\n```bash\n$ ./tune_collect.py\nReading: tune_5x5x5/tune_5x5x5_exe0.log\nReading: tune_5x5x8/tune_5x5x8_exe0.log\nReading: tune_5x8x5/tune_5x8x5_exe0.log\nReading: tune_5x8x8/tune_5x8x8_exe0.log\nReading: tune_8x5x5/tune_8x5x5_exe0.log\nReading: tune_8x5x8/tune_8x5x8_exe0.log\nReading: tune_8x8x5/tune_8x8x5_exe0.log\nReading: tune_8x8x8/tune_8x8x8_exe0.log\nKernel_dnt_tiny(m=5, n=5, k=5, split_thread=32, threads=64, grouping=16, minblocks=1) , # 27.9623 GFlops\nKernel_dnt_tiny(m=5, n=5, k=8, split_thread=32, threads=96, grouping=16, minblocks=1) , # 37.8978 GFlops\nKernel_dnt_medium(m=5, n=8, k=5, tile_m=1, tile_n=1, threads=96, grouping=16, minblocks=8) , # 32.9231 GFlops\nKernel_dnt_tiny(m=5, n=8, k=8, split_thread=32, threads=96, grouping=16, minblocks=1) , # 47.0366 GFlops\nKernel_dnt_medium(m=8, n=5, k=5, tile_m=1, tile_n=1, threads=96, grouping=16, minblocks=12) , # 33.1999 GFlops\nKernel_dnt_medium(m=8, n=5, k=8, tile_m=1, tile_n=1, threads=96, grouping=16, minblocks=12) , # 49.3499 GFlops\nKernel_dnt_tiny(m=8, n=8, k=5, split_thread=32, threads=96, grouping=16, minblocks=1) , # 62.8469 GFlops\nKernel_dnt_tiny(m=8, n=8, k=8, split_thread=32, threads=128, grouping=16, minblocks=1) , # 90.7763 GFlops\n\nWrote parameters.json\n```\n\nThe file `parameters.json` in `dbcsr/src/acc/libsmm_acc/parameters` now contains the newly autotuned parameters.\n\n#### 7. Merge new parameters with original parameter-file\n\nRun `tune_merge.py` to merge the new parameters with the original ones, within the directory `parameters`.\n\n```bash\n$ ./tune_merge.py\nMerging parameters.json with parameters_P100.json\nWrote parameters.new.json\n```\n\nThe file `parameters.new.json` can now be used as a parameter file. Rename it to `parameters_GPU.json`, with the appropriate `GPU`.\n\n#### 8. Contribute parameters to the community\n\n**Contribute new optimal parameters**\n\nSubmit a pull request updating the appropriate `parameters_GPU.json` file to the [DBCSR repository](https://github.com/cp2k/dbcsr).\n\n**Contribute autotuning data**\n\nSee [instructions](https://github.com/cp2k/dbcsr-data#contributing) in DBCSR's [data repository](https://github.com/cp2k/dbcsr-data).\n"
  },
  {
    "path": "src/acc/libsmm_acc/tune/archive.sh",
    "content": "#!/bin/bash -e\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\necho \"removing unneeded files....\"\nrm -f tune_*/*.job tune_*/Makefile tune_*/*_exe? tune_*/*_part*.cu tune_*/*_part*.cpp tune_*/*.o\n\nfn=\"../libsmm_acc_tuning_`date +'%F'`.tgz\"\n\nif [ -f $fn ]; then\n   echo \"Archive file exists already, aborting!\"\n   exit 1\nfi\n\nset -x\ntar czf $fn .\n"
  },
  {
    "path": "src/acc/libsmm_acc/tune/cleanup.sh",
    "content": "#!/bin/bash -e\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\necho \"removing tuning files....\"\nrm -rf tune_*x*x*\n"
  },
  {
    "path": "src/acc/libsmm_acc/tune/requirements.txt",
    "content": "numpy==1.22.0\n"
  },
  {
    "path": "src/acc/libsmm_acc/tune/tune_collect.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport sys\nimport re\nimport json\nimport argparse\nfrom pathlib import Path\n\nsys.path.append(\"../\")\nfrom kernels.smm_acc import descr_to_kernel  # noqa: E402\n\nre_mnk = re.compile(r\"tune_(\\d+)x(\\d+)x(\\d+)\")\nre_winner = re.compile(r\"\\nWINNER: \\d+ (.+)\\n\")\nre_gflops = re.compile(r\"# ([0-9.]+) GFlop/s\")\nre_errors = re.compile(r\"Number of errors: (\\d+)\\n\")\n\nfrom dataclasses import dataclass  # noqa: E402\n\n\n@dataclass\nclass awinner:\n    value: str = \"\"\n    missing: int = 0\n    incomplete: int = 0\n    n_errors: int = 0\n\n\ndef tune_sort_key(path: Path):\n    try:\n        _, triple = path.name.split(\"_\")\n        m, n, k = triple.split(\"x\")\n    except ValueError:\n        return (0, 0, 0)  # sort non-matching dirs as they come at the beginning\n\n    return (int(m), int(n), int(k))\n\n\n# ===============================================================================\ndef main(tune_dir=Path(\".\")):\n    winners = dict()\n\n    n_errors = 0\n    for dir in sorted(tune_dir.glob(\"tune_*\"), key=tune_sort_key):\n        if not dir.is_dir():\n            continue\n\n        for log_fpath in sorted(dir.glob(\"tune_*.log\")):\n            mnk = tuple(int(i) for i in re_mnk.search(log_fpath.name).groups())\n            if mnk not in winners:\n                winners[mnk] = awinner()\n            if not log_fpath.exists():\n                winners[mnk] = awinner(value=f\"log missing: {log_fpath}\", missing=1)\n                print(\n                    \"WARNING: Missing log:\",\n                    log_fpath,\n                    \", please re-run (cd tune_mxnxk; sbatch tune_mxnxk.job)\",\n                )\n                n_errors += 1\n            else:\n                n_errors += process_log(log_fpath, mnk, winners)\n\n    if n_errors > 0:\n        print(f\"WARNING: Found {int(n_errors)} issues, check above messages.\")\n\n    # Get kernel objects from list of strings\n    kernels = [\n        descr_to_kernel(kernel_descr.value)\n        for kernel_descr in winners.values()\n        if not (kernel_descr.missing or kernel_descr.incomplete)\n    ]\n    kernels_dict = dict(zip([(k.m, k.n, k.k) for k in kernels], kernels))\n    new_file = \"../parameters/parameters.json\"\n    with open(new_file, \"w\") as f:\n        s = json.dumps(\n            [\n                kernels_dict[kernel].as_dict_for_parameters_json\n                for kernel in sorted(kernels_dict.keys())\n            ]\n        )\n        s = s.replace(\"}, \", \"},\\n\")\n        s = s.replace(\"[\", \"[\\n\")\n        s = s.replace(\"]\", \"\\n]\")\n        f.write(s)\n\n    print(\"\\n\")\n    print(\"Wrote\", new_file)\n\n\n# ===============================================================================\ndef process_log(log_fn: Path, mnk, winners):\n    print(f\"Reading {log_fn}\")\n\n    content = log_fn.read_text()\n    m = re_errors.search(content)\n    if not m:\n        winners[mnk].incomplete += 1\n        print(\n            \"WARNING: Found incomplete log:\",\n            log_fn,\n            \", please re-run (cd tune_mxnxk; sbatch tune_mxnxk.job)\",\n        )\n        return 1\n\n    n_errors = int(m.group(1))\n    if n_errors != 0:\n        winners[mnk].n_errors += n_errors\n        return 1\n\n    old_gflops = 0.0\n    m = re_gflops.search(winners[mnk].value)\n    if m:\n        old_gflops = float(m.group(1))\n\n    new_winner = re_winner.search(content)\n    if not new_winner:\n        return 0\n    new_winner = new_winner.group(1).strip().replace(\"GFlops\", \"GFlop/s\")\n    new_gflops = float(re_gflops.search(new_winner).group(1))\n\n    if new_gflops > old_gflops:\n        winners[mnk].value = new_winner\n    return 0\n\n\n# ===============================================================================\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"\"\"\n        Collect autotuning results: parse the log files contained in folders tune_*x*x*\n        to determine the best kernel for each block size, and store the results in a\n        file \"parameters.json\".\n\n        This script is part of the workflow for autotuning optimal libsmm_acc parameters.\n        For more details, see README.md.\n        \"\"\",\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter,\n    )\n\n    args = parser.parse_args()\n    main()\n"
  },
  {
    "path": "src/acc/libsmm_acc/tune/tune_merge.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport sys\nimport json\nimport argparse\n\nsys.path.append(\"../\")\nfrom kernels.smm_acc import params_dict_to_kernel  # noqa: E402\n\n\ndef main(param_fn):\n    # Read new kernel parameters\n    param_new = \"../parameters/parameters.json\"\n    with open(param_new) as f:\n        new_kernels = [params_dict_to_kernel(**params) for params in json.load(f)]\n\n    # Read old kernel parameters\n    with open(param_fn) as f:\n        old_kernels = [params_dict_to_kernel(**params) for params in json.load(f)]\n\n    # Merge two parameter lists\n    print(\"Merging\", param_new, \"with\", param_fn)\n    kernels_dict = dict(zip([(k.m, k.n, k.k) for k in old_kernels], old_kernels))\n    new_kernels_dict = dict(zip([(k.m, k.n, k.k) for k in new_kernels], new_kernels))\n    kernels_dict.update(new_kernels_dict)\n\n    # Write kernel parameters to new file\n    new_file = \"parameters.new.json\"\n    with open(new_file, \"w\") as f:\n        s = json.dumps(\n            [\n                kernels_dict[kernel].as_dict_for_parameters_json\n                for kernel in sorted(kernels_dict.keys())\n            ]\n        )\n        s = s.replace(\"}, \", \"},\\n\")\n        s = s.replace(\"[\", \"[\\n\")\n        s = s.replace(\"]\", \"\\n]\")\n        f.write(s)\n\n    print(\"Wrote\", new_file)\n\n\n# ===============================================================================\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"\"\"\n        Write a new kernel parameter file (parameters.new.json) as a unique merge of an\n        already-existing parameter file (specified by `-p parameters_GPU.json`) and a new\n        one (parameters.json) created by tune_collect.py. If a kernel (m, n, k) is listed\n        in both the original parameter file and the new parameter file, retain its parameters\n        as defined in the new parameter file.\n\n        This script is part of the workflow for autotuning optimal libsmm_acc parameters.\n        For more details, see README.md.\n        \"\"\",\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter,\n    )\n    parser.add_argument(\n        \"-p\",\n        \"--params\",\n        metavar=\"parameters_GPU.json\",\n        type=str,\n        default=\"../parameters/parameters_A100.json\",\n        help=\"parameter file in which to merge the newly obtained autotuned parameters\",\n    )\n\n    args = parser.parse_args()\n    main(args.params)\n"
  },
  {
    "path": "src/acc/libsmm_acc/tune/tune_setup.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport sys\nimport os\nimport stat\nimport json\nimport math\nfrom itertools import product\nimport argparse\nfrom pathlib import Path\n\nsys.path.append(\"../\")\nfrom kernels.smm_acc_predict import (  # noqa: E402\n    gpu_architectures,\n    kernel_algorithm,\n    params_dict_to_kernel,\n    compatible_mnk,\n)\n\n\n# ===============================================================================\ndef main(\n    param_fn: Path,\n    compiler,\n    cpus_per_task,\n    max_num_nodes,\n    blocksizes,\n    blocks_from_param_file,\n    tune_dir: Path,\n):\n    # Read existing parameters\n    assert (\n        param_fn.name in gpu_architectures.keys()\n    ), f\"Cannot find GPU architecture for file {param_fn.name}\"\n    arch_code = gpu_architectures[param_fn.name]\n    with open(\"../kernels/gpu_properties.json\") as fhandle:\n        gpu_properties = json.load(fhandle)[arch_code]\n    with open(\"../kernels/autotuning_properties.json\") as fhandle:\n        autotuning_properties = json.load(fhandle)\n    with param_fn.open(\"r\") as fhandle:\n        all_kernels = [params_dict_to_kernel(**params) for params in json.load(fhandle)]\n    print(f\"Reading parameters from {param_fn}\")\n    autotuned_kernels = [k for k in all_kernels if k.autotuned]\n    predicted_kernels = [k for k in all_kernels if not k.autotuned]\n    print(\n        \"libsmm_acc: found %d existing parameter sets, of which %d are autotuned and %d are predicted.\"\n        % (len(all_kernels), len(autotuned_kernels), len(predicted_kernels))\n    )\n\n    # Get blocksizes to be autotuned\n    if blocks_from_param_file:  # open and read file\n        with open(blocksizes) as f:\n            all_kernels_ref = [\n                params_dict_to_kernel(**params) for params in json.load(f)\n            ]\n        print(f\"Reading parameters to autotune from {blocksizes}\")\n        triples = [(k.m, k.n, k.k) for k in all_kernels_ref if k.autotuned]\n    else:\n        assert len(set(blocksizes)) == len(blocksizes)\n        blocksizes.sort()\n        # Get (m, n, k) triplets to be autotuned\n        triples = combinations(*blocksizes)\n    print(f\"Requested to autotune {len(triples)} triplets\")\n\n    for m, n, k in triples:\n        existing = [kern for kern in autotuned_kernels if kern.can_handle(m, n, k)]\n        if existing:\n            print(\n                \"Found existing autotuned parameter set for %dx%dx%d, skipping.\"\n                % (m, n, k)\n            )\n            continue\n\n        outdir = tune_dir / f\"tune_{int(m)}x{int(n)}x{int(k)}\"\n        if outdir.exists():\n            print(f\"Directory {outdir} exists already, skipping.\")\n            continue\n        outdir.mkdir()\n        gen_benchmark(outdir, gpu_properties, autotuning_properties, compiler, m, n, k)\n        gen_jobfile(outdir, compiler, m, n, k, cpus_per_task, max_num_nodes)\n        gen_makefile(outdir, compiler, arch_code)\n\n\n# ===============================================================================\ndef format_params(params):\n    output = []\n    order = [\n        \"m\",\n        \"n\",\n        \"k\",\n        \"tile_m\",\n        \"tile_n\",\n        \"w\",\n        \"v\",\n        \"split_thread\",\n        \"threads\",\n        \"blockdim\",\n        \"grouping\",\n    ]\n    for k in order:\n        if k in params.keys():\n            output.append(f\"{k}={int(params[k])}\")\n\n    for k in params.keys():\n        if k not in order:\n            output.append(f\"{k}={int(params[k])}\")\n\n    return f\"({', '.join(output)})\"\n\n\ndef get_file_extension_from_compiler(compiler):\n    return \".cu\" if compiler == \"nvcc\" else \".cpp\"\n\n\n# ===============================================================================\ndef gen_benchmark(outdir, gpu_properties, autotuning_properties, compiler, m, n, k):\n    includes = []\n    launcher_codes = []\n    launchers = []\n    kernel_descr = []\n    indent = \"  \"\n    file_extension = get_file_extension_from_compiler(compiler)\n\n    # Get the kernel algorithms compatible with the given size:\n    compatible_kernels = [\n        kernclass\n        for classname, kernclass in kernel_algorithm.items()\n        if compatible_mnk(classname, m, n, k)\n    ]\n\n    # Get the parameter sets to measure for this (m,n,k)\n    for kernclass in compatible_kernels:\n        params = kernclass.promising_parameters(\n            m, n, k, gpu_properties, autotuning_properties\n        )\n        if params == 0:\n            continue\n\n        for p in params:\n            kern = kernclass(**p, source=\"autotuning_candidate\", perf=0)\n            includes.append(f\"../../kernels/{kern.include}\")\n            launcher_codes.append(kern.launcher_code(compiler))\n            launchers.append(f\"launch_{kern.name}\")\n            kernel_descr.append(kernclass.__name__ + format_params(p))\n\n    print(f\"Found {len(launchers)} parameter sets for {int(m)}x{int(n)}x{int(k)}\")\n    if len(launchers) == 0:\n        return\n\n    # Compose the \"include\" line of the benchmark code\n    incl_output = '#include \"../../kernels/smm_acc_common.h\"\\n'\n    for i in set(includes):\n        incl_output += f'#include \"{i}\"\\n'\n    incl_output += \"\\n\\n\"\n\n    # Compose the benchmark code\n    # The benchmark is broken down in\n    # - n_exe_files executables\n    # - each executable is made of n_obj_files object files\n    # - each object file is made up of launchers_per_obj launchers\n    # - each launcher launches 1 GPU kernel with a certain set of kernel parameters\n    max_launchers_per_exe = 10000\n    launchers_per_obj = 100\n    n_exe_files = int(len(launcher_codes) / max_launchers_per_exe) + 1\n    launchers_per_exe = int(len(launcher_codes) / n_exe_files) + 1\n\n    # Compose source code for each executable file\n    for i in range(n_exe_files):\n        chunk_a = i * launchers_per_exe\n        chunk_b = min((i + 1) * launchers_per_exe, len(launcher_codes))\n        n_obj_files = math.ceil((chunk_b - chunk_a) / launchers_per_obj)\n\n        if n_obj_files == 0:\n            continue\n        jdigits = int(math.log10(n_obj_files)) + 1\n\n        # Compose source code for each object file\n        for j in range(n_obj_files):\n            a = chunk_a + j * launchers_per_obj\n            b = min(chunk_a + (j + 1) * launchers_per_obj, chunk_b)\n            output = incl_output\n            output += \"\\n\\n\".join(launcher_codes[a:b])\n            fn = outdir / f\"tune_{m}x{n}x{k}_exe{i}_part{j:0{jdigits}}{file_extension}\"\n            writefile(fn, output)\n\n        # Compose source code for \"main\" of executable file\n        output = '#include \"../../libsmm_acc_benchmark.h\"\\n\\n'\n        for j in range(chunk_b - chunk_a):\n            output += (\n                f\"int {launchers[chunk_a + j]}(const int *param_stack, int stack_size, \"\n            )\n            if compiler == \"nvcc\":\n                output += \"cudaStream_t stream, \"\n            else:\n                output += \"hipStream_t stream, \"\n            output += (\n                \"int m_max, int n_max, int k_max,\"\n                + \" const double *a_data, const double *b_data, double *c_data);\\n\"\n            )\n\n        output += \"\\n\"\n        output += \"int main(int argc, char** argv) {\\n\"\n        if compiler == \"nvcc\":\n            output += (\n                indent\n                + \"cudaError_t err = cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte);\\n\"\n            )\n            output += f\"{indent}if(err != cudaSuccess) return(-1);\\n\"\n        else:  # i.e. compiler = hipcc\n            output += (\n                indent\n                + \"hipError_t err = hipDeviceSetSharedMemConfig(hipSharedMemBankSizeEightByte);\\n\"\n            )\n            output += f\"{indent}if(err != hipSuccess) return(-1);\\n\"\n        output += f\"{indent}libsmm_acc_benchmark_t* handle;\\n\"\n        output += f\"{indent}KernelLauncher launchers[{int(chunk_b - chunk_a)}];\\n\"\n        output += f\"{indent}char *kernel_descr[{int(chunk_b - chunk_a)}];\\n\"\n\n        for j in range(chunk_b - chunk_a):\n            output += f\"{indent}launchers[{int(j)}]    = {launchers[chunk_a + j]};\\n\"\n            output += indent + 'kernel_descr[%d] = (char *) \"%s\";\\n' % (\n                j,\n                kernel_descr[chunk_a + j],\n            )\n        output += indent + \"libsmm_acc_benchmark_init(&handle, tune, %d, %d, %d);\\n\" % (\n            m,\n            n,\n            k,\n        )\n        output += (\n            indent\n            + \"int result = libsmm_acc_benchmark(handle, %d, %d, %d, %d, launchers, kernel_descr);\\n\"\n            % (m, n, k, chunk_b - chunk_a)\n        )\n        output += f\"{indent}libsmm_acc_benchmark_finalize(handle);\\n\"\n        output += f\"{indent}return result;\"\n        output += \"}\\n\"\n\n        fn = (\n            outdir / f\"tune_{int(m)}x{int(n)}x{int(k)}_exe{int(i)}_main{file_extension}\"\n        )\n        writefile(fn, output)\n\n\n# ===============================================================================\ndef gen_jobfile(outdir, compiler, m, n, k, cpus_per_task, max_num_nodes=0):\n    file_extension = get_file_extension_from_compiler(compiler)\n\n    tprefix = f\"tune_{int(m)}x{int(n)}x{int(k)}\"\n    all_exe_src = [fn.name for fn in outdir.glob(f\"{tprefix}_*_main{file_extension}\")]\n    all_exe = sorted([fn.replace(f\"_main{file_extension}\", \"\") for fn in all_exe_src])\n    if max_num_nodes > 0:\n        num_nodes = min(len(all_exe), max_num_nodes)\n    else:\n        num_nodes = len(all_exe)\n    time = \"00:40:00\"\n\n    output = f\"\"\"\\\n#!/bin/bash -l\n#SBATCH --nodes={int(num_nodes)}\n#SBATCH --exclusive\n#SBATCH --ntasks-per-core=1\n#SBATCH --ntasks-per-node=1\n#SBATCH --cpus-per-task={int(cpus_per_task)}\n#SBATCH --time={time}\n#SBATCH --account=jiek61\n#SBATCH --partition=dc-gpu\n#SBATCH --cuda-mps\n#SBATCH --gres=gpu:4\nmodule purge\nmodule add GCC/11.3.0\nmodule add ParaStationMPI/5.8.0-1-mt\nmodule add CUDA/11.7\nmodule list\nnvidia-smi\nt1=$(date +%s)\n\"\"\"\n    # Compilation\n    num_nodes_busy = 0\n    for exe in all_exe:\n        output += (\n            f\"srun --nodes=1 --ntasks=1 --ntasks-per-node=1\"\n            f\" --cpus-per-task={cpus_per_task} --exact make -j {cpus_per_task} {exe} &\\n\"\n        )\n        num_nodes_busy += 1\n        if num_nodes_busy == num_nodes:\n            output += \"wait\\n\"\n            num_nodes_busy = 0\n\n    output += \"wait\\n\"\n    output += \"t2=$(date +%s)\\n\"\n    output += \"echo $((t2-t1)) seconds for compilation step\\n\\n\"\n\n    # Execution\n    output += \"t1=$(date +%s)\\n\"\n    for exe in all_exe:\n        output += (\n            f\"srun --nodes=1 --ntasks=1 --ntasks-per-node=1\"\n            f\" --cpus-per-task=1 --exact ./{exe} > {exe}.log 2>&1 & \\n\"\n        )\n        num_nodes_busy += 1\n        if num_nodes_busy == num_nodes:\n            output += \"wait\\n\"\n            num_nodes_busy = 0\n\n    output += \"wait\\n\"\n    output += \"t2=$(date +%s)\\n\"\n    output += \"echo $((t2-t1)) seconds for execution step\\n\\n\"\n\n    # Winner\n    output += \"echo Over all winner:\\n\"\n    output += f\"grep WINNER {tprefix}_exe*.log | sort -n --field-separator='#' -k 2 | tail -n 1\\n\\n\"\n\n    # Cleaning\n    output += \"make realclean\\n\"\n\n    fn = outdir / f\"{tprefix}.job\"\n    writefile(fn, output)\n\n\n# ===============================================================================\ndef gen_makefile(outdir, compiler, arch):\n    file_extension = get_file_extension_from_compiler(compiler)\n\n    # header\n    output = \".SECONDARY:\\n\"\n    output += f\"vpath %{file_extension}../\\n\\n\"\n    output += \".PHONY: do_nothing build_all clean realclean\\n\\n\"\n    output += \"do_nothing:\\n\\n\"\n    output += \"clean:\\n\"\n    output += \"\trm -f *.o\\n\\n\"\n    output += \"realclean: clean\\n\"\n    output += \"\trm -f *.cu\\n\\n\"\n\n    # target \"build_all\"\n    all_exe_src = sorted(\n        [fn.name for fn in outdir.glob(f\"tune_*_main{file_extension}\")]\n    )\n    build_targets = [fn.replace(f\"_main{file_extension}\", \"\") for fn in all_exe_src]\n    output += f\"build_all: {' '.join(build_targets)}\\n\\n\"\n\n    # compilation rule for helper-files: libsmm_acc_benchmark, acc_cuda/hip\n    output += \"libsmm_acc_benchmark.o : ../../libsmm_acc_benchmark.cpp\\n\"\n    output += \"acc.o :\"\n    if compiler == \"nvcc\":\n        output += \" ../../../cuda/acc_cuda.cpp\\n\\n\"\n    else:\n        output += \" ../../../hip/acc_hip.cpp\\n\\n\"\n\n    output += \"libsmm_acc_benchmark.o acc.o :\\n\"\n    if compiler == \"nvcc\":\n        output += (\n            \"\\tnvcc -O3 -D__TUNING -D__CUDA -arch=\"\n            + str(arch)\n            + \" -w -c -o $@ -std=c++11 $<\\n\\n\"\n        )\n    else:\n        output += (\n            \"\\thipcc -O3 -D__TUNING -D__HIP -w -munsafe-fp-atomics -c -o $@ $<\\n\\n\"\n        )\n\n    # compilation rule for kernel files\n    headers = \" \".join([f\"../{fn}\" for fn in Path(\"../kernels\").glob(\"*.h\")])\n    output += f\"%.o : %{file_extension} {headers}\\n\"\n    if compiler == \"nvcc\":\n        output += f\"\tnvcc -O3 -D__TUNING -D__CUDA -arch={str(arch)} -w -c $<\\n\\n\"\n    else:\n        output += \"\\thipcc -O3 -D__TUNING -D__HIP -w -munsafe-fp-atomics -c $<\\n\\n\"\n\n    # compilation rule for autotuning executables\n    for exe_src in all_exe_src:\n        parts = sorted(\n            [\n                fn.name\n                for fn in outdir.glob(\n                    exe_src.replace(f\"_main{file_extension}\", \"_part*\")\n                )\n            ]\n        )\n        deps = [exe_src, \"libsmm_acc_benchmark.cpp\", \"acc.cpp\"] + parts\n        deps_obj = \" \".join(\n            [fn.replace(\".cu\", \".o\").replace(\".cpp\", \".o\") for fn in deps]\n        )\n        exe = exe_src.replace(f\"_main{file_extension}\", \"\")\n        output += f\"{exe} : {deps_obj}\\n\"\n        if compiler == \"nvcc\":\n            output += (\n                f\"\tnvcc -O3 -D__CUDA -arch={str(arch)} -w -o $@ $^ -lcuda -lnvrtc\\n\\n\"\n            )\n        else:\n            rocm_path = os.getenv(\"ROCM_PATH\", \"/opt/rocm\")\n            output += f\"\\thipcc -O3 -D__HIP -w -munsafe-fp-atomics -o $@ $^ {rocm_path}/hip/lib/libamdhip64.so\\n\\n\"\n\n    # write Makefile\n    writefile(outdir / \"Makefile\", output)\n\n\n# ===============================================================================\ndef gen_collect(outdir: Path, triples):\n    output = \"#!/bin/bash\\n\"\n    for m, n, k in triples:\n        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\"\n    output += \"#EOF\\n\"\n    fn = outdir / \"collect_winners.sh\"\n    writefile(fn, output)\n    fn.chmod(fn.stat().st_mode | stat.S_IEXEC)\n\n\n# ===============================================================================\ndef writefile(fn: Path, content):\n    if fn.exists() and fn.read_text() == content:\n        return\n\n    fn.write_text(content)\n\n\n# ===============================================================================\ndef combinations(*sizes):\n    return list(product(sizes, sizes, sizes))\n\n\n# ===============================================================================\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"\"\"\n        Set up the autotuning of specified blocksizes. This script produces folders (tune_*x*x*)\n        containing the code, Makefile and jobfiles for the autotuning of a given (m, n, k)-triplet.\n\n        This script is part of the workflow for autotuning optimal libsmm_acc parameters.\n        For more details, see README.md.\n        \"\"\",\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter,\n    )\n    parser.add_argument(\n        \"-p\",\n        \"--params\",\n        metavar=\"parameters_GPU.json\",\n        default=\"../parameters/parameters_P100.json\",\n        type=Path,\n        help=\"Parameter file that this autotuning should extend (pick the right GPU)\",\n    )\n    parser.add_argument(\n        \"-b\",\n        \"--compiler\",\n        metavar=\"compiler\",\n        default=\"nvcc\",\n        help=\"Compiler to use for compiling kernel code (Options: nvcc, hipcc)\",\n    )\n    parser.add_argument(\n        \"-c\",\n        \"--cpus_per_task\",\n        metavar=\"INT\",\n        default=128,\n        type=int,\n        help=\"Number of CPUs required per task\",\n    )\n    parser.add_argument(\n        \"-n\",\n        \"--nodes\",\n        metavar=\"INT\",\n        default=1,\n        type=int,\n        help=\"Maximum number of nodes an slurm allocation can get. 0: not a limiting factor\"\n        + \"(choose this option if you can allocate jobs of 20-30 nodes without a problem.\",\n    )\n    parser.add_argument(\n        \"blocksizes\",\n        metavar=\"BLOCKSIZE\",\n        nargs=\"+\",\n        type=str,\n        help='Blocksize(s) to autotune. They can be provided as a list of integers (eg. \"23\",'\n        + ' \"4 5 13\", \"32 45\") or provide a parameter file from which to read the blocksizes '\n        + \"to autotune, of the format parameters_GPU.json.\",\n    )\n\n    args = parser.parse_args()\n\n    # ==========\n    # Verify option choice validity\n    valid_compilers = [\"nvcc\", \"hipcc\"]\n    assert (\n        args.compiler in valid_compilers\n    ), f\"Compiler chosen ({args.compiler}) is not valid, please choose among: {valid_compilers}\"\n\n    # ==========\n    # Blocksizes from parameter file or as list of integers\n    blocksizes_from_param_file = False\n    if args.blocksizes[0].isdigit():  # blocksizes is a sequence of strings\n        args.blocksizes = [int(b) for b in args.blocksizes]\n    else:  # blocksizes is a file name\n        blocksizes_from_param_file = True\n        args.blocksizes = args.blocksizes[0]\n\n    # ==========\n    main(\n        args.params,\n        args.compiler,\n        args.cpus_per_task,\n        args.nodes,\n        args.blocksizes,\n        blocksizes_from_param_file,\n        Path(\".\"),\n    )\n"
  },
  {
    "path": "src/acc/libsmm_acc/tune/tune_submit.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport os\nimport argparse\n\nfrom subprocess import check_call, check_output\nfrom pathlib import Path\n\n\ndef tune_sort_key(path: Path):\n    try:\n        _, triple = path.name.split(\"_\")\n        m, n, k = triple.split(\"x\")\n    except ValueError:\n        return (0, 0, 0)  # sort non-matching dirs as they come at the beginning\n\n    return (int(m), int(n), int(k))\n\n\n# ===============================================================================\ndef main(submit_jobs, num_jobs, tune_dir: Path, sbatch_args):\n    cmd = [\"squeue\", \"--user\", os.environ[\"USER\"], \"--format=%j\", \"--nohead\"]\n    submitted = check_output(cmd, encoding=\"utf-8\")\n\n    n_submits = 0\n    for dir in sorted(tune_dir.glob(\"tune_*\"), key=tune_sort_key):\n        if not dir.is_dir():\n            continue\n\n        if list(dir.glob(\"slurm-*.out\")):\n            print(f\"{dir.name:20}: Found slurm file(s)\")\n            continue\n\n        if dir.name in submitted:\n            print(f\"{dir.name:20}: Found submitted job\")\n            continue\n\n        n_submits += 1\n        if submit_jobs:\n            print(f\"{dir.name:20}: Submitting\")\n            check_call(f\"cd {dir}; sbatch {sbatch_args} *.job\", shell=True)\n        else:\n            jobfiles = list(dir.glob(\"*.job\"))\n            if len(jobfiles) == 1:\n                print(f'{dir.name:20}: Would submit, run with \"doit!\"')\n            elif len(jobfiles) == 0:\n                print(\n                    f\"{dir.name:20}: Cannot find jobfile, delete this folder and re-create with tune_setup.py\"\n                )\n            else:\n                print(\n                    f\"{dir.name:20}: Found multiple jobfiles, delete this folder and re-create with tune_setup.py\"\n                )\n\n        if num_jobs > 0:\n            if n_submits >= num_jobs:\n                break\n\n    print(f\"Number of jobs submitted: {n_submits}\")\n\n\n# ===============================================================================\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"\"\"\n        Submit autotuning jobs: Each tune-directory contains a job file. Since there might be many tune-directories, the\n        convenience script tune_submit.py can be used. It will go through all the tune_*-directories and check if it has\n        already been submitted or run. For this the script calls squeue in the background and it searches for\n        slurm-*.out files.\n\n        This script is part of the workflow for autotuning optimal libsmm_acc parameters.\n        For more details, see README.md.\n        \"\"\",\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter,\n    )\n    parser.add_argument(\"doit\", metavar=\"doit!\", nargs=\"?\", type=str)\n    parser.add_argument(\n        \"-j\",\n        \"--num_jobs\",\n        metavar=\"INT\",\n        default=0,\n        type=int,\n        help=\"Maximum number of jobs to submit. 0: submit all\",\n    )\n    parser.add_argument(\n        \"-d\",\n        \"--dir\",\n        metavar=\"tune_directory\",\n        default=\".\",\n        type=Path,\n        help=\"Path from which to read already-existing tune-folders and write new tune-folders\",\n    )\n    parser.add_argument(\n        \"--sbatch-args\",\n        metavar=\"sbatch_args\",\n        default=\"\",\n        type=str,\n        help=\"Additional arguments passed to sbatch\",\n    )\n\n    args = parser.parse_args()\n    submit_jobs = True if args.doit == \"doit!\" else False\n    main(submit_jobs, args.num_jobs, args.dir, args.sbatch_args)\n"
  },
  {
    "path": "src/acc/opencl/Makefile",
    "content": "MAKDIR := $(subst //,,$(dir $(firstword $(MAKEFILE_LIST)))/)\nACCDIR := $(MAKDIR)/..\nINCACC := $(wildcard $(MAKDIR)/*.h*) $(ACCDIR)/acc.h\nSRCACC := $(wildcard $(MAKDIR)/*.c)\nOBJACC := $(SRCACC:.c=.o)\n\nINCSMM := $(wildcard $(MAKDIR)/smm/*.h*) \\\n                     $(MAKDIR)/smm/opencl_kernels.h \\\n                     $(ACCDIR)/acc_libsmm.h \\\n                     $(ACCDIR)/acc_bench.h \\\n                     $(NULL)\nSRCSMM := $(wildcard $(MAKDIR)/smm/*.c)\nOBJSMM := $(SRCSMM:.c=.o)\nKERNEL := $(wildcard $(MAKDIR)/smm/kernels/*.cl)\n\nINCALL := $(INCACC) $(INCSMM)\n\nLIBXSMMROOT := $(wildcard $(ACCDIR)/../../../../../libxsmm)\nifeq (,$(LIBXSMMROOT))\n  LIBXSMMROOT := $(wildcard $(HOME)/libxsmm)\nendif\nUNAME := $(shell uname)\nHEADERONLY ?= 0\nSTATIC ?= 1\nDEV ?= 0\n\n# Kind of Clang/GCC based analysis:\n#   leak, address, undefined, thread\nSANITIZE ?= $(NULL)\n\n# Intel Compiler\nICX := $(shell which icx 2>/dev/null)\nINTEL ?= $(if $(ICX),$(if $(filter-out 0,$(GNU)),0,2),0)\n\n# select from set of predefined triplet specifications\nSPECID ?= 0\n# limit shape in tests (zero or negative for unlimited)\nMAXEXT ?= 48\n# number of tests (zero or negative for unlimited)\nNSMMS ?= 10\n\nCOMMAND := $(shell which command 2>/dev/null)\nifneq (,$(COMMAND))\n  which = $(shell $(COMMAND) -v $1)\nelse\n  which = $(shell which $(firstword $1) 2>/dev/null)\nendif\n\nWITH_GPU := $(if $(WITH_GPU),$(WITH_GPU),$(GPUVER))\nPARAMS_WITHGPU := $(MAKDIR)/smm/params/tune_multiply_$(WITH_GPU).csv\nPARAMS_DEFAULT := $(MAKDIR)/smm/tune_multiply.csv\nPARAMS := $(if $(wildcard $(PARAMS_WITHGPU)),$(PARAMS_WITHGPU),$(wildcard $(PARAMS_DEFAULT)))\n\n#PARAMDIR ?= $(MAKDIR)/smm/params\nifeq (,$(PARAMS))\nifneq (,$(wildcard $(PARAMDIR)))\n  WITH_GPUS := $(shell ls -1 $(PARAMDIR)/*.csv | cut -d. -f1 | rev | cut -d_ -f1 | rev)\nendif\nendif\n\nCFLAGS := -fPIC \\\n  -Wall -Wextra -Wcast-qual \\\n  -Wno-overlength-strings \\\n  -Wno-variadic-macros \\\n  -Wno-unused-function \\\n  -Wno-long-long \\\n  -D__OPENCL \\\n  $(NULL)\n\nifneq (,$(ELEM_TYPE))\n  CFLAGS += -DELEM_TYPE=$(ELEM_TYPE)\nendif\n\nUSM ?= 0\nifneq (0,$(USM))\n  CFLAGS += -D__OFFLOAD_UNIFIED_MEMORY\nendif\n\nifneq (0,$(INTEL))\n  ifneq (1,$(INTEL))\n    CXX := icpx\n    CC := icx\n  else\n    CXX := icpc\n    CC := icc\n  endif\n  AR := $(if $(call which,xiar),xiar,ar)\nelse\n  CXX := g++\n  CC := gcc\n  ifneq (Darwin,$(UNAME))\n    AR := gcc-ar\n  else\n    AR := ar\n  endif\nendif\n\nifneq (0,$(DEV))\n  ifeq (1,$(DEV))\n    CFLAGS += -std=c89\n    CFLAGS += -Wno-unused-parameter\n  else\n    # DEV=2 (and higher): linking is not intended\n    CFLAGS += -D__DBCSR_ACC\n    CFLAGS += -Wno-gnu-zero-variadic-macro-arguments\n    CFLAGS += -Wno-deprecated\n    CFLAGS += -Werror\n    ifneq (2,$(DEV))\n      ifneq (,$(findstring clang,$(CC) $(CXX)))\n        override CC := clang++ --analyze\n      else\n        override CC := $(CXX) -xc++\n      endif\n    else\n      override CC := $(CXX) -xc++\n    endif\n    $(info CC: $(shell $(CC) --version | head -n1))\n    OMP := 0\n  endif\n  CFLAGS += -pedantic\n#else\n  #CFLAGS += -std=c99\nendif\n\nifneq (,$(SANITIZE))\n  CXXFLAGS += -fsanitize=$(SANITIZE)\n  CFLAGS += -fsanitize=$(SANITIZE)\n  FCFLAGS += -fsanitize=$(SANITIZE)\n  LDFLAGS += -fsanitize=$(SANITIZE)\n  SYM = 1\nendif\n\nifneq (0,$(DBG))\n  CPP_OPENCL_FLAGS += -C\n  ifeq (,$(DBG))\n    CFLAGS += -O2 -DNDEBUG\n  else\n    ifneq (1,$(DBG))\n      CFLAGS += -D_DEBUG\n    endif\n    CFLAGS += -O0\n  endif\nelse\n  CFLAGS += -O2 -DNDEBUG\n  SYM ?= 0\nendif\nifneq (0,$(SYM))\n  CFLAGS += -g\nendif\n\nifneq (0,$(OMP))\n  ifneq (0,$(INTEL))\n    CFLAGS += -qopenmp\n    LDFLAGS += -qopenmp\n  else ifneq (Darwin,$(UNAME))\n    CFLAGS += -fopenmp\n    LDFLAGS += -fopenmp\n  else # macOS\n    CFLAGS += -Xpreprocessor -fopenmp\n    LDFLAGS += -lomp\n  endif\nendif\n\nifneq (,$(LIBXSMMROOT))\n  ifneq (0,$(STATIC))\n    ifeq (0,$(HEADERONLY))\n      ifneq (0,$(OMP))\n        LDFLAGS += $(LIBXSMMROOT)/lib/libxsmmext.a\n      endif\n      LDFLAGS += $(LIBXSMMROOT)/lib/libxsmm.a\n    else\n      CFLAGS_XSMM += -DLIBXSMM_DEFAULT_CONFIG\n    endif\n    LDFLAGS += $(LIBXSMMROOT)/lib/libxsmmnoblas.a\n  else\n    LDFLAGS += -L$(LIBXSMMROOT)/lib\n    ifneq (Darwin,$(UNAME))\n      LDFLAGS += -Wl,-rpath=$(LIBXSMMROOT)/lib\n    endif\n    ifneq (0,$(OMP))\n      LDFLAGS += -lxsmmext\n    endif\n    LDFLAGS += -lxsmm -lxsmmnoblas\n  endif\n  CFLAGS_XSMM += -pthread -D__LIBXSMM -I$(LIBXSMMROOT)/include\n  LDFLAGS += -pthread -ldl -lm\nendif\n\nifeq (Darwin,$(UNAME))\n  LDFLAGS += -framework OpenCL\nelse\n  OPENCL_LIB := $(shell ldconfig -p 2>/dev/null | grep -m1 OpenCL | rev | cut -d' ' -f1 | rev)\n  ifeq (,$(OPENCL_LIB))\n    OPENCL_LIB := $(wildcard /usr/lib/x86_64-linux-gnu/libOpenCL.so.1)\n  endif\n  ifeq (,$(CUDATOOLKIT_HOME))\n    CUDATOOLKIT_HOME := $(NVSDKCOMPUTE_ROOT)\n  endif\n  ifeq (,$(CUDATOOLKIT_HOME))\n    NVCC := $(call which,nvcc)\n    CUDATOOLKIT_HOME := $(if $(NVCC),$(abspath $(dir $(NVCC))/..))\n  endif\n  ifneq (,$(CUDATOOLKIT_HOME))\n    CUDA_LIBDIR := $(if $(wildcard $(CUDATOOLKIT_HOME)/lib64),lib64,lib)\n    ifeq (,$(wildcard $(OPENCL_INC)))\n      CLINC := $(lastword $(sort $(wildcard $(CUDATOOLKIT_HOME)/../cuda/*/targets/x86_64-linux/include/CL/cl.h)))\n      OPENCL_INC := $(if $(CLINC),$(abspath $(dir $(CLINC))/..),$(CUDATOOLKIT_HOME)/include)\n    endif\n    ifeq (,$(wildcard $(OPENCL_LIB)))\n      LDFLAGS += -L$(CUDATOOLKIT_HOME)/$(CUDA_LIBDIR)\n      LDFLAGS += -Wl,-rpath=$(CUDATOOLKIT_HOME)/$(CUDA_LIBDIR)\n    endif\n  else ifeq (,$(OPENCL_INC))\n    ifneq (,$(wildcard $(OPENCL_ROOT)/include/CL/cl.h))\n      LDFLAGS += -L$(OPENCL_ROOT)/$(if $(wildcard $(OPENCL_ROOT)/lib64),lib64,lib)\n      OPENCL_INC := $(OPENCL_ROOT)/include\n    else ifneq (,$(ICX))\n      OPENCL_ROOT := $(abspath $(dir $(ICX))/..)\n      CLINC := $(wildcard $(OPENCL_ROOT)/include/sycl/CL/cl.h $(OPENCL_ROOT)/include/CL/cl.h)\n      ifneq (,$(CLINC))\n        LDFLAGS += -L$(OPENCL_ROOT)/$(if $(wildcard $(OPENCL_ROOT)/lib64),lib64,lib)\n        LDFLAGS += -L$(OPENCL_ROOT)/compiler/lib/intel64 -lintlc\n        OPENCL_INC := $(abspath $(dir $(firstword $(CLINC)))/..)\n      endif\n    endif\n  endif\n  # OPENCL_INC: directory containing CL/cl.h.\n  ifneq (,$(wildcard $(OPENCL_INC)))\n    CFLAGS += -I$(OPENCL_INC)\n  endif\n  # OPENCL_LIB: file/library to be linked\n  ifneq (,$(wildcard $(OPENCL_LIB)))\n    LDFLAGS += $(OPENCL_LIB)\n  else\n    LDFLAGS += -l:libOpenCL.so.1\n  endif\nendif\n\n# Collect all paths in LD_LIBRARY_PATH and LD_LIBRARY_PATH/stubs, and append to LDFLAGS\nLD_LIBRARY_DIRS := $(wildcard $(subst :, ,$(LD_LIBRARY_PATH)))\nLD_LIBSTUB_PATH := $(wildcard $(patsubst %,%/stubs,$(LD_LIBRARY_DIRS)))\nLIBPATHS := $(foreach DIR,$(LD_LIBRARY_DIRS),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR)))\nLIBSTUBS := $(foreach DIR,$(LD_LIBSTUB_PATH),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR)))\nLDFLAGS += $(LIBPATHS) $(LIBSTUBS)\n\n.PHONY: bench\nbench: $(ACCDIR)/acc_bench\n\n.PHONY: all\nall: bench $(ACCDIR)/dbcsr_acc_test\n\n.PHONY: test\ntest: test-interface test-smm\n\n.PHONY: test-interface\ntest-interface: $(ACCDIR)/dbcsr_acc_test\n\t@echo \"--- DBCSR Backend Interface\"\n\t$(ACCDIR)/dbcsr_acc_test\n\n$(MAKDIR)/test-smm.log: bench\n\t$(eval SHAPES = $(shell $(ACCDIR)/acc_triplets.sh -k $(SPECID) -m $(MAXEXT) -n $(NSMMS)))\n\t$(eval DEVICE = \"$(shell LIBXSMM_VERBOSE=0 ACC_OPENCL_VERBOSE=1 CHECK=0 $(ACCDIR)/acc_bench 1 1 1 2>&1 >/dev/null)\")\n\t$(eval WITH_GPU = $(firstword $(foreach GPU,$(WITH_GPUS),$(findstring $(GPU),$(DEVICE)))))\n\t$(eval PARAMS = $(firstword $(wildcard $(PARAMDIR)/tune_multiply_$(WITH_GPU).csv)))\n\t$(eval GPUENV = $(if $(OPENCL_LIBSMM_SMM_PARAMS),$(NULL),$(if $(PARAMS),OPENCL_LIBSMM_SMM_PARAMS=$(PARAMS))))\n\t@echo \"--- DBCSR OpenCL SMMs ($(words $(SHAPES)))\"\n\t@echo \"$(DEVICE)\"\n\t@if [ \"$(GPUENV)\" ]; then echo \"$(GPUENV)\"; fi\n\t@echo \"LD_LIBRARY_PATH=${LD_LIBRARY_PATH}\"\nifneq (,$(LD_PRELOAD))\n\t@echo \"LD_PRELOAD=${LD_PRELOAD}\"\nendif\n\t@echo \"CC: $$($(CC) --version | head -n1)\"\n\t@echo \"runtime libraries:\"\n\t@ldd $(ACCDIR)/acc_bench\n\t@echo \"hostname: $$(hostname)\"\n\t@echo\n\t@echo \"$(SHAPES)\" | xargs -n1 | ($(GPUENV) CHECK=$(if $(CHECK),$(CHECK),1) stdbuf --output=L \\\n\t\t$(ACCDIR)/acc_bench /dev/stdin 2>$(MAKDIR)/test-smm.err && rm $(MAKDIR)/test-smm.err) | tee $@\n\n.PHONY: test-smm\ntest-smm: $(MAKDIR)/test-smm.log\nifneq (,$(call which,datamash))\nifeq (,$(shell datamash geomean 2>&1 | grep invalid))\n\t@echo \"geomean: $$(sed -n \"/device:/p\" $< 2>/dev/null | datamash -W -R 1 geomean 4) GFLOPS/s\"\nendif\n\t@echo \"median: $$(sed -n \"/device:/p\" $< 2>/dev/null | datamash -W -R 1 median 4) GFLOPS/s\"\n\t@echo \"mean: $$(sed -n \"/device:/p\" $< 2>/dev/null | datamash -W -R 1 mean 4) GFLOPS/s\"\nendif\n\t@if [ -s $(MAKDIR)/test-smm.err ]; then \\\n\t\techo && cat $(MAKDIR)/test-smm.err; \\\n\t\tif [ \"0\" != \"$(if $(CHECK),$(CHECK),1)\" ]; then exit 1; fi; \\\n\tfi\n\n$(MAKDIR)/smm/opencl_kernels.h: $(MAKDIR)/acc_opencl.sh $(KERNEL) $(PARAMS)\n\tCPPFLAGS=$(CPP_OPENCL_FLAGS) $(MAKDIR)/acc_opencl.sh $(KERNEL) $(PARAMS) $@\n\n.PHONY: backend\nbackend: $(ACCDIR)/dbcsr_acc.a\n$(ACCDIR)/dbcsr_acc.a: $(OBJACC)\n\t$(AR) -rs $@ $^\n\n.PHONY: libsmm\nlibsmm: $(ACCDIR)/dbcsr_acc_smm.a\n$(ACCDIR)/dbcsr_acc_smm.a: $(OBJSMM)\n\t$(AR) -rs $@ $^\n\n%.o: %.c $(INCALL) $(MAKDIR)/Makefile\n\t$(CC) $(CFLAGS) $(CFLAGS_XSMM) -c $< -o $@\n\n$(MAKDIR)/acc_bench.o: $(ACCDIR)/acc_bench.c $(MAKDIR)/Makefile\nifneq (0,$(LIBXSMM))\n\t$(CC) $(CFLAGS) $(CFLAGS_XSMM) -c $< -o $@\nelse\n\t$(CC) $(CFLAGS) -c $< -o $@\nendif\n\n$(ACCDIR)/acc_bench: $(MAKDIR)/acc_bench.o $(ACCDIR)/dbcsr_acc_smm.a $(ACCDIR)/dbcsr_acc.a\nifneq (,$(filter 0 1,$(DEV)))\n\t$(CC) $^ $(LDFLAGS) -o $@\nelse\n.PHONY: $(ACCDIR)/acc_bench\nendif\n\n$(MAKDIR)/dbcsr_acc_test.o: $(ACCDIR)/../../tests/dbcsr_acc_test.c $(MAKDIR)/Makefile\n\t$(CC) $(CFLAGS) -I$(ACCDIR)/.. -c $< -o $@\n\n$(ACCDIR)/dbcsr_acc_test: $(MAKDIR)/dbcsr_acc_test.o $(ACCDIR)/dbcsr_acc.a\nifneq (,$(filter 0 1,$(DEV)))\n\t$(CC) $^ $(LDFLAGS) -o $@\nelse\n.PHONY: $(ACCDIR)/dbcsr_acc_test\nendif\n\n.PHONY: clean\nclean:\n\t@rm -f $(OBJACC) $(OBJSMM)\n\t@rm -f $(MAKDIR)/dbcsr_acc_test.o\n\t@rm -f $(MAKDIR)/acc_bench.o\n\t@rm -f $(MAKDIR)/smm/opencl_kernels.h\n\t@rm -f $(MAKDIR)/test-smm.err\n\n.PHONY: realclean\nrealclean: clean\n\t@rm -f $(ACCDIR)/dbcsr_acc.a $(ACCDIR)/dbcsr_acc_smm.a\n\t@rm -f $(ACCDIR)/acc_bench\n\t@rm -f $(ACCDIR)/dbcsr_acc_test\n\t@rm -f $(MAKDIR)/test-smm.log\n"
  },
  {
    "path": "src/acc/opencl/PACKAGE",
    "content": "{\n\"description\": \"OpenCL backend for accelerator API\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"..\"]\n}\n"
  },
  {
    "path": "src/acc/opencl/README.md",
    "content": "# Backend\n\nThe 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).\n\nAll 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:\n\n* 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.\n* Acceptable performance for kernels not covered by specifically tuned parameters, and the ability to run on GPU if no tuned parameters are present.\n* Auto-tuning kernels within an acceptable time limit along with handy scripts to retune parameters and to carry forward an existing set (new GPU).\n\nRuntime 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:\n\n* `ACC_OPENCL_DEVSPLIT`: integer enabling devices to be split into subdevices (non-zero/default: subdevices, zero: aggregated).\n* `ACC_OPENCL_DEVTYPE`: character string selecting \"cpu\", \"gpu\", \"all\" (unfiltered), or any other string (neither CPU or GPU).\n* `ACC_OPENCL_DEVICE`: non-negative integer number to select a device from the (internally enumerated) list of devices.\n* `ACC_OPENCL_VENDOR`: character string matching the vendor of the OpenCL device in a case-insensitive fashion, e.g., \"intel\".\n* `ACC_OPENCL_VERBOSE`: verbosity level (integer) with console output on `stderr`.\n    * `ACC_OPENCL_VERBOSE=1`: outputs the number of devices found and the name of the selected device.\n    * `ACC_OPENCL_VERBOSE=2`: outputs the duration needed to generate a requested kernel.\n    * `ACC_OPENCL_VERBOSE=3`: outputs device-side performance of kernels (every launch profiled).\n* `ACC_OPENCL_DUMP`: dump preprocessed kernel source code (1) or dump compiled OpenCL kernels (2).\n    * `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.\n    * `ACC_OPENCL_DUMP=2`: dump compiled OpenCL kernels (depends on OpenCL implementation), e.g., PTX code on Nvidia.\n\nThe 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`).\n"
  },
  {
    "path": "src/acc/opencl/acc_getenv.sh",
    "content": "#!/usr/bin/env bash\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: BSD-3-Clause                                                            #\n####################################################################################################\n\nFIND=$(command -v find)\nSORT=$(command -v sort)\nSED=$(command -v gsed)\n\n# GNU sed is desired (macOS)\nif [ ! \"${SED}\" ]; then\n  SED=$(command -v sed)\nfi\n\nHERE=\"$(cd \"$(dirname \"$0\")\" && pwd -P)\"\nSRC=\"${HERE}\"\nEXT=\"c\"\n\nif [ \"${FIND}\" ] && [ \"${SORT}\" ] && [ \"${SED}\" ] && [ -d \"${SRC}\" ]; then\n  export LC_ALL=C\n  ENVARS=\"$(${FIND} \"${SRC}\" -type f -name \"*.${EXT}\" -exec \\\n    \"${SED}\" \"s/getenv[[:space:]]*([[:space:]]*\\\".[^\\\"]*/\\n&/g\" {} \\; | \\\n    \"${SED}\" -n \"s/.*getenv[[:space:]]*([[:space:]]*\\\"\\(.[^\\\"]*\\)..*/\\1/p\" | \\\n     ${SORT} -u)\"\n  OTHERS=$(echo \"${ENVARS}\" | ${SED} \"/ACC_OPENCL_/d;/OPENCL_LIBSMM_/d\")\n  if [ \"${OTHERS}\" ]; then\n    echo \"====================================\"\n    echo \"Other environment variables\"\n    echo \"====================================\"\n    echo \"${ENVARS}\" | ${SED} \"/ACC_OPENCL_/d;/OPENCL_LIBSMM_/d\"\n  fi\n  echo \"====================================\"\n  echo \"OpenCL Backend environment variables\"\n  echo \"====================================\"\n  echo \"${ENVARS}\" | ${SED} -n \"/ACC_OPENCL_/p\"\n  echo \"====================================\"\n  echo \"OpenCL LIBSMM environment variables\"\n  echo \"====================================\"\n  echo \"${ENVARS}\" | ${SED} -n \"/OPENCL_LIBSMM_/p\"\nelse\n  >&2 echo \"Error: missing prerequisites!\"\n  exit 1\nfi\n"
  },
  {
    "path": "src/acc/opencl/acc_opencl.c",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#if defined(__OPENCL)\n#  include \"acc_opencl.h\"\n#  include <string.h>\n#  include <limits.h>\n#  include <ctype.h>\n#  include <math.h>\n#  if defined(_WIN32)\n#    include <windows.h>\n#    include <process.h>\n#  else\n#    include <unistd.h>\n#    include <errno.h>\n#    include <glob.h>\n#  endif\n#  if defined(__DBCSR_ACC)\n#    include \"../acc_libsmm.h\"\n#  endif\n#  include <fcntl.h>\n#  include <sys/stat.h>\n#  if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR)\n#    define S_ISDIR(A) ((S_IFMT & (A)) == S_IFDIR)\n#  endif\n#  if !defined(S_IREAD)\n#    define S_IREAD S_IRUSR\n#  endif\n#  if !defined(S_IWRITE)\n#    define S_IWRITE S_IWUSR\n#  endif\n\n#  if !defined(ACC_OPENCL_NLOCKS)\n#    define ACC_OPENCL_NLOCKS 4\n#  endif\n#  if !defined(ACC_OPENCL_TEMPDIR) && 1\n#    define ACC_OPENCL_TEMPDIR \"/tmp\"\n#  endif\n#  if !defined(ACC_OPENCL_CACHE_DID) && 1\n#    define ACC_OPENCL_CACHE_DID\n#  endif\n#  if !defined(ACC_OPENCL_CACHE_DIR) && 0\n#    define ACC_OPENCL_CACHE_DIR \".cl_cache\"\n#  endif\n#  if !defined(ACC_OPENCL_CPPBIN) && 1\n#    define ACC_OPENCL_CPPBIN \"/usr/bin/cpp\"\n#  endif\n#  if !defined(ACC_OPENCL_SEDBIN) && 1\n#    define ACC_OPENCL_SEDBIN \"/usr/bin/sed\"\n#  endif\n/* disabled: let MPI runtime come up before */\n#  if !defined(ACC_OPENCL_PREINIT) && 0\n#    define ACC_OPENCL_PREINIT\n#  endif\n/* attempt to enable command aggregation */\n#  if !defined(ACC_OPENCL_CMDAGR) && 1\n#    define ACC_OPENCL_CMDAGR\n#  endif\n#  if !defined(ACC_OPENCL_NCCS) && 1\n#    define ACC_OPENCL_NCCS 0\n#  endif\n\n\n#  if defined(__cplusplus)\nextern \"C\" {\n#  endif\n\nchar c_dbcsr_acc_opencl_locks[ACC_OPENCL_CACHELINE * ACC_OPENCL_NLOCKS];\n/* global configuration discovered during initialization */\nc_dbcsr_acc_opencl_config_t c_dbcsr_acc_opencl_config;\n\n#  if defined(ACC_OPENCL_CACHE_DID)\nint c_dbcsr_acc_opencl_active_id;\n#  endif\n\n\nvoid c_dbcsr_acc_opencl_notify(const char /*errinfo*/[], const void* /*private_info*/, size_t /*cb*/, void* /*user_data*/);\nvoid c_dbcsr_acc_opencl_notify(const char errinfo[], const void* private_info, size_t cb, void* user_data) {\n  LIBXSMM_UNUSED(private_info);\n  LIBXSMM_UNUSED(cb);\n  LIBXSMM_UNUSED(user_data);\n  fprintf(stderr, \"ERROR ACC/OpenCL: %s\\n\", errinfo);\n}\n\n\n/**\n * Comparator used with qsort; stabilized by tail condition (a < b ? -1 : 1).\n * Brings GPUs with local memory in front, followed by (potentially) integrated GPUs,\n * and further orders by memory capacity.\n */\nint c_dbcsr_acc_opencl_order_devices(const void* /*dev_a*/, const void* /*dev_b*/);\nint c_dbcsr_acc_opencl_order_devices(const void* dev_a, const void* dev_b) {\n  const cl_device_id* const a = (const cl_device_id*)dev_a;\n  const cl_device_id* const b = (const cl_device_id*)dev_b;\n  cl_device_type type_a = 0, type_b = 0;\n  assert(NULL != a && NULL != b && a != b);\n  ACC_OPENCL_EXPECT(EXIT_SUCCESS == clGetDeviceInfo(*a, CL_DEVICE_TYPE, sizeof(cl_device_type), &type_a, NULL));\n  ACC_OPENCL_EXPECT(EXIT_SUCCESS == clGetDeviceInfo(*b, CL_DEVICE_TYPE, sizeof(cl_device_type), &type_b, NULL));\n  if (CL_DEVICE_TYPE_DEFAULT & type_a) {\n    return -1;\n  }\n  else if (CL_DEVICE_TYPE_DEFAULT & type_b) {\n    return 1;\n  }\n  else {\n    if (CL_DEVICE_TYPE_GPU & type_a) {\n      if (CL_DEVICE_TYPE_GPU & type_b) {\n        int unified_a, unified_b;\n        size_t size_a, size_b;\n        ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*a, NULL, &size_a, NULL, &unified_a));\n        ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*b, NULL, &size_b, NULL, &unified_b));\n        if ((0 == unified_a && 0 == unified_b) || (0 != unified_a && 0 != unified_b)) {\n          return (size_a < size_b ? 1 : (size_a != size_b ? -1 : (a < b ? -1 : 1)));\n        }\n        /* discrete GPU goes in front */\n        else if (0 == unified_b) return 1;\n        else return -1;\n      }\n      else return -1;\n    }\n    else if (CL_DEVICE_TYPE_GPU & type_b) {\n      return 1;\n    }\n    else {\n      if (CL_DEVICE_TYPE_CPU & type_a) {\n        if (CL_DEVICE_TYPE_CPU & type_b) {\n          size_t size_a, size_b;\n          ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*a, NULL, &size_a, NULL, NULL));\n          ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*b, NULL, &size_b, NULL, NULL));\n          return (size_a < size_b ? 1 : (size_a != size_b ? -1 : (a < b ? -1 : 1)));\n        }\n        else return -1;\n      }\n      else if (CL_DEVICE_TYPE_CPU & type_b) {\n        return 1;\n      }\n      else {\n        size_t size_a = 0, size_b = 0;\n        ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*a, NULL, &size_a, NULL, NULL));\n        ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_info_devmem(*b, NULL, &size_b, NULL, NULL));\n        return (size_a < size_b ? 1 : (size_a != size_b ? -1 : (a < b ? -1 : 1)));\n      }\n    }\n  }\n}\n\n\n/** Setup to run prior to touching OpenCL runtime. */\nvoid c_dbcsr_acc_opencl_configure(void);\nvoid c_dbcsr_acc_opencl_configure(void) {\n  const char* const env_rank = (NULL != getenv(\"PMI_RANK\") ? getenv(\"PMI_RANK\") : getenv(\"OMPI_COMM_WORLD_LOCAL_RANK\"));\n  const char* const env_nranks = getenv(\"MPI_LOCALNRANKS\"); /* TODO */\n  const char *const env_devsplit = getenv(\"ACC_OPENCL_DEVSPLIT\"), *const env_nlocks = getenv(\"ACC_OPENCL_NLOCKS\");\n  const char *const env_verbose = getenv(\"ACC_OPENCL_VERBOSE\"), *const env_dump_acc = getenv(\"ACC_OPENCL_DUMP\");\n  const char *const env_debug = getenv(\"ACC_OPENCL_DEBUG\"), *const env_profile = getenv(\"ACC_OPENCL_PROFILE\");\n  const char* const env_dump = (NULL != env_dump_acc ? env_dump_acc : getenv(\"IGC_ShaderDumpEnable\"));\n  const char *const env_neo = getenv(\"NEOReadDebugKeys\"), *const env_wa = getenv(\"ACC_OPENCL_WA\");\n  static char neo_enable_debug_keys[] = \"NEOReadDebugKeys=1\";\n#  if defined(ACC_OPENCL_STREAM_PRIORITIES)\n  const char* const env_priority = getenv(\"ACC_OPENCL_PRIORITY\");\n#  endif\n#  if defined(ACC_OPENCL_NCCS)\n  const char* const env_nccs = getenv(\"ACC_OPENCL_NCCS\");\n  const int nccs = (NULL == env_nccs ? ACC_OPENCL_NCCS : atoi(env_nccs));\n#  endif\n#  if defined(ACC_OPENCL_XHINTS)\n  const char* const env_xhints = (ACC_OPENCL_XHINTS);\n  const int xhints_default = 1 + 2 + 4 + 8 + 16;\n#  else\n  const char* const env_xhints = NULL;\n  const int xhints_default = 0;\n#  endif\n#  if defined(ACC_OPENCL_ASYNC)\n  const char* const env_async = (ACC_OPENCL_ASYNC);\n  const int async_default = 1 + 2 + 4 + 8;\n#  else\n  const char* const env_async = NULL;\n  const int async_default = 0;\n#  endif\n  const int nlocks = (NULL == env_nlocks ? 1 /*default*/ : atoi(env_nlocks));\n  const int neo = (NULL == env_neo ? 1 : atoi(env_neo));\n  int i;\n#  if defined(_OPENMP)\n  const int max_threads = omp_get_max_threads(), num_threads = omp_get_num_threads();\n  memset(&c_dbcsr_acc_opencl_config, 0, sizeof(c_dbcsr_acc_opencl_config));\n  c_dbcsr_acc_opencl_config.nthreads = (num_threads < max_threads ? max_threads : num_threads);\n#  else\n  memset(&c_dbcsr_acc_opencl_config, 0, sizeof(c_dbcsr_acc_opencl_config));\n  c_dbcsr_acc_opencl_config.nthreads = 1;\n#  endif\n  assert(NULL == c_dbcsr_acc_opencl_config.lock_main); /* test condition to avoid initializing multiple times */\n  libxsmm_init(); /* before using LIBXSMM's functionality */\n  c_dbcsr_acc_opencl_config.nranks = LIBXSMM_MAX(NULL != env_nranks ? atoi(env_nranks) : 1, 1);\n  c_dbcsr_acc_opencl_config.nrank = (NULL != env_rank ? atoi(env_rank) : 0) % c_dbcsr_acc_opencl_config.nranks;\n  assert(sizeof(ACC_OPENCL_LOCKTYPE) <= ACC_OPENCL_CACHELINE);\n  for (i = 0; i < ACC_OPENCL_NLOCKS; ++i) {\n    ACC_OPENCL_INIT((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * i));\n  }\n  c_dbcsr_acc_opencl_config.lock_main = (ACC_OPENCL_LOCKTYPE*)c_dbcsr_acc_opencl_locks;\n  c_dbcsr_acc_opencl_config.lock_memory = /* 2nd lock-domain */\n    (1 < LIBXSMM_MIN(nlocks, ACC_OPENCL_NLOCKS) ? ((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * 1))\n                                                : c_dbcsr_acc_opencl_config.lock_main);\n  c_dbcsr_acc_opencl_config.lock_stream = /* 3rd lock-domain */\n    (2 < LIBXSMM_MIN(nlocks, ACC_OPENCL_NLOCKS) ? ((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * 2))\n                                                : c_dbcsr_acc_opencl_config.lock_main);\n  c_dbcsr_acc_opencl_config.lock_event = /* 4th lock-domain */\n    (3 < LIBXSMM_MIN(nlocks, ACC_OPENCL_NLOCKS) ? ((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * 3))\n                                                : c_dbcsr_acc_opencl_config.lock_main);\n  c_dbcsr_acc_opencl_config.verbosity = (NULL == env_verbose ? 0 : atoi(env_verbose));\n  c_dbcsr_acc_opencl_config.devsplit = (NULL == env_devsplit ? (/*1 < c_dbcsr_acc_opencl_config.nranks ? -1 :*/ 0)\n                                                             : atoi(env_devsplit));\n#  if defined(ACC_OPENCL_STREAM_PRIORITIES)\n  c_dbcsr_acc_opencl_config.priority = (NULL == env_priority ? /*default*/ 3 : atoi(env_priority));\n#  endif\n  c_dbcsr_acc_opencl_config.profile = (NULL == env_profile ? /*default*/ 0 : atoi(env_profile));\n  c_dbcsr_acc_opencl_config.xhints = (NULL == env_xhints ? xhints_default : atoi(env_xhints));\n  c_dbcsr_acc_opencl_config.async = (NULL == env_async ? async_default : atoi(env_async));\n  c_dbcsr_acc_opencl_config.dump = (NULL == env_dump ? /*default*/ 0 : atoi(env_dump));\n  c_dbcsr_acc_opencl_config.debug = (NULL == env_debug ? c_dbcsr_acc_opencl_config.dump : atoi(env_debug));\n  c_dbcsr_acc_opencl_config.wa = neo * (NULL == env_wa ? ((1 != c_dbcsr_acc_opencl_config.devsplit ? 0 : 1) + (2 + 4 + 8))\n                                                       : atoi(env_wa));\n#  if defined(ACC_OPENCL_CACHE_DIR)\n  { /* environment is populated before touching the compute runtime */\n    const char *const env_cache = getenv(\"ACC_OPENCL_CACHE\"), *env_cachedir = getenv(\"NEO_CACHE_DIR\");\n    int cache = (NULL == env_cache ? 0 : atoi(env_cache));\n    struct stat cachedir;\n    if (0 == cache) {\n      if (stat(ACC_OPENCL_CACHE_DIR, &cachedir) == 0 && S_ISDIR(cachedir.st_mode)) cache = 1;\n      else if (stat(ACC_OPENCL_TEMPDIR \"/\" ACC_OPENCL_CACHE_DIR, &cachedir) == 0 && S_ISDIR(cachedir.st_mode)) cache = 2;\n    }\n    if (1 == cache) {\n      static char neo_cachedir[] = \"NEO_CACHE_DIR=\" ACC_OPENCL_CACHE_DIR;\n      static char ocl_cachedir[] = \"cl_cache_dir=\" ACC_OPENCL_CACHE_DIR;\n      ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(neo_cachedir)); /* putenv before entering OpenCL */\n      ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(ocl_cachedir)); /* putenv before entering OpenCL */\n      env_cachedir = ACC_OPENCL_CACHE_DIR;\n    }\n#    if defined(ACC_OPENCL_TEMPDIR)\n    else if (NULL == env_cachedir) { /* code-path entered by default */\n      if (NULL == env_cache || 0 != cache) { /* customize NEO_CACHE_DIR unless ACC_OPENCL_CACHE=0 */\n        static char neo_cachedir[] = \"NEO_CACHE_DIR=\" ACC_OPENCL_TEMPDIR \"/\" ACC_OPENCL_CACHE_DIR;\n        ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(neo_cachedir)); /* putenv before entering OpenCL */\n        env_cachedir = ACC_OPENCL_TEMPDIR \"/\" ACC_OPENCL_CACHE_DIR;\n      }\n      if (0 != cache) { /* legacy-NEO is treated with explicit opt-in */\n        static char ocl_cachedir[] = \"cl_cache_dir=\" ACC_OPENCL_TEMPDIR \"/\" ACC_OPENCL_CACHE_DIR;\n        ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(ocl_cachedir)); /* putenv before entering OpenCL */\n      }\n    }\n#    endif\n    if (NULL != env_cachedir) {\n#    if defined(_WIN32)\n      LIBXSMM_UNUSED(env_cachedir);\n#    else\n#      if defined(S_IRWXU) && defined(S_IRGRP) && defined(S_IXGRP) && defined(S_IROTH) && defined(S_IXOTH)\n      const int mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;\n#      else\n      const int mode = 0xFFFFFFFF;\n#      endif\n      ACC_OPENCL_EXPECT(0 == mkdir(env_cachedir, mode) || EEXIST == errno); /* soft-error */\n#    endif\n    }\n  }\n#  endif\n#  if defined(ACC_OPENCL_NCCS)\n  if (0 != nccs && NULL == getenv(\"ZEX_NUMBER_OF_CCS\")) {\n    static char zex_nccs[ACC_OPENCL_MAXNDEVS * 8 + 32] = \"ZEX_NUMBER_OF_CCS=\";\n    const int mode = ((1 == nccs || 2 == nccs) ? nccs : 4);\n    int j = strlen(zex_nccs);\n    for (i = 0; i < ACC_OPENCL_MAXNDEVS; ++i) {\n      const char* const istr = (0 < i ? \",%u:%i\" : \"%u:%i\");\n      const int n = LIBXSMM_SNPRINTF(zex_nccs + j, sizeof(zex_nccs) - j, istr, i, mode);\n      if (0 < n) j += n;\n      else {\n        j = 0;\n        break;\n      }\n    }\n    if (0 < j && 0 == LIBXSMM_PUTENV(zex_nccs) && /* populate before touching the compute runtime */\n        (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity))\n    {\n      fprintf(stderr, \"INFO ACC/OpenCL: support multiple separate compute command streamers (%i-CCS mode)\\n\", mode);\n    }\n  }\n#  endif\n  if (0 != neo && (NULL != env_neo || 0 == LIBXSMM_PUTENV(neo_enable_debug_keys))) {\n    if ((1 + 2 + 4) & c_dbcsr_acc_opencl_config.wa) {\n      static char a[] = \"ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE\", b[] = \"EnableRecoverablePageFaults=0\";\n      static char c[] = \"DirectSubmissionOverrideBlitterSupport=0\", *const apply[] = {a, b, c};\n      if ((1 & c_dbcsr_acc_opencl_config.wa) && NULL == getenv(\"ZE_FLAT_DEVICE_HIERARCHY\")) {\n        ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(apply[0]));\n      }\n#  if (1 >= ACC_OPENCL_USM)\n      if ((2 & c_dbcsr_acc_opencl_config.wa) && NULL == getenv(\"EnableRecoverablePageFaults\")) {\n        ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(apply[1]));\n      }\n#  endif\n      if ((4 & c_dbcsr_acc_opencl_config.wa) && NULL == getenv(\"DirectSubmissionOverrideBlitterSupport\")) {\n        ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(apply[2]));\n      }\n    }\n    if (0 != c_dbcsr_acc_opencl_config.debug && NULL == getenv(\"DisableScratchPages\")) {\n      static char a[] = \"DisableScratchPages=1\", *const apply[] = {a};\n      ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(apply[0]));\n    }\n  }\n}\n\n\nint c_dbcsr_acc_init(void) {\n#  if defined(_OPENMP)\n  /* initialization/finalization is not meant to be thread-safe */\n  int result = ((0 == omp_in_parallel() || /*main*/ 0 == omp_get_thread_num()) ? EXIT_SUCCESS : EXIT_FAILURE);\n#  else\n  int result = EXIT_SUCCESS;\n#  endif\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (NULL == c_dbcsr_acc_opencl_config.lock_main) { /* avoid to configure multiple times */\n    c_dbcsr_acc_opencl_configure();\n  }\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  else\n  if (NULL == c_dbcsr_acc_opencl_config.lock_main) { /* avoid to configure multiple times */\n    c_dbcsr_acc_opencl_configure();\n  }\n#  endif\n  /* eventually touch OpenCL/compute runtime after configure */\n  if (0 == c_dbcsr_acc_opencl_config.ndevices && EXIT_SUCCESS == result) { /* avoid to initialize multiple times */\n    char buffer[ACC_OPENCL_BUFFERSIZE];\n    cl_platform_id platforms[ACC_OPENCL_MAXNDEVS] = {NULL};\n    cl_device_id devices[ACC_OPENCL_MAXNDEVS];\n    cl_device_type type = CL_DEVICE_TYPE_ALL;\n    cl_uint nplatforms = 0, ndevices = 0, i;\n    const char* const env_devmatch = getenv(\"ACC_OPENCL_DEVMATCH\");\n    const char* const env_devtype = getenv(\"ACC_OPENCL_DEVTYPE\");\n    const char* const env_device = getenv(\"ACC_OPENCL_DEVICE\");\n    char* const env_devids = getenv(\"ACC_OPENCL_DEVIDS\");\n    int device_id = (NULL == env_device ? 0 : atoi(env_device));\n#  if defined(ACC_OPENCL_CACHE_DID)\n    assert(0 == c_dbcsr_acc_opencl_active_id);\n#  endif\n    if (EXIT_SUCCESS != c_dbcsr_acc_opencl_device_uid(NULL /*device*/, env_devmatch, &c_dbcsr_acc_opencl_config.devmatch)) {\n      c_dbcsr_acc_opencl_config.devmatch = 1;\n    }\n    if (EXIT_SUCCESS == clGetPlatformIDs(0, NULL, &nplatforms) && 0 < nplatforms) {\n      ACC_OPENCL_CHECK(result, clGetPlatformIDs(nplatforms <= ACC_OPENCL_MAXNDEVS ? nplatforms : ACC_OPENCL_MAXNDEVS, platforms, 0),\n        \"retrieve platform ids\");\n    }\n    if (EXIT_SUCCESS == result) {\n      if (NULL != env_devtype && '\\0' != *env_devtype) {\n        if (NULL != LIBXSMM_STRISTR(env_devtype, \"gpu\")) {\n          type = CL_DEVICE_TYPE_GPU;\n        }\n        else if (NULL != LIBXSMM_STRISTR(env_devtype, \"cpu\")) {\n          type = CL_DEVICE_TYPE_CPU;\n        }\n        else if (NULL != LIBXSMM_STRISTR(env_devtype, \"acc\") || NULL != LIBXSMM_STRISTR(env_devtype, \"other\")) {\n          type = CL_DEVICE_TYPE_ACCELERATOR;\n        }\n        else {\n          type = CL_DEVICE_TYPE_ALL;\n        }\n      }\n      c_dbcsr_acc_opencl_config.ndevices = 0;\n      for (i = 0; i < nplatforms; ++i) {\n        if (EXIT_SUCCESS == clGetDeviceIDs(platforms[i], type, 0, NULL, &ndevices) && 0 < ndevices) {\n          ACC_OPENCL_CHECK(result, clGetDeviceIDs(platforms[i], type, ndevices, devices, NULL), \"retrieve device ids\");\n          if (EXIT_SUCCESS == result) {\n            cl_uint j = 0;\n            for (; j < ndevices; ++j) {\n#  if defined(CL_VERSION_1_2)\n              cl_device_partition_property properties[] = {\n                CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN, CL_DEVICE_AFFINITY_DOMAIN_NUMA, /*terminator*/ 0};\n              cl_uint nunits = 0, n = 0;\n              if ((1 < c_dbcsr_acc_opencl_config.devsplit || 0 > c_dbcsr_acc_opencl_config.devsplit) &&\n                  /* Intel CPU (e.g., out of two sockets) yields thread-count of both sockets */\n                  EXIT_SUCCESS == clGetDeviceInfo(devices[j], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(cl_uint), &nunits, NULL) &&\n                  1 < nunits)\n              {\n                n = LIBXSMM_MIN(1 < c_dbcsr_acc_opencl_config.devsplit ? (cl_uint)c_dbcsr_acc_opencl_config.devsplit : nunits,\n                  ACC_OPENCL_MAXNDEVS);\n                properties[0] = CL_DEVICE_PARTITION_EQUALLY;\n                properties[1] = (nunits + n - 1) / n;\n              }\n              if (0 == c_dbcsr_acc_opencl_config.devsplit || 1 == c_dbcsr_acc_opencl_config.devsplit ||\n                  (c_dbcsr_acc_opencl_config.ndevices + 1) == ACC_OPENCL_MAXNDEVS ||\n                  EXIT_SUCCESS != clCreateSubDevices(devices[j], properties, 0, NULL, &n))\n#  endif\n              {\n                c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.ndevices] = devices[j];\n                ++c_dbcsr_acc_opencl_config.ndevices;\n              }\n#  if defined(CL_VERSION_1_2)\n              else if (1 < n) { /* create subdevices */\n                if (ACC_OPENCL_MAXNDEVS < (c_dbcsr_acc_opencl_config.ndevices + n)) {\n                  n = (cl_uint)ACC_OPENCL_MAXNDEVS - c_dbcsr_acc_opencl_config.ndevices;\n                }\n                if (EXIT_SUCCESS == clCreateSubDevices(devices[j], properties, n,\n                                      c_dbcsr_acc_opencl_config.devices + c_dbcsr_acc_opencl_config.ndevices, NULL))\n                {\n                  ACC_OPENCL_CHECK(result, clReleaseDevice(devices[j]), \"release device\");\n                  c_dbcsr_acc_opencl_config.ndevices += n;\n                }\n                else break;\n              }\n              else {\n                c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.ndevices] = devices[j];\n                ++c_dbcsr_acc_opencl_config.ndevices;\n              }\n#  endif\n            }\n          } /*else break;*/\n        }\n      }\n    }\n    if (EXIT_SUCCESS == result && 0 < c_dbcsr_acc_opencl_config.ndevices) {\n      const char* const env_vendor = getenv(\"ACC_OPENCL_VENDOR\");\n      /* filter device by vendor (if requested) */\n      if (NULL != env_vendor && '\\0' != *env_vendor) {\n        for (i = 0; (int)i < c_dbcsr_acc_opencl_config.ndevices;) {\n          if (EXIT_SUCCESS ==\n              clGetDeviceInfo(c_dbcsr_acc_opencl_config.devices[i], CL_DEVICE_VENDOR, ACC_OPENCL_BUFFERSIZE, buffer, NULL))\n          {\n            if (NULL == LIBXSMM_STRISTR(buffer, env_vendor)) {\n#  if defined(CL_VERSION_1_2)\n              ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(c_dbcsr_acc_opencl_config.devices[i]));\n#  endif\n              --c_dbcsr_acc_opencl_config.ndevices;\n              if ((int)i < c_dbcsr_acc_opencl_config.ndevices) { /* keep original order (stable) */\n                memmove(&c_dbcsr_acc_opencl_config.devices[i], &c_dbcsr_acc_opencl_config.devices[i + 1],\n                  sizeof(cl_device_id) * (c_dbcsr_acc_opencl_config.ndevices - i));\n              }\n            }\n            else ++i;\n          }\n          else break; /* error: retrieving device vendor */\n        }\n      }\n      /* reorder devices according to c_dbcsr_acc_opencl_order_devices */\n      if (EXIT_SUCCESS == result && 1 < c_dbcsr_acc_opencl_config.ndevices) {\n        qsort(c_dbcsr_acc_opencl_config.devices, c_dbcsr_acc_opencl_config.ndevices, sizeof(cl_device_id),\n          c_dbcsr_acc_opencl_order_devices);\n      }\n      /* ACC_OPENCL_DEVIDS is parsed as a list of devices (whitelist) */\n      if (EXIT_SUCCESS == result && NULL != env_devids && '\\0' != *env_devids) {\n        cl_uint devids[ACC_OPENCL_MAXNDEVS], ndevids = 0;\n        char* did = strtok(env_devids, ACC_OPENCL_DELIMS \" \");\n        for (; NULL != did && ndevids < ACC_OPENCL_MAXNDEVS; did = strtok(NULL, ACC_OPENCL_DELIMS \" \")) {\n          const int id = atoi(did);\n          if (0 <= id && id < c_dbcsr_acc_opencl_config.ndevices) devids[ndevids++] = id;\n        }\n        if (0 < ndevids) {\n          ndevices = (cl_uint)c_dbcsr_acc_opencl_config.ndevices;\n          for (i = 0; i < ndevices; ++i) {\n            cl_uint match = 0, j = 0;\n            do\n              if (i == devids[j]) {\n                match = 1;\n                break;\n              }\n            while (++j < ndevids);\n            if (0 == match) {\n#  if defined(CL_VERSION_1_2)\n              ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(c_dbcsr_acc_opencl_config.devices[i]));\n#  endif\n              c_dbcsr_acc_opencl_config.devices[i] = NULL;\n            }\n          }\n          for (i = c_dbcsr_acc_opencl_config.ndevices - 1;; --i) {\n            if (NULL == c_dbcsr_acc_opencl_config.devices[i]) { /* keep original order (stable) */\n              const cl_uint nmove = c_dbcsr_acc_opencl_config.ndevices - (i + 1);\n              if (0 < nmove) {\n                memmove(\n                  &c_dbcsr_acc_opencl_config.devices[i], &c_dbcsr_acc_opencl_config.devices[i + 1], sizeof(cl_device_id) * nmove);\n              }\n              --c_dbcsr_acc_opencl_config.ndevices;\n            }\n            if (0 == i) break;\n          }\n        }\n      }\n    }\n    if (EXIT_SUCCESS == result && 0 < c_dbcsr_acc_opencl_config.ndevices) {\n      /* preselect any default device or prune to homogeneous set of devices */\n      if (NULL == env_device || '\\0' == *env_device) {\n        char tmp[ACC_OPENCL_BUFFERSIZE] = \"\";\n        ndevices = (cl_uint)c_dbcsr_acc_opencl_config.ndevices;\n        for (i = 0; i < ndevices; ++i) {\n          cl_device_type itype;\n          result = clGetDeviceInfo(c_dbcsr_acc_opencl_config.devices[i], CL_DEVICE_TYPE, sizeof(cl_device_type), &itype, NULL);\n          if (EXIT_SUCCESS == result) {\n            if (0 != (CL_DEVICE_TYPE_DEFAULT & itype)) {\n              if (0 < i) {\n                c_dbcsr_acc_opencl_config.devices[0] = c_dbcsr_acc_opencl_config.devices[i];\n              }\n              c_dbcsr_acc_opencl_config.ndevices = 1;\n              device_id = 0;\n              break;\n            }\n            else if (CL_DEVICE_TYPE_ALL == type && NULL == env_devtype /*&& CL_DEVICE_TYPE_GPU == itype*/ && device_id <= (int)i) {\n              result = clGetDeviceInfo(c_dbcsr_acc_opencl_config.devices[i], CL_DEVICE_NAME, ACC_OPENCL_BUFFERSIZE, buffer, NULL);\n              if (EXIT_SUCCESS == result /* prune for homogeneous set of devices */\n                  && ('\\0' == *tmp || 0 == strncmp(buffer, tmp, ACC_OPENCL_BUFFERSIZE)))\n              {\n                c_dbcsr_acc_opencl_config.ndevices = i + 1;\n                strncpy(tmp, buffer, ACC_OPENCL_BUFFERSIZE);\n              }\n              else break; /* error: retrieving device name */\n            }\n          }\n          else break; /* error: retrieving device type */\n        }\n      }\n      else { /* prune number of devices to only expose requested ID */\n        if (1 < c_dbcsr_acc_opencl_config.ndevices) {\n          if (0 < device_id) {\n            c_dbcsr_acc_opencl_config.devices[0] =\n              c_dbcsr_acc_opencl_config.devices[device_id % c_dbcsr_acc_opencl_config.ndevices];\n          }\n          c_dbcsr_acc_opencl_config.ndevices = 1;\n        }\n        device_id = 0;\n      }\n    }\n    if (device_id < c_dbcsr_acc_opencl_config.ndevices) {\n      if (EXIT_SUCCESS == result) {\n        const size_t nhandles = ACC_OPENCL_MAXNITEMS * c_dbcsr_acc_opencl_config.nthreads;\n        assert(0 < c_dbcsr_acc_opencl_config.ndevices);\n        assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS);\n        assert(NULL == c_dbcsr_acc_opencl_config.memptrs);\n        assert(NULL == c_dbcsr_acc_opencl_config.memptr_data);\n        assert(0 == c_dbcsr_acc_opencl_config.nmemptrs);\n        assert(NULL == c_dbcsr_acc_opencl_config.streams);\n        assert(NULL == c_dbcsr_acc_opencl_config.events);\n        assert(NULL == c_dbcsr_acc_opencl_config.stream_data);\n        assert(NULL == c_dbcsr_acc_opencl_config.event_data);\n        assert(0 == c_dbcsr_acc_opencl_config.nstreams);\n        assert(0 == c_dbcsr_acc_opencl_config.nevents);\n        /* allocate and initialize memptr registry */\n        c_dbcsr_acc_opencl_config.nmemptrs = nhandles;\n        c_dbcsr_acc_opencl_config.memptrs = (c_dbcsr_acc_opencl_info_memptr_t**)malloc(\n          sizeof(c_dbcsr_acc_opencl_info_memptr_t*) * nhandles);\n        c_dbcsr_acc_opencl_config.memptr_data = (c_dbcsr_acc_opencl_info_memptr_t*)malloc(\n          sizeof(c_dbcsr_acc_opencl_info_memptr_t) * nhandles);\n        if (NULL != c_dbcsr_acc_opencl_config.memptrs && NULL != c_dbcsr_acc_opencl_config.memptr_data) {\n          c_dbcsr_acc_opencl_pmalloc_init(sizeof(c_dbcsr_acc_opencl_info_memptr_t), &c_dbcsr_acc_opencl_config.nmemptrs,\n            (void**)c_dbcsr_acc_opencl_config.memptrs, c_dbcsr_acc_opencl_config.memptr_data);\n        }\n        else {\n          free(c_dbcsr_acc_opencl_config.memptrs);\n          free(c_dbcsr_acc_opencl_config.memptr_data);\n          c_dbcsr_acc_opencl_config.memptr_data = NULL;\n          c_dbcsr_acc_opencl_config.memptrs = NULL;\n          c_dbcsr_acc_opencl_config.nmemptrs = 0;\n          result = EXIT_FAILURE;\n        }\n        /* allocate and initialize streams registry */\n        c_dbcsr_acc_opencl_config.nstreams = nhandles;\n        c_dbcsr_acc_opencl_config.streams = (c_dbcsr_acc_opencl_stream_t**)malloc(sizeof(c_dbcsr_acc_opencl_stream_t*) * nhandles);\n        c_dbcsr_acc_opencl_config.stream_data = (c_dbcsr_acc_opencl_stream_t*)malloc(\n          sizeof(c_dbcsr_acc_opencl_stream_t) * nhandles);\n        if (NULL != c_dbcsr_acc_opencl_config.streams && NULL != c_dbcsr_acc_opencl_config.stream_data) {\n          c_dbcsr_acc_opencl_pmalloc_init(sizeof(c_dbcsr_acc_opencl_stream_t), &c_dbcsr_acc_opencl_config.nstreams,\n            (void**)c_dbcsr_acc_opencl_config.streams, c_dbcsr_acc_opencl_config.stream_data);\n        }\n        else {\n          free(c_dbcsr_acc_opencl_config.streams);\n          free(c_dbcsr_acc_opencl_config.stream_data);\n          c_dbcsr_acc_opencl_config.stream_data = NULL;\n          c_dbcsr_acc_opencl_config.streams = NULL;\n          c_dbcsr_acc_opencl_config.nstreams = 0;\n          result = EXIT_FAILURE;\n        }\n        /* allocate and initialize events registry */\n        c_dbcsr_acc_opencl_config.nevents = nhandles;\n        c_dbcsr_acc_opencl_config.events = (cl_event**)malloc(sizeof(cl_event*) * nhandles);\n        c_dbcsr_acc_opencl_config.event_data = (cl_event*)malloc(sizeof(cl_event) * nhandles);\n        if (NULL != c_dbcsr_acc_opencl_config.events && NULL != c_dbcsr_acc_opencl_config.event_data) {\n          c_dbcsr_acc_opencl_pmalloc_init(sizeof(cl_event*), &c_dbcsr_acc_opencl_config.nevents,\n            (void**)c_dbcsr_acc_opencl_config.events, c_dbcsr_acc_opencl_config.event_data);\n        }\n        else {\n          free(c_dbcsr_acc_opencl_config.events);\n          free(c_dbcsr_acc_opencl_config.event_data);\n          c_dbcsr_acc_opencl_config.event_data = NULL;\n          c_dbcsr_acc_opencl_config.events = NULL;\n          c_dbcsr_acc_opencl_config.nevents = 0;\n          result = EXIT_FAILURE;\n        }\n        if (\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n          2 <= c_dbcsr_acc_opencl_config.profile ||\n#  else\n          1 <= c_dbcsr_acc_opencl_config.profile ||\n#  endif\n          0 > c_dbcsr_acc_opencl_config.profile)\n        {\n          const char* const env_qsize = getenv(\"ACC_OPENCL_PROFILE_QSIZE\");\n          const int psize = (NULL == env_qsize ? 0 : atoi(env_qsize));\n          const int qsize = (0 >= psize ? 1024 : LIBXSMM_MIN(psize, 65536));\n          const int profile = LIBXSMM_MAX(LIBXSMM_ABS(c_dbcsr_acc_opencl_config.profile), 2);\n          const c_dbcsr_acc_opencl_hist_update_fn update[] = {c_dbcsr_acc_opencl_hist_avg, c_dbcsr_acc_opencl_hist_add};\n          c_dbcsr_acc_opencl_hist_create(&c_dbcsr_acc_opencl_config.hist_h2d, profile + 1, qsize, 2, update);\n          c_dbcsr_acc_opencl_hist_create(&c_dbcsr_acc_opencl_config.hist_d2h, profile + 1, qsize, 2, update);\n          c_dbcsr_acc_opencl_hist_create(&c_dbcsr_acc_opencl_config.hist_d2d, profile + 1, qsize, 2, update);\n        }\n        else {\n          assert(NULL == c_dbcsr_acc_opencl_config.hist_h2d);\n          assert(NULL == c_dbcsr_acc_opencl_config.hist_d2h);\n          assert(NULL == c_dbcsr_acc_opencl_config.hist_d2d);\n        }\n        if (EXIT_SUCCESS == result) { /* lastly, print active device and list of devices */\n#  if defined(ACC_OPENCL_ACTIVATE)\n          if (0 <= ACC_OPENCL_ACTIVATE && ACC_OPENCL_ACTIVATE < c_dbcsr_acc_opencl_config.ndevices) {\n            result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, ACC_OPENCL_ACTIVATE);\n          }\n          else {\n            if (0 < c_dbcsr_acc_opencl_config.nrank && 1 < c_dbcsr_acc_opencl_config.ndevices) {\n              device_id = c_dbcsr_acc_opencl_config.nrank % c_dbcsr_acc_opencl_config.ndevices;\n            }\n            result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, device_id);\n          }\n#  else\n          c_dbcsr_acc_opencl_config.device_id = device_id;\n#  endif\n          if ((2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) &&\n              (0 == c_dbcsr_acc_opencl_config.nrank))\n          {\n            char platform_name[ACC_OPENCL_BUFFERSIZE];\n            for (i = 0; i < (cl_uint)c_dbcsr_acc_opencl_config.ndevices; ++i) {\n              if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(c_dbcsr_acc_opencl_config.devices[i], buffer,\n                                    ACC_OPENCL_BUFFERSIZE, platform_name, ACC_OPENCL_BUFFERSIZE, /*cleanup*/ 0))\n              {\n                fprintf(stderr, \"INFO ACC/OpenCL: DEVICE -> \\\"%s : %s\\\" (%u)\\n\", platform_name, buffer, i);\n              }\n            }\n          }\n        }\n      }\n    }\n    else { /* mark as initialized */\n      c_dbcsr_acc_opencl_config.ndevices = -1;\n    }\n#  if defined(__DBCSR_ACC)\n    /* DBCSR shall call c_dbcsr_acc_init as well as libsmm_acc_init (since both interfaces are used).\n     * Also, libsmm_acc_init may privately call c_dbcsr_acc_init (as it depends on the ACC interface).\n     * The implementation of c_dbcsr_acc_init should hence be safe against \"over initialization\".\n     * However, DBCSR only calls c_dbcsr_acc_init (and expects an implicit libsmm_acc_init).\n     */\n    if (EXIT_SUCCESS == result) result = libsmm_acc_init();\n#  endif\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\n/* attempt to automatically initialize backend */\nLIBXSMM_ATTRIBUTE_CTOR void c_dbcsr_acc_opencl_init(void) {\n  if (NULL == c_dbcsr_acc_opencl_config.lock_main) { /* avoid to configure multiple times */\n    c_dbcsr_acc_opencl_configure();\n  }\n#  if defined(ACC_OPENCL_PREINIT)\n  ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_init());\n#  endif\n}\n\n\n/* attempt to automatically finalize backend */\nLIBXSMM_ATTRIBUTE_DTOR void c_dbcsr_acc_opencl_finalize(void) {\n  assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS);\n  if (0 != c_dbcsr_acc_opencl_config.ndevices) {\n    const int precision[] = {0, 1};\n    int i;\n    LIBXSMM_STDIO_ACQUIRE();\n    c_dbcsr_acc_opencl_hist_print(stderr, c_dbcsr_acc_opencl_config.hist_h2d, \"\\nPROF ACC/OpenCL: H2D\", precision, NULL /*adjust*/);\n    c_dbcsr_acc_opencl_hist_print(stderr, c_dbcsr_acc_opencl_config.hist_d2h, \"\\nPROF ACC/OpenCL: D2H\", precision, NULL /*adjust*/);\n    c_dbcsr_acc_opencl_hist_print(stderr, c_dbcsr_acc_opencl_config.hist_d2d, \"\\nPROF ACC/OpenCL: D2D\", precision, NULL /*adjust*/);\n    LIBXSMM_STDIO_RELEASE();\n    for (i = 0; i < ACC_OPENCL_MAXNDEVS; ++i) {\n      const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[i];\n      if (NULL != device_id) {\n#  if defined(CL_VERSION_1_2) && 0 /* avoid potential segfault */\n        ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(device_id));\n#  endif\n      }\n    }\n    if (NULL != c_dbcsr_acc_opencl_config.device.stream.queue) { /* release private stream */\n      clReleaseCommandQueue(c_dbcsr_acc_opencl_config.device.stream.queue); /* ignore return code */\n    }\n    if (NULL != c_dbcsr_acc_opencl_config.device.context) {\n      const cl_context context = c_dbcsr_acc_opencl_config.device.context;\n      c_dbcsr_acc_opencl_config.device.context = NULL;\n      clReleaseContext(context); /* ignore return code */\n    }\n    for (i = 0; i < ACC_OPENCL_NLOCKS; ++i) { /* destroy locks */\n      ACC_OPENCL_DESTROY((ACC_OPENCL_LOCKTYPE*)(c_dbcsr_acc_opencl_locks + ACC_OPENCL_CACHELINE * i));\n    }\n    /* release/reset buffers */\n    c_dbcsr_acc_opencl_hist_free(c_dbcsr_acc_opencl_config.hist_h2d);\n    c_dbcsr_acc_opencl_hist_free(c_dbcsr_acc_opencl_config.hist_d2h);\n    c_dbcsr_acc_opencl_hist_free(c_dbcsr_acc_opencl_config.hist_d2d);\n    free(c_dbcsr_acc_opencl_config.memptrs);\n    free(c_dbcsr_acc_opencl_config.memptr_data);\n    free(c_dbcsr_acc_opencl_config.streams);\n    free(c_dbcsr_acc_opencl_config.stream_data);\n    free(c_dbcsr_acc_opencl_config.events);\n    free(c_dbcsr_acc_opencl_config.event_data);\n    /* clear entire configuration structure */\n    memset(&c_dbcsr_acc_opencl_config, 0, sizeof(c_dbcsr_acc_opencl_config));\n#  if defined(ACC_OPENCL_CACHE_DID)\n    c_dbcsr_acc_opencl_active_id = 0; /* reset cached active device-ID */\n#  endif\n    libxsmm_finalize();\n  }\n}\n\n\nint c_dbcsr_acc_finalize(void) {\n#  if defined(_OPENMP)\n  /* initialization/finalization is not meant to be thread-safe */\n  int result = ((0 == omp_in_parallel() || /*main*/ 0 == omp_get_thread_num()) ? EXIT_SUCCESS : EXIT_FAILURE);\n#  else\n  int result = EXIT_SUCCESS;\n#  endif\n  static void (*cleanup)(void) = c_dbcsr_acc_opencl_finalize;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS);\n  if (0 != c_dbcsr_acc_opencl_config.ndevices && NULL != cleanup) {\n#  if defined(__DBCSR_ACC)\n    /* DBCSR may call c_dbcsr_acc_init as well as libsmm_acc_init() since both interface are used.\n     * libsmm_acc_init may privately call c_dbcsr_acc_init (as it depends on the ACC interface).\n     * The implementation of c_dbcsr_acc_init should be safe against \"over initialization\".\n     * However, DBCSR only calls c_dbcsr_acc_init and expects an implicit libsmm_acc_init().\n     */\n    if (EXIT_SUCCESS == result) result = libsmm_acc_finalize();\n#  endif\n    if (EXIT_SUCCESS == result) result = atexit(cleanup);\n    cleanup = NULL;\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_opencl_use_cmem(const c_dbcsr_acc_opencl_device_t* devinfo) {\n#  if defined(ACC_OPENCL_CMEM)\n  return (0 != devinfo->size_maxalloc && devinfo->size_maxalloc <= devinfo->size_maxcmem) ? EXIT_SUCCESS : EXIT_FAILURE;\n#  else\n  return EXIT_FAILURE;\n#  endif\n}\n\n\nvoid c_dbcsr_acc_clear_errors(void) {}\n\n\nint c_dbcsr_acc_get_ndevices(int* ndevices) {\n  int result;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n#  if defined(__DBCSR_ACC) /* lazy initialization */\n  /* DBCSR calls c_dbcsr_acc_get_ndevices before calling c_dbcsr_acc_init. */\n  result = c_dbcsr_acc_init();\n  if (EXIT_SUCCESS == result)\n#  endif\n  {\n    if (NULL != ndevices && 0 != c_dbcsr_acc_opencl_config.ndevices) {\n      *ndevices = (0 < c_dbcsr_acc_opencl_config.ndevices ? c_dbcsr_acc_opencl_config.ndevices : 0);\n      result = EXIT_SUCCESS;\n    }\n    else result = EXIT_FAILURE;\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_opencl_device_id(cl_device_id device, int* device_id, int* global_id) {\n  int result = EXIT_SUCCESS, i;\n  assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS);\n  assert(NULL != device_id || NULL != global_id);\n  for (i = 0; i < c_dbcsr_acc_opencl_config.ndevices; ++i) {\n    if (device == c_dbcsr_acc_opencl_config.devices[i]) break;\n  }\n  if (i < c_dbcsr_acc_opencl_config.ndevices) {\n    if (NULL != device_id) *device_id = i;\n    if (NULL != global_id) {\n      *global_id = i;\n      for (++i; i < ACC_OPENCL_MAXNDEVS; ++i) {\n        if (NULL != c_dbcsr_acc_opencl_config.devices[i]) {\n          if (device == c_dbcsr_acc_opencl_config.devices[i]) {\n            *global_id = i;\n            break;\n          }\n        }\n        else break;\n      }\n    }\n  }\n  else {\n    if (NULL != device_id) *device_id = -1;\n    if (NULL != global_id) *global_id = -1;\n    if (NULL != device) result = EXIT_FAILURE;\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_device_vendor(cl_device_id device, const char vendor[], int use_platform_name) {\n  char buffer[ACC_OPENCL_BUFFERSIZE];\n  int result = EXIT_SUCCESS;\n  assert(NULL != device && NULL != vendor);\n  if (0 == use_platform_name) {\n    result = clGetDeviceInfo(device, CL_DEVICE_VENDOR, ACC_OPENCL_BUFFERSIZE, buffer, NULL);\n  }\n  else {\n    cl_platform_id platform;\n    result = clGetDeviceInfo(device, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL);\n    if (EXIT_SUCCESS == result) {\n      result = clGetPlatformInfo(\n        platform, 1 == use_platform_name ? CL_PLATFORM_NAME : CL_PLATFORM_VENDOR, ACC_OPENCL_BUFFERSIZE, buffer, NULL);\n    }\n  }\n  if (EXIT_SUCCESS == result) {\n    result = (NULL != LIBXSMM_STRISTR(buffer, vendor) ? EXIT_SUCCESS : EXIT_FAILURE);\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_device_uid(cl_device_id device, const char devname[], unsigned int* uid) {\n  int result;\n  if (NULL != uid) {\n    if (NULL != device && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(device, \"intel\", 0 /*use_platform_name*/)) {\n      result = clGetDeviceInfo(device, 0x4251 /*CL_DEVICE_ID_INTEL*/, sizeof(unsigned int), uid, NULL);\n    }\n    else result = EXIT_FAILURE;\n    if (EXIT_SUCCESS != result) {\n      if (NULL != devname && '\\0' != *devname) {\n        *uid = (unsigned int)strtoul(devname, NULL, 0);\n        if (0 == *uid) {\n          const char *const begin = strrchr(devname, '['), *const end = strrchr(devname, ']');\n          if (NULL != begin && begin < end) {\n            *uid = (unsigned int)strtoul(begin + 1, NULL, 0);\n          }\n          if (0 == *uid) {\n            const size_t size = strlen(devname);\n            const unsigned int hash = libxsmm_hash(devname, (unsigned int)size, 25071975 /*seed*/);\n            *uid = libxsmm_hash(&hash, 4 /*size*/, hash >> 16 /*seed*/) & 0xFFFF;\n          }\n        }\n        result = EXIT_SUCCESS;\n      }\n      else {\n        result = EXIT_FAILURE;\n        *uid = 0;\n      }\n    }\n  }\n  else result = EXIT_FAILURE;\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_device_name(\n  cl_device_id device, char name[], size_t name_maxlen, char platform[], size_t platform_maxlen, int cleanup) {\n  int result_name = 0, result_platform = 0;\n  assert(NULL != name || NULL != platform);\n  if (NULL == device && 0 < c_dbcsr_acc_opencl_config.ndevices) {\n    device = c_dbcsr_acc_opencl_config.devices[0]; /* NULL-device refers to device 0 */\n  }\n  if (NULL != name && 0 != name_maxlen) {\n    result_name = clGetDeviceInfo(device, CL_DEVICE_NAME, name_maxlen, name, NULL);\n    if (0 != cleanup && EXIT_SUCCESS == result_name) {\n      char* const part = strchr(name, ':');\n      if (NULL != part) *part = '\\0';\n    }\n  }\n  if (NULL != platform && 0 != platform_maxlen) {\n    cl_platform_id platform_id;\n    result_platform = clGetDeviceInfo(device, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform_id, NULL);\n    if (EXIT_SUCCESS == result_platform) {\n      result_platform = clGetPlatformInfo(platform_id, CL_PLATFORM_NAME, platform_maxlen, platform, NULL);\n    }\n  }\n  return result_name | result_platform;\n}\n\n\nint c_dbcsr_acc_opencl_device_level(\n  cl_device_id device, int std_clevel[2], int std_level[2], char std_flag[16], cl_device_type* type) {\n  char buffer[ACC_OPENCL_BUFFERSIZE];\n  unsigned int std_clevel_uint[2] = {0}, std_level_uint[2] = {0};\n  int result = EXIT_SUCCESS;\n  assert(NULL != device && (NULL != std_clevel || NULL != std_level || NULL != std_flag || NULL != type));\n  result = clGetDeviceInfo(device, CL_DEVICE_OPENCL_C_VERSION, ACC_OPENCL_BUFFERSIZE / 2, buffer, NULL);\n  if (EXIT_SUCCESS == result && (NULL != std_clevel || NULL != std_flag)) {\n    if (2 == sscanf(buffer, \"OpenCL C %u.%u\", std_clevel_uint, std_clevel_uint + 1)) {\n      std_clevel[0] = (int)std_clevel_uint[0];\n      std_clevel[1] = (int)std_clevel_uint[1];\n    }\n    else result = EXIT_FAILURE;\n  }\n  if (EXIT_SUCCESS == result && (NULL != std_level || NULL != std_flag)) {\n    result = clGetDeviceInfo(\n      device, CL_DEVICE_VERSION, ACC_OPENCL_BUFFERSIZE - ACC_OPENCL_BUFFERSIZE / 2, buffer + ACC_OPENCL_BUFFERSIZE / 2, NULL);\n    if (EXIT_SUCCESS == result) {\n      if (2 == sscanf(buffer + ACC_OPENCL_BUFFERSIZE / 2, \"OpenCL %u.%u\", std_level_uint, std_level_uint + 1)) {\n        std_level[0] = (int)std_level_uint[0];\n        std_level[1] = (int)std_level_uint[1];\n      }\n      else result = EXIT_FAILURE;\n    }\n  }\n  if (EXIT_SUCCESS == result && NULL != std_flag) {\n    if (2 <= std_level_uint[0]) {\n      const int nchar = LIBXSMM_SNPRINTF(std_flag, 16, \"-cl-std=CL%u.0\", std_level_uint[0]);\n      if (0 >= nchar || 16 <= nchar) result = EXIT_FAILURE;\n    }\n    else if (1 <= std_level_uint[0]) {\n      if (1 <= std_level_uint[1]) {\n        const int nchar = LIBXSMM_SNPRINTF(std_flag, 16, \"-cl-std=CL%u.%u\", std_level_uint[0], std_level_uint[1]);\n        if (0 >= nchar || 16 <= nchar) result = EXIT_FAILURE;\n      }\n      else if (1 <= std_clevel_uint[0]) { /* fallback */\n        const int nchar = LIBXSMM_SNPRINTF(std_flag, 16, \"-cl-std=CL%u.%u\", std_clevel_uint[0], std_clevel_uint[1]);\n        if (0 >= nchar || 16 <= nchar) result = EXIT_FAILURE;\n      }\n      else *std_flag = '\\0'; /* not an error */\n    }\n    else *std_flag = '\\0'; /* not an error */\n  }\n  if (EXIT_SUCCESS == result && NULL != type) {\n    result = clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(cl_device_type), type, NULL);\n  }\n  if (EXIT_SUCCESS != result) {\n    if (NULL != std_clevel) std_clevel[0] = std_clevel[1] = 0;\n    if (NULL != std_level) std_level[0] = std_level[1] = 0;\n    if (NULL != std_flag) *std_flag = '\\0';\n    if (NULL != type) *type = 0;\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_device_ext(cl_device_id device, const char* const extnames[], int num_exts) {\n  int result = ((NULL != extnames && 0 < num_exts) ? EXIT_SUCCESS : EXIT_FAILURE);\n  char extensions[ACC_OPENCL_BUFFERSIZE], buffer[ACC_OPENCL_BUFFERSIZE];\n  assert(NULL != device);\n  ACC_OPENCL_CHECK(\n    result, clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, ACC_OPENCL_BUFFERSIZE, extensions, NULL), \"retrieve device extensions\");\n  if (EXIT_SUCCESS == result) {\n    do {\n      if (NULL != extnames[--num_exts]) {\n        const char* const end = buffer + strlen(extnames[num_exts]); /* before strtok */\n        char* ext = strtok(strncpy(buffer, extnames[num_exts], ACC_OPENCL_BUFFERSIZE - 1), ACC_OPENCL_DELIMS \" \\t\");\n        for (; NULL != ext; ext = ((ext + 1) < end ? strtok((ext + 1) + strlen(ext), ACC_OPENCL_DELIMS \" \\t\") : NULL)) {\n          if (NULL == strstr(extensions, ext)) {\n            return EXIT_FAILURE;\n          }\n        }\n      }\n    } while (0 < num_exts);\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_create_context(cl_device_id active_id, cl_context* context) {\n  cl_platform_id platform = NULL;\n  int result;\n  assert(0 < c_dbcsr_acc_opencl_config.ndevices);\n  assert(NULL != active_id && NULL != context);\n  result = clGetDeviceInfo(active_id, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL);\n  assert(EXIT_SUCCESS != result || NULL != platform);\n  if (EXIT_SUCCESS == result) {\n    void (*const notify)(\n      const char*, const void*, size_t, void*) = (0 != c_dbcsr_acc_opencl_config.verbosity ? c_dbcsr_acc_opencl_notify : NULL);\n    cl_context_properties properties[] = {\n      CL_CONTEXT_PLATFORM, 0 /*placeholder*/, 0 /* end of properties */\n    };\n    cl_context ctx = NULL;\n    properties[1] = (long)platform;\n    ctx = clCreateContext(properties, 1 /*num_devices*/, &active_id, notify, NULL /* user_data*/, &result);\n    if (EXIT_SUCCESS != result && CL_INVALID_DEVICE != result) { /* retry */\n      ctx = clCreateContext(NULL /*properties*/, 1 /*num_devices*/, &active_id, notify, NULL /* user_data*/, &result);\n    }\n    if (EXIT_SUCCESS == result) {\n      assert(NULL != ctx);\n      *context = ctx;\n      if (0 != c_dbcsr_acc_opencl_config.verbosity) {\n        char buffer[ACC_OPENCL_BUFFERSIZE];\n        int global_id = 0;\n        if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(\n                              active_id, buffer, ACC_OPENCL_BUFFERSIZE, NULL /*platform*/, 0 /*platform_maxlen*/, /*cleanup*/ 1) &&\n            EXIT_SUCCESS == c_dbcsr_acc_opencl_device_id(active_id, NULL /*devid*/, &global_id))\n        {\n          const size_t size = strlen(buffer);\n          unsigned int uid[] = {0, 0};\n          if ((EXIT_SUCCESS == c_dbcsr_acc_opencl_device_uid(NULL /*device*/, buffer, uid + 1)) &&\n              (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_uid(active_id, NULL /*devname*/, uid) || 0 != uid[1]) && uid[0] != uid[1])\n          {\n            ACC_OPENCL_EXPECT(0 < LIBXSMM_SNPRINTF(buffer + size, LIBXSMM_MAX(0, ACC_OPENCL_BUFFERSIZE - size), \" [0x%04x]\",\n                                    0 != uid[0] ? uid[0] : uid[1]));\n          }\n          fprintf(stderr, \"INFO ACC/OpenCL: ndevices=%i device%i=\\\"%s\\\" context=%p pid=%u nthreads=%i\\n\",\n            c_dbcsr_acc_opencl_config.ndevices, global_id, buffer, (void*)ctx, libxsmm_get_pid(),\n            c_dbcsr_acc_opencl_config.nthreads);\n        }\n      }\n    }\n    else {\n      if (CL_INVALID_DEVICE == result &&\n          EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, \"nvidia\", 0 /*use_platform_name*/))\n      {\n        fprintf(stderr, \"WARN ACC/OpenCL: if MPI-ranks target the same device in exclusive mode,\\n\"\n                        \"                    SMI must be used to enable sharing the device.\\n\");\n      }\n      *context = NULL;\n    }\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_set_active_device(ACC_OPENCL_LOCKTYPE* lock, int device_id) {\n  c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n  int result = EXIT_SUCCESS;\n  assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS);\n  if (0 <= device_id && device_id < c_dbcsr_acc_opencl_config.ndevices) {\n    /* accessing devices is thread-safe (array is fixed after initialization) */\n    const cl_device_id active_id = c_dbcsr_acc_opencl_config.devices[device_id];\n    if (NULL != active_id) {\n      cl_context context = NULL;\n      if (NULL != lock) ACC_OPENCL_ACQUIRE(lock);\n      context = devinfo->context;\n      if (NULL != context) {\n        if (device_id != c_dbcsr_acc_opencl_config.device_id) {\n          const cl_device_id context_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n          assert(NULL != context_id);\n#  if defined(CL_VERSION_1_2)\n          ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(context_id));\n#  endif\n          result = clReleaseContext(context);\n          context = NULL;\n        }\n      }\n      if (EXIT_SUCCESS == result && (NULL == devinfo->context || device_id != c_dbcsr_acc_opencl_config.device_id)) {\n        result = c_dbcsr_acc_opencl_create_context(active_id, &context);\n        assert(NULL != context || EXIT_SUCCESS != result);\n      }\n      /* update/cache device-specific information */\n      if (EXIT_SUCCESS == result && (NULL == devinfo->context || device_id != c_dbcsr_acc_opencl_config.device_id)) {\n        if (NULL != devinfo->stream.queue) { /* release private stream */\n          ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseCommandQueue(devinfo->stream.queue));\n        }\n        memset(devinfo, 0, sizeof(*devinfo));\n        result = c_dbcsr_acc_opencl_device_level(\n          active_id, devinfo->std_clevel, devinfo->std_level, devinfo->std_flag, &devinfo->type);\n        if (EXIT_SUCCESS == result) {\n          char devname[ACC_OPENCL_BUFFERSIZE] = \"\";\n          const char* const sgexts[] = {\"cl_intel_required_subgroup_size\", \"cl_intel_subgroups\", \"cl_khr_subgroups\"};\n          size_t sgsizes[16], nbytes = 0, i;\n          ACC_OPENCL_STREAM_PROPERTIES_TYPE properties[4] = {\n            CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0 /* terminator */\n          };\n          devinfo->intel = (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, \"intel\", 0 /*use_platform_name*/));\n          devinfo->nv = (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, \"nvidia\", 0 /*use_platform_name*/));\n          if (EXIT_SUCCESS != c_dbcsr_acc_opencl_device_name(active_id, devname, ACC_OPENCL_BUFFERSIZE, NULL /*platform*/,\n                                0 /*platform_maxlen*/, /*cleanup*/ 1) ||\n              EXIT_SUCCESS != c_dbcsr_acc_opencl_device_uid(active_id, devname, &devinfo->uid))\n          {\n            devinfo->uid = (cl_uint)-1;\n          }\n          if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, \"amd\", 0 /*use_platform_name*/) ||\n              EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, \"amd\", 1 /*use_platform_name*/))\n          {\n            devinfo->amd = 1;\n            if ('\\0' != *devname) {\n              const char* const gfxname = LIBXSMM_STRISTR(devname, \"gfx\");\n              if (NULL != gfxname && 90 <= atoi(gfxname + 3)) {\n                devinfo->amd = 2;\n              }\n            }\n          }\n          if (EXIT_SUCCESS !=\n              clGetDeviceInfo(active_id, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(cl_bool) /*cl_int*/, &devinfo->unified, NULL))\n          {\n            devinfo->unified = CL_FALSE;\n          }\n          if (EXIT_SUCCESS !=\n              clGetDeviceInfo(active_id, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(cl_ulong), &devinfo->size_maxalloc, NULL))\n          {\n            devinfo->size_maxalloc = 0;\n          }\n          if (EXIT_SUCCESS !=\n              clGetDeviceInfo(active_id, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(cl_ulong), &devinfo->size_maxcmem, NULL))\n          {\n            devinfo->size_maxcmem = 0;\n          }\n          if (EXIT_SUCCESS != clGetDeviceInfo(active_id, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(size_t), devinfo->wgsize, NULL)) {\n            devinfo->wgsize[0] = 1;\n          }\n          if (EXIT_SUCCESS != clGetDeviceInfo(active_id, 4199 /*CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE*/, sizeof(size_t),\n                                devinfo->wgsize + 1, NULL)) /* CL_VERSION_3_0 */\n          {\n            devinfo->wgsize[1] = 1;\n          }\n          assert(0 == devinfo->wgsize[2]);\n          if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(active_id, sgexts, 2) && 0 != devinfo->wgsize[1] &&\n              EXIT_SUCCESS ==\n                clGetDeviceInfo(active_id, 0x4108 /*CL_DEVICE_SUB_GROUP_SIZES_INTEL*/, sizeof(sgsizes), sgsizes, &nbytes))\n          {\n            for (i = 0; (i * sizeof(size_t)) < nbytes; ++i) {\n              const size_t sgsize = sgsizes[i];\n              if (devinfo->wgsize[2] < sgsize && (0 == (sgsize % devinfo->wgsize[1]) || 0 == (devinfo->wgsize[1] % sgsize))) {\n                if (devinfo->wgsize[1] < sgsize) devinfo->wgsize[1] = sgsize;\n                devinfo->wgsize[2] = sgsize;\n              }\n            }\n          }\n          else devinfo->wgsize[2] = 0;\n#  if defined(ACC_OPENCL_XHINTS) && (1 >= ACC_OPENCL_USM)\n          { /* cl_intel_unified_shared_memory extension */\n            cl_platform_id platform = NULL;\n            cl_bitfield bitfield = 0;\n            if (0 != (1 & c_dbcsr_acc_opencl_config.xhints) && 2 <= *devinfo->std_level && 0 != devinfo->intel &&\n                /*0 == c_dbcsr_acc_opencl_config.profile &&*/ (0 == devinfo->unified || NULL != (ACC_OPENCL_XHINTS)) &&\n                EXIT_SUCCESS == clGetDeviceInfo(active_id, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL) &&\n                EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, \"intel\", 2 /*platform vendor*/) &&\n                EXIT_SUCCESS == clGetDeviceInfo(active_id, 0x4191 /*CL_DEVICE_DEVICE_MEM_CAPABILITIES_INTEL*/, sizeof(cl_bitfield),\n                                  &bitfield, NULL) &&\n                0 != bitfield)\n            {\n              void* ptr[8] = {NULL};\n              int i = 0, n = 0;\n              ptr[0] = clGetExtensionFunctionAddressForPlatform(platform, \"clSetKernelArgMemPointerINTEL\");\n              ptr[1] = clGetExtensionFunctionAddressForPlatform(platform, \"clEnqueueMemFillINTEL\");\n              ptr[2] = clGetExtensionFunctionAddressForPlatform(platform, \"clEnqueueMemcpyINTEL\");\n              ptr[3] = clGetExtensionFunctionAddressForPlatform(platform, \"clDeviceMemAllocINTEL\");\n              ptr[4] = clGetExtensionFunctionAddressForPlatform(platform, \"clSharedMemAllocINTEL\");\n              ptr[5] = clGetExtensionFunctionAddressForPlatform(platform, \"clHostMemAllocINTEL\");\n              ptr[6] = clGetExtensionFunctionAddressForPlatform(platform, \"clMemFreeINTEL\");\n              for (; i < (int)(sizeof(ptr) / sizeof(*ptr)); ++i) {\n                if (NULL != ptr[i]) ++n;\n              }\n              if (7 == n) {\n                LIBXSMM_ASSIGN127(&devinfo->clSetKernelArgMemPointerINTEL, ptr + 0);\n                LIBXSMM_ASSIGN127(&devinfo->clEnqueueMemFillINTEL, ptr + 1);\n                LIBXSMM_ASSIGN127(&devinfo->clEnqueueMemcpyINTEL, ptr + 2);\n                LIBXSMM_ASSIGN127(&devinfo->clDeviceMemAllocINTEL, ptr + 3);\n                LIBXSMM_ASSIGN127(&devinfo->clSharedMemAllocINTEL, ptr + 4);\n                LIBXSMM_ASSIGN127(&devinfo->clHostMemAllocINTEL, ptr + 5);\n                LIBXSMM_ASSIGN127(&devinfo->clMemFreeINTEL, ptr + 6);\n              }\n              else if (0 != n) {\n                fprintf(stderr, \"WARN ACC/OpenCL: inconsistent state discovered!\\n\");\n              }\n            }\n          }\n#  endif\n#  if (0 != ACC_OPENCL_USM)\n          { /* OpenCL 2.0 based SVM capabilities */\n            const char* const env_usm = getenv(\"ACC_OPENCL_USM\");\n            cl_device_svm_capabilities svmcaps = 0;\n            if (NULL == env_usm) {\n              if (0 == devinfo->nv) { /* vendor workaround (force with ACC_OPENCL_USM=1) */\n                result = clGetDeviceInfo(active_id, CL_DEVICE_SVM_CAPABILITIES, sizeof(cl_device_svm_capabilities), &svmcaps, NULL);\n                assert(EXIT_SUCCESS == result || 0 == svmcaps);\n              }\n            }\n            else svmcaps = (cl_device_svm_capabilities)atoi(env_usm);\n            devinfo->usm = (cl_int)svmcaps;\n          }\n#  endif\n#  if defined(ACC_OPENCL_CMDAGR)\n          if (0 != devinfo->intel) { /* device vendor (above) can now be used */\n            int result_cmdagr = EXIT_SUCCESS;\n            const cl_command_queue q = ACC_OPENCL_CREATE_COMMAND_QUEUE(context, active_id, properties, &result_cmdagr);\n            if (EXIT_SUCCESS == result_cmdagr) {\n              assert(NULL != q);\n              clReleaseCommandQueue(q);\n            }\n          }\n#  endif\n          properties[1] = 0;\n          if (EXIT_SUCCESS == result) {\n            devinfo->stream.queue = ACC_OPENCL_CREATE_COMMAND_QUEUE(context, active_id, properties, &result);\n          }\n        }\n        if (EXIT_SUCCESS == result) {\n          if (NULL == devinfo->context || device_id != c_dbcsr_acc_opencl_config.device_id) {\n            c_dbcsr_acc_opencl_config.device_id = device_id;\n            devinfo->context = context;\n          }\n        }\n        else memset(devinfo, 0, sizeof(*devinfo));\n      }\n      if (NULL != lock) ACC_OPENCL_RELEASE(lock);\n    }\n    else result = EXIT_FAILURE;\n  }\n  else result = EXIT_FAILURE;\n  assert(EXIT_SUCCESS == result || NULL == devinfo->context);\n  return result;\n}\n\n\nint c_dbcsr_acc_set_active_device(int device_id) {\n  /* avoid ACC_OPENCL_PROFILE_DBCSR in this routine */\n  int result = EXIT_SUCCESS;\n  if (0 <= device_id) {\n#  if defined(__DBCSR_ACC) && defined(__OFFLOAD_OPENCL)\n    if (0 == c_dbcsr_acc_opencl_config.ndevices) { /* not initialized */\n      result = c_dbcsr_acc_init();\n    }\n#  endif\n  }\n  else result = EXIT_FAILURE;\n  if (EXIT_SUCCESS == result) {\n    if (device_id < c_dbcsr_acc_opencl_config.ndevices) {\n#  if defined(ACC_OPENCL_CACHE_DID)\n      if (c_dbcsr_acc_opencl_active_id != (device_id + 1))\n#  endif\n      {\n        result = c_dbcsr_acc_opencl_set_active_device(c_dbcsr_acc_opencl_config.lock_main, device_id);\n#  if defined(ACC_OPENCL_CACHE_DID)\n        if (EXIT_SUCCESS == result) c_dbcsr_acc_opencl_active_id = device_id + 1;\n#  endif\n      }\n    }\n    else result = EXIT_FAILURE;\n  }\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, c_dbcsr_acc_opencl_atomic_fp_t kind,\n  const char* exts[], size_t* exts_maxlen, char flags[], size_t flags_maxlen) {\n  size_t ext1, ext2;\n  int result = 0;\n  for (ext1 = 0; ext1 < (NULL != exts_maxlen ? *exts_maxlen : 0); ++ext1) {\n    if (NULL == exts[ext1] || '\\0' == *exts[ext1]) break;\n  }\n  for (ext2 = ext1 + 1; ext2 < (NULL != exts_maxlen ? *exts_maxlen : 0); ++ext2) {\n    if (NULL == exts[ext2] || '\\0' == *exts[ext2]) break;\n  }\n  if (NULL != devinfo && NULL != exts_maxlen && ext2 < *exts_maxlen) {\n    const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n    const char* atomic_type = \"\";\n    switch (kind) {\n      case c_dbcsr_acc_opencl_atomic_fp_64: {\n        exts[ext1] = \"cl_khr_fp64 cl_khr_int64_base_atomics cl_khr_int64_extended_atomics\";\n        if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) {\n          atomic_type = \"-DTA=long -DTA2=atomic_long -DTF=atomic_double\";\n        }\n        else {\n          exts[ext1] = \"cl_khr_fp64 cl_khr_int64_base_atomics\";\n          if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) {\n            atomic_type = \"-DTA=long\";\n          }\n          else { /* fallback */\n            exts[ext1] = \"cl_khr_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics\";\n            if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) {\n              atomic_type = \"-DATOMIC32_ADD64 -DTA=int -DTA2=atomic_int -DTF=atomic_double\";\n            }\n            else {\n              exts[ext1] = \"cl_khr_fp64 cl_khr_global_int32_base_atomics\";\n              if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) {\n                atomic_type = \"-DATOMIC32_ADD64 -DTA=int\";\n              }\n              else kind = c_dbcsr_acc_opencl_atomic_fp_no;\n            }\n          }\n        }\n      } break;\n      case c_dbcsr_acc_opencl_atomic_fp_32: {\n        exts[ext1] = \"cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics\";\n        if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) {\n          exts[ext2] = \"cl_khr_int64_base_atomics cl_khr_int64_extended_atomics\";\n          atomic_type = \"-DTA=int -DTA2=atomic_int -DTF=atomic_float\";\n        }\n        else {\n          exts[ext1] = \"cl_khr_global_int32_base_atomics\";\n          if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) {\n            exts[ext2] = \"cl_khr_int64_base_atomics\";\n            atomic_type = \"-DTA=int\";\n          }\n          else kind = c_dbcsr_acc_opencl_atomic_fp_no;\n        }\n      } break;\n      default: assert(c_dbcsr_acc_opencl_atomic_fp_no == kind);\n    }\n    if (c_dbcsr_acc_opencl_atomic_fp_no != kind) {\n      const char *barrier_expr = NULL, *atomic_exp = NULL, *atomic_ops = \"\";\n      const char* const env_barrier = getenv(\"ACC_OPENCL_BARRIER\");\n      const char* const env_atomics = getenv(\"ACC_OPENCL_ATOMICS\");\n      if (NULL == env_barrier || '0' != *env_barrier) {\n        barrier_expr = ((2 <= *devinfo->std_level && (0 == devinfo->intel || (CL_DEVICE_TYPE_CPU != devinfo->type)))\n                          ? \"-D\\\"BARRIER(A)=work_group_barrier(A,memory_scope_work_group)\\\"\"\n                          : \"-D\\\"BARRIER(A)=barrier(A)\\\"\");\n      }\n      else barrier_expr = \"\"; /* no barrier */\n      assert(NULL != barrier_expr);\n      if (NULL == env_atomics || '0' != *env_atomics) {\n        /* can signal/force atomics without confirmation */\n        const int force_atomics = ((NULL == env_atomics || '\\0' == *env_atomics) ? 0 : atoi(env_atomics));\n        if (NULL == env_atomics || '\\0' == *env_atomics || 0 != force_atomics) {\n          cl_bitfield fp_atomics = 0;\n          if (EXIT_SUCCESS == clGetDeviceInfo(device_id,\n                                (cl_device_info)(c_dbcsr_acc_opencl_atomic_fp_64 == kind ? 0x4232 : 0x4231), sizeof(cl_bitfield),\n                                &fp_atomics, NULL) &&\n              0 != (/*add*/ (1 << 1) & fp_atomics))\n          {\n            exts[ext2] = \"cl_ext_float_atomics\";\n#  if 1 /* enabling this permitted extension in source code causes compiler warning */\n            *exts_maxlen = ext2; /* quietly report extension by reducing exts_maxlen */\n#  endif\n            atomic_exp = (c_dbcsr_acc_opencl_atomic_fp_64 == kind\n                            ? \"atomic_fetch_add_explicit((GLOBAL_VOLATILE(atomic_double)*)A,B,\"\n                              \"memory_order_relaxed,memory_scope_work_group)\"\n                            : \"atomic_fetch_add_explicit((GLOBAL_VOLATILE(atomic_float)*)A,B,\"\n                              \"memory_order_relaxed,memory_scope_work_group)\");\n          }\n          else if (0 != force_atomics || (0 != devinfo->intel && ((0x4905 != devinfo->uid && 0 == devinfo->unified)))) {\n            if ((((0 != force_atomics || (0 != devinfo->intel && ((0x0bd0 <= devinfo->uid && 0x0bdb >= devinfo->uid) ||\n                                                                   c_dbcsr_acc_opencl_atomic_fp_32 == kind))))))\n            {\n              if (0 == force_atomics && (0 == devinfo->intel || 0x0bd0 > devinfo->uid || 0x0bdb < devinfo->uid)) {\n                exts[ext2] = \"cl_intel_global_float_atomics\";\n                atomic_ops = \"-Dcl_intel_global_float_atomics\";\n              }\n              else {\n                atomic_ops = ((2 > *devinfo->std_level && 2 > force_atomics)\n                                ? \"-DATOMIC_PROTOTYPES=1\"\n                                : (3 > force_atomics ? \"-DATOMIC_PROTOTYPES=2\" : \"-DATOMIC_PROTOTYPES=3\"));\n              }\n              atomic_exp = ((2 > *devinfo->std_level && 2 > force_atomics) ? \"atomic_add(A,B)\"\n                                                                           : \"atomic_fetch_add_explicit((GLOBAL_VOLATILE(TF)*)A,B,\"\n                                                                             \"memory_order_relaxed,memory_scope_work_group)\");\n            }\n            else {\n              atomic_exp = \"atomic_add_global_cmpxchg(A,B)\";\n              atomic_ops = \"-DCMPXCHG=atom_cmpxchg\";\n            }\n          }\n          else if (0 == devinfo->nv) {\n            if (1 >= devinfo->amd) {\n              atomic_ops = (c_dbcsr_acc_opencl_atomic_fp_32 == kind ? \"-DCMPXCHG=atomic_cmpxchg\" : \"-DCMPXCHG=atom_cmpxchg\");\n              atomic_exp = \"atomic_add_global_cmpxchg(A,B)\";\n              exts[ext2] = NULL;\n            }\n            else { /* GCN */\n              atomic_exp = (c_dbcsr_acc_opencl_atomic_fp_64 == kind\n                              ? \"__builtin_amdgcn_global_atomic_fadd_f64(A,B,__ATOMIC_RELAXED,__OPENCL_MEMORY_SCOPE_WORK_GROUP)\"\n                              : \"__builtin_amdgcn_global_atomic_fadd_f32(A,B,__ATOMIC_RELAXED,__OPENCL_MEMORY_SCOPE_WORK_GROUP)\");\n            }\n          }\n          else { /* xchg */\n            assert(NULL != atomic_ops && '\\0' == *atomic_ops);\n            atomic_exp = \"atomic_add_global_xchg(A,B)\";\n          }\n        }\n        else if (NULL != LIBXSMM_STRISTR(env_atomics, \"cmpxchg\")) {\n          atomic_ops = (c_dbcsr_acc_opencl_atomic_fp_32 == kind ? \"-DCMPXCHG=atomic_cmpxchg\" : \"-DCMPXCHG=atom_cmpxchg\");\n          atomic_exp = \"atomic_add_global_cmpxchg(A,B)\";\n          exts[ext2] = NULL;\n        }\n        else { /* xchg */\n          atomic_exp = \"atomic_add_global_xchg(A,B)\";\n          atomic_ops = (c_dbcsr_acc_opencl_atomic_fp_32 == kind ? \"-DXCHG=atomic_xchg\" : \"-DXCHG=atom_xchg\");\n        }\n      }\n      else { /* unsynchronized */\n        atomic_exp = \"*(A)+=(B)\"; /* non-atomic update */\n      }\n      assert(NULL != atomic_exp);\n      /* compose build parameters and flags */\n      result = LIBXSMM_SNPRINTF(flags, flags_maxlen, \" -DTAN=%i %s %s -D\\\"ATOMIC_ADD_GLOBAL(A,B)=%s\\\" %s\", kind, atomic_type,\n        atomic_ops, atomic_exp, barrier_expr);\n    }\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_defines(const char defines[], char buffer[], size_t buffer_size, int cleanup) {\n  const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n  int result = 0;\n  if (NULL != buffer && NULL != devinfo->context) {\n    const int std_clevel = 100 * devinfo->std_clevel[0] + 10 * devinfo->std_clevel[1];\n    const int std_level = 100 * devinfo->std_level[0] + 10 * devinfo->std_level[1];\n    result = LIBXSMM_SNPRINTF(buffer, buffer_size, \" -DACC_OPENCL_VERSION=%u -DACC_OPENCL_C_VERSION=%u%s\", std_level, std_clevel,\n      0 == c_dbcsr_acc_opencl_config.debug ? \" -DNDEBUG\" : \"\");\n    if (0 < result && (int)buffer_size > result) {\n      const int n = LIBXSMM_SNPRINTF(\n        buffer + result, buffer_size - result, ' ' != buffer[result - 1] ? \" %s\" : \"%s\", NULL != defines ? defines : \"\");\n      if (0 <= n) {\n        if ((int)buffer_size > (result += n) && 0 != cleanup) {\n          char* replace = strpbrk(buffer + result - n, \"\\\"\"); /* more portable (system/cpp needs quotes to protect braces) */\n          for (; NULL != replace; replace = strpbrk(replace + 1, \"\\\"\")) *replace = ' ';\n        }\n      }\n      else result = -1;\n    }\n  }\n  else result = -1;\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_kernel_flags(const char build_params[], const char build_options[], const char try_options[],\n  cl_program program, char buffer[], size_t buffer_size) {\n  const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n  int result = EXIT_SUCCESS, nchar = 0;\n  assert(NULL != program && (NULL != buffer || 0 == buffer_size));\n  nchar = c_dbcsr_acc_opencl_defines(build_params, buffer, buffer_size, 1 /*cleanup*/);\n  if (0 <= nchar && (int)buffer_size > nchar) {\n    const int debug = (0 != c_dbcsr_acc_opencl_config.debug && 0 != devinfo->intel && CL_DEVICE_TYPE_CPU != devinfo->type);\n    int n = LIBXSMM_SNPRINTF(buffer + nchar, buffer_size - nchar, \" %s%s %s\", 0 == debug ? \"\" : \"-gline-tables-only \",\n      devinfo->std_flag, NULL != build_options ? build_options : \"\");\n    if (0 <= n) {\n      nchar += n;\n      if (NULL != try_options && '\\0' != *try_options) { /* length is not reported in result */\n        n = LIBXSMM_SNPRINTF(buffer + nchar, buffer_size - nchar, \" %s\", try_options);\n        if (0 > n || (int)buffer_size <= (nchar + n)) buffer[nchar] = '\\0';\n      }\n    }\n    else nchar = n;\n  }\n  if (0 <= nchar && (int)buffer_size > nchar) { /* check if internal flags apply */\n    const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n    result = clBuildProgram(program, 1 /*num_devices*/, &device_id, buffer, NULL /*callback*/, NULL /*user_data*/);\n    if (EXIT_SUCCESS != result) { /* failed to apply internal flags */\n      ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseProgram(program)); /* avoid unclean state */\n      buffer[nchar] = '\\0'; /* remove internal flags */\n    }\n  }\n  else result = EXIT_FAILURE;\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_kernel(size_t source_kind, const char source[], const char kernel_name[], const char build_params[],\n  const char build_options[], const char try_options[], int* try_ok, const char* const extnames[], size_t num_exts,\n  cl_kernel* kernel) {\n  char buffer[ACC_OPENCL_BUFFERSIZE] = \"\", buffer_name[ACC_OPENCL_MAXSTRLEN * 2];\n  const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n  const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n  int result = ((NULL != source && NULL != kernel_name && '\\0' != *kernel_name) ? EXIT_SUCCESS : EXIT_FAILURE);\n  int ok = EXIT_SUCCESS, source_is_cl = (2 > source_kind), nchar = 0;\n  size_t size_src = 0, size = 0;\n  cl_program program = NULL;\n  FILE* file_src = NULL;\n  assert(NULL != devinfo->context);\n  assert(NULL != kernel);\n  *kernel = NULL;\n  if (EXIT_SUCCESS == result && (1 == source_kind)) file_src = fopen(source, \"rb\");\n  if (NULL != file_src) {\n    if (EXIT_SUCCESS == result) {\n      const char* const file_ext = strrchr(source, '.');\n      char* src = NULL;\n      source_is_cl = ((NULL != file_ext && NULL != LIBXSMM_STRISTR(file_ext + 1, \"cl\")) ? 1 : 0);\n      size_src = (EXIT_SUCCESS == fseek(file_src, 0 /*offset*/, SEEK_END) ? ftell(file_src) : 0);\n      src = (char*)((0 != size_src && EXIT_SUCCESS == fseek(file_src, 0 /*offset*/, SEEK_SET))\n                      ? libxsmm_aligned_scratch(size_src + source_is_cl /*terminator?*/, 0 /*auto-align*/)\n                      : NULL);\n      if (NULL != src) {\n        if (size_src == fread(src, 1 /*sizeof(char)*/, size_src /*count*/, file_src)) {\n          if (0 != source_is_cl) src[size_src] = '\\0'; /* terminator */\n          source = src;\n        }\n        else {\n          result = EXIT_FAILURE;\n          libxsmm_free(src);\n        }\n      }\n      else result = EXIT_FAILURE;\n    }\n    fclose(file_src);\n  }\n  else size_src = source_kind;\n  if (EXIT_SUCCESS == result && 0 != source_is_cl) {\n    const char* ext_source = source;\n    size_src = strlen(ext_source);\n    if (NULL != extnames) {\n      int n = num_exts, nflat = 0;\n      size_t size_ext = 0;\n      for (; 0 < n; --n) {\n        if (NULL != extnames[n - 1]) {\n          const char* const end = buffer + strlen(extnames[n - 1]); /* before strtok */\n          char* ext = strtok(strncpy(buffer, extnames[n - 1], ACC_OPENCL_BUFFERSIZE - 1), ACC_OPENCL_DELIMS \" \\t\");\n          for (; NULL != ext; ext = ((ext + 1) < end ? strtok((ext + 1) + strlen(ext), ACC_OPENCL_DELIMS \" \\t\") : NULL), ++nflat) {\n            size_ext += strlen(ext);\n          }\n        }\n      }\n      if (0 < size_ext && 0 < nflat) {\n        const char* const enable_ext = \"#pragma OPENCL EXTENSION %s : enable\\n\";\n        const size_t size_src_ext = size_src + size_ext + nflat * (strlen(enable_ext) - 2 /*%s*/);\n        char* const ext_source_buffer = (char*)libxsmm_aligned_scratch(size_src_ext + 1 /*terminator*/, 0 /*auto-align*/);\n        if (NULL != ext_source_buffer) {\n          for (n = 0; 0 < num_exts; --num_exts) {\n            if (NULL != extnames[num_exts - 1]) {\n              const char* const end = buffer_name + strlen(extnames[num_exts - 1]); /* before strtok */\n              char* ext = strtok(\n                strncpy(buffer_name, extnames[num_exts - 1], ACC_OPENCL_MAXSTRLEN * 2 - 1), ACC_OPENCL_DELIMS \" \\t\");\n              for (; NULL != ext; ext = ((ext + 1) < end ? strtok((ext + 1) + strlen(ext), ACC_OPENCL_DELIMS \" \\t\") : NULL)) {\n                const char* line = source;\n                for (;;) {\n                  if (2 != sscanf(line, \"#pragma OPENCL EXTENSION %[^: ]%*[: ]%[^\\n]\", buffer, buffer + ACC_OPENCL_BUFFERSIZE / 2))\n                  {\n                    line = NULL;\n                    break;\n                  }\n                  else if (0 == strncmp(buffer, ext, ACC_OPENCL_BUFFERSIZE / 2) &&\n                           0 == strncmp(buffer + ACC_OPENCL_BUFFERSIZE / 2, \"enable\", ACC_OPENCL_BUFFERSIZE / 2))\n                  {\n                    break;\n                  }\n                  line = strchr(line, '\\n');\n                  if (NULL != line) {\n                    ++line;\n                  }\n                  else break;\n                }\n#  if !defined(NDEBUG)\n                if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, (const char* const*)&ext, 1))\n#  endif\n                { /* NDEBUG: assume given extension is supported (confirmed upfront) */\n                  if (NULL == line) { /* extension is not already part of source */\n                    n += LIBXSMM_SNPRINTF(ext_source_buffer + n, size_src_ext + 1 /*terminator*/ - n, enable_ext, ext);\n                  }\n                }\n#  if !defined(NDEBUG)\n                else if (0 != strcmp(\"cl_intel_global_float_atomics\", ext)) {\n                  fprintf(stderr, \"WARN ACC/OpenCL: extension \\\"%s\\\" is not supported.\\n\", ext);\n                }\n#  endif\n              }\n            }\n          }\n          memcpy(ext_source_buffer + n, source, size_src);\n          size_src += n; /* according to given/permitted extensions */\n          assert(size_src <= size_src_ext);\n          ext_source_buffer[size_src] = '\\0';\n          ext_source = ext_source_buffer;\n        }\n      }\n      buffer[0] = '\\0'; /* reset to empty */\n    }\n    /* cpp: consider to preprocess kernel (failure does not impact result code) */\n    if (0 != c_dbcsr_acc_opencl_config.dump && NULL == file_src) {\n      char dump_filename[ACC_OPENCL_MAXSTRLEN];\n      nchar = LIBXSMM_SNPRINTF(dump_filename, sizeof(dump_filename), \"%s.cl\", kernel_name);\n      if (0 < nchar && (int)sizeof(dump_filename) > nchar) {\n        const int std_flag_len = (int)strlen(devinfo->std_flag);\n        const char* const env_cpp = getenv(\"ACC_OPENCL_CPP\");\n        const int cpp = (NULL == env_cpp ? 1 /*default*/ : atoi(env_cpp));\n#  if defined(ACC_OPENCL_CPPBIN)\n        FILE* const file_cpp = (0 != cpp ? fopen(ACC_OPENCL_CPPBIN, \"rb\") : NULL);\n#  else\n        FILE* const file_cpp = NULL;\n#  endif\n        int file_dmp = -1;\n        if (NULL != file_cpp) {\n          nchar = LIBXSMM_SNPRINTF(buffer_name, sizeof(buffer_name), ACC_OPENCL_TEMPDIR \"/.%s.XXXXXX\", kernel_name);\n          if (0 < nchar && (int)sizeof(buffer_name) > nchar) file_dmp = mkstemp(buffer_name);\n          fclose(file_cpp); /* existence-check */\n        }\n        else file_dmp = open(dump_filename, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);\n        if (0 <= file_dmp) {\n          if ((0 != std_flag_len &&\n                (3 != write(file_dmp, \"/*\\n\", 3) || std_flag_len != write(file_dmp, devinfo->std_flag, std_flag_len) ||\n                  4 != write(file_dmp, \"\\n*/\\n\", 4))) ||\n              size_src != (size_t)write(file_dmp, ext_source, size_src))\n          {\n            file_dmp = -1;\n          }\n          ACC_OPENCL_EXPECT(EXIT_SUCCESS == close(file_dmp));\n        }\n#  if defined(ACC_OPENCL_CPPBIN)\n        if (NULL != file_cpp && 0 <= file_dmp) { /* preprocess source-code */\n          const char* sed_pattern = \"\";\n#    if defined(ACC_OPENCL_SEDBIN)\n          FILE* const file_sed = fopen(ACC_OPENCL_SEDBIN, \"rb\");\n          if (NULL != file_sed) {\n            sed_pattern = \"| \" ACC_OPENCL_SEDBIN \" '/^[[:space:]]*\\\\(\\\\/\\\\/.*\\\\)*$/d'\";\n            fclose(file_sed); /* existence-check */\n          }\n#    endif\n          nchar = LIBXSMM_SNPRINTF(\n            buffer, ACC_OPENCL_BUFFERSIZE, ACC_OPENCL_CPPBIN \" -P -C -nostdinc %s\", 0 == devinfo->nv ? \"\" : \"-D__NV_CL_C_VERSION \");\n          if (0 < nchar && ACC_OPENCL_BUFFERSIZE > nchar) {\n            int n = c_dbcsr_acc_opencl_defines(build_params, buffer + nchar, ACC_OPENCL_BUFFERSIZE - nchar, 0 /*cleanup*/);\n            if (0 <= n && ACC_OPENCL_BUFFERSIZE > (nchar += n)) {\n              n = LIBXSMM_SNPRINTF(buffer + nchar, ACC_OPENCL_BUFFERSIZE - nchar,\n                ' ' != buffer[nchar - 1] ? \" %s %s >%s\" : \"%s %s >%s\", buffer_name, sed_pattern, dump_filename);\n            }\n            nchar = (0 <= n ? nchar : 0) + n;\n          }\n          if (0 < nchar && ACC_OPENCL_BUFFERSIZE > nchar && EXIT_SUCCESS == system(buffer)) {\n            FILE* const file = fopen(dump_filename, \"r\");\n            if (NULL != file) {\n              const long int size_file = (EXIT_SUCCESS == fseek(file, 0 /*offset*/, SEEK_END) ? ftell(file) : 0);\n              char* const src = (char*)(EXIT_SUCCESS == fseek(file, 0 /*offset*/, SEEK_SET)\n                                          ? libxsmm_aligned_scratch(size_file + 1 /*terminator*/, 0 /*auto-align*/)\n                                          : NULL);\n              if (NULL != src) {\n                if ((size_t)size_file == fread(src, 1 /*sizeof(char)*/, size_file /*count*/, file)) {\n                  if (source != ext_source) {\n                    void* p = NULL;\n                    LIBXSMM_ASSIGN127(&p, &ext_source);\n                    libxsmm_free(p);\n                  }\n                  src[size_file] = '\\0';\n                  ext_source = src;\n                }\n                else libxsmm_free(src);\n              }\n              ACC_OPENCL_EXPECT(EXIT_SUCCESS == fclose(file));\n            }\n          }\n          ACC_OPENCL_EXPECT(EXIT_SUCCESS == unlink(buffer_name)); /* remove temporary file */\n          buffer[0] = '\\0'; /* reset to empty */\n        }\n#  endif\n      }\n    }\n    program = clCreateProgramWithSource(devinfo->context, 1 /*nlines*/, &ext_source, NULL, &result);\n    assert(EXIT_SUCCESS != result || NULL != program);\n    if (EXIT_SUCCESS == result) {\n      ok = c_dbcsr_acc_opencl_kernel_flags(build_params, build_options, try_options, program, buffer, ACC_OPENCL_BUFFERSIZE);\n      if (EXIT_SUCCESS == ok) result = ok;\n      else {\n        program = clCreateProgramWithSource(devinfo->context, 1 /*nlines*/, &ext_source, NULL, &result);\n        assert(EXIT_SUCCESS != result || NULL != program);\n        if (EXIT_SUCCESS == result) {\n          result = clBuildProgram(program, 1 /*num_devices*/, &device_id, buffer, NULL /*callback*/, NULL /*user_data*/);\n          ok = EXIT_FAILURE;\n        }\n      }\n    }\n    if (EXIT_SUCCESS == result) {\n      if (source != ext_source) {\n        void* p = NULL;\n        LIBXSMM_ASSIGN127(&p, &ext_source);\n        libxsmm_free(p);\n      }\n      buffer[0] = '\\0'; /* reset to empty */\n      if (EXIT_SUCCESS == result) { /* extract kernel */\n        *kernel = clCreateKernel(program, kernel_name, &result);\n        if (EXIT_SUCCESS == result) {\n          assert(NULL != *kernel);\n          if (NULL == file_src && (2 <= c_dbcsr_acc_opencl_config.dump || 0 > c_dbcsr_acc_opencl_config.dump)) {\n            unsigned char* binary = NULL;\n            binary = (unsigned char*)(EXIT_SUCCESS ==\n                                          clGetProgramInfo(program, CL_PROGRAM_BINARY_SIZES, sizeof(size_t), &size, NULL)\n                                        ? libxsmm_aligned_scratch(size, 0 /*auto-align*/)\n                                        : NULL);\n            if (NULL != binary) {\n              result = clGetProgramInfo(program, CL_PROGRAM_BINARIES, sizeof(unsigned char*), &binary, NULL);\n              if (EXIT_SUCCESS == result) { /* successfully queried program binary */\n                FILE* file;\n                nchar = LIBXSMM_SNPRINTF(buffer, ACC_OPENCL_BUFFERSIZE, \"%s.dump\", kernel_name);\n                file = ((0 < nchar && ACC_OPENCL_BUFFERSIZE > nchar) ? fopen(buffer, \"wb\") : NULL);\n                buffer[0] = '\\0'; /* reset to empty */\n                if (NULL != file) {\n                  if (size != fwrite(binary, 1, size, file)) result = EXIT_FAILURE;\n                  fclose(file);\n                }\n                else result = EXIT_FAILURE;\n              }\n              libxsmm_free(binary);\n            }\n            else result = EXIT_FAILURE;\n          }\n        }\n      }\n    }\n    else if (source != ext_source) { /* error: creating program */\n      void* p = NULL;\n      LIBXSMM_ASSIGN127(&p, &ext_source);\n      libxsmm_free(p);\n    }\n  }\n  else if (EXIT_SUCCESS == result) { /* binary representation */\n    assert(1 < size_src || 0 == size_src);\n#  if defined(CL_VERSION_2_1)\n    if (0 != c_dbcsr_acc_opencl_config.dump) program = clCreateProgramWithIL(devinfo->context, source, size_src, &result);\n    else\n#  endif\n    {\n      program = clCreateProgramWithBinary(\n        devinfo->context, 1, &device_id, &size_src, (const unsigned char**)&source, NULL /*binary_status*/, &result);\n    }\n    assert(EXIT_SUCCESS != result || NULL != program);\n    if (EXIT_SUCCESS == result) {\n      ok = c_dbcsr_acc_opencl_kernel_flags(build_params, build_options, try_options, program, buffer, ACC_OPENCL_BUFFERSIZE);\n      if (EXIT_SUCCESS == ok) result = ok;\n      else {\n#  if defined(CL_VERSION_2_1)\n        if (0 != c_dbcsr_acc_opencl_config.dump) program = clCreateProgramWithIL(devinfo->context, source, size_src, &result);\n        else\n#  endif\n        {\n          program = clCreateProgramWithBinary(\n            devinfo->context, 1, &device_id, &size_src, (const unsigned char**)&source, NULL /*binary_status*/, &result);\n        }\n        assert(EXIT_SUCCESS != result || NULL != program);\n        if (EXIT_SUCCESS == result) {\n          result = clBuildProgram(program, 1 /*num_devices*/, &device_id, buffer, NULL /*callback*/, NULL /*user_data*/);\n          ok = EXIT_FAILURE;\n        }\n      }\n    }\n    if (EXIT_SUCCESS == result) {\n      *kernel = clCreateKernel(program, kernel_name, &result);\n#  if defined(CL_VERSION_1_2)\n      /* error creating kernel: discover available kernels in program, and adopt the last kernel listed */\n      if (EXIT_SUCCESS != result &&\n          EXIT_SUCCESS == clGetProgramInfo(program, CL_PROGRAM_KERNEL_NAMES, sizeof(char*), buffer, NULL) && '\\0' != *buffer)\n      {\n        const char *const semicolon = strrchr(buffer, ';'), *const name = (NULL == semicolon ? buffer : (semicolon + 1));\n        *kernel = clCreateKernel(program, name, &result);\n      }\n#  endif\n      assert(EXIT_SUCCESS != result || NULL != *kernel);\n    }\n  }\n  if (NULL != file_src) {\n    void* p = NULL;\n    LIBXSMM_ASSIGN127(&p, (const void**)&source);\n    assert(1 == source_kind);\n    libxsmm_free(p);\n  }\n  if (NULL != program) {\n    if (EXIT_SUCCESS != result && NULL != *kernel) {\n      ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseKernel(*kernel));\n      *kernel = NULL;\n    }\n    if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) {\n      if (EXIT_SUCCESS == clGetProgramBuildInfo(program, device_id, CL_PROGRAM_BUILD_LOG, ACC_OPENCL_BUFFERSIZE, buffer, &size)) {\n        const char* info = buffer;\n        while ('\\0' != *info && NULL != strchr(\"\\n\\r\\t \", *info)) ++info; /* remove preceding newline etc. */\n        assert(NULL != kernel_name && '\\0' != *kernel_name);\n        if ('\\0' != *info) fprintf(stderr, \"INFO ACC/OpenCL: %s -> %s\\n\", kernel_name, info);\n      }\n      else buffer[0] = '\\0'; /* reset to empty */\n    }\n    ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseProgram(program)); /* release in any case (EXIT_SUCCESS) */\n  }\n  if (NULL != try_ok) *try_ok = result | ok;\n  ACC_OPENCL_RETURN(result, buffer);\n}\n\n\nint c_dbcsr_acc_opencl_set_kernel_ptr(cl_kernel kernel, cl_uint arg_index, const void* arg_value) {\n  c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n  int result = EXIT_FAILURE;\n  assert(NULL != devinfo->context);\n#  if (1 >= ACC_OPENCL_USM)\n  if (NULL != devinfo->clSetKernelArgMemPointerINTEL) {\n    result = devinfo->clSetKernelArgMemPointerINTEL(kernel, arg_index, arg_value);\n  }\n  else\n#  endif\n#  if (0 != ACC_OPENCL_USM)\n    if (0 != devinfo->usm)\n  {\n    result = clSetKernelArgSVMPointer(kernel, arg_index, arg_value);\n  }\n  else\n#  elif defined(NDEBUG)\n  LIBXSMM_UNUSED(devinfo);\n#  endif\n  {\n    result = clSetKernelArg(kernel, arg_index, sizeof(cl_mem), &arg_value);\n  }\n  ACC_OPENCL_RETURN(result);\n}\n\n\ndouble c_dbcsr_acc_opencl_duration(cl_event event, int* result_code) {\n  cl_ulong begin = 0, end = 0;\n  int r = EXIT_FAILURE;\n  double result = 0;\n  if (NULL != event) {\n    r = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &begin, NULL);\n    if (EXIT_SUCCESS == r) {\n      r = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &end, NULL);\n      if (EXIT_SUCCESS == r) {\n        result = 1E-9 * LIBXSMM_DELTA(begin, end); /* Nanoseconds->seconds */\n      }\n    }\n  }\n  if (NULL != result_code) *result_code = r;\n  return result;\n}\n\n\ntypedef struct c_dbcsr_acc_opencl_hist_t {\n  c_dbcsr_acc_opencl_hist_update_fn* update;\n  double *vals, min, max;\n  int *buckets, nbuckets, nqueue, nvals, n;\n} c_dbcsr_acc_opencl_hist_t;\n\n\nvoid c_dbcsr_acc_opencl_hist_create(\n  void** hist, int nbuckets, int nqueue, int nvals, const c_dbcsr_acc_opencl_hist_update_fn update[]) {\n  c_dbcsr_acc_opencl_hist_t* h = (c_dbcsr_acc_opencl_hist_t*)malloc(sizeof(c_dbcsr_acc_opencl_hist_t));\n  assert(NULL != hist && 0 < nbuckets && 0 < nqueue && 0 < nvals && NULL != update);\n  if (NULL != h) {\n    h->vals = (double*)malloc(sizeof(double) * LIBXSMM_MAX(nbuckets, nqueue) * nvals);\n    h->update = (c_dbcsr_acc_opencl_hist_update_fn*)malloc(sizeof(c_dbcsr_acc_opencl_hist_update_fn) * nvals);\n    h->buckets = (int*)calloc(nbuckets, sizeof(int));\n    if (NULL != h->vals && NULL != h->buckets && NULL != h->update) {\n      union {\n        int raw;\n        float value;\n      } inf = {0};\n#  if defined(INFINITY) && /*overflow warning*/ !defined(_CRAYC)\n      inf.value = (float)(INFINITY);\n#  else\n      inf.raw = 0x7F800000;\n#  endif\n      h->min = +inf.value;\n      h->max = -inf.value;\n      h->nbuckets = nbuckets;\n      h->nqueue = nqueue;\n      h->nvals = nvals;\n      /* if update[] is NULL, c_dbcsr_acc_opencl_hist_avg is assumed */\n      for (h->n = 0; h->n < nvals; ++h->n) h->update[h->n] = update[h->n];\n      h->n = 0;\n    }\n    else {\n      free(h->buckets);\n      free(h->vals);\n      free(h);\n      h = NULL;\n    }\n  }\n  *hist = h;\n}\n\n\nvoid c_dbcsr_acc_opencl_hist_avg(double* dst, const double* src) {\n  assert(NULL != dst && NULL != src);\n  *dst = 0.5 * (*dst + *src);\n}\n\n\nvoid c_dbcsr_acc_opencl_hist_add(double* dst, const double* src) {\n  assert(NULL != dst && NULL != src);\n  *dst += *src;\n}\n\n\nvoid c_dbcsr_acc_opencl_hist_set(ACC_OPENCL_LOCKTYPE* lock, void* hist, const double vals[]) {\n  if (NULL != hist) {\n    c_dbcsr_acc_opencl_hist_t* const h = (c_dbcsr_acc_opencl_hist_t*)hist;\n    int i, j, k;\n    if (NULL != lock) ACC_OPENCL_ACQUIRE(lock);\n    if (h->nqueue <= h->n) {\n      const double *values, w = h->max - h->min;\n      const int* buckets;\n      if (h->nqueue == h->n) {\n        c_dbcsr_acc_opencl_hist_get(NULL /*lock*/, hist, &buckets, NULL /*nbuckets*/, NULL /*range*/, &values, NULL /*nvals*/);\n      }\n      for (i = 1; i <= h->nbuckets; ++i) {\n        const double q = h->min + i * w / h->nbuckets;\n        if (vals[0] <= q || h->nbuckets == i) {\n          for (k = 0, j = (i - 1) * h->nvals; k < h->nvals; ++k) {\n            if (0 != h->buckets[i - 1]) {\n              (NULL != h->update[k] ? h->update[k] : c_dbcsr_acc_opencl_hist_avg)(h->vals + (j + k), vals + k);\n            }\n            else h->vals[j + k] = vals[k]; /* initialize */\n          }\n          ++h->buckets[i - 1];\n          break;\n        }\n      }\n    }\n    else { /* fill-phase */\n      if (h->min > vals[0]) h->min = vals[0];\n      if (h->max < vals[0]) h->max = vals[0];\n      for (k = 0, j = h->nvals * h->n; k < h->nvals; ++k) {\n        h->vals[j + k] = vals[k];\n      }\n    }\n    ++h->n; /* count number of accumulated values */\n    if (NULL != lock) ACC_OPENCL_RELEASE(lock);\n  }\n}\n\n\nvoid c_dbcsr_acc_opencl_hist_get(\n  ACC_OPENCL_LOCKTYPE* lock, void* hist, const int** buckets, int* nbuckets, double range[2], const double** vals, int* nvals) {\n  int *b = NULL, m = 0, n = 0, i, j, k;\n  double *v = NULL, r[] = {0, 0};\n  assert(NULL != buckets || NULL != range || NULL != vals);\n  if (NULL != hist) {\n    c_dbcsr_acc_opencl_hist_t* const h = (c_dbcsr_acc_opencl_hist_t*)hist;\n    if (NULL != lock) ACC_OPENCL_ACQUIRE(lock);\n    if (h->n <= h->nqueue) {\n      const double w = h->max - h->min;\n      if (h->n < h->nbuckets) h->nbuckets = h->n;\n      for (i = 1, j = 0; i <= h->nbuckets; j = h->nvals * i++) {\n        const double p = h->min + (i - 1) * w / h->nbuckets, q = h->min + i * w / h->nbuckets;\n        for (n = 0, m = 0; n < h->n; m = ++n * h->nvals) {\n          if (0 == h->buckets[n] && (p < h->vals[m] || 1 == i) && (h->vals[m] <= q || h->nbuckets == i)) {\n            if (j != m) {\n              if (0 != h->buckets[i - 1]) { /* accumulate */\n                for (k = 0; k < h->nvals; ++k) {\n                  (NULL != h->update[k] ? h->update[k] : c_dbcsr_acc_opencl_hist_avg)(h->vals + (j + k), h->vals + (m + k));\n                }\n              }\n              else { /* initialize/swap */\n                for (k = 0; k < h->nvals; ++k) {\n                  const double value = h->vals[m + k];\n                  h->vals[m + k] = h->vals[j + k];\n                  h->vals[j + k] = value;\n                }\n              }\n            }\n            ++h->buckets[i - 1];\n          }\n        }\n      }\n      h->nqueue = 0;\n    }\n    if (0 < h->n) {\n      r[0] = h->min;\n      r[1] = h->max;\n      b = h->buckets;\n      n = h->nbuckets;\n      v = h->vals;\n      m = h->nvals;\n    }\n    if (NULL != lock) ACC_OPENCL_RELEASE(lock);\n  }\n  if (NULL != nbuckets) *nbuckets = n;\n  if (NULL != buckets) *buckets = b;\n  if (NULL != nvals) *nvals = m;\n  if (NULL != vals) *vals = v;\n  if (NULL != range) {\n    range[0] = r[0];\n    range[1] = r[1];\n  }\n}\n\n\nvoid c_dbcsr_acc_opencl_hist_print(\n  FILE* stream, void* hist, const char title[], const int prec[], const c_dbcsr_acc_opencl_hist_adjust_fn adjust[]) {\n  int nbuckets = 0, nvals = 0, i = 1, j = 0, k;\n  const int* buckets = NULL;\n  const double* vals = NULL;\n  double range[2];\n  c_dbcsr_acc_opencl_hist_get(NULL /*lock*/, hist, &buckets, &nbuckets, range, &vals, &nvals);\n  if (NULL != stream && NULL != buckets && 0 < nbuckets && NULL != vals && 0 < nvals) {\n    const double w = range[1] - range[0];\n    if (NULL != title) fprintf(stream, \"%s pid=%u\\n\", title, libxsmm_get_pid());\n    for (; i <= nbuckets; j = nvals * i++) {\n      const double q = range[0] + i * w / nbuckets, r = (i != nbuckets ? q : LIBXSMM_MAX(q, vals[j]));\n      const int c = buckets[i - 1];\n      if (NULL != prec) fprintf(stream, \"\\t#%i <= %.*f: %i\", i, prec[0], r, c);\n      else fprintf(stream, \"\\t#%i <= %f: %i\", i, r, c);\n      if (0 != c) {\n        fprintf(stream, \" ->\");\n        for (k = 0; k < nvals; ++k) {\n          double value;\n          if (NULL == adjust || NULL == adjust[k]) value = vals[j + k];\n          else value = adjust[k](vals[j + k], c);\n          if (NULL != prec) fprintf(stream, \" %.*f\", prec[k], value);\n          else fprintf(stream, \" %f\", value);\n        }\n      }\n      fprintf(stream, \"\\n\");\n    }\n  }\n}\n\n\nvoid c_dbcsr_acc_opencl_hist_free(void* hist) {\n  if (NULL != hist) {\n    c_dbcsr_acc_opencl_hist_t* const h = (c_dbcsr_acc_opencl_hist_t*)hist;\n    free(h->buckets);\n    free(h->update);\n    free(h->vals);\n    free(h);\n  }\n}\n\n\nconst char* c_dbcsr_acc_opencl_stristrn(const char a[], const char b[], size_t maxlen) {\n  const char* result = NULL;\n  if (NULL != a && NULL != b && '\\0' != *a && '\\0' != *b && 0 != maxlen) {\n    do {\n      if (tolower(*a) != tolower(*b)) ++a;\n      else {\n        const char* c = b;\n        size_t i = 0;\n        result = a;\n        while ('\\0' != c[++i] && i != maxlen && '\\0' != *++a) {\n          if (tolower(*a) != tolower(c[i])) {\n            result = NULL;\n            break;\n          }\n        }\n        if ('\\0' != c[i] && '\\0' != c[i + 1] && c[i] != c[i + 1] && i != maxlen) {\n          result = NULL;\n        }\n        else break;\n      }\n    } while ('\\0' != *a);\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_strimatch(const char a[], const char b[], const char delims[], int* count) {\n  int result = 0, na = 0, nb = 0;\n  if (NULL != a && NULL != b && '\\0' != *a && '\\0' != *b) {\n    const char* const sep = ((NULL == delims || '\\0' == *delims) ? \" \\t;,:-\" : delims);\n    const char *c, *tmp;\n    char s[2] = {'\\0'};\n    size_t m, n;\n    for (;;) {\n      while (*s = *b, NULL != strpbrk(s, sep)) ++b; /* left-trim */\n      if ('\\0' != *b && '[' != *b) ++nb; /* count words */\n      else break;\n      tmp = b;\n      while ('\\0' != *tmp && (*s = *tmp, NULL == strpbrk(s, sep))) ++tmp;\n      m = tmp - b;\n      c = c_dbcsr_acc_opencl_stristrn(a, b, LIBXSMM_MIN(1, m));\n      if (NULL != c) {\n        const char* d = c;\n        while ('\\0' != *d && (*s = *d, NULL == strpbrk(s, sep))) ++d;\n        n = d - c;\n        if (1 >= n || NULL != c_dbcsr_acc_opencl_stristrn(c, b, LIBXSMM_MIN(m, n))) ++result;\n      }\n      b = tmp;\n    }\n    for (;;) { /* count number of words */\n      while (*s = *a, NULL != strpbrk(s, sep)) ++a; /* left-trim */\n      if ('\\0' != *a && '[' != *a) ++na; /* count words */\n      else break;\n      while ('\\0' != *a && (*s = *a, NULL == strpbrk(s, sep))) ++a;\n    }\n    if (na < result) result = na;\n  }\n  else result = -1;\n  if (NULL != count) *count = LIBXSMM_MAX(na, nb);\n  return result;\n}\n\n#  if defined(__cplusplus)\n}\n#  endif\n\n#endif /*__OPENCL*/\n"
  },
  {
    "path": "src/acc/opencl/acc_opencl.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#ifndef ACC_OPENCL_H\n#define ACC_OPENCL_H\n\n/* Support for other libraries, e.g., CP2K's DBM/DBT */\n#if defined(__OFFLOAD_OPENCL) && !defined(__OPENCL)\n#  define __OPENCL\n#endif\n\n#if defined(__OPENCL)\n#  if !defined(CL_TARGET_OPENCL_VERSION)\n#    define CL_TARGET_OPENCL_VERSION 220\n#  endif\n#  if defined(__APPLE__)\n#    include <OpenCL/cl.h>\n#  else\n#    include <CL/cl.h>\n#  endif\n#else\n#  error Definition of __OPENCL preprocessor symbol is missing!\n#endif\n\n#if !defined(ACC_OPENCL_NOEXT)\n#  if defined(__APPLE__)\n#    include <OpenCL/cl_ext.h>\n#  else\n#    include <CL/cl_ext.h>\n#  endif\n#endif\n\n#if !defined(LIBXSMM_SYNC_NPAUSE)\n#  define LIBXSMM_SYNC_NPAUSE 0\n#endif\n\n#if defined(__LIBXSMM) && !defined(LIBXSMM_DEFAULT_CONFIG)\n#  include <libxsmm.h>\n#  if !defined(LIBXSMM_TIMER_H)\n#    include <utils/libxsmm_timer.h>\n#  endif\n#  if !defined(LIBXSMM_SYNC_H)\n#    include <libxsmm_sync.h>\n#  endif\n#else\n/* OpenCL backend depends on LIBXSMM */\n#  include <libxsmm_source.h>\n#  if !defined(__LIBXSMM)\n#    define __LIBXSMM\n#  endif\n#endif\n\n#if !defined(LIBXSMM_VERSION_NUMBER)\n#  define LIBXSMM_VERSION_NUMBER \\\n    LIBXSMM_VERSION4(LIBXSMM_VERSION_MAJOR, LIBXSMM_VERSION_MINOR, LIBXSMM_VERSION_UPDATE, LIBXSMM_VERSION_PATCH)\n#endif\n\n#include \"../acc.h\"\n#if !defined(NDEBUG)\n#  include <assert.h>\n#endif\n#include <stdlib.h>\n#include <stdio.h>\n\n#if !defined(ACC_OPENCL_CACHELINE)\n#  define ACC_OPENCL_CACHELINE LIBXSMM_CACHELINE\n#endif\n#if !defined(ACC_OPENCL_TLS)\n#  define ACC_OPENCL_TLS LIBXSMM_TLS\n#endif\n#if !defined(ACC_OPENCL_MAXALIGN)\n#  define ACC_OPENCL_MAXALIGN (2 << 20 /*2MB*/)\n#endif\n#if !defined(ACC_OPENCL_BUFFERSIZE)\n#  define ACC_OPENCL_BUFFERSIZE (8 << 10 /*8KB*/)\n#endif\n#if !defined(ACC_OPENCL_MAXSTRLEN)\n#  define ACC_OPENCL_MAXSTRLEN 48\n#endif\n#if !defined(ACC_OPENCL_MAXNDEVS)\n#  define ACC_OPENCL_MAXNDEVS 64\n#endif\n/* Counted on a per-thread basis! */\n#if !defined(ACC_OPENCL_MAXNITEMS)\n#  define ACC_OPENCL_MAXNITEMS 1024\n#endif\n/* First char is CSV-separator by default (w/o spaces) */\n#if !defined(ACC_OPENCL_DELIMS)\n#  define ACC_OPENCL_DELIMS \",;\"\n#endif\n#if !defined(ACC_OPENCL_CMEM) && 1\n#  define ACC_OPENCL_CMEM\n#endif\n#if !defined(ACC_OPENCL_ASYNC) && 1\n#  define ACC_OPENCL_ASYNC getenv(\"ACC_OPENCL_ASYNC\")\n#endif\n#if !defined(ACC_OPENCL_XHINTS) && 1\n#  define ACC_OPENCL_XHINTS getenv(\"ACC_OPENCL_XHINTS\")\n#endif\n#if !defined(ACC_OPENCL_STREAM_PRIORITIES) && 0\n#  if defined(CL_QUEUE_PRIORITY_KHR)\n#    define ACC_OPENCL_STREAM_PRIORITIES\n#  endif\n#endif\n#if !defined(ACC_OPENCL_USM) && defined(CL_VERSION_2_0) && 1\n#  if defined(__OFFLOAD_UNIFIED_MEMORY)\n/* Do not rely on an Intel extension for pointer arithmetic */\n#    define ACC_OPENCL_USM 2\n#  else\n/* Rely on OpenCL 2.0 (eventually mix-in an Intel ext.) */\n#    define ACC_OPENCL_USM 1\n#  endif\n#else\n#  define ACC_OPENCL_USM 0\n#endif\n/* Activate device by default */\n#if !defined(ACC_OPENCL_ACTIVATE) && 0\n#  define ACC_OPENCL_ACTIVATE 0\n#endif\n/* Use DBCSR's profile for detailed timings (function name prefix-offset) */\n#if !defined(ACC_OPENCL_PROFILE_DBCSR) && (defined(__OFFLOAD_PROFILING) || 1)\n#  if defined(__DBCSR_ACC)\n#    define ACC_OPENCL_PROFILE_DBCSR 8\n#  endif\n#endif\n\n/* attaching c_dbcsr_acc_opencl_stream_t is needed */\n#define ACC_OPENCL_STREAM(A) ((const c_dbcsr_acc_opencl_stream_t*)(A))\n/* incompatible with c_dbcsr_acc_event_record */\n#define ACC_OPENCL_EVENT(A) ((const cl_event*)(A))\n\n#define ACC_OPENCL_ATOMIC_ACQUIRE(LOCK) \\\n  do { \\\n    LIBXSMM_ATOMIC_ACQUIRE(LOCK, LIBXSMM_SYNC_NPAUSE, LIBXSMM_ATOMIC_SEQ_CST); \\\n  } while (0)\n#define ACC_OPENCL_ATOMIC_RELEASE(LOCK) \\\n  do { \\\n    LIBXSMM_ATOMIC_RELEASE(LOCK, LIBXSMM_ATOMIC_SEQ_CST); \\\n  } while (0)\n\n#if defined(LIBXSMM_ATOMIC_LOCKTYPE)\n#  define ACC_OPENCL_ATOMIC_LOCKTYPE volatile LIBXSMM_ATOMIC_LOCKTYPE\n#else\n#  define ACC_OPENCL_ATOMIC_LOCKTYPE volatile int\n#endif\n\n#if defined(_OPENMP)\n#  include <omp.h>\n#  define ACC_OPENCL_OMP_TID() omp_get_thread_num()\n#  define ACC_OPENCL_INIT(LOCK) omp_init_lock(LOCK)\n#  define ACC_OPENCL_DESTROY(LOCK) omp_destroy_lock(LOCK)\n#  define ACC_OPENCL_ACQUIRE(LOCK) omp_set_lock(LOCK)\n#  define ACC_OPENCL_RELEASE(LOCK) omp_unset_lock(LOCK)\n#  define ACC_OPENCL_LOCKTYPE omp_lock_t\n#else\n#  define ACC_OPENCL_OMP_TID() (/*main*/ 0)\n#  define ACC_OPENCL_INIT(LOCK) (*(LOCK) = 0)\n#  define ACC_OPENCL_DESTROY(LOCK)\n#  define ACC_OPENCL_ACQUIRE(LOCK) ACC_OPENCL_ATOMIC_ACQUIRE(LOCK)\n#  define ACC_OPENCL_RELEASE(LOCK) ACC_OPENCL_ATOMIC_RELEASE(LOCK)\n#  define ACC_OPENCL_LOCKTYPE ACC_OPENCL_ATOMIC_LOCKTYPE\n#endif\n\n#if defined(CL_VERSION_2_0)\n#  define ACC_OPENCL_STREAM_PROPERTIES_TYPE cl_queue_properties\n#  define ACC_OPENCL_CREATE_COMMAND_QUEUE(CTX, DEV, PROPS, RESULT) clCreateCommandQueueWithProperties(CTX, DEV, PROPS, RESULT)\n#else\n#  define ACC_OPENCL_STREAM_PROPERTIES_TYPE cl_int\n#  define ACC_OPENCL_CREATE_COMMAND_QUEUE(CTX, DEV, PROPS, RESULT) \\\n    clCreateCommandQueue(CTX, DEV, (cl_command_queue_properties)(NULL != (PROPS) ? ((PROPS)[1]) : 0), RESULT)\n#endif\n\n#if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER\n#  define ACC_OPENCL_EXPECT(EXPR) LIBXSMM_EXPECT(EXPR)\n#  define LIBXSMM_STRISTR libxsmm_stristr\n#else\n#  define ACC_OPENCL_EXPECT(EXPR) \\\n    if (0 == (EXPR)) assert(0)\n#  define LIBXSMM_STRISTR strstr\n#endif\n\n#define ACC_OPENCL_ERROR() c_dbcsr_acc_opencl_config.device.error.code\n#define ACC_OPENCL_ERROR_NAME(CODE) \\\n  ((EXIT_SUCCESS != c_dbcsr_acc_opencl_config.device.error.code && (CODE) == c_dbcsr_acc_opencl_config.device.error.code) \\\n      ? c_dbcsr_acc_opencl_config.device.error.name \\\n      : \"\")\n\n#define ACC_OPENCL_ERROR_REPORT(NAME) \\\n  do { \\\n    const char* const acc_opencl_error_report_name_ = (const char*)('\\0' != *#NAME ? (uintptr_t)(NAME + 0) : 0); \\\n    if (0 != c_dbcsr_acc_opencl_config.verbosity) { \\\n      if (NULL != acc_opencl_error_report_name_ && '\\0' != *acc_opencl_error_report_name_) { \\\n        fprintf(stderr, \"ERROR ACC/OpenCL: failed for %s!\\n\", acc_opencl_error_report_name_); \\\n      } \\\n      else if (0 != c_dbcsr_acc_opencl_config.device.error.code) { \\\n        if (NULL != c_dbcsr_acc_opencl_config.device.error.name && '\\0' != *c_dbcsr_acc_opencl_config.device.error.name) { \\\n          fprintf(stderr, \"ERROR ACC/OpenCL: %s (code=%i)\\n\", c_dbcsr_acc_opencl_config.device.error.name, \\\n            c_dbcsr_acc_opencl_config.device.error.code); \\\n        } \\\n        else if (-1001 == c_dbcsr_acc_opencl_config.device.error.code) { \\\n          fprintf(stderr, \"ERROR ACC/OpenCL: incomplete OpenCL installation?\\n\"); \\\n        } \\\n        else { \\\n          fprintf(stderr, \"ERROR ACC/OpenCL: unknown error (code=%i)\\n\", c_dbcsr_acc_opencl_config.device.error.code); \\\n        } \\\n      } \\\n      memset(&c_dbcsr_acc_opencl_config.device.error, 0, sizeof(c_dbcsr_acc_opencl_config.device.error)); \\\n    } \\\n    assert(!\"SUCCESS\"); \\\n  } while (0)\n\n#define ACC_OPENCL_CHECK(RESULT, CMD, MSG) \\\n  do { \\\n    if (EXIT_SUCCESS == (RESULT)) { \\\n      (RESULT) = (CMD); /* update result given code from cmd */ \\\n      c_dbcsr_acc_opencl_config.device.error.name = (MSG); \\\n      c_dbcsr_acc_opencl_config.device.error.code = (RESULT); \\\n      assert(EXIT_SUCCESS == (RESULT)); \\\n    } \\\n    else ACC_OPENCL_ERROR_REPORT(); \\\n  } while (0)\n\n#define ACC_OPENCL_RETURN(RESULT, ...) \\\n  do { \\\n    if (EXIT_SUCCESS == (RESULT)) { \\\n      assert(EXIT_SUCCESS == c_dbcsr_acc_opencl_config.device.error.code); \\\n      memset(&c_dbcsr_acc_opencl_config.device.error, 0, sizeof(c_dbcsr_acc_opencl_config.device.error)); \\\n    } \\\n    else ACC_OPENCL_ERROR_REPORT(__VA_ARGS__); \\\n    return (RESULT); \\\n  } while (0)\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/** Rich type denoting an error. */\ntypedef struct c_dbcsr_acc_opencl_error_t {\n  const char* name;\n  int code;\n} c_dbcsr_acc_opencl_error_t;\n\n/** Information about streams (c_dbcsr_acc_stream_create). */\ntypedef struct c_dbcsr_acc_opencl_stream_t {\n  cl_command_queue queue;\n  int tid;\n#if defined(ACC_OPENCL_STREAM_PRIORITIES)\n  int priority;\n#endif\n} c_dbcsr_acc_opencl_stream_t;\n\n/** Settings updated during c_dbcsr_acc_set_active_device. */\ntypedef struct c_dbcsr_acc_opencl_device_t {\n  /** Activated device context. */\n  cl_context context;\n  /**\n   * Stream for internal purpose, e.g., stream-argument\n   * (ACC-interface) can be NULL (synchronous)\n   */\n  c_dbcsr_acc_opencl_stream_t stream;\n  /** Last error (not necessarily thread-safe/specific). */\n  c_dbcsr_acc_opencl_error_t error;\n  /** OpenCL compiler flag (language standard). */\n  char std_flag[16];\n  /** OpenCL support-level (major and minor). */\n  cl_int std_level[2], std_clevel[2];\n  /**\n   * Maximum size of workgroup (WG), preferred multiple of WG-size (PM),\n   * and size of subgoup (SG) only if larger-equal than PM. SG is signaled\n   * smaller if an alternative SG-size exists (SG is zero if no support).\n   */\n  size_t wgsize[3];\n  /** Maximum size of memory allocations and constant buffer. */\n  cl_ulong size_maxalloc, size_maxcmem;\n  /** Kind of device (GPU, CPU, or other). */\n  cl_device_type type;\n  /** Whether host memory is unified, and SVM/USM capabilities. */\n  cl_int unified, usm;\n  /** Device-UID. */\n  cl_uint uid;\n  /** Main vendor? */\n  cl_int intel, amd, nv;\n  /* USM support functions */\n  cl_int (*clSetKernelArgMemPointerINTEL)(cl_kernel, cl_uint, const void*);\n  cl_int (*clEnqueueMemFillINTEL)(cl_command_queue, void*, const void*, size_t, size_t, cl_uint, const cl_event*, cl_event*);\n  cl_int (*clEnqueueMemcpyINTEL)(cl_command_queue, cl_bool, void*, const void*, size_t, cl_uint, const cl_event*, cl_event*);\n  void* (*clDeviceMemAllocINTEL)(cl_context, cl_device_id, const /*cl_mem_properties_intel*/ void*, size_t, cl_uint, cl_int*);\n  void* (*clSharedMemAllocINTEL)(cl_context, cl_device_id, const /*cl_mem_properties_intel*/ void*, size_t, cl_uint, cl_int*);\n  void* (*clHostMemAllocINTEL)(cl_context, const /*cl_mem_properties_intel*/ void*, size_t, cl_uint, cl_int*);\n  cl_int (*clMemFreeINTEL)(cl_context, void*);\n} c_dbcsr_acc_opencl_device_t;\n\ntypedef enum c_dbcsr_acc_event_kind_t {\n  c_dbcsr_acc_event_kind_none,\n  c_dbcsr_acc_event_kind_h2d,\n  c_dbcsr_acc_event_kind_d2h,\n  c_dbcsr_acc_event_kind_d2d\n} c_dbcsr_acc_event_kind_t;\n\n/** Information about host/device-memory pointer. */\ntypedef struct c_dbcsr_acc_opencl_info_memptr_t {\n  cl_mem memory; /* first item! */\n  void* memptr;\n} c_dbcsr_acc_opencl_info_memptr_t;\n\n/** Enumeration of FP-atomic kinds. */\ntypedef enum c_dbcsr_acc_opencl_atomic_fp_t {\n  c_dbcsr_acc_opencl_atomic_fp_no = 0,\n  c_dbcsr_acc_opencl_atomic_fp_32 = 1,\n  c_dbcsr_acc_opencl_atomic_fp_64 = 2\n} c_dbcsr_acc_opencl_atomic_fp_t;\n\n/**\n * Settings discovered/setup during c_dbcsr_acc_init (independent of the device)\n * and settings updated during c_dbcsr_acc_set_active_device (devinfo).\n */\ntypedef struct c_dbcsr_acc_opencl_config_t {\n  /** Table of ordered viable/discovered devices (matching criterion). */\n  cl_device_id devices[ACC_OPENCL_MAXNDEVS];\n  /** Active device (per process). */\n  c_dbcsr_acc_opencl_device_t device;\n  /** Locks used by domain. */\n  ACC_OPENCL_LOCKTYPE *lock_main, *lock_stream, *lock_event, *lock_memory;\n  /** All memptrs and related storage/counter. */\n  c_dbcsr_acc_opencl_info_memptr_t **memptrs, *memptr_data;\n  size_t nmemptrs; /* counter */\n  /** Handle-counter. */\n  size_t nstreams, nevents;\n  /** All streams and related storage. */\n  c_dbcsr_acc_opencl_stream_t **streams, *stream_data;\n  /** All events and related storage. */\n  cl_event **events, *event_data;\n  /** Device-ID to lookup devices-array. */\n  cl_int device_id;\n  /** Kernel-parameters are matched against device's UID */\n  cl_uint devmatch;\n  /** Split devices into sub-devices (if possible) */\n  cl_int devsplit;\n  /** Verbosity level (output on stderr). */\n  cl_int verbosity;\n  /** Guessed number of ranks per node (local), and rank-ID. */\n  cl_int nranks, nrank;\n  /** Non-zero if library is initialized (negative: no device). */\n  cl_int ndevices;\n  /** Maximum number of threads (omp_get_max_threads). */\n  cl_int nthreads;\n#if defined(ACC_OPENCL_STREAM_PRIORITIES)\n  /** Runtime-adjust ACC_OPENCL_STREAM_PRIORITIES. */\n  cl_int priority;\n#endif\n  /** Runtime-enable ACC_OPENCL_PROFILE_DBCSR. */\n  cl_int profile;\n  /** Detailed/optional insight. */\n  void *hist_h2d, *hist_d2h, *hist_d2d;\n  /** Configuration and execution-hints. */\n  cl_int xhints;\n  /** Asynchronous memory operations. */\n  cl_int async;\n  /** Debug (output/symbols, etc.). */\n  cl_int debug;\n  /** Dump level. */\n  cl_int dump;\n  /** WA level */\n  cl_int wa;\n} c_dbcsr_acc_opencl_config_t;\n\n/** Global configuration setup in c_dbcsr_acc_init. */\nextern c_dbcsr_acc_opencl_config_t c_dbcsr_acc_opencl_config;\n\n/** If buffers are hinted for non-concurrent writes aka \"OpenCL constant\". */\nint c_dbcsr_acc_opencl_use_cmem(const c_dbcsr_acc_opencl_device_t* devinfo);\n/** Determines host-pointer registration (for modification). Returns NULL if memory is SVM/USM. */\nc_dbcsr_acc_opencl_info_memptr_t* c_dbcsr_acc_opencl_info_hostptr(const void* memory);\n/**\n * Determines device-pointer registration (for modification; internal). The offset is measured in elsize.\n * Returns NULL if memory is SVM/USM (offset is zero in this case).\n */\nc_dbcsr_acc_opencl_info_memptr_t* c_dbcsr_acc_opencl_info_devptr_modify(\n  ACC_OPENCL_LOCKTYPE* lock, void* memory, size_t elsize, const size_t* amount, size_t* offset);\n/** Determines device-pointer registration for info/ro (lock-control); offset is measured in elsize. */\nint c_dbcsr_acc_opencl_info_devptr_lock(c_dbcsr_acc_opencl_info_memptr_t* info, ACC_OPENCL_LOCKTYPE* lock, const void* memory,\n  size_t elsize, const size_t* amount, size_t* offset);\n/** Determines device-pointer registration for info/ro; offset is measured in elsize. */\nint c_dbcsr_acc_opencl_info_devptr(\n  c_dbcsr_acc_opencl_info_memptr_t* info, const void* memory, size_t elsize, const size_t* amount, size_t* offset);\n/** Finds an existing stream for the given thread-ID (or NULL). */\nconst c_dbcsr_acc_opencl_stream_t* c_dbcsr_acc_opencl_stream(ACC_OPENCL_LOCKTYPE* lock, int thread_id);\n/** Determines default-stream (see c_dbcsr_acc_opencl_device_t::stream). */\nconst c_dbcsr_acc_opencl_stream_t* c_dbcsr_acc_opencl_stream_default(void);\n/** Like c_dbcsr_acc_memset_zero, but supporting an arbitrary value used as initialization pattern. */\nint c_dbcsr_acc_opencl_memset(void* dev_mem, int value, size_t offset, size_t nbytes, void* stream);\n/** Amount of device memory; local memory is only non-zero if separate from global. */\nint 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);\n/** Get device-ID for given device, and optionally global device-ID. */\nint c_dbcsr_acc_opencl_device_id(cl_device_id device, int* device_id, int* global_id);\n/** Confirm the vendor of the given device. */\nint c_dbcsr_acc_opencl_device_vendor(cl_device_id device, const char vendor[], int use_platform_name);\n/** Capture or calculate UID based on the device-name. */\nint c_dbcsr_acc_opencl_device_uid(cl_device_id device, const char devname[], unsigned int* uid);\n/** Based on the device-ID, return the device's UID (capture or calculate), device name, and platform name. */\nint c_dbcsr_acc_opencl_device_name(\n  cl_device_id device, char name[], size_t name_maxlen, char platform[], size_t platform_maxlen, int cleanup);\n/** Return the OpenCL support-level for the given device. */\nint c_dbcsr_acc_opencl_device_level(\n  cl_device_id device, int std_clevel[2], int std_level[2], char std_flag[16], cl_device_type* type);\n/** Check if given device supports the extensions. */\nint c_dbcsr_acc_opencl_device_ext(cl_device_id device, const char* const extnames[], int num_exts);\n/** Create context for given device. */\nint c_dbcsr_acc_opencl_create_context(cl_device_id device_id, cl_context* context);\n/** Internal variant of c_dbcsr_acc_set_active_device. */\nint c_dbcsr_acc_opencl_set_active_device(ACC_OPENCL_LOCKTYPE* lock, int device_id);\n/** Assemble flags to support atomic operations. */\nint c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, c_dbcsr_acc_opencl_atomic_fp_t kind,\n  const char* exts[], size_t* exts_maxlen, char flags[], size_t flags_maxlen);\n/** Assemble given defines and internal definitions. */\nint c_dbcsr_acc_opencl_defines(const char defines[], char buffer[], size_t buffer_size, int cleanup);\n/** Combines build-params, build-options, and extra flags. */\nint c_dbcsr_acc_opencl_kernel_flags(const char build_params[], const char build_options[], const char try_options[],\n  cl_program program, char buffer[], size_t buffer_size);\n/**\n * Build kernel from source with given kernel_name, build_params and build_options.\n * The build_params are meant to instantiate the kernel (-D) whereas build_options\n * are are meant to be compiler-flags. The source_kind denotes source's content:\n *  0: OpenCL source code\n *  1: Filename (OpenCL or binary)\n * >1: Binary code (source_kind denotes size)\n */\nint c_dbcsr_acc_opencl_kernel(size_t source_kind, const char source[], const char kernel_name[], const char build_params[],\n  const char build_options[], const char try_build_options[], int* try_ok, const char* const extnames[], size_t num_exts,\n  cl_kernel* kernel);\n/** Per-thread variant of c_dbcsr_acc_device_synchronize. */\nint c_dbcsr_acc_opencl_device_synchronize(ACC_OPENCL_LOCKTYPE* lock, int thread_id);\n/** To support USM, call this function for pointer arguments instead of clSetKernelArg. */\nint c_dbcsr_acc_opencl_set_kernel_ptr(cl_kernel kernel, cl_uint arg_index, const void* arg_value);\n\n/** Support older LIBXSMM (libxsmm_pmalloc_init). */\nvoid c_dbcsr_acc_opencl_pmalloc_init(size_t size, size_t* num, void* pool[], void* storage);\n/** Support older LIBXSMM (libxsmm_pmalloc). */\nvoid* c_dbcsr_acc_opencl_pmalloc(ACC_OPENCL_LOCKTYPE* lock, void* pool[], size_t* i);\n/** Support older LIBXSMM (libxsmm_pfree). */\nvoid c_dbcsr_acc_opencl_pfree(const void* pointer, void* pool[], size_t* i);\n\n/** Measure time in seconds for the given event. */\ndouble c_dbcsr_acc_opencl_duration(cl_event event, int* result_code);\n\ntypedef void (*c_dbcsr_acc_opencl_hist_update_fn)(double* /*dst*/, const double* /*src*/);\ntypedef double (*c_dbcsr_acc_opencl_hist_adjust_fn)(double /*value*/, int count);\nvoid c_dbcsr_acc_opencl_hist_create(\n  void** hist, int nbuckets, int nqueue, int nvals, const c_dbcsr_acc_opencl_hist_update_fn update[]);\nvoid c_dbcsr_acc_opencl_hist_avg(double* dst, const double* src);\nvoid c_dbcsr_acc_opencl_hist_add(double* dst, const double* src);\nvoid c_dbcsr_acc_opencl_hist_set(ACC_OPENCL_LOCKTYPE* lock, void* hist, const double vals[]);\nvoid c_dbcsr_acc_opencl_hist_get(\n  ACC_OPENCL_LOCKTYPE* lock, void* hist, const int** buckets, int* nbuckets, double range[2], const double** vals, int* nvals);\nvoid c_dbcsr_acc_opencl_hist_print(\n  FILE* stream, void* hist, const char title[], const int prec[], const c_dbcsr_acc_opencl_hist_adjust_fn adjust[]);\nvoid c_dbcsr_acc_opencl_hist_free(void* hist);\n\n/** Return the pointer to the 1st match of \"b\" in \"a\", or NULL (no match). */\nconst char* c_dbcsr_acc_opencl_stristrn(const char a[], const char b[], size_t maxlen);\n\n/**\n * Count the number of words in A (or B) with match in B (or A) respectively (case-insensitive).\n * Can be used to score the equality of A and B on a word-basis. The result is independent of\n * A-B or B-A order (symmetry). The score cannot exceed the number of words in A or B.\n * Optional delimiters determine characters splitting words (can be NULL).\n * Optional count yields total number of words.\n */\nint c_dbcsr_acc_opencl_strimatch(const char a[], const char b[], const char delims[], int* count);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif /*ACC_OPENCL_H*/\n"
  },
  {
    "path": "src/acc/opencl/acc_opencl.sh",
    "content": "#!/usr/bin/env bash\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: BSD-3-Clause                                                            #\n####################################################################################################\n# shellcheck disable=SC2048,SC2129\n\nBASENAME=$(command -v basename)\nDIRNAME=$(command -v dirname)\nHEAD=$(command -v head)\nSORT=$(command -v sort)\nSED=$(command -v gsed)\nCAT=$(command -v cat)\nCPP=$(command -v cpp)\nTR=$(command -v tr)\nRM=$(command -v rm)\nWC=$(command -v wc)\n\n# flags used to control preprocessor\nCPPBASEFLAGS=\"-dD -P -fpreprocessed\"\n\n# delimiters allowed in CSV-file\nDELIMS=\";,\\t|/\"\n\n# GNU sed is desired (macOS)\nif [ ! \"${SED}\" ]; then\n  SED=$(command -v sed)\nfi\n\ntrap_exit() {\n  if [ \"0\" != \"$?\" ] && [ \"${HFILE}\" ]; then ${RM} -f \"${OFILE}\"; fi\n}\n\nprocess_pre() {\n  if [ \"$1\" ]; then\n    if [ \"${CPP}\" ] && \\\n       [ \"$(eval \"${CPP} ${CPPBASEFLAGS} $1\" 2>/dev/null >/dev/null && echo \"YES\")\" ];\n    then\n      if [ \"${CPPFLAGS}\" ] && \\\n         [ \"$(eval \"${CPP} ${CPPFLAGS} ${CPPBASEFLAGS} $1\" 2>/dev/null >/dev/null && echo \"YES\")\" ];\n      then\n        eval \"${CPP} ${CPPFLAGS} ${CPPBASEFLAGS} $1\" 2>/dev/null\n      else\n        eval \"${CPP} ${CPPBASEFLAGS} $1\" 2>/dev/null\n      fi\n    else # fallback to sed\n      ${SED} -r ':a;s%(.*)/\\*.*\\*/%\\1%;ta;/\\/\\*/!b;N;ba' \"$1\"\n    fi | \\\n    if [ ! \"$2\" ] || [ \"0\" = \"$2\" ]; then # strip include guards\n      GUARD=$(${BASENAME} \"$1\" | ${TR} '[:lower:]' '[:upper:]' | ${TR} '.' '_')\n      if [ \"${GUARD}\" ] && [ \"$(${SED} -n \"/${GUARD}/p\" \"$1\")\" ]; then\n        ${SED} \"/${GUARD}/d;\\${/\\s*\\#\\s*endif/d}\"\n      else\n        ${CAT}\n      fi\n    else\n      ${CAT}\n    fi\n  fi\n}\n\nprocess() {\n  IFS=$'\\n'\n  while read -r LINE; do\n    INCLUDE=$(${SED} -n \"s/#[[:space:]]*include[[:space:]][[:space:]]*\\\"/\\\"/p\" <<<\"${LINE}\")\n    if [ \"${INCLUDE}\" ] && [ \"$1\" ] && [ -e \"$1\" ]; then\n      CLINC=$(${SED} \"s/\\\"//g\" <<<\"${INCLUDE}\")\n      CLPATH=$(${DIRNAME} \"$1\")\n      FILE=${CLPATH}/${CLINC}\n      if [ \"${FILE}\" ] && [ -e \"${FILE}\" ]; then\n        process_pre \"${FILE}\" \"$2\" | process \"${FILE}\" \"$2\"\n      else\n        >&2 echo \"WARNING: header file ${FILE} not found!\"\n        #exit 1\n      fi\n    else\n      ${SED} <<<\"${LINE}\" \\\n        -e '/^[[:space:]]*$/d' -e 's/[[:space:]]*$//' \\\n        -e 's/[[:space:]]*\\\\/ \\\\\\\\/g' -e 's/\"/\\\\\"/g' \\\n        -e 's/^/  \"/' -e 's/$/\\\\n\" \\\\/'\n    fi\n  done\n  unset IFS\n}\n\nif [ \"${BASENAME}\" ] && [ \"${DIRNAME}\" ] && [ \"${HEAD}\" ] && [ \"${SORT}\" ] && \\\n   [ \"${SED}\" ] && [ \"${CAT}\" ] && [ \"${TR}\" ] && [ \"${RM}\" ] && [ \"${WC}\" ];\nthen\n  for OFILE in \"$@\"; do :; done\n  while test $# -gt 0; do\n    case \"$1\" in\n    -h|--help)\n      shift $#;;\n    -k|--keep)\n      KEEP=1\n      shift;;\n    -b|--banner)\n      BANNER=$2\n      shift 2;;\n    -p|--params)\n      PARAMS=\"$2\\t\"\n      shift 2;;\n    -c|-d|--debug|--comments)\n      CPPFLAGS+=\" -C\"\n      shift;;\n    -v|--verbose)\n      VERBOSE=1\n      shift;;\n    *) break;;\n    esac\n  done\n  HERE=\"$(cd \"$(${DIRNAME} \"$0\")\" && pwd -P)\"\n  PARAMDIR=${PARAMDIR:-${PARAMS}}\n  PARAMDIR=${PARAMDIR:-${HERE}/smm/params}\n  PARAMDIR=$(echo -e \"${PARAMDIR}\" | ${TR} -d '\\t')\n  if [ \"$#\" -gt 1 ]; then\n    # allow for instance /dev/stdout\n    if [ \"${OFILE##*.}\" = \"h\" ]; then\n      if [ \"${VERBOSE}\" ] && [ \"0\" != \"${VERBOSE}\" ]; then\n        echo \"$0 $*\" # stdout\n      fi\n      truncate -s0 \"${OFILE}\"\n      HFILE=${OFILE}\n    elif [ \"${OFILE##*.}\" = \"cl\" ] || [ \"${OFILE##*.}\" = \"csv\" ]; then\n      >&2 echo \"ERROR: no output/header file given!\"\n      exit 1\n    elif [ \"${VERBOSE}\" ] && [ \"0\" != \"${VERBOSE}\" ]; then\n      if [[ ${OFILE} != /dev/stderr ]]; then\n        >&2 echo \"$0 $*\"\n      else # stdout\n        echo \"$0 $*\"\n      fi\n    fi\n    trap 'trap_exit' EXIT\n    RNAME=$(${BASENAME} \"$(cd \"$(${DIRNAME} \"$1\")\" && pwd -P)\")\n    ANAME=$(${TR} '[:lower:]' '[:upper:]' <<<\"${RNAME}\")\n    NFILES_OCL=0\n    for CLFILE in ${*:1:${#@}-1}; do\n      if [ \"${CLFILE##*.}\" = \"cl\" ]; then\n        CLEXT=\".cl\"\n      elif [ \"${CLFILE##*.}\" = \"h\" ]; then\n        CLEXT=\".h\"\n      else\n        CLEXT=\"\"\n      fi\n      if [ \"${CLEXT}\" ]; then\n        if [ -e \"${CLFILE}\" ]; then\n          CNAME=$(${BASENAME} \"${CLFILE}\" \"${CLEXT}\" | ${SED} \"s/${RNAME}_//;s/_opencl//\")\n          BNAME=$(${TR} '[:lower:]' '[:upper:]' <<<\"${CNAME}\")\n          SNAME=OPENCL_${ANAME}_STRING_${BNAME}\n          VNAME=opencl_${RNAME}_source_${CNAME}\n          MNAME=OPENCL_${ANAME}_SOURCE_${BNAME}\n          if [ \"0\" != \"$((0<(NFILES_OCL)))\" ]; then\n            echo\n          elif [ \"${BANNER}\" ] && [ \"0\" != \"${BANNER}\" ]; then\n            ${HEAD} -n\"${BANNER}\" \"${CLFILE}\"\n          fi\n          echo \"#define ${MNAME} ${VNAME}\"\n          echo \"#define ${SNAME} \\\\\"\n          process_pre \"${CLFILE}\" \"${KEEP}\" | process \"${CLFILE}\" \"${KEEP}\"\n          echo \"  \\\"\\\"\"\n          echo \"static const char ${VNAME}[] = ${SNAME};\"\n          NFILES_OCL=$((NFILES_OCL+1))\n        else\n          >&2 echo \"ERROR: ${CLFILE} does not exist!\"\n          exit 1\n        fi >>\"${OFILE}\"\n      else\n        CSVFILES=(\"${*:NFILES_OCL+1:${#@}-NFILES_OCL-1}\")\n        break\n      fi\n    done\n    if [ \"0\" = \"${NFILES_OCL}\" ]; then\n      >&2 echo \"ERROR: no OpenCL file was given!\"\n      exit 1\n    fi\n    NFILES_CSV=0\n    for CSVFILE in \"${CSVFILES[@]}\"; do\n      if [ \"${CSVFILE##*.}\" = \"csv\" ]; then\n        if [ -f \"${CSVFILE}\" ]; then\n          NFILES_CSV=$((NFILES_CSV+1))\n        fi\n      else\n        >&2 echo \"ERROR: ${CSVFILE} is not a CSV file!\"\n        exit 1\n      fi\n    done\n    if [ \"0\" = \"${NFILES_CSV}\" ] && [ \"${PARAMDIR}\" ] && [ -d \"${PARAMDIR}\" ]; then\n      CSVFILES=(\"${PARAMDIR}\"/*.csv)\n      NFILES_CSV=${#CSVFILES[@]}\n    fi\n    for CSVFILE in \"${CSVFILES[@]}\"; do\n      if [ ! \"${DELIM}\" ]; then\n        SEPAR=$(${SED} -n \"1s/[^${DELIMS}]//gp\" \"${CSVFILE}\" 2>/dev/null)\n        DELIM=${SEPAR:0:1}\n        MATCH=$(${SED} -n \"1s/[^${DELIM}]//gp\" \"${CSVFILE}\" 2>/dev/null)\n      fi\n      if [ \"${DELIM}\" ]; then\n        CHECK=$(${SED} \"/^[[:space:]]*$/d;s/[^${DELIM}]//g\" \"${CSVFILE}\" | ${SORT} -u | ${SED} -n \"0,/./p\")\n        if [ \"0\" != \"$((${#MATCH}<${#CHECK}))\" ]; then\n          ERRFILE=${CSVFILES[0]}\n        elif [ \"${MATCH}\" != \"${CHECK}\" ]; then\n          ERRFILE=${CSVFILE}\n        fi\n      else\n        ERRFILE=${CSVFILE}\n      fi\n      if [ \"${ERRFILE}\" ] && [ -f \"${ERRFILE}\" ]; then\n        >&2 echo \"WARNING: ${ERRFILE} is malformed and ignored!\"\n      fi\n    done\n    DEVPAT=\"s/${DELIM}..*//\"\n    DEVICES=$(for CSVFILE in \"${CSVFILES[@]}\"; do ${SED} \"1d;/^[[:space:]]*$/d;${DEVPAT}\" \"${CSVFILE}\"; done | ${SORT} -u)\n    SNAME=OPENCL_${ANAME}_STRING_PARAMS_SMM\n    VNAME=opencl_${RNAME}_params_smm\n    DNAME=opencl_${RNAME}_devices\n    MNAME=$(${TR} '[:lower:]' '[:upper:]' <<<\"${VNAME}\")\n    NNAME=$(${TR} '[:lower:]' '[:upper:]' <<<\"${DNAME}\")\n    if [ \"${DEVICES}\" ]; then\n      echo\n      echo \"#define ${MNAME} ${VNAME}\"\n      echo \"#define ${SNAME} \\\\\"\n      CSVLINES=$(for CSVFILE in \"${CSVFILES[@]}\"; do ${SED} \"1d;/^[[:space:]]*$/d;s/[\\r]*$/\\\\\\n\\\" \\\\\\/\" \"${CSVFILE}\"; done)\n      IFS=$'\\n'\n      for LINE in ${CSVLINES}; do\n        I=0; IDEVICE=$(${SED} \"${DEVPAT}\" <<<\"${LINE}\")\n        for DEVICE in ${DEVICES}; do\n          if [ \"${DEVICE}\" = \"${IDEVICE}\" ]; then break; fi\n          I=$((I+1));\n        done\n        ${SED} \"s/[^${DELIM}]*/  \\\"${I}/\" <<<\"${LINE}\"\n      done\n      echo \"  \\\"\\\"\"\n      echo \"static const char ${VNAME}[] = ${SNAME};\"\n      echo\n      echo \"#define ${NNAME} ${DNAME}\"\n      echo \"static const char *const ${DNAME}[] = {\"\n      I=0; S=\",\"; NDEVICES=$(${WC} -l <<<\"${DEVICES}\")\n      for DEVICE in ${DEVICES}; do\n        I=$((I+1)); if [ \"0\" != \"$((NDEVICES==I))\" ]; then S=\"\"; fi\n        echo \"  \\\"${DEVICE}\\\"${S}\"\n      done\n      unset IFS\n      echo \"};\"\n    fi >>\"${OFILE}\"\n  else\n    echo \"Usage: $0 infile.cl [infile2.cl .. infileN.cl] [infile.csv [.. infileN.csv]] outfile.h\"\n    echo \"       At least one OpenCL file and one header file must be supplied.\"\n    echo \"       -k|--keep: do not strip include guards (stripped even if necessary)\"\n    echo \"       -b|--banner N: number of lines used as banner (default: 0)\"\n    echo \"       -p|--params P: directory-path to CSV-files (can be \\\"\\\")\"\n    echo \"             default: ${PARAMDIR}\"\n    echo \"       -c|-d|--debug|--comments: keep comments in source-code\"\n    echo \"       -v|--verbose: repeat command-line arguments\"\n  fi\nelse\n  >&2 echo \"ERROR: missing prerequisites!\"\n  exit 1\nfi\n"
  },
  {
    "path": "src/acc/opencl/acc_opencl_event.c",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#if defined(__OPENCL)\n#  include \"acc_opencl.h\"\n\n\n#  if defined(__cplusplus)\nextern \"C\" {\n#  endif\n\nint c_dbcsr_acc_event_create(void** event_p) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert(NULL != c_dbcsr_acc_opencl_config.events && NULL != event_p);\n  *event_p = c_dbcsr_acc_opencl_pmalloc(\n    c_dbcsr_acc_opencl_config.lock_event, (void**)c_dbcsr_acc_opencl_config.events, &c_dbcsr_acc_opencl_config.nevents);\n  if (NULL != *event_p) *(cl_event*)*event_p = NULL;\n  else result = EXIT_FAILURE;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_event_destroy(void* event) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  if (NULL != event) {\n    const cl_event clevent = *ACC_OPENCL_EVENT(event);\n    assert(NULL != c_dbcsr_acc_opencl_config.events);\n    ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_event);\n    c_dbcsr_acc_opencl_pfree(event, (void**)c_dbcsr_acc_opencl_config.events, &c_dbcsr_acc_opencl_config.nevents);\n    if (NULL != clevent) {\n      result = clReleaseEvent(clevent);\n#  if !defined(NDEBUG)\n      *(cl_event*)event = NULL;\n#  endif\n    }\n    ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_event);\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_stream_wait_event(void* stream, void* event) { /* wait for an event (device-side) */\n  int result = EXIT_SUCCESS;\n  const c_dbcsr_acc_opencl_stream_t* str = NULL;\n  cl_event clevent = NULL;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream_default());\n  assert(NULL != str && NULL != str->queue && NULL != event);\n  clevent = *ACC_OPENCL_EVENT(event);\n  if (NULL != clevent) {\n#  if defined(CL_VERSION_1_2)\n    result = clEnqueueBarrierWithWaitList(str->queue, 1, &clevent, NULL);\n#  else\n    result = clEnqueueWaitForEvents(str->queue, 1, &clevent);\n#  endif\n    if (EXIT_SUCCESS != result) {\n      ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(clevent));\n      *(cl_event*)event = NULL;\n    }\n  }\n  else if (3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) {\n    fprintf(stderr, \"WARN ACC/OpenCL: c_dbcsr_acc_stream_wait_event discovered an empty event.\\n\");\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_event_record(void* event, void* stream) {\n  int result = EXIT_SUCCESS;\n  const c_dbcsr_acc_opencl_stream_t* str = NULL;\n  cl_event clevent = NULL, clevent_result = NULL;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream_default());\n  assert(NULL != str && NULL != str->queue && NULL != event);\n  clevent = *ACC_OPENCL_EVENT(event);\n#  if defined(CL_VERSION_1_2)\n  result = clEnqueueMarkerWithWaitList(str->queue, 0, NULL, &clevent_result);\n#  else\n  result = clEnqueueMarker(str->queue, &clevent_result);\n#  endif\n  if (NULL != clevent) {\n    const int result_release = clReleaseEvent(clevent);\n    if (EXIT_SUCCESS == result) result = result_release;\n  }\n  if (EXIT_SUCCESS == result) {\n    assert(NULL != clevent_result);\n    *(cl_event*)event = clevent_result;\n  }\n  else {\n    if (NULL != clevent_result) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(clevent_result));\n    *(cl_event*)event = NULL;\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_event_query(void* event, c_dbcsr_acc_bool_t* has_occurred) {\n  cl_int status = CL_COMPLETE;\n  int result;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert(NULL != event && NULL != has_occurred);\n  result = clGetEventInfo(*ACC_OPENCL_EVENT(event), CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(cl_int), &status, NULL);\n  if (EXIT_SUCCESS == result && 0 <= status) *has_occurred = (CL_COMPLETE == status ? 1 : 0);\n  else { /* error state */\n    result = EXIT_SUCCESS; /* soft-error */\n    *has_occurred = 1;\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_event_synchronize(void* event) { /* waits on the host-side */\n  int result = EXIT_SUCCESS;\n  cl_event clevent;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert(NULL != event);\n  clevent = *ACC_OPENCL_EVENT(event);\n  if (NULL != clevent) {\n    if (0 == (32 & c_dbcsr_acc_opencl_config.wa)) {\n      cl_int status = CL_COMPLETE + 1;\n      if (64 & c_dbcsr_acc_opencl_config.xhints) {\n        result = clGetEventInfo(clevent, CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(cl_int), &status, NULL);\n        assert(EXIT_SUCCESS == result || CL_COMPLETE != status);\n      }\n      if (CL_COMPLETE != status) result = clWaitForEvents(1, &clevent);\n    }\n    else {\n      cl_command_queue queue = NULL;\n      result = clGetEventInfo(clevent, CL_EVENT_COMMAND_QUEUE, sizeof(cl_command_queue), &queue, NULL);\n      if (EXIT_SUCCESS == result) result = clFinish(queue);\n    }\n  }\n  else if (3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) {\n    fprintf(stderr, \"WARN ACC/OpenCL: c_dbcsr_acc_event_synchronize discovered an empty event.\\n\");\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n#  if defined(__cplusplus)\n}\n#  endif\n\n#endif /*__OPENCL*/\n"
  },
  {
    "path": "src/acc/opencl/acc_opencl_mem.c",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#if defined(__OPENCL)\n#  include \"acc_opencl.h\"\n#  include <string.h>\n#  if defined(_WIN32)\n#    include <Windows.h>\n#  else\n#    if !defined(__linux__) && defined(__APPLE__) && defined(__MACH__)\n#      include <sys/types.h>\n#      include <sys/sysctl.h>\n#    endif\n#    include <unistd.h>\n#  endif\n\n#  if !defined(ACC_OPENCL_MEM_ALLOC)\n#    if 1\n#      define ACC_OPENCL_MEM_ALLOC(SIZE, ALIGNMENT) libxsmm_aligned_malloc(SIZE, ALIGNMENT)\n#      define ACC_OPENCL_MEM_FREE(PTR) libxsmm_free(PTR)\n#    else\n#      define ACC_OPENCL_MEM_ALLOC(SIZE, ALIGNMENT) aligned_alloc(ALIGNMENT, SIZE)\n#      define ACC_OPENCL_MEM_FREE(PTR) free(PTR)\n#    endif\n#  endif\n#  if !defined(ACC_OPENCL_MEM_ALIGNSCALE)\n#    define ACC_OPENCL_MEM_ALIGNSCALE 8\n#  endif\n#  if !defined(ACC_OPENCL_MEM_SVM_INTEL) && 0\n#    define ACC_OPENCL_MEM_SVM_INTEL\n#  endif\n#  if !defined(ACC_OPENCL_MEM_HST_INTEL) && 0\n#    define ACC_OPENCL_MEM_HST_INTEL\n#  endif\n#  if !defined(ACC_OPENCL_MEM_SVM_USM) && 0\n#    define ACC_OPENCL_MEM_SVM_USM\n#  endif\n#  if !defined(ACC_OPENCL_MEM_DEBUG) && 0\n#    if && !defined(NDEBUG)\n#      define ACC_OPENCL_MEM_DEBUG\n#    endif\n#  endif\n\n\n#  if defined(__cplusplus)\nextern \"C\" {\n#  endif\n\nvoid c_dbcsr_acc_opencl_pmalloc_init(size_t size, size_t* num, void* pool[], void* storage) {\n  char* p = (char*)storage;\n  size_t i = 0;\n  assert(0 < size && NULL != num && NULL != pool && NULL != storage);\n  for (; i < *num; ++i, p += size) pool[i] = p;\n}\n\n\nvoid* c_dbcsr_acc_opencl_pmalloc(ACC_OPENCL_LOCKTYPE* lock, void* pool[], size_t* i) {\n  void* pointer;\n  assert(NULL != pool && NULL != i);\n  if (NULL != lock) ACC_OPENCL_ACQUIRE(lock);\n  pointer = (0 < *i ? pool[--(*i)] : NULL);\n  if (NULL != lock) ACC_OPENCL_RELEASE(lock);\n  assert(NULL != pointer);\n  return pointer;\n}\n\n\nvoid c_dbcsr_acc_opencl_pfree(const void* pointer, void* pool[], size_t* i) {\n  assert(NULL != pool && NULL != i);\n  if (NULL != pointer) {\n    LIBXSMM_ASSIGN127(pool + *i, &pointer);\n    ++(*i);\n  }\n}\n\n\nc_dbcsr_acc_opencl_info_memptr_t* c_dbcsr_acc_opencl_info_hostptr(const void* memory) {\n  c_dbcsr_acc_opencl_info_memptr_t* result = NULL;\n  if (NULL == c_dbcsr_acc_opencl_config.device.clHostMemAllocINTEL &&\n#  if (0 != ACC_OPENCL_USM)\n      0 == c_dbcsr_acc_opencl_config.device.usm &&\n#  endif\n      NULL != memory)\n  {\n    assert(sizeof(c_dbcsr_acc_opencl_info_memptr_t) < (uintptr_t)memory);\n    result = (c_dbcsr_acc_opencl_info_memptr_t*)((uintptr_t)memory - sizeof(c_dbcsr_acc_opencl_info_memptr_t));\n  }\n  return result;\n}\n\n\nc_dbcsr_acc_opencl_info_memptr_t* c_dbcsr_acc_opencl_info_devptr_modify(\n  ACC_OPENCL_LOCKTYPE* lock, void* memory, size_t elsize, const size_t* amount, size_t* offset) {\n  c_dbcsr_acc_opencl_info_memptr_t* result = NULL;\n#  if !defined(ACC_OPENCL_MEM_DEBUG)\n  LIBXSMM_UNUSED(amount);\n#  endif\n  if (NULL != memory) {\n    assert(NULL != c_dbcsr_acc_opencl_config.device.context);\n    if (/* USM-pointer */\n#  if (0 != ACC_OPENCL_USM)\n      0 != c_dbcsr_acc_opencl_config.device.usm ||\n#  endif\n      NULL != c_dbcsr_acc_opencl_config.device.clDeviceMemAllocINTEL)\n    { /* assume only first item of c_dbcsr_acc_opencl_info_memptr_t is accessed */\n      assert(0 != c_dbcsr_acc_opencl_config.device.usm || NULL != c_dbcsr_acc_opencl_config.device.clDeviceMemAllocINTEL);\n      result = NULL; /*(c_dbcsr_acc_opencl_info_memptr_t*)memory*/\n      if (NULL != offset) *offset = 0;\n    }\n    else { /* info-augmented pointer */\n      const char* const pointer = (const char*)memory;\n      const size_t n = ACC_OPENCL_MAXNITEMS * c_dbcsr_acc_opencl_config.nthreads;\n      size_t hit = (size_t)-1, i;\n      assert(0 == c_dbcsr_acc_opencl_config.device.usm && NULL == c_dbcsr_acc_opencl_config.device.clDeviceMemAllocINTEL);\n      assert(NULL != c_dbcsr_acc_opencl_config.memptrs);\n      if (NULL != lock) ACC_OPENCL_ACQUIRE(lock);\n      for (i = c_dbcsr_acc_opencl_config.nmemptrs; i < n; ++i) {\n        c_dbcsr_acc_opencl_info_memptr_t* const info = c_dbcsr_acc_opencl_config.memptrs[i];\n        if (NULL != info) {\n          char* const memptr = (char*)info->memptr;\n          if (memptr == pointer) { /* fast-path */\n            if (NULL != offset) *offset = 0;\n            result = info;\n            break;\n          }\n          else if (memptr < pointer && NULL != offset) {\n            size_t d = pointer - memptr, s = d;\n            assert(0 < elsize && 0 != d);\n            if (d < hit && (1 == elsize || 0 == (d % elsize)) &&\n#  if defined(ACC_OPENCL_MEM_DEBUG) /* TODO: verify enclosed conditions */\n                (EXIT_SUCCESS == clGetMemObjectInfo(info->memory, CL_MEM_SIZE, sizeof(size_t), &s, NULL)) &&\n                (NULL == amount || (*amount * elsize + d) <= s) &&\n#  endif\n                (1 == elsize || 0 == (s % elsize)) && d <= s)\n            {\n              *offset = (1 == elsize ? d : (d / elsize));\n              result = info;\n              hit = d;\n            }\n#  if defined(ACC_OPENCL_MEM_DEBUG)\n            else if (d < hit && 0 != c_dbcsr_acc_opencl_config.debug && 0 != c_dbcsr_acc_opencl_config.verbosity) {\n              fprintf(stderr, \"ERROR ACC/OpenCL: memory=%p pointer=%p size=%llu offset=%llu info failed\\n\",\n                (const void*)info->memory, info->memptr, (unsigned long long)s,\n                (unsigned long long)(1 == elsize ? d : (d / elsize)));\n            }\n#  endif\n          }\n        }\n        else break;\n      }\n      if (NULL != lock) ACC_OPENCL_RELEASE(lock);\n      assert(NULL != result);\n    }\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_info_devptr_lock(c_dbcsr_acc_opencl_info_memptr_t* info, ACC_OPENCL_LOCKTYPE* lock, const void* memory,\n  size_t elsize, const size_t* amount, size_t* offset) {\n  const c_dbcsr_acc_opencl_info_memptr_t* meminfo = NULL;\n  int result = EXIT_SUCCESS;\n  void* non_const;\n  LIBXSMM_ASSIGN127(&non_const, &memory);\n  meminfo = c_dbcsr_acc_opencl_info_devptr_modify(lock, non_const, elsize, amount, offset);\n  assert(NULL != info);\n  if (NULL == meminfo) { /* USM-pointer */\n    LIBXSMM_MEMZERO127(info);\n    info->memory = (cl_mem)non_const;\n  }\n  else { /* info-augmented pointer */\n    assert(NULL != c_dbcsr_acc_opencl_config.device.context);\n    LIBXSMM_ASSIGN127(info, meminfo);\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_opencl_info_devptr(\n  c_dbcsr_acc_opencl_info_memptr_t* info, const void* memory, size_t elsize, const size_t* amount, size_t* offset) {\n  ACC_OPENCL_LOCKTYPE* const lock_memory = ((\n#  if (0 != ACC_OPENCL_USM)\n                                              0 != c_dbcsr_acc_opencl_config.device.usm ||\n#  endif\n                                              NULL != c_dbcsr_acc_opencl_config.device.clSetKernelArgMemPointerINTEL)\n                                              ? NULL /* no lock required */\n                                              : c_dbcsr_acc_opencl_config.lock_memory);\n  return c_dbcsr_acc_opencl_info_devptr_lock(info, lock_memory, memory, elsize, amount, offset);\n}\n\n\nint c_dbcsr_acc_host_mem_deallocate_internal(void* /*host_ptr*/, cl_command_queue /*queue*/);\nint c_dbcsr_acc_host_mem_deallocate_internal(void* host_ptr, cl_command_queue queue) {\n  const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n  int result = EXIT_FAILURE;\n#  if (1 >= ACC_OPENCL_USM)\n  if (NULL != devinfo->clMemFreeINTEL) {\n#    if defined(ACC_OPENCL_MEM_SVM_INTEL) || defined(ACC_OPENCL_MEM_HST_INTEL)\n    result = devinfo->clMemFreeINTEL(devinfo->context, host_ptr);\n#    else\n    ACC_OPENCL_MEM_FREE(host_ptr);\n    result = EXIT_SUCCESS;\n#    endif\n  }\n  else\n#  endif\n#  if (0 != ACC_OPENCL_USM) && ((1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM))\n    if (0 != devinfo->usm && 0 != devinfo->unified)\n  {\n    if (0 == ((CL_DEVICE_SVM_FINE_GRAIN_BUFFER | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM) & devinfo->usm)) {\n      result = clEnqueueSVMUnmap(queue, host_ptr, 0, NULL, NULL); /* clSVMFree below synchronizes */\n    }\n    else result = EXIT_SUCCESS;\n    clSVMFree(devinfo->context, host_ptr);\n  }\n  else\n#  endif\n  {\n    LIBXSMM_UNUSED(queue);\n    ACC_OPENCL_MEM_FREE(host_ptr);\n    result = EXIT_SUCCESS;\n  }\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_host_mem_allocate(void** host_mem, size_t nbytes, void* stream) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert(NULL != host_mem);\n  if (0 != nbytes) {\n    const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n    const c_dbcsr_acc_opencl_stream_t* const str = (NULL != stream ? ACC_OPENCL_STREAM(stream)\n                                                                   : c_dbcsr_acc_opencl_stream_default());\n    int alignment = LIBXSMM_MAX(0x10000, sizeof(void*));\n    void* host_ptr = NULL;\n    cl_mem memory = NULL;\n    assert(NULL != str);\n    if ((ACC_OPENCL_MEM_ALIGNSCALE * ACC_OPENCL_CACHELINE) <= nbytes) {\n      const int a = ((ACC_OPENCL_MEM_ALIGNSCALE * ACC_OPENCL_MAXALIGN) <= nbytes ? ACC_OPENCL_MAXALIGN : ACC_OPENCL_CACHELINE);\n      if (alignment < a) alignment = a;\n    }\n#  if !defined(ACC_OPENCL_ACTIVATE)\n    if (NULL == devinfo->context) {\n      ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_set_active_device(\n                                          c_dbcsr_acc_opencl_config.lock_main, c_dbcsr_acc_opencl_config.device_id));\n    }\n#  endif\n#  if (1 >= ACC_OPENCL_USM)\n    if (NULL != devinfo->clMemFreeINTEL) {\n#    if defined(ACC_OPENCL_MEM_SVM_INTEL)\n      const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n      host_ptr = devinfo->clSharedMemAllocINTEL(devinfo->context, device_id, NULL /*properties*/, nbytes, 0 /*alignment*/, &result);\n#    elif defined(ACC_OPENCL_MEM_HST_INTEL)\n      host_ptr = devinfo->clHostMemAllocINTEL(devinfo->context, NULL /*properties*/, nbytes, 0 /*alignment*/, &result);\n#    else\n      host_ptr = ACC_OPENCL_MEM_ALLOC(nbytes, alignment);\n#    endif\n      assert(NULL != host_ptr || EXIT_SUCCESS != result);\n      /*if (NULL != host_ptr)*/ *host_mem = host_ptr;\n    }\n    else\n#  endif\n      if (0 != devinfo->usm)\n    {\n#  if (0 != ACC_OPENCL_USM)\n#    if ((1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM))\n      if (0 != devinfo->unified) {\n        const int svmmem_fine = (0 != ((CL_DEVICE_SVM_FINE_GRAIN_BUFFER | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM) & devinfo->usm)\n                                   ? CL_MEM_SVM_FINE_GRAIN_BUFFER\n                                   : 0);\n        host_ptr = clSVMAlloc(devinfo->context, CL_MEM_READ_WRITE | svmmem_fine, nbytes, 0 /*alignment*/);\n        if (NULL != host_ptr) {\n          if (0 == svmmem_fine) {\n            result = clEnqueueSVMMap(\n              str->queue, CL_TRUE /*always block*/, CL_MAP_READ | CL_MAP_WRITE, host_ptr, nbytes, 0, NULL, NULL);\n          }\n          *host_mem = host_ptr;\n        }\n        else result = EXIT_FAILURE;\n      }\n      else\n#    endif\n      {\n        host_ptr = ACC_OPENCL_MEM_ALLOC(nbytes, alignment);\n        if (NULL != host_ptr) *host_mem = host_ptr;\n        else result = EXIT_FAILURE;\n      }\n#  endif\n    }\n    else {\n      const size_t size_meminfo = sizeof(c_dbcsr_acc_opencl_info_memptr_t);\n      int memflags = CL_MEM_ALLOC_HOST_PTR;\n      nbytes += alignment + size_meminfo - 1;\n#  if defined(ACC_OPENCL_XHINTS)\n      if (0 != (8 & c_dbcsr_acc_opencl_config.xhints) && (0 != devinfo->nv || NULL != (ACC_OPENCL_XHINTS))) {\n        host_ptr = ACC_OPENCL_MEM_ALLOC(nbytes, alignment);\n        if (NULL != host_ptr) memflags = CL_MEM_USE_HOST_PTR;\n      }\n#  endif\n      memory = clCreateBuffer(devinfo->context, (cl_mem_flags)(CL_MEM_READ_WRITE | memflags), nbytes, host_ptr, &result);\n      if (EXIT_SUCCESS == result) {\n        void* mapped = host_ptr;\n        if (NULL == host_ptr) {\n          mapped = clEnqueueMapBuffer(str->queue, memory, CL_TRUE /*always block*/,\n#  if defined(ACC_OPENCL_XHINTS) && (defined(CL_VERSION_1_2) || defined(CL_MAP_WRITE_INVALIDATE_REGION))\n            (32 & c_dbcsr_acc_opencl_config.xhints) ? CL_MAP_WRITE_INVALIDATE_REGION :\n#  endif\n                                                    (CL_MAP_READ | CL_MAP_WRITE),\n            0 /*offset*/, nbytes, 0, NULL, NULL, &result);\n        }\n        assert(EXIT_SUCCESS == result || NULL == mapped);\n        if (EXIT_SUCCESS == result) {\n          const uintptr_t address = (uintptr_t)mapped;\n          const uintptr_t aligned = LIBXSMM_UP2(address + size_meminfo, alignment);\n          c_dbcsr_acc_opencl_info_memptr_t* const meminfo = (c_dbcsr_acc_opencl_info_memptr_t*)(aligned - size_meminfo);\n          assert(address + size_meminfo <= aligned && NULL != meminfo);\n          meminfo->memory = memory;\n          meminfo->memptr = mapped;\n          *host_mem = (void*)aligned;\n          assert(meminfo == c_dbcsr_acc_opencl_info_hostptr(*host_mem));\n        }\n      }\n    }\n    if (EXIT_SUCCESS != result) {\n      if (NULL != memory) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseMemObject(memory));\n      if (NULL != host_ptr) {\n        ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_host_mem_deallocate_internal(host_ptr, str->queue));\n      }\n      *host_mem = NULL;\n    }\n  }\n  else *host_mem = NULL; /* consider warning */\n  assert(EXIT_SUCCESS == result || NULL == *host_mem);\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_host_mem_deallocate(void* host_mem, void* stream) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  if (NULL != host_mem) {\n    const c_dbcsr_acc_opencl_stream_t* const str = (NULL != stream ? ACC_OPENCL_STREAM(stream)\n                                                                   : c_dbcsr_acc_opencl_stream_default());\n    const c_dbcsr_acc_opencl_info_memptr_t* const meminfo = c_dbcsr_acc_opencl_info_hostptr(host_mem);\n    assert(NULL != str);\n    if (NULL == meminfo || NULL == meminfo->memory) { /* USM-pointer */\n      assert(0 != c_dbcsr_acc_opencl_config.device.usm || NULL != c_dbcsr_acc_opencl_config.device.clMemFreeINTEL);\n      result = c_dbcsr_acc_host_mem_deallocate_internal(host_mem, str->queue);\n    }\n    else { /* info-augmented pointer */\n      const c_dbcsr_acc_opencl_info_memptr_t info = *meminfo; /* copy meminfo prior to unmap */\n      int result_release = EXIT_SUCCESS;\n      void* host_ptr = NULL;\n      assert(0 == c_dbcsr_acc_opencl_config.device.usm && NULL == c_dbcsr_acc_opencl_config.device.clMemFreeINTEL);\n      if (EXIT_SUCCESS == clGetMemObjectInfo(info.memory, CL_MEM_HOST_PTR, sizeof(void*), &host_ptr, NULL) && NULL != host_ptr) {\n        result = c_dbcsr_acc_host_mem_deallocate_internal(host_ptr, str->queue);\n      }\n      else { /* clReleaseMemObject later on synchronizes */\n        result = clEnqueueUnmapMemObject(str->queue, info.memory, info.memptr, 0, NULL, NULL);\n      }\n      result_release = clReleaseMemObject(info.memory);\n      if (EXIT_SUCCESS == result) result = result_release;\n    }\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nvoid CL_CALLBACK c_dbcsr_acc_memcpy_notify(cl_event /*event*/, cl_int /*event_status*/, void* /*data*/);\nvoid CL_CALLBACK c_dbcsr_acc_memcpy_notify(cl_event event, cl_int event_status, void* data) {\n  int result = EXIT_SUCCESS;\n  const double durdev = c_dbcsr_acc_opencl_duration(event, &result);\n  cl_command_type type = CL_COMMAND_SVM_MEMCPY;\n  LIBXSMM_UNUSED(event_status);\n  assert(CL_COMPLETE == event_status && NULL != data && 8 == sizeof(data));\n  if (EXIT_SUCCESS == result && EXIT_SUCCESS == clGetEventInfo(event, CL_EVENT_COMMAND_TYPE, sizeof(type), &type, NULL)) {\n    const size_t size = 0x3FFFFFFFFFFFFFFF & (size_t)data;\n    const int kind = (int)(((size_t)data) >> 62);\n    const double vals[] = {(double)size, durdev};\n    const int mb = (int)((size + (1 << 19)) >> 20);\n    if (CL_COMMAND_WRITE_BUFFER != type && CL_COMMAND_READ_BUFFER != type && CL_COMMAND_COPY_BUFFER != type) {\n      switch (kind) {\n        case c_dbcsr_acc_event_kind_h2d: type = CL_COMMAND_WRITE_BUFFER; break;\n        case c_dbcsr_acc_event_kind_d2h: type = CL_COMMAND_READ_BUFFER; break;\n        case c_dbcsr_acc_event_kind_d2d: type = CL_COMMAND_COPY_BUFFER; break;\n        default: assert(c_dbcsr_acc_event_kind_none == kind); /* should not happen */\n      }\n    }\n    switch (type) {\n      case CL_COMMAND_WRITE_BUFFER: {\n        assert(NULL != c_dbcsr_acc_opencl_config.hist_h2d && c_dbcsr_acc_event_kind_h2d == kind);\n        c_dbcsr_acc_opencl_hist_set(c_dbcsr_acc_opencl_config.lock_memory, c_dbcsr_acc_opencl_config.hist_h2d, vals);\n        if (0 > c_dbcsr_acc_opencl_config.profile) fprintf(stderr, \"PROF ACC/OpenCL: H2D mb=%i us=%.0f\\n\", mb, durdev * 1E6);\n      } break;\n      case CL_COMMAND_READ_BUFFER: {\n        assert(NULL != c_dbcsr_acc_opencl_config.hist_d2h && c_dbcsr_acc_event_kind_d2h == kind);\n        c_dbcsr_acc_opencl_hist_set(c_dbcsr_acc_opencl_config.lock_memory, c_dbcsr_acc_opencl_config.hist_d2h, vals);\n        if (0 > c_dbcsr_acc_opencl_config.profile) fprintf(stderr, \"PROF ACC/OpenCL: D2H mb=%i us=%.0f\\n\", mb, durdev * 1E6);\n      } break;\n      case CL_COMMAND_COPY_BUFFER: {\n        assert(NULL != c_dbcsr_acc_opencl_config.hist_d2d && c_dbcsr_acc_event_kind_d2d == kind);\n        c_dbcsr_acc_opencl_hist_set(c_dbcsr_acc_opencl_config.lock_memory, c_dbcsr_acc_opencl_config.hist_d2d, vals);\n        if (0 > c_dbcsr_acc_opencl_config.profile) fprintf(stderr, \"PROF ACC/OpenCL: D2D mb=%i us=%.0f\\n\", mb, durdev * 1E6);\n      } break;\n    }\n  }\n  if (NULL != event) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event));\n}\n\n\nint c_dbcsr_acc_dev_mem_allocate(void** dev_mem, size_t nbytes) {\n  /* assume no lock is needed to protect against context/device changes */\n  const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n  int result = EXIT_SUCCESS;\n  void* memptr = NULL;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n#  if !defined(ACC_OPENCL_ACTIVATE)\n  if (NULL == devinfo->context) {\n    ACC_OPENCL_EXPECT(EXIT_SUCCESS == c_dbcsr_acc_opencl_set_active_device(\n                                        c_dbcsr_acc_opencl_config.lock_main, c_dbcsr_acc_opencl_config.device_id));\n  }\n#  endif\n  assert(NULL != dev_mem && NULL != devinfo->context);\n  if (0 != nbytes) {\n    cl_mem memory = NULL;\n#  if (1 >= ACC_OPENCL_USM)\n    if (NULL != devinfo->clMemFreeINTEL) {\n      const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n#    if defined(ACC_OPENCL_MEM_SVM_INTEL)\n      memptr = devinfo->clSharedMemAllocINTEL(devinfo->context, device_id, NULL /*properties*/, nbytes, 0 /*alignment*/, &result);\n#    else\n      memptr = devinfo->clDeviceMemAllocINTEL(devinfo->context, device_id, NULL /*properties*/, nbytes, 0 /*alignment*/, &result);\n#    endif\n      *dev_mem = memptr;\n    }\n    else\n#  endif\n#  if (0 != ACC_OPENCL_USM)\n      if (0 != devinfo->usm)\n    {\n#    if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM)\n      const int svmflags = (0 != ((CL_DEVICE_SVM_FINE_GRAIN_BUFFER | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM) & devinfo->usm)\n                              ? CL_MEM_SVM_FINE_GRAIN_BUFFER\n                              : 0);\n      memptr = clSVMAlloc(devinfo->context, (cl_svm_mem_flags)(CL_MEM_READ_WRITE | svmflags), nbytes, 0 /*alignment*/);\n#    else\n      int alignment = LIBXSMM_MAX(0x10000, sizeof(void*));\n      if ((ACC_OPENCL_MEM_ALIGNSCALE * ACC_OPENCL_CACHELINE) <= nbytes) {\n        const int a = ((ACC_OPENCL_MEM_ALIGNSCALE * ACC_OPENCL_MAXALIGN) <= nbytes ? ACC_OPENCL_MAXALIGN : ACC_OPENCL_CACHELINE);\n        if (alignment < a) alignment = a;\n      }\n      memptr = ACC_OPENCL_MEM_ALLOC(nbytes, alignment);\n#    endif\n      *dev_mem = memptr;\n    }\n    else\n#  endif\n    {\n#  if defined(ACC_OPENCL_XHINTS)\n      const int devuid = devinfo->uid, devuids = (0x4905 == devuid || 0x020a == devuid || (0x0bd0 <= devuid && 0x0bdb >= devuid));\n      const int try_flag = ((0 != (16 & c_dbcsr_acc_opencl_config.xhints) && 0 != devinfo->intel && 0 == devinfo->unified &&\n                              (devuids || NULL != (ACC_OPENCL_XHINTS)))\n                              ? (1u << 22)\n                              : 0);\n      memory = clCreateBuffer(devinfo->context, (cl_mem_flags)(CL_MEM_READ_WRITE | try_flag), nbytes, NULL /*host_ptr*/, &result);\n      if (0 != try_flag && EXIT_SUCCESS != result) /* retry without try_flag */\n#  endif\n      {\n        memory = clCreateBuffer(devinfo->context, CL_MEM_READ_WRITE, nbytes, NULL /*host_ptr*/, &result);\n      }\n      if (EXIT_SUCCESS == result) {\n        const c_dbcsr_acc_opencl_stream_t* str = NULL;\n        static cl_kernel kernel = NULL;\n        const size_t size = 1;\n        ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory);\n        str = c_dbcsr_acc_opencl_stream(NULL /*lock*/, ACC_OPENCL_OMP_TID());\n        assert(NULL != str && NULL != memory);\n        /* determine device-side value of device-memory object by running some kernel */\n        if (NULL == kernel) { /* generate kernel */\n          const char source[] = \"kernel void memptr(global unsigned long* ptr) {\\n\"\n                                \"  const union { global unsigned long* p; unsigned long u; } cast = { ptr };\\n\"\n                                \"  const size_t i = get_global_id(0);\\n\"\n                                \"  ptr[i] = cast.u + i;\\n\"\n                                \"}\\n\";\n          assert(sizeof(size_t) == sizeof(cl_ulong));\n          result = c_dbcsr_acc_opencl_kernel(0 /*source_kind*/, source, \"memptr\" /*kernel_name*/, NULL /*build_params*/,\n            NULL /*build_options*/, NULL /*try_build_options*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &kernel);\n        }\n        /* TODO: backup/restore memory */\n        if (EXIT_SUCCESS == result) result = clSetKernelArg(kernel, 0, sizeof(cl_mem), &memory);\n        if (EXIT_SUCCESS == result) {\n          result = clEnqueueNDRangeKernel(\n            str->queue, kernel, 1 /*work_dim*/, NULL /*offset*/, &size, NULL /*local_work_size*/, 0, NULL, NULL);\n        }\n        ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory);\n        if (EXIT_SUCCESS == result) {\n          result = clEnqueueReadBuffer(\n            str->queue, memory, CL_TRUE /*blocking*/, 0 /*offset*/, sizeof(void*), &memptr, 0, NULL, NULL /*event*/);\n        }\n        assert(EXIT_SUCCESS != result || NULL != memptr);\n        if (EXIT_SUCCESS == result) {\n          c_dbcsr_acc_opencl_info_memptr_t* const info = (c_dbcsr_acc_opencl_info_memptr_t*)c_dbcsr_acc_opencl_pmalloc(\n            c_dbcsr_acc_opencl_config.lock_memory, (void**)c_dbcsr_acc_opencl_config.memptrs, &c_dbcsr_acc_opencl_config.nmemptrs);\n          if (NULL != info) {\n            info->memory = memory;\n            info->memptr = memptr;\n            *dev_mem = memptr;\n          }\n          else result = EXIT_FAILURE;\n        }\n      }\n    }\n    if (EXIT_SUCCESS != result) {\n      if (0 != c_dbcsr_acc_opencl_config.verbosity) {\n        fprintf(stderr, \"ERROR ACC/OpenCL: memory=%p pointer=%p size=%llu failed to allocate\\n\", (const void*)memory, memptr,\n          (unsigned long long)nbytes);\n      }\n      if (NULL != memory) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseMemObject(memory));\n      *dev_mem = NULL;\n    }\n  }\n  else *dev_mem = NULL;\n  assert(EXIT_SUCCESS == result || NULL == *dev_mem);\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_dev_mem_deallocate(void* dev_mem) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  if (NULL != dev_mem) {\n    assert(NULL != c_dbcsr_acc_opencl_config.device.context);\n#  if (1 >= ACC_OPENCL_USM)\n    if (NULL != c_dbcsr_acc_opencl_config.device.clMemFreeINTEL) {\n      result = c_dbcsr_acc_opencl_config.device.clMemFreeINTEL(c_dbcsr_acc_opencl_config.device.context, dev_mem);\n    }\n    else\n#  endif\n#  if (0 != ACC_OPENCL_USM)\n      if (0 != c_dbcsr_acc_opencl_config.device.usm)\n    {\n#    if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM)\n      clSVMFree(c_dbcsr_acc_opencl_config.device.context, dev_mem);\n#    else\n      ACC_OPENCL_MEM_FREE(dev_mem);\n#    endif\n    }\n    else\n#  endif\n    {\n      c_dbcsr_acc_opencl_info_memptr_t* info = NULL;\n      ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory);\n      info = c_dbcsr_acc_opencl_info_devptr_modify(NULL, dev_mem, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/);\n      if (NULL != info && info->memptr == dev_mem && NULL != info->memory) {\n        c_dbcsr_acc_opencl_info_memptr_t* const pfree = c_dbcsr_acc_opencl_config.memptrs[c_dbcsr_acc_opencl_config.nmemptrs];\n        result = clReleaseMemObject(info->memory);\n        c_dbcsr_acc_opencl_pfree(pfree, (void**)c_dbcsr_acc_opencl_config.memptrs, &c_dbcsr_acc_opencl_config.nmemptrs);\n        *info = *pfree;\n        LIBXSMM_MEMZERO127(pfree);\n      }\n      else result = EXIT_FAILURE;\n      ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory);\n    }\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_dev_mem_set_ptr(void** dev_mem, void* other, size_t offset) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert(NULL != dev_mem);\n  if (NULL != other || 0 == offset) {\n    *dev_mem = (char*)other + offset;\n  }\n  else {\n    result = EXIT_FAILURE;\n    *dev_mem = NULL;\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_memcpy_h2d(const void* host_mem, void* dev_mem, size_t nbytes, void* stream) {\n  const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert((NULL != host_mem && NULL != dev_mem) || 0 == nbytes);\n  assert(NULL != devinfo->context);\n  if (\n#  if (0 != ACC_OPENCL_USM)\n    host_mem != dev_mem && /* fast-path only sensible without offsets */\n#  endif\n    NULL != host_mem && NULL != dev_mem && 0 != nbytes)\n  {\n#  if defined(ACC_OPENCL_ASYNC)\n    const cl_bool finish = (0 == (1 & c_dbcsr_acc_opencl_config.async) || NULL == stream ||\n                            (0 != (8 & c_dbcsr_acc_opencl_config.wa) && 0 != devinfo->intel && 0 != devinfo->unified));\n#  else\n    const cl_bool finish = CL_TRUE;\n#  endif\n    const c_dbcsr_acc_opencl_stream_t* str;\n    cl_event event = NULL;\n    ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory);\n    str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream(NULL, ACC_OPENCL_OMP_TID()));\n    assert(NULL != str);\n#  if (1 >= ACC_OPENCL_USM)\n    if (NULL != devinfo->clEnqueueMemcpyINTEL) {\n      result = devinfo->clEnqueueMemcpyINTEL(\n        str->queue, finish, dev_mem, host_mem, nbytes, 0, NULL, NULL == c_dbcsr_acc_opencl_config.hist_h2d ? NULL : &event);\n    }\n    else\n#  endif\n#  if (0 != ACC_OPENCL_USM)\n      if (0 != devinfo->usm)\n    {\n#    if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM)\n      result = clEnqueueSVMMemcpy(\n        str->queue, finish, dev_mem, host_mem, nbytes, 0, NULL, NULL == c_dbcsr_acc_opencl_config.hist_h2d ? NULL : &event);\n#    else\n      memcpy(dev_mem, host_mem, nbytes);\n#    endif\n    }\n    else\n#  endif\n    {\n      size_t offset = 0;\n      c_dbcsr_acc_opencl_info_memptr_t* const info = c_dbcsr_acc_opencl_info_devptr_modify(\n        NULL, dev_mem, 1 /*elsize*/, &nbytes, &offset);\n      if (NULL != info) {\n        result = clEnqueueWriteBuffer(str->queue, info->memory, finish, offset, nbytes, host_mem, 0, NULL,\n          NULL == c_dbcsr_acc_opencl_config.hist_h2d ? NULL : &event);\n      }\n      else result = EXIT_FAILURE;\n    }\n    ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory);\n    if (NULL != event) { /* c_dbcsr_acc_memcpy_notify must be outside of locked region */\n      if (EXIT_SUCCESS == result) {\n        void* const data = (void*)(nbytes | ((size_t)c_dbcsr_acc_event_kind_h2d) << 62);\n        assert(NULL != c_dbcsr_acc_opencl_config.hist_h2d);\n        if (!finish) { /* asynchronous */\n          result = clSetEventCallback(event, CL_COMPLETE, c_dbcsr_acc_memcpy_notify, data);\n        }\n        else c_dbcsr_acc_memcpy_notify(event, CL_COMPLETE, data); /* synchronous */\n      }\n      else ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event));\n    }\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\n/* like c_dbcsr_acc_memcpy_d2h, but apply some async workaround. */\nint c_dbcsr_acc_opencl_memcpy_d2h(const void* /*dev_mem*/, void* /*host_mem*/, size_t /*offset*/, size_t /*nbytes*/,\n  cl_command_queue /*queue*/, int /*blocking*/, cl_event* /*event*/);\nint c_dbcsr_acc_opencl_memcpy_d2h(\n  const void* dev_mem, void* host_mem, size_t offset, size_t nbytes, cl_command_queue queue, int blocking, cl_event* event) {\n  const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n#  if defined(ACC_OPENCL_ASYNC)\n  const cl_bool finish = (0 != blocking || 0 == (2 & c_dbcsr_acc_opencl_config.async) ||\n                          (0 != (8 & c_dbcsr_acc_opencl_config.wa) && 0 != devinfo->intel && 0 != devinfo->unified));\n#  else\n  const cl_bool finish = CL_TRUE;\n#  endif\n  int result = EXIT_SUCCESS;\n  assert(NULL != dev_mem);\n#  if (1 >= ACC_OPENCL_USM)\n  if (NULL != devinfo->clEnqueueMemcpyINTEL) {\n    result = devinfo->clEnqueueMemcpyINTEL(queue, finish, host_mem, (const char*)dev_mem + offset, nbytes, 0, NULL, event);\n  }\n  else\n#  endif\n#  if (0 != ACC_OPENCL_USM)\n    if (0 != devinfo->usm)\n  {\n#    if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM)\n    result = clEnqueueSVMMemcpy(queue, finish, host_mem, (const char*)dev_mem + offset, nbytes, 0, NULL, event);\n#    else\n    memcpy(host_mem, (const char*)dev_mem + offset, nbytes);\n#    endif\n  }\n  else\n#  endif\n  {\n    result = clEnqueueReadBuffer(queue, (cl_mem)(uintptr_t)dev_mem, finish, offset, nbytes, host_mem, 0, NULL, event);\n  }\n  if (EXIT_SUCCESS != result && !finish) { /* retry synchronously */\n    int result_sync = EXIT_FAILURE;\n#  if (1 >= ACC_OPENCL_USM)\n    if (NULL != devinfo->clEnqueueMemcpyINTEL) {\n      result_sync = devinfo->clEnqueueMemcpyINTEL(queue, CL_TRUE, host_mem, (const char*)dev_mem + offset, nbytes, 0, NULL, event);\n    }\n    else\n#  endif\n#  if (0 != ACC_OPENCL_USM)\n      if (0 != devinfo->usm)\n    {\n#    if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM)\n      result_sync = clEnqueueSVMMemcpy(queue, CL_TRUE, host_mem, (const char*)dev_mem + offset, nbytes, 0, NULL, event);\n#    else\n      memcpy(host_mem, (const char*)dev_mem + offset, nbytes);\n#    endif\n    }\n    else\n#  endif\n    {\n      result_sync = clEnqueueReadBuffer(queue, (cl_mem)(uintptr_t)dev_mem, CL_TRUE, offset, nbytes, host_mem, 0, NULL, event);\n    }\n    if (EXIT_SUCCESS == result_sync) {\n      c_dbcsr_acc_opencl_config.async &= ~2; /* retract async feature */\n      if (0 != c_dbcsr_acc_opencl_config.verbosity) {\n        fprintf(stderr, \"WARN ACC/OpenCL: falling back to synchronous readback (code=%i).\\n\", result);\n      }\n      result = EXIT_SUCCESS;\n    }\n  }\n  return result;\n}\n\n\nint c_dbcsr_acc_memcpy_d2h(const void* dev_mem, void* host_mem, size_t nbytes, void* stream) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert((NULL != dev_mem && NULL != host_mem) || 0 == nbytes);\n  if (\n#  if (0 != ACC_OPENCL_USM)\n    host_mem != dev_mem && /* fast-path only sensible without offsets */\n#  endif\n    NULL != host_mem && NULL != dev_mem && 0 != nbytes)\n  {\n    const cl_bool finish = (NULL != stream ? CL_FALSE : CL_TRUE);\n    c_dbcsr_acc_opencl_info_memptr_t* info = NULL;\n    cl_event event = NULL;\n    size_t offset = 0;\n    union {\n      const void* input;\n      void* ptr;\n    } nconst = {dev_mem};\n    const c_dbcsr_acc_opencl_stream_t* str;\n    ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory);\n    str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream(NULL, ACC_OPENCL_OMP_TID()));\n    assert(NULL != str);\n    info = c_dbcsr_acc_opencl_info_devptr_modify(NULL, nconst.ptr, 1 /*elsize*/, &nbytes, &offset);\n    if (NULL == info) {\n      result = c_dbcsr_acc_opencl_memcpy_d2h(\n        dev_mem, host_mem, offset, nbytes, str->queue, finish, NULL == c_dbcsr_acc_opencl_config.hist_d2h ? NULL : &event);\n    }\n    else {\n      result = c_dbcsr_acc_opencl_memcpy_d2h(\n        info->memory, host_mem, offset, nbytes, str->queue, finish, NULL == c_dbcsr_acc_opencl_config.hist_d2h ? NULL : &event);\n    }\n    ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory);\n    if (NULL != event) { /* c_dbcsr_acc_memcpy_notify must be outside of locked region */\n      if (EXIT_SUCCESS == result) {\n        void* const data = (void*)(nbytes | ((size_t)c_dbcsr_acc_event_kind_d2h) << 62);\n        assert(NULL != c_dbcsr_acc_opencl_config.hist_d2h);\n        if (!finish) { /* asynchronous */\n          result = clSetEventCallback(event, CL_COMPLETE, c_dbcsr_acc_memcpy_notify, data);\n        }\n        else c_dbcsr_acc_memcpy_notify(event, CL_COMPLETE, data); /* synchronous */\n      }\n      else ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event));\n    }\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_memcpy_d2d(const void* devmem_src, void* devmem_dst, size_t nbytes, void* stream) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert((NULL != devmem_src && NULL != devmem_dst) || 0 == nbytes);\n  if (NULL != devmem_src && devmem_src != devmem_dst && 0 != nbytes) {\n#  if defined(ACC_OPENCL_ASYNC)\n    cl_event event = NULL, *const pevent = (0 == (4 & c_dbcsr_acc_opencl_config.async) || NULL == stream) ? &event : NULL;\n#  else\n    cl_event event = NULL, *const pevent = NULL;\n#  endif\n    const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n    union {\n      const void* input;\n      void* ptr;\n    } nconst = {devmem_src};\n    const c_dbcsr_acc_opencl_stream_t* str;\n    ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory);\n    str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream(NULL, ACC_OPENCL_OMP_TID()));\n    assert(NULL != str && NULL != devinfo->context);\n#  if (1 >= ACC_OPENCL_USM)\n    if (NULL != devinfo->clEnqueueMemcpyINTEL) {\n      result = devinfo->clEnqueueMemcpyINTEL(str->queue, CL_FALSE /*blocking*/, devmem_dst, devmem_src, nbytes, 0, NULL,\n        NULL == c_dbcsr_acc_opencl_config.hist_d2d ? pevent : &event);\n    }\n    else\n#  endif\n#  if (0 != ACC_OPENCL_USM)\n      if (0 != devinfo->usm)\n    {\n#    if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM)\n      result = clEnqueueSVMMemcpy(str->queue, CL_FALSE /*blocking*/, devmem_dst, devmem_src, nbytes, 0, NULL,\n        NULL == c_dbcsr_acc_opencl_config.hist_d2d ? pevent : &event);\n#    else\n      memcpy(devmem_dst, devmem_src, nbytes);\n#    endif\n    }\n    else\n#  endif\n    {\n      size_t offset_src = 0, offset_dst = 0;\n      c_dbcsr_acc_opencl_info_memptr_t* const info_src = c_dbcsr_acc_opencl_info_devptr_modify(\n        NULL, nconst.ptr, 1 /*elsize*/, &nbytes, &offset_src);\n      c_dbcsr_acc_opencl_info_memptr_t* const info_dst = c_dbcsr_acc_opencl_info_devptr_modify(\n        NULL, devmem_dst, 1 /*elsize*/, &nbytes, &offset_dst);\n      if (NULL != info_src && NULL != info_dst) {\n        result = clEnqueueCopyBuffer(str->queue, info_src->memory, info_dst->memory, offset_src, offset_dst, nbytes, 0, NULL,\n          NULL == c_dbcsr_acc_opencl_config.hist_d2d ? pevent : &event);\n      }\n      else result = EXIT_FAILURE;\n    }\n    ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory);\n    if (NULL != event) { /* c_dbcsr_acc_memcpy_notify must be outside of locked region */\n      if (EXIT_SUCCESS == result) {\n        void* const data = (void*)(nbytes | ((size_t)c_dbcsr_acc_event_kind_d2d) << 62);\n        if (NULL == pevent) { /* asynchronous */\n          assert(NULL != c_dbcsr_acc_opencl_config.hist_d2d);\n          result = clSetEventCallback(event, CL_COMPLETE, c_dbcsr_acc_memcpy_notify, data);\n        }\n        else { /* synchronous */\n          result = clWaitForEvents(1, &event);\n          if (EXIT_SUCCESS == result) {\n            if (NULL != c_dbcsr_acc_opencl_config.hist_d2d) {\n              c_dbcsr_acc_memcpy_notify(event, CL_COMPLETE, data);\n            }\n            else result = clReleaseEvent(event);\n          }\n          else ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event));\n        }\n      }\n      else ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event));\n    }\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_opencl_memset(void* dev_mem, int value, size_t offset, size_t nbytes, void* stream) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert(NULL != dev_mem || 0 == nbytes);\n  if (0 != nbytes) {\n#  if defined(ACC_OPENCL_ASYNC)\n    cl_event event = NULL, *const pevent = (0 == (8 & c_dbcsr_acc_opencl_config.async) || NULL == stream) ? &event : NULL;\n#  else\n    cl_event event = NULL, *const pevent = NULL;\n#  endif\n    const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n    const c_dbcsr_acc_opencl_stream_t* str;\n    size_t base = 0, vsize = 1;\n    if (0 == LIBXSMM_MOD2(nbytes, 4)) vsize = 4;\n    else if (0 == LIBXSMM_MOD2(nbytes, 2)) vsize = 2;\n    ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_memory);\n    str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream(NULL, ACC_OPENCL_OMP_TID()));\n    assert(NULL != str && NULL != devinfo->context);\n#  if (1 >= ACC_OPENCL_USM)\n    if (NULL != devinfo->clEnqueueMemFillINTEL) {\n      result = devinfo->clEnqueueMemFillINTEL(str->queue, (char*)dev_mem + offset, &value, vsize, nbytes, 0, NULL, pevent);\n    }\n    else\n#  endif\n#  if (0 != ACC_OPENCL_USM)\n      if (0 != devinfo->usm)\n    {\n#    if (1 >= ACC_OPENCL_USM) || defined(ACC_OPENCL_MEM_SVM_USM)\n      result = clEnqueueSVMMemFill(str->queue, (char*)dev_mem + offset, &value, vsize, nbytes, 0, NULL, pevent);\n#    else\n      memset((char*)dev_mem + offset, value, nbytes);\n#    endif\n    }\n    else\n#  endif\n    {\n      const c_dbcsr_acc_opencl_info_memptr_t* const info = c_dbcsr_acc_opencl_info_devptr_modify(\n        NULL, dev_mem, 1 /*elsize*/, &nbytes, &base);\n      if (NULL != info) {\n        result = clEnqueueFillBuffer(str->queue, info->memory, &value, vsize, base + offset, nbytes, 0, NULL, pevent);\n        dev_mem = info->memptr;\n      }\n      else result = EXIT_FAILURE;\n    }\n    ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_memory);\n    if (NULL != event) {\n      int result_release;\n      if (EXIT_SUCCESS == result) result = clWaitForEvents(1, &event);\n      result_release = clReleaseEvent(event);\n      if (EXIT_SUCCESS == result) result = result_release;\n    }\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_memset_zero(void* dev_mem, size_t offset, size_t nbytes, void* stream) {\n  return c_dbcsr_acc_opencl_memset(dev_mem, 0 /*value*/, offset, nbytes, stream);\n}\n\n\nint 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) {\n  int result = EXIT_SUCCESS, unified = 0;\n  size_t size_free = 0, size_total = 0, size_local = 0;\n  cl_device_local_mem_type cl_local_type = CL_GLOBAL;\n  cl_ulong cl_size_total = 0, cl_size_local = 0;\n  cl_bool cl_unified = CL_FALSE;\n#  if !defined(_WIN32)\n#    if defined(_SC_PAGE_SIZE)\n  const long page_size = sysconf(_SC_PAGE_SIZE);\n#    else\n  const long page_size = 4096;\n#    endif\n  long pages_free = 0, pages_total = 0;\n#    if defined(__linux__)\n#      if defined(_SC_PHYS_PAGES)\n  pages_total = sysconf(_SC_PHYS_PAGES);\n#      else\n  pages_total = 0;\n#      endif\n#      if defined(_SC_AVPHYS_PAGES)\n  pages_free = sysconf(_SC_AVPHYS_PAGES);\n#      else\n  pages_free = pages_total;\n#      endif\n#    elif defined(__APPLE__) && defined(__MACH__)\n  /*const*/ size_t size_pages_free = sizeof(const long), size_pages_total = sizeof(const long);\n  ACC_OPENCL_EXPECT(0 == sysctlbyname(\"hw.memsize\", &pages_total, &size_pages_total, NULL, 0));\n  if (0 < page_size) pages_total /= page_size;\n  if (0 != sysctlbyname(\"vm.page_free_count\", &pages_free, &size_pages_free, NULL, 0)) {\n    pages_free = pages_total;\n  }\n#    endif\n  if (0 < page_size && 0 <= pages_free && 0 <= pages_total) {\n    const size_t size_page = (size_t)page_size;\n    size_total = size_page * (size_t)pages_total;\n    size_free = size_page * (size_t)pages_free;\n  }\n#  else\n  MEMORYSTATUSEX mem_status;\n  mem_status.dwLength = sizeof(mem_status);\n  if (GlobalMemoryStatusEx(&mem_status)) {\n    size_total = (size_t)mem_status.ullTotalPhys;\n    size_free = (size_t)mem_status.ullAvailPhys;\n  }\n#  endif\n  ACC_OPENCL_CHECK(result, clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), &cl_size_total, NULL),\n    \"retrieve amount of global memory\");\n  ACC_OPENCL_CHECK(result,\n    clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(cl_device_local_mem_type), &cl_local_type, NULL),\n    \"retrieve kind of local memory\");\n  if (CL_LOCAL == cl_local_type) {\n    ACC_OPENCL_CHECK(result, clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), &cl_size_local, NULL),\n      \"retrieve amount of local memory\");\n  }\n  ACC_OPENCL_CHECK(result, clGetDeviceInfo(device, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(cl_bool), &cl_unified, NULL),\n    \"retrieve if host memory is unified\");\n  if (EXIT_SUCCESS == result) {\n    if (cl_size_total < size_total) size_total = cl_size_total;\n    if (size_total < size_free) size_free = size_total;\n    size_local = cl_size_local;\n    unified = cl_unified;\n    assert(size_free <= size_total);\n  }\n  assert(NULL != mem_local || NULL != mem_total || NULL != mem_free || NULL != mem_unified);\n  if (NULL != mem_unified) *mem_unified = unified;\n  if (NULL != mem_local) *mem_local = size_local;\n  if (NULL != mem_total) *mem_total = size_total;\n  if (NULL != mem_free) *mem_free = size_free;\n  return result;\n}\n\n\nint c_dbcsr_acc_dev_mem_info(size_t* mem_free, size_t* mem_total) {\n  const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n  int result;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  result = c_dbcsr_acc_opencl_info_devmem(device_id, mem_free, mem_total, NULL /*mem_local*/, NULL /*mem_unified*/);\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n#  if defined(__cplusplus)\n}\n#  endif\n\n#endif /*__OPENCL*/\n"
  },
  {
    "path": "src/acc/opencl/acc_opencl_stream.c",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#if defined(__OPENCL)\n#  include \"acc_opencl.h\"\n#  include <string.h>\n\n\n#  if defined(__cplusplus)\nextern \"C\" {\n#  endif\n\n\nconst c_dbcsr_acc_opencl_stream_t* c_dbcsr_acc_opencl_stream(ACC_OPENCL_LOCKTYPE* lock, int thread_id) {\n  const c_dbcsr_acc_opencl_stream_t *result = NULL, *result_main = NULL;\n  const size_t n = ACC_OPENCL_MAXNITEMS * c_dbcsr_acc_opencl_config.nthreads;\n  size_t i;\n  assert(NULL != c_dbcsr_acc_opencl_config.streams);\n  assert(thread_id < c_dbcsr_acc_opencl_config.nthreads);\n  if (NULL != lock) ACC_OPENCL_ACQUIRE(lock);\n  for (i = c_dbcsr_acc_opencl_config.nstreams; i < n; ++i) {\n    const c_dbcsr_acc_opencl_stream_t* const str = c_dbcsr_acc_opencl_config.streams[i];\n    if (NULL != str && NULL != str->queue) {\n      if (str->tid == thread_id || 0 > thread_id) { /* hit */\n        result = str;\n        break;\n      }\n      else if (NULL == result_main && 0 == str->tid) {\n        result_main = str;\n      }\n    }\n    else break; /* error */\n  }\n  if (NULL == result) { /* fallback */\n    assert(NULL != c_dbcsr_acc_opencl_config.device.context);\n    result = (NULL != result_main ? result_main : &c_dbcsr_acc_opencl_config.device.stream);\n  }\n  if (NULL != lock) ACC_OPENCL_RELEASE(lock);\n  return result;\n}\n\n\nconst c_dbcsr_acc_opencl_stream_t* c_dbcsr_acc_opencl_stream_default(void) {\n  const c_dbcsr_acc_opencl_stream_t* result = NULL;\n  result = c_dbcsr_acc_opencl_stream(c_dbcsr_acc_opencl_config.lock_stream, ACC_OPENCL_OMP_TID());\n  assert(NULL != result);\n  return result;\n}\n\n\nint c_dbcsr_acc_stream_create(void** stream_p, const char* name, int priority) {\n  const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n  ACC_OPENCL_STREAM_PROPERTIES_TYPE properties[8] = {\n    CL_QUEUE_PROPERTIES, 0 /*placeholder*/, 0 /* terminator */\n  };\n  int result, tid = 0, offset = 0;\n  cl_command_queue queue = NULL;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert(NULL != stream_p);\n#  if !defined(ACC_OPENCL_STREAM_PRIORITIES)\n  LIBXSMM_UNUSED(priority);\n#  else\n  if (CL_QUEUE_PRIORITY_HIGH_KHR <= priority && CL_QUEUE_PRIORITY_LOW_KHR >= priority) {\n    properties[3] = priority;\n  }\n  else {\n    int least = -1, greatest = -1;\n    if (0 != (1 & c_dbcsr_acc_opencl_config.priority) && EXIT_SUCCESS == c_dbcsr_acc_stream_priority_range(&least, &greatest) &&\n        least != greatest)\n    {\n      properties[3] = (0 != (2 & c_dbcsr_acc_opencl_config.priority) &&\n                        (NULL != LIBXSMM_STRISTR(name, \"calc\") || (NULL != strstr(name, \"priority\"))))\n                        ? CL_QUEUE_PRIORITY_HIGH_KHR\n                        : CL_QUEUE_PRIORITY_MED_KHR;\n    }\n    else {\n      properties[3] = least;\n    }\n  }\n  if (CL_QUEUE_PRIORITY_HIGH_KHR <= properties[3] && CL_QUEUE_PRIORITY_LOW_KHR >= properties[3]) {\n    priority = properties[3]; /* sanitize */\n    properties[2] = CL_QUEUE_PRIORITY_KHR;\n    properties[4] = 0; /* terminator */\n  }\n#  endif\n  ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_stream);\n#  if defined(_OPENMP)\n  {\n    static int c_dbcsr_acc_opencl_stream_counter_base = 0;\n    static int c_dbcsr_acc_opencl_stream_counter = 0;\n    if (1 < omp_get_num_threads()) {\n      const int i = c_dbcsr_acc_opencl_stream_counter++;\n      assert(0 < c_dbcsr_acc_opencl_config.nthreads);\n      tid = (i < c_dbcsr_acc_opencl_config.nthreads ? i : (i % c_dbcsr_acc_opencl_config.nthreads));\n    }\n    else offset = c_dbcsr_acc_opencl_stream_counter_base++;\n  }\n#  endif\n  if (NULL == devinfo->context)\n#  if defined(ACC_OPENCL_ACTIVATE)\n  {\n    result = EXIT_FAILURE;\n  }\n  else\n#  else\n  {\n    result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, c_dbcsr_acc_opencl_config.device_id);\n  }\n  if (NULL != devinfo->context)\n#  endif\n  {\n    const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n    if (NULL != c_dbcsr_acc_opencl_config.hist_h2d || NULL != c_dbcsr_acc_opencl_config.hist_d2h ||\n        NULL != c_dbcsr_acc_opencl_config.hist_d2d)\n    {\n      properties[1] |= CL_QUEUE_PROFILING_ENABLE;\n    }\n#  if defined(ACC_OPENCL_XHINTS)\n    if ((2 & c_dbcsr_acc_opencl_config.xhints) && 0 != devinfo->intel) {\n      properties[1] |= (((ACC_OPENCL_STREAM_PROPERTIES_TYPE)1) << 31); /* CL_QUEUE_THREAD_LOCAL_EXEC_ENABLE_INTEL */\n    }\n    if ((4 & c_dbcsr_acc_opencl_config.xhints) && 0 != devinfo->intel) {\n      struct {\n        cl_command_queue_properties properties;\n        cl_bitfield capabilities;\n        cl_uint count;\n        char name[64 /*CL_QUEUE_FAMILY_MAX_NAME_SIZE_INTEL*/];\n      } intel_qfprops[16];\n      const int j = (0 /*terminator*/ == properties[2] ? 2 : 4);\n      size_t nbytes = 0, i;\n      if (EXIT_SUCCESS == clGetDeviceInfo(device_id, 0x418B /*CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL*/, sizeof(intel_qfprops),\n                            intel_qfprops, &nbytes))\n      { /* enable queue families */\n        for (i = 0; (i * sizeof(*intel_qfprops)) < nbytes; ++i) {\n          if (0 /*CL_QUEUE_DEFAULT_CAPABILITIES_INTEL*/ == intel_qfprops[i].capabilities && 1 < intel_qfprops[i].count) {\n            properties[j + 0] = 0x418C; /* CL_QUEUE_FAMILY_INTEL */\n            properties[j + 1] = (int)i;\n            properties[j + 2] = 0x418D; /* CL_QUEUE_INDEX_INTEL */\n            properties[j + 3] = (i + offset) % intel_qfprops[i].count;\n            properties[j + 4] = 0; /* terminator */\n            break;\n          }\n        }\n      }\n    }\n#  endif\n    queue = ACC_OPENCL_CREATE_COMMAND_QUEUE(devinfo->context, device_id, properties, &result);\n  }\n  if (EXIT_SUCCESS == result) { /* register stream */\n    assert(NULL != c_dbcsr_acc_opencl_config.streams && NULL != queue);\n    *stream_p = c_dbcsr_acc_opencl_pmalloc(\n      NULL /*lock*/, (void**)c_dbcsr_acc_opencl_config.streams, &c_dbcsr_acc_opencl_config.nstreams);\n    if (NULL != *stream_p) {\n      c_dbcsr_acc_opencl_stream_t* const str = (c_dbcsr_acc_opencl_stream_t*)*stream_p;\n#  if !defined(NDEBUG)\n      LIBXSMM_MEMZERO127(str);\n#  endif\n      str->queue = queue;\n      str->tid = tid;\n#  if defined(ACC_OPENCL_STREAM_PRIORITIES)\n      str->priority = priority;\n#  endif\n    }\n    else result = EXIT_FAILURE;\n  }\n  ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_stream);\n  if (EXIT_SUCCESS != result && NULL != queue) {\n    clReleaseCommandQueue(queue);\n    *stream_p = NULL;\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result, name);\n}\n\n\nint c_dbcsr_acc_stream_destroy(void* stream) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  if (NULL != stream) {\n    const c_dbcsr_acc_opencl_stream_t* const str = ACC_OPENCL_STREAM(stream);\n    const cl_command_queue queue = str->queue;\n    assert(NULL != c_dbcsr_acc_opencl_config.streams);\n    ACC_OPENCL_ACQUIRE(c_dbcsr_acc_opencl_config.lock_stream);\n    c_dbcsr_acc_opencl_pfree(stream, (void**)c_dbcsr_acc_opencl_config.streams, &c_dbcsr_acc_opencl_config.nstreams);\n    if (NULL != queue) {\n      result = clReleaseCommandQueue(queue);\n#  if !defined(NDEBUG)\n      LIBXSMM_MEMZERO127((c_dbcsr_acc_opencl_stream_t*)stream);\n#  endif\n    }\n    ACC_OPENCL_RELEASE(c_dbcsr_acc_opencl_config.lock_stream);\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_stream_priority_range(int* least, int* greatest) {\n  int result = ((NULL != least || NULL != greatest) ? EXIT_SUCCESS : EXIT_FAILURE);\n  int priohi = -1, priolo = -1;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  assert(least != greatest); /* no alias */\n#  if defined(ACC_OPENCL_STREAM_PRIORITIES)\n  if (0 < c_dbcsr_acc_opencl_config.ndevices) {\n    const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n    const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n    char buffer[ACC_OPENCL_BUFFERSIZE];\n    cl_platform_id platform = NULL;\n    assert(NULL != devinfo->context);\n    ACC_OPENCL_CHECK(result, clGetDeviceInfo(device_id, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL),\n      \"retrieve platform associated with active device\");\n    ACC_OPENCL_CHECK(result, clGetPlatformInfo(platform, CL_PLATFORM_EXTENSIONS, ACC_OPENCL_BUFFERSIZE, buffer, NULL),\n      \"retrieve platform extensions\");\n    if (EXIT_SUCCESS == result) {\n      if (NULL != strstr(buffer, \"cl_khr_priority_hints\") ||\n          EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(device_id, \"nvidia\", 0 /*use_platform_name*/))\n      {\n        priohi = CL_QUEUE_PRIORITY_HIGH_KHR;\n        priolo = CL_QUEUE_PRIORITY_LOW_KHR;\n      }\n    }\n  }\n#  endif\n  if (NULL != greatest) *greatest = priohi;\n  if (NULL != least) *least = priolo;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_stream_sync(void* stream) {\n  const c_dbcsr_acc_opencl_stream_t* str = NULL;\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    static const char* routine_name_ptr = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n    static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n    c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle);\n  }\n#  endif\n  str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream_default());\n  assert(NULL != str && NULL != str->queue);\n  if (0 == (16 & c_dbcsr_acc_opencl_config.wa)) result = clFinish(str->queue);\n  else {\n    cl_event event = NULL;\n#  if defined(CL_VERSION_1_2)\n    result = clEnqueueMarkerWithWaitList(str->queue, 0, NULL, &event);\n#  else\n    result = clEnqueueMarker(str->queue, &event);\n#  endif\n    if (EXIT_SUCCESS == result) {\n      assert(NULL != event);\n      result = clWaitForEvents(1, &event);\n    }\n    if (NULL != event) ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseEvent(event));\n  }\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_dbcsr_acc_opencl_device_synchronize(ACC_OPENCL_LOCKTYPE* lock, int thread_id) {\n  int result = EXIT_SUCCESS;\n  const size_t n = ACC_OPENCL_MAXNITEMS * c_dbcsr_acc_opencl_config.nthreads;\n  size_t i;\n  assert(thread_id < c_dbcsr_acc_opencl_config.nthreads);\n  assert(NULL != c_dbcsr_acc_opencl_config.streams);\n  if (NULL != lock) ACC_OPENCL_ACQUIRE(lock);\n  for (i = c_dbcsr_acc_opencl_config.nstreams; i < n; ++i) {\n    const c_dbcsr_acc_opencl_stream_t* const str = c_dbcsr_acc_opencl_config.streams[i];\n    if (NULL != str && NULL != str->queue) {\n      if (0 > thread_id || str->tid == thread_id) { /* hit */\n        result = clFinish(str->queue);\n        if (EXIT_SUCCESS != result) break;\n      }\n    }\n    else { /* error */\n      result = EXIT_FAILURE;\n      break;\n    }\n  }\n  if (NULL != lock) ACC_OPENCL_RELEASE(lock);\n  return result;\n}\n\n\nint c_dbcsr_acc_device_synchronize(void) {\n  int result = EXIT_SUCCESS;\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  int routine_handle;\n  if (0 != c_dbcsr_acc_opencl_config.profile) {\n    const char** routine_name_ptr;\n    const int* routine_name_len;\n#    if defined(_OPENMP)\n    if (1 == omp_get_num_threads()) {\n      static const char* routine_name_ptr_all = \"c_dbcsr_acc_device_synchronize_all\" + ACC_OPENCL_PROFILE_DBCSR;\n      static const int routine_name_len_all = (int)sizeof(\"c_dbcsr_acc_device_synchronize_all\") - (ACC_OPENCL_PROFILE_DBCSR + 1);\n      routine_name_ptr = (const char**)&routine_name_ptr_all;\n      routine_name_len = &routine_name_len_all;\n    }\n    else\n#    endif\n    {\n      static const char* routine_name_ptr_any = LIBXSMM_FUNCNAME + ACC_OPENCL_PROFILE_DBCSR;\n      static const int routine_name_len_any = (int)sizeof(LIBXSMM_FUNCNAME) - (ACC_OPENCL_PROFILE_DBCSR + 1);\n      routine_name_ptr = (const char**)&routine_name_ptr_any;\n      routine_name_len = &routine_name_len_any;\n    }\n    c_dbcsr_timeset(routine_name_ptr, routine_name_len, &routine_handle);\n  }\n#  endif\n#  if defined(_OPENMP)\n  if (1 == omp_get_num_threads()) {\n    result = c_dbcsr_acc_opencl_device_synchronize(c_dbcsr_acc_opencl_config.lock_stream, -1 /*all*/);\n  }\n  else {\n    result = c_dbcsr_acc_opencl_device_synchronize(NULL /*lock*/, omp_get_thread_num());\n  }\n#  else\n  result = c_dbcsr_acc_opencl_device_synchronize(NULL /*lock*/, /*main*/ 0);\n#  endif\n#  if defined(ACC_OPENCL_PROFILE_DBCSR)\n  if (0 != c_dbcsr_acc_opencl_config.profile) c_dbcsr_timestop(&routine_handle);\n#  endif\n  ACC_OPENCL_RETURN(result);\n}\n\n#  if defined(__cplusplus)\n}\n#  endif\n\n#endif /*__OPENCL*/\n"
  },
  {
    "path": "src/acc/opencl/common/opencl_atomics.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#ifndef OPENCL_ATOMICS_H\n#define OPENCL_ATOMICS_H\n\n#include \"opencl_common.h\"\n\n#if (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/)\n#  if !defined(T)\n#    define T double\n#  endif\n#  define ZERO 0.0\n#elif (1 == TAN /*c_dbcsr_acc_opencl_atomic_fp_32*/)\n#  if !defined(T)\n#    define T float\n#  endif\n#  define ZERO 0.f\n#elif defined(T) /*c_dbcsr_acc_opencl_atomic_fp_no*/\n#  define ZERO 0\n#endif\n\n#define GLOBAL_VOLATILE(A) global volatile A\n\n#if defined(ATOMIC_PROTOTYPES) || defined(__opencl_c_ext_fp64_global_atomic_add)\n#  if defined(__opencl_c_ext_fp64_global_atomic_add)\n#    undef ATOMIC_ADD_GLOBAL\n#    if defined(TF)\n#      define ATOMIC_ADD_GLOBAL(A, B) \\\n        atomic_fetch_add_explicit((GLOBAL_VOLATILE(TF)*)A, B, memory_order_relaxed, memory_scope_work_group)\n#    else\n#      define ATOMIC_ADD_GLOBAL(A, B) atomic_add(A, B)\n#    endif\n#  elif (2 < ATOMIC_PROTOTYPES) && defined(TF)\n#    undef ATOMIC_ADD_GLOBAL\n#    define ATOMIC_ADD_GLOBAL(A, B) \\\n      __opencl_atomic_fetch_add((GLOBAL_VOLATILE(TF)*)A, B, memory_order_relaxed, memory_scope_work_group)\n#  else\n#    if defined(TF) && (!defined(ATOMIC_PROTOTYPES) || 1 < ATOMIC_PROTOTYPES)\n__attribute__((overloadable)) T atomic_fetch_add_explicit(GLOBAL_VOLATILE(TF) *, T, memory_order, memory_scope);\n#    else\n__attribute__((overloadable)) T atomic_add(GLOBAL_VOLATILE(T) *, T);\n#    endif\n#  endif\n#endif\n\n#define ACCUMULATE(A, B) ATOMIC_ADD_GLOBAL(A, B)\n\n\n#if !defined(cl_intel_global_float_atomics) || (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/)\n#  if defined(ATOMIC32_ADD64)\n__attribute__((always_inline)) inline void atomic32_add64_global(GLOBAL_VOLATILE(double) * dst, double inc) {\n  *dst += inc; /* TODO */\n}\n#  endif\n#endif\n\n\n#if !defined(cl_intel_global_float_atomics) || (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/)\n#  if defined(CMPXCHG)\n__attribute__((always_inline)) inline void atomic_add_global_cmpxchg(GLOBAL_VOLATILE(T) * dst, T inc) {\n#    if !defined(ATOMIC32_ADD64)\n  union {\n    T f;\n    TA a;\n  } exp_val, try_val, cur_val = {.f = *dst};\n  do {\n    exp_val.a = cur_val.a;\n    try_val.f = exp_val.f + inc;\n#      if defined(TA2)\n    if (0 == atomic_compare_exchange_weak_explicit((GLOBAL_VOLATILE(TA2)*)dst, &cur_val.a, try_val.a, memory_order_relaxed,\n               memory_order_relaxed, memory_scope_work_group))\n      continue;\n#      else\n    cur_val.a = CMPXCHG((GLOBAL_VOLATILE(TA)*)dst, exp_val.a, try_val.a);\n#      endif\n  } while (cur_val.a != exp_val.a);\n#    else\n  atomic32_add64_global(dst, inc);\n#    endif\n}\n#  endif\n#endif\n\n\n#if !defined(cl_intel_global_float_atomics) || (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/)\n#  if defined(ATOMIC_ADD2_GLOBAL) && (1 == TAN /*c_dbcsr_acc_opencl_atomic_fp_32*/)\n__attribute__((always_inline)) inline void atomic_add_global_cmpxchg2(GLOBAL_VOLATILE(float) * dst, float2 inc) {\n  union {\n    float2 f;\n    long a;\n  } exp_val, try_val, cur_val = {.f = (float2)(dst[0], dst[1])};\n  do {\n    exp_val.a = cur_val.a;\n    try_val.f = exp_val.f + inc;\n#    if defined(TA2)\n    if (0 == atomic_compare_exchange_weak_explicit((GLOBAL_VOLATILE(atomic_long)*)dst, &cur_val.a, try_val.a, memory_order_relaxed,\n               memory_order_relaxed, memory_scope_work_group))\n      continue;\n#    else\n    cur_val.a = atom_cmpxchg((GLOBAL_VOLATILE(long)*)dst, exp_val.a, try_val.a);\n#    endif\n  } while (cur_val.a != exp_val.a);\n}\n#  endif\n#endif\n\n\n#if !defined(cl_intel_global_float_atomics) || (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/)\n#  if defined(XCHG) || (defined(__NV_CL_C_VERSION) && !defined(CMPXCHG) && !defined(ATOMIC_PROTOTYPES))\n__attribute__((always_inline)) inline void atomic_add_global_xchg(GLOBAL_VOLATILE(T) * dst, T inc) {\n#    if !defined(ATOMIC32_ADD64)\n#      if (defined(__NV_CL_C_VERSION) && !defined(XCHG)) && (1 == TAN /*c_dbcsr_acc_opencl_atomic_fp_32*/)\n  asm(\"{ .reg .f32 t; atom.global.add.f32 t, [%0], %1; }\" ::\"l\"(dst), \"f\"(inc));\n#      elif (defined(__NV_CL_C_VERSION) && !defined(XCHG)) && (2 == TAN /*c_dbcsr_acc_opencl_atomic_fp_64*/)\n  asm(\"{ .reg .f64 t; atom.global.add.f64 t, [%0], %1; }\" ::\"l\"(dst), \"d\"(inc));\n#      else\n  union {\n    T f;\n    TA a;\n  } exp_val = {.f = inc}, try_val, cur_val = {/*.f = ZERO*/ .a = 0};\n  do {\n#        if defined(TA2)\n    try_val.a = atomic_exchange_explicit((GLOBAL_VOLATILE(TA2)*)dst, cur_val.a, memory_order_relaxed, memory_scope_work_group);\n#        else\n    try_val.a = XCHG((GLOBAL_VOLATILE(TA)*)dst, cur_val.a);\n#        endif\n    try_val.f += exp_val.f;\n#        if defined(TA2)\n    exp_val.a = atomic_exchange_explicit((GLOBAL_VOLATILE(TA2)*)dst, try_val.a, memory_order_relaxed, memory_scope_work_group);\n#        else\n    exp_val.a = XCHG((GLOBAL_VOLATILE(TA)*)dst, try_val.a);\n#        endif\n  } while (cur_val.a != exp_val.a);\n#      endif\n#    else\n  atomic32_add64_global(dst, inc);\n#    endif\n}\n#  endif\n#endif\n\n#endif /*OPENCL_ATOMICS_H*/\n"
  },
  {
    "path": "src/acc/opencl/common/opencl_common.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#ifndef OPENCL_COMMON_H\n#define OPENCL_COMMON_H\n\n#if !defined(ACC_OPENCL_C_VERSION)\n#  define ACC_OPENCL_C_VERSION __OPENCL_C_VERSION__\n#endif\n#if !defined(ACC_OPENCL_VERSION)\n#  define ACC_OPENCL_VERSION __OPENCL_VERSION__\n#endif\n\n#if (200 /*CL_VERSION_2_0*/ <= ACC_OPENCL_C_VERSION) || defined(__NV_CL_C_VERSION)\n#  define UNROLL_FORCE(N) __attribute__((opencl_unroll_hint(N)))\n#  define UNROLL_AUTO __attribute__((opencl_unroll_hint))\n#else\n#  define UNROLL_FORCE(N)\n#  define UNROLL_AUTO\n#endif\n\n#if !defined(LU) || (-1 == LU)\n#  define UNROLL_OUTER(N)\n#  define UNROLL(N)\n#else /* (-2) full, (-1) no hints, (0) inner, (1) outer-dehint, (2) block-m */\n#  if (1 <= LU) /* outer-dehint */\n#    define UNROLL_OUTER(N) UNROLL_FORCE(1)\n#  elif (-1 > LU) /* full */\n#    define UNROLL_OUTER(N) UNROLL_FORCE(N)\n#  else /* inner */\n#    define UNROLL_OUTER(N)\n#  endif\n#  define UNROLL(N) UNROLL_FORCE(N)\n#endif\n\n#define BCST_NO(V, I) (V)\n#if defined(WG) && (0 < WG) && defined(GPU) && (200 <= ACC_OPENCL_VERSION)\n#  define BCST_WG(V, I) work_group_broadcast(V, I)\n#endif\n#if defined(SG) && (0 < SG) && defined(GPU) && (200 <= ACC_OPENCL_VERSION)\n#  define BCST_SG(V, I) sub_group_broadcast(V, I)\n#endif\n\n#if !defined(MIN)\n#  define MIN(A, B) ((A) < (B) ? (A) : (B))\n#endif\n#if !defined(MAX)\n#  define MAX(A, B) ((A) < (B) ? (B) : (A))\n#endif\n#if !defined(MAD)\n#  define MAD fma\n#endif\n\n#define DIVUP(A, B) (((A) + (B) - 1) / (B))\n#define NUP(N, UP) (DIVUP(N, UP) * (UP))\n#define BLR(N, BN) (NUP(N, BN) - (N))\n\n#define IDX(I, J, M, N) ((int)(I) * (N) + (J))\n#define IDT(I, J, M, N) IDX(J, I, N, M)\n\n#endif /*OPENCL_COMMON_H*/\n"
  },
  {
    "path": "src/acc/opencl/smm/.gitignore",
    "content": "opencl_kernels.h\n.with_gpu\n"
  },
  {
    "path": "src/acc/opencl/smm/CMakeLists.txt",
    "content": "set(DBCSR_OPENCL_PARAMS_WITHGPU\n    ${CMAKE_CURRENT_SOURCE_DIR}/params/tune_multiply_${WITH_GPU}.csv)\nset(DBCSR_OPENCL_PARAMS_CUSTOM ${CMAKE_CURRENT_SOURCE_DIR}/tune_multiply.csv)\n\nif (EXISTS ${DBCSR_OPENCL_PARAMS_WITHGPU})\n  set(DBCSR_OPENCL_SCRIPT_MSG\n      \"ACC/LIBSMM OpenCL: using parameters for ${WITH_GPU}\")\n  set(DBCSR_OPENCL_PARAMS ${DBCSR_OPENCL_PARAMS_WITHGPU})\nelseif (WITH_GPU MATCHES \"none\")\n  set(DBCSR_OPENCL_SCRIPT_MSG \"ACC/LIBSMM OpenCL: no tuned parameters used\")\n  set(DBCSR_OPENCL_SCRIPT_ARGS -p \\\"\\\")\nelseif (EXISTS ${DBCSR_OPENCL_PARAMS_CUSTOM})\n  set(DBCSR_OPENCL_SCRIPT_MSG \"ACC/LIBSMM OpenCL: using custom parameters\")\n  set(DBCSR_OPENCL_PARAMS ${DBCSR_OPENCL_PARAMS_CUSTOM})\nelse ()\n  set(DBCSR_OPENCL_SCRIPT_MSG \"ACC/LIBSMM OpenCL: using all tuned parameters\")\nendif ()\nmessage(STATUS ${DBCSR_OPENCL_SCRIPT_MSG})\n\nset(DBCSR_OPENCL_KERNELS kernels/multiply.cl kernels/transpose.cl)\nlist(TRANSFORM DBCSR_OPENCL_KERNELS PREPEND ${CMAKE_CURRENT_SOURCE_DIR}/)\n\nlist(APPEND DBCSR_OPENCL_DEPENDS ${DBCSR_ACC_HEADER} ${DBCSR_OPENCL_COMMON})\nlist(TRANSFORM DBCSR_OPENCL_DEPENDS PREPEND ${DBCSR_SOURCE_DIR}/)\n\nset(DBCSR_OPENCL_KHEADER opencl_kernels.h)\n\nadd_custom_command(\n  COMMAND\n    ${DBCSR_OPENCL_SCRIPT} ${DBCSR_OPENCL_SCRIPT_ARGS} ${DBCSR_OPENCL_KERNELS}\n    ${DBCSR_OPENCL_PARAMS} ${CMAKE_CURRENT_SOURCE_DIR}/${DBCSR_OPENCL_KHEADER}\n  DEPENDS ${DBCSR_OPENCL_DEPENDS} ${DBCSR_OPENCL_KERNELS} ${DBCSR_OPENCL_SCRIPT}\n          ${DBCSR_OPENCL_PARAMS}\n  OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${DBCSR_OPENCL_KHEADER}\n  COMMENT ${DBCSR_OPENCL_SCRIPT_MSG})\n\nadd_custom_target(${DBCSR_OPENCL_KHEADER}\n                  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${DBCSR_OPENCL_KHEADER})\nadd_dependencies(dbcsr ${DBCSR_OPENCL_KHEADER})\n\ntarget_include_directories(dbcsr PRIVATE ${CMAKE_CURRENT_BINARY_DIR}\n                                         ${CMAKE_CURRENT_SOURCE_DIR})\n"
  },
  {
    "path": "src/acc/opencl/smm/PACKAGE",
    "content": "{\n\"description\": \"OpenCL-accelerated library for small matrix multiplications\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"..\", \"../..\"]\n}\n"
  },
  {
    "path": "src/acc/opencl/smm/README-autotune.md",
    "content": "# Auto Tuning\n\nAuto 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.\n\nFor 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.\n\n**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.\n\nTo 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.\n\nTo build the benchmarks in double precision (`ELEM_TYPE=double` is default):\n\n```bash\ncd src/acc/opencl\nmake\n```\n\nTo build the benchmarks in single precision (SP):\n\n```bash\ncd src/acc/opencl\nmake ELEM_TYPE=float\n```\n\nTo auto-tune, please install the Python `wheel` and `opentuner` packages:\n\n```bash\ncd src/acc/opencl/smm\npip install -r requirements.txt\n```\n\nThe 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`:\n\n```bash\n./tune_multiply.py 13x5x7\n```\n\n**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).\n\nThe 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):\n\n```text\n[    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\n[    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\n[    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\n[    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\n[    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\n```\n\nThe 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.\n\n**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).\n"
  },
  {
    "path": "src/acc/opencl/smm/README-bulktune.md",
    "content": "# Optimized Kernels\n\nOptimized 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`).\n\nCollected 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).\n\nDifferent 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).\n\n```bash\ncd src/acc/opencl\nmake realclean\nmake\n```\n\nThis way auto-tuned kernels just work and can be of course exercised using the afore mentioned benchmark:\n\n```bash\ncd src/acc\n./acc_bench 5 30000 13 5 7\n```\n\nTuned parameters can be also disabled at runtime like:\n\n```bash\ncd src/acc\nOPENCL_LIBSMM_SMM_PARAMS=0 ./acc_bench 5 30000 13 5 7\n```\n\nBy 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:\n\n```bash\ncd src/acc\nOPENCL_LIBSMM_SMM_PARAMS=opencl/smm/tune_multiply.csv ./acc_bench 5 30000 13 5 7\n```\n\nTo 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.\n\nTriplets 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:\n\n```text\n4 10 15, 6 7 8, 23\n```\n\nThis 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).\n\n```bash\ncd src/acc/opencl/smm\n./tune_multiply.sh -t 300  -j 8 -i 1  4 10 15, 6 7 8, 23\n```\n\nThe 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`).\n\nFor 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).\n\n```bash\ncd src/acc/opencl\nmake realclean\necho \"Rebuild and embed smm/params/tune_multiply_P100.csv\"\nmake WITH_GPU=P100\n\necho \"Retune original parameters\"\nsmm/tune_multiply.sh -p smm/params/p100 -u\n\necho \"Override original parameters\"\ncp tune_multiply.csv smm/params/tune_multiply_P100.csv\n```\n\nTuning 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.\n\n# Advanced Tuning\n\nTo 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).\n\nFor 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.\n\n```bash\nMAXTIME=200 NPARTS=8 UPDATE=1 JSONDIR=params/pvc mpirun \\\n  ./tune_multiply.sh -i 1 : \\\n  ./tune_multiply.sh -i 2 : \\\n  ./tune_multiply.sh -i 3 : \\\n  ./tune_multiply.sh -i 4 : \\\n  ./tune_multiply.sh -i 5 : \\\n  ./tune_multiply.sh -i 6 : \\\n  ./tune_multiply.sh -i 7 : \\\n  ./tune_multiply.sh -i 8 \\\n>out.log 2>&1\n```\n\n**NOTE**: The above shown example prefers environment variables over command-line options that would be common to the eight launches of `tune_multiply.sh`.\n"
  },
  {
    "path": "src/acc/opencl/smm/README.md",
    "content": "# LIBSMM\n\nThe 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).\n\nCompile-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\".\n\nThere 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:\n\n* `OPENCL_LIBSMM_TRANS_BUILDOPTS`: character string with build options (compile and link) supplied to the OpenCL runtime compiler.\n* `OPENCL_LIBSMM_TRANS_INPLACE`: Boolean value (zero or non-zero integer) for in-place matrix transpose (no local memory needed).\n* `OPENCL_LIBSMM_TRANS_BM`: non-negative integer number (less/equal than the M-extent) denoting the blocksize in M-direction.\n\nThe most common settings for multiplying matrices are:\n\n* `OPENCL_LIBSMM_SMM_BUILDOPTS`: character string with build options (compile and link) supplied to the OpenCL runtime compiler.\n* `OPENCL_LIBSMM_SMM_PARAMS`: Disable embedded/auto-tuned parameters (`0`), or load CSV-file (e.g., `path/to/tune_multiply.csv`).\n* `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.\n* `OPENCL_LIBSMM_SMM_BM`: non-negative integer number (less/equal than the M-extent) denoting the blocksize in M-direction.\n* `OPENCL_LIBSMM_SMM_BN`: non-negative integer number (less/equal than the N-extent) denoting the blocksize in N-direction.\n* `OPENCL_LIBSMM_SMM_AP`: specifies access to array of parameters (batch or \"stack\").\n* `OPENCL_LIBSMM_SMM_AA`: specifies access to array of A-matrices.\n* `OPENCL_LIBSMM_SMM_AB`: specifies access to array of B-matrices.\n* `OPENCL_LIBSMM_SMM_AC`: specifies access to array of C-matrices.\n\nThe 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.\n\n**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`.\n\n# Auto Tuning\n\nTo 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.\n"
  },
  {
    "path": "src/acc/opencl/smm/kernels/multiply.cl",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#include \"../../common/opencl_atomics.h\"\n\n#if !defined(AL) || (SM != SN) || (SM != BM) || (SN != SK) || (1 == BS)\n#  define ADX(M, K) adata[IDT(M, K, SM, SK) + a0] /* transposed */\n#  define BDX(K, N) bdata[IDX(K, N, SK, SN) + b0] /* linear */\n#  define CDX(M, N) cdata[IDT(M, N, SM, SN) + c0] /* transposed */\n#else\n#  define ADX(M, K) adata[IDX(M, K, SM, SK) + a0] /* linear */\n#  define BDX(K, N) bdata[IDT(K, N, SK, SN) + b0] /* transposed */\n#  define CDX(M, N) cdata[IDX(M, N, SM, SN) + c0] /* linear */\n#endif\n\n#if defined(SLM_A)\n#  if (1 != BK || BM < SM || 1 != BN)\n#    define AMK(M, K) amk[M][K]\n#  else\n#    define AMK(M, K) amk[M]\n#  endif\n#elif defined(REG_A)\n#  if (1 != BK)\n#    define AMK(M, K) amk[K]\n#  else\n#    define AMK(M, K) amk[M]\n#  endif\n#else\n#  define AMK(M, K) ADX(M, K)\n#endif\n#if defined(SLM_B)\n#  define BNK(N, K) bnk[N][K]\n#elif defined(REG_B)\n#  if (BM < SM && 1 != BN)\n#    define BNK(N, K) bnk[N][K]\n#  else\n#    define BNK(N, K) bnk[K]\n#  endif\n#else\n#  define BNK(N, K) BDX(K, N)\n#endif\n#if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN))\n#  define CNM(N, M) cnm[N][M]\n#else\n#  define CNM(N, M) cnm[M]\n#endif\n\n#if !defined(SINT) /* covers matrix shape */\n#  define SINT signed char\n#endif\n#if !defined(REPEAT)\n#  define REPEAT 1\n#endif\n\n#define NBM DIVUP(SM, BM)\n#define NBN DIVUP(SN, BN)\n#define WRK (NBM * NBN)\n\n#define UM (SM / BK)\n#define VM (SM % UM)\n\n\n__attribute__((reqd_work_group_size(WG, 1, 1)))\n#if (0 < SG)\n__attribute__((intel_reqd_sub_group_size(SG)))\n#endif\nkernel void\nFN(global T* restrict cdata, CONSTANT const T* restrict adata, CONSTANT const T* restrict bdata,\n  CONSTANT const int* restrict param_stack,\n#if (1 < BS)\n  int param_format, int stack_size, int bs) {\n  const int gid = get_group_id(0), idx = get_local_id(0);\n#else\n  int param_format) {\n  const int gid = get_group_id(0), idx = get_local_id(0), bs = 1;\n#endif\n  const SINT pzero = (0 == param_format ? 1 : 0), pnext = (0 == param_format ? 3 : 6);\n  /* param_stack/indexes can be one-based (Fortran) depending on param_format */\n  CONSTANT const int* restrict param_base = param_stack + gid * (pnext * bs) + (0 == param_format ? 0 : 3);\n#if defined(SLM_P) && (1 < BS)\n  local int params[3 * BS]; /* bs <= BS */\n#else\n  CONSTANT const int* restrict params = param_base;\n#endif\n#if defined(SLM_A)\n#  if (1 != BK || BM < SM || 1 != BN)\n  local T amk[SM][SK + SLM_A - 1];\n#  else\n  local T amk[SM];\n#  endif\n#elif defined(REG_A) && (1 != BK)\n  T amk[SK];\n#endif\n#if defined(SLM_B)\n  local T bnk[SN][SK + SLM_B - 1]; /* tile */\n#endif\n#if (BM < SM || 1 != BN)\n#  if defined(REG_A) && !defined(SLM_A) && (1 == BK)\n  T amk[BM];\n#  endif\n#  if defined(REG_B) && !defined(SLM_B)\n#    if (1 != BN)\n  T bnk[BN][SK]; /* rows */\n#    else\n  T bnk[SK]; /* row */\n#    endif\n#  endif\n#  if !defined(SLM_C) && (1 < BS)\n#    if (1 != BN)\n  T cnm[BN][BM]; /* general tile */\n#    else\n  T cnm[BM]; /* column-block */\n#    endif\n#  endif\n  const int m0 = (idx / NBN) * BM, n0 = (idx % NBN) * BN;\n#else\n#  if defined(REG_A) && !defined(SLM_A) && (1 == BK)\n  T amk[SM];\n#  endif\n#  if defined(REG_B) && !defined(SLM_B)\n  T bnk[SK]; /* row */\n#  endif\n#  if !defined(SLM_C) && (1 < BS)\n  T cnm[SM]; /* column */\n#  endif\n#endif\n#if defined(TRACK_B) && (1 < BS) && defined(REG_B) && !defined(SLM_B)\n  int b1 = -1;\n#endif\n\n#if (1 < BS)\n  /* intra-kernel mini-batch of SMMs */\n  const int batchsize = min(bs, stack_size - bs * gid);\n  int c0;\n#  if defined(SLM_C)\n  local T cnm[SN][SM + SLM_C - 1]; /* tile in SLM */\n  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; }\n#  elif (BM < SM || 1 != BN)\n#    if (1 != BN)\n  UNROLL(BN)\n  for (SINT bn = 0; bn < BN; ++bn)\n#    endif\n  {\n    UNROLL_FORCE(BM) for (SINT bm = 0; bm < BM; ++bm) CNM(bn, bm) = ZERO;\n  }\n#  else\n  UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) cnm[m] = ZERO;\n#  endif\n#  if defined(SLM_P)\n  UNROLL_AUTO for (int i = idx; i < batchsize; i += WG) {\n    UNROLL_FORCE(3) for (int j = 0; j < 3; ++j) { params[3 * i + j] = param_base[pnext * i + j] - pzero; }\n  }\n#  endif\n#  if defined(BARRIER) && (MAX(1, SG) < WG) && (defined(SLM_C) || defined(SLM_P))\n  BARRIER(CLK_LOCAL_MEM_FENCE);\n#  endif\n#  if (WRK < WG)\n  if (WRK <= idx) return; /* WRK <= idx */\n#  endif\n#  if defined(SLM_P)\n  c0 = params[2];\n#  else\n  c0 = params[2] - pzero;\n#  endif\n#  if defined(BSC) && (1 != BK) && (1 != UM)\n  UNROLL_OUTER(REPEAT * BS)\n#  else\n  UNROLL_FORCE(1)\n#  endif\n#  if (1 < REPEAT)\n  for (int item = 0; item < (REPEAT * batchsize); ++item) {\n    const int i = item % batchsize;\n#  else\n  for (int item = 0; item < (REPEAT * batchsize); ++item) {\n    const int i = item;\n#  endif\n#  if defined(SLM_P)\n    const int idxstride = 3, idxbase = 0;\n#  else\n    const int idxstride = pnext, idxbase = pzero;\n#  endif\n    const int a0 = params[idxstride * i] - idxbase, b0 = params[idxstride * i + 1] - idxbase;\n    const int c1 = ((i + 1) < batchsize ? (params[idxstride * i + idxstride + 2] - idxbase) : -1);\n#else\n#  if (WRK < WG)\n  if (WRK > idx) /* WRK > idx */\n#  endif\n  {\n    const int a0 = params[0] - pzero, b0 = params[1] - pzero, c0 = params[2] - pzero;\n#endif\n\n#if defined(SLM_A) && (1 != BK || BM < SM || 1 != BN)\n    { /* copy or transpose A-matrix into SLM */\n      int m = idx;\n#  if (WRK != SM)\n      UNROLL_AUTO for (; m < SM; m += WRK)\n#  endif\n      {\n        UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[m][k] = ADX(m, k);\n      }\n    }\n#endif\n\n#if defined(SLM_B)\n    { /* copy or transpose B-matrix into SLM */\n      int n = idx;\n#  if (WRK != SN)\n      UNROLL_AUTO for (; n < SN; n += WRK)\n#  endif\n      {\n        UNROLL(SK) for (SINT k = 0; k < SK; ++k) bnk[n][k] = BDX(k, n);\n      }\n    }\n#elif defined(REG_B)\n#  if defined(TRACK_B) && (1 < BS)\n    if (b0 != b1) {\n      b1 = b0;\n#  else\n    { /* copy or transpose B-matrix into registers */\n#  endif\n      UNROLL(SK) for (SINT k = 0; k < SK; ++k) {\n#  if (BM < SM || 1 != BN)\n        SINT bn = 0;\n#    if (1 != BN)\n        UNROLL_FORCE(BN)\n        for (; bn < BN; ++bn)\n#    endif\n        {\n#    if (SN % BN)\n          const int n = min(bn + n0, SN - 1);\n#    else\n          const int n = bn + n0;\n#    endif\n          BNK(bn, k) = BDX(k, n);\n        }\n#  else\n        bnk[k] = BDX(k, idx);\n#  endif\n      }\n    }\n#endif\n\n#if defined(BARRIER) && (MAX(1, SG) < WG) && (defined(SLM_B) || ((1 != BK || BM < SM || 1 != BN) && defined(SLM_A)))\n    /* finish transpose/copy */\n    BARRIER(CLK_LOCAL_MEM_FENCE);\n#endif\n\n#if (BM < SM || 1 != BN)\n    { /* calculate result-tile using general tiles */\n#  if defined(REG_A) && !defined(SLM_A) && (1 != BK)\n#    if (1 == BS)\n      T cnm[BN]; /* row */\n      UNROLL_FORCE(BN) for (SINT n = 0; n < BN; ++n) cnm[n] = ZERO;\n#    endif\n#    if (SM % BM)\n      UNROLL(BM)\n      for (SINT bm = 0, m = m0; bm < BM && m < SM; m = ++bm + m0)\n#    else\n      UNROLL(BM)\n      for (SINT bm = 0, m = m0; bm < BM; m = ++bm + m0)\n#    endif\n      { /* general BK, A in registers */\n        SINT bn = 0;\n        UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[k] = ADX(m, k);\n#    if (1 != BN)\n        UNROLL(BN)\n        for (; bn < BN; ++bn)\n#    endif\n        {\n#    if (SN % BN) || (defined(SLM_C) && (1 < BS)) || !defined(REG_B)\n          const int n = bn + n0;\n#    endif\n#    if (SN % BN)\n          if (n < SN) /* n < SN */\n#    endif\n          {\n#    if defined(SLM_C) && (1 < BS)\n            const int mc = m, nc = n;\n#    elif (1 < BS)\n            const int mc = bm, nc = bn;\n#    else\n            const int mc = bn, nc = idx;\n#    endif\n            UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) {\n              CNM(nc, mc) = MAD(AMK(m, k),\n#    if defined(REG_B)\n                BNK(bn, k),\n#    else\n                BNK(n, k),\n#    endif\n                CNM(nc, mc));\n            }\n          }\n        }\n#    if (1 == BS)\n        bn = 0;\n#      if (1 != BN)\n        UNROLL(BN)\n        for (; bn < BN; ++bn)\n#      endif\n        {\n#      if defined(ATOMIC_INC_NZ)\n          if (ZERO != CNM(idx, bn))\n#      endif\n          {\n            ACCUMULATE(&CDX(m, bn + n0), CNM(idx, bn));\n            CNM(idx, bn) = ZERO; /* reset */\n          }\n        }\n#    endif\n      }\n#  elif (1 == BK)\n#    if (1 == BS)\n      T cnm[BM]; /* column-block */\n      UNROLL_FORCE(BM) for (SINT m = 0; m < BM; ++m) cnm[m] = ZERO;\n#    endif\n      UNROLL(SK) for (SINT k = 0; k < SK; ++k) {\n#    if (SN % BN) || !defined(REG_B) || (defined(SLM_C) && (1 < BS)) || (1 == BS) || (1 != BN)\n        SINT bn = 0;\n#    endif\n#    if defined(REG_A) && !defined(SLM_A)\n        UNROLL_FORCE(BM) for (SINT bm = 0; bm < BM; ++bm) amk[bm] = ADX(bm + m0, k);\n#    endif\n#    if (1 != BN)\n        UNROLL(BN)\n        for (; bn < BN; ++bn)\n#    endif\n        { /* BK=1 */\n#    if (SN % BN) || !defined(REG_B) || (defined(SLM_C) && (1 < BS)) || (1 == BS)\n          const int n = bn + n0;\n#    endif\n#    if (SN % BN)\n          if (n < SN) /* n < SN */\n#    endif\n          {\n#    if defined(REG_B)\n            const T b = BNK(bn, k);\n#    else\n            const T b = BNK(n, k);\n#    endif\n#    if (SM % BM)\n            UNROLL(BM)\n            for (SINT bm = 0, m = m0; bm < BM && m < SM; m = ++bm + m0)\n#    else\n            UNROLL_FORCE(BM)\n            for (SINT bm = 0, m = m0; bm < BM; m = ++bm + m0)\n#    endif\n            {\n#    if defined(REG_A) && !defined(SLM_A)\n              const T a = AMK(bm, k);\n#    else\n              const T a = AMK(m, k);\n#    endif\n#    if defined(SLM_C) && (1 < BS)\n              CNM(n, m) = MAD(a, b, CNM(n, m));\n#    else\n              CNM(bn, bm) = MAD(a, b, CNM(bn, bm));\n#    endif\n            }\n#    if (1 == BS)\n            UNROLL(BM) for (SINT bm = 0; bm < BM; ++bm) {\n#      if defined(ATOMIC_INC_NZ)\n              if (ZERO != CNM(idx, bm))\n#      endif\n              {\n                ACCUMULATE(&CDX(bm + m0, n), CNM(idx, bm));\n                CNM(idx, bm) = ZERO; /* reset */\n              }\n            }\n#    endif\n          }\n        }\n      }\n#  else /* general BK */\n    SINT bn = 0;\n#    if (1 != BN)\n    UNROLL(BN)\n    for (; bn < BN; ++bn)\n#    endif\n    {\n#    if (SN % BN) || !defined(REG_B) || (defined(SLM_C) && (1 < BS)) || (1 == BS)\n      const int n = bn + n0;\n#    endif\n#    if (SN % BN)\n      if (n < SN) /* n < SN */\n#    endif\n      { /* general BK */\n#    if (1 == BS)\n        T cnm[BM]; /* column-block */\n        UNROLL_FORCE(BM) for (SINT m = 0; m < BM; ++m) cnm[m] = ZERO;\n#    endif\n#    if (SM % BM)\n        UNROLL(BM)\n        for (SINT bm = 0, m = m0; bm < BM && m < SM; m = ++bm + m0)\n#    else\n        UNROLL(BM)\n        for (SINT bm = 0, m = m0; bm < BM; m = ++bm + m0)\n#    endif\n        {\n#    if defined(SLM_C) && (1 < BS)\n#      if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN))\n          const int mc = m, nc = n;\n#      else\n          const int mc = m;\n#      endif\n#    else\n#      if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN))\n          const int mc = bm, nc = bn;\n#      else\n          const int mc = bm;\n#      endif\n#    endif\n#    if defined(REG_B)\n          const int nb = bn;\n#    else\n          const int nb = n;\n#    endif\n          UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) CNM(nc, mc) = MAD(AMK(m, k), BNK(nb, k), CNM(nc, mc));\n        }\n#    if (1 == BS)\n        UNROLL(BM) for (SINT bm = 0; bm < BM; ++bm) {\n#      if defined(ATOMIC_INC_NZ)\n          if (ZERO != CNM(idx, bm))\n#      endif\n          {\n            ACCUMULATE(&CDX(bm + m0, n), CNM(idx, bm));\n            CNM(idx, bm) = ZERO; /* reset */\n          }\n        }\n#    endif\n      }\n    }\n#  endif\n    }\n#else /* BM == SM && 1 == BN */\n    { /* calculate result-tile using columns */\n#  if (1 == BS)\n      T cnm[UM]; /* column-block */\n      UNROLL_FORCE(UM) for (SINT m = 0; m < UM; ++m) cnm[m] = ZERO;\n#  endif\n#  if (1 == BK)\n      UNROLL_OUTER(SK) for (SINT k = 0; k < SK; ++k) {\n        const T b = BNK(idx, k);\n#    if defined(SLM_A)\n#      if (WRK != SM)\n        UNROLL_AUTO for (SINT m = (SINT)idx; m < SM; m += WRK) amk[m] = ADX(m, k);\n#      else\n        amk[idx] = ADX(idx, k);\n#      endif\n#    elif defined(REG_A)\n        UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) amk[m] = ADX(m, k);\n#    endif\n#    if defined(BARRIER) && (MAX(1, SG) < WG) && defined(SLM_A)\n        BARRIER(CLK_LOCAL_MEM_FENCE);\n#    endif\n#    if defined(ACC_OPENCL_VERSION) && (200 /*2.0*/ <= ACC_OPENCL_VERSION) && (!defined(GPU) || (0 != GPU)) && !defined(SLM_A) && \\\n      !defined(REG_A) && (WRK == SM) && (SM <= SG || SM <= WG) /* use ACC_OPENCL_VERSION rather than ACC_OPENCL_C_VERSION */\n        const T a = AMK(idx, k);\n        UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) {\n#      if (SM <= SG)\n          CNM(idx, m) = MAD(sub_group_broadcast(a, m), b, CNM(idx, m)); /* size of subgroup is sufficient */\n#      else\n          CNM(idx, m) = MAD(work_group_broadcast(a, m), b, CNM(idx, m)); /* size of workgroup is sufficient */\n#      endif\n        }\n#    else\n        UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) CNM(idx, m) = MAD(AMK(m, k), b, CNM(idx, m)); /* fallback */\n#    endif\n#    if defined(BARRIER) && (MAX(1, SG) < WG) && defined(SLM_A)\n        BARRIER(CLK_LOCAL_MEM_FENCE);\n#    endif\n      }\n#    if (1 == BS)\n      UNROLL(SM) for (SINT m = 0; m < SM; ++m) {\n#      if defined(ATOMIC_INC_NZ)\n        if (ZERO != CNM(idx, m))\n#      endif\n        {\n          ACCUMULATE(&CDX(m, idx), CNM(idx, m));\n          CNM(idx, m) = ZERO; /* reset */\n        }\n      }\n#    endif\n#  else\n      SINT m = 0, u;\n#    if (1 == UM)\n      UNROLL_OUTER(SM)\n#    else\n      UNROLL_AUTO\n#    endif\n      for (; m < (SM - UM + 1); m += UM) {\n        u = 0;\n#    if (1 < UM)\n        UNROLL(UM)\n        for (; u < UM; ++u)\n#    endif\n        {\n          const int um = u + m;\n#    if (1 < BS)\n          const int vm = um;\n#    else\n          const int vm = u;\n#    endif\n#    if defined(REG_A) && !defined(SLM_A)\n          UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[k] = ADX(um, k);\n#    endif\n          UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) { CNM(idx, vm) = MAD(AMK(um, k), BNK(idx, k), CNM(idx, vm)); }\n        }\n#    if (1 == BS)\n        u = 0;\n#      if (1 < UM)\n        UNROLL(UM)\n        for (; u < UM; ++u)\n#      endif\n#      if defined(ATOMIC_INC_NZ)\n          if (ZERO != CNM(idx, u))\n#      endif\n          {\n            ACCUMULATE(&CDX(u + m, idx), CNM(idx, u));\n            CNM(idx, u) = ZERO; /* reset */\n          }\n#    endif\n      }\n#    if (0 < VM)\n      /* calculate remainder */\n      u = 0;\n#      if (1 < VM)\n      UNROLL(VM)\n      for (; u < VM; ++u)\n#      endif\n      {\n        const int um = u + m;\n#      if (1 < BS)\n        const int vm = um;\n#      else\n        const int vm = u;\n#      endif\n#      if defined(REG_A) && !defined(SLM_A)\n        UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[k] = ADX(um, k);\n#      endif\n        UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) { CNM(idx, vm) = MAD(AMK(um, k), BNK(idx, k), CNM(idx, vm)); }\n      }\n#      if (1 == BS)\n      u = 0;\n#        if (1 < VM)\n      UNROLL(VM)\n      for (; u < VM; ++u)\n#        endif\n#        if defined(ATOMIC_INC_NZ)\n        if (ZERO != CNM(idx, u))\n#        endif\n        {\n          ACCUMULATE(&CDX(u + m, idx), CNM(idx, u));\n          CNM(idx, u) = ZERO; /* reset */\n        }\n#      endif\n#    endif\n#  endif\n    }\n#endif\n\n#if (1 < BS)\n#  if defined(TRACK_C)\n    if (c0 != c1)\n#  endif\n#  if (BM < SM || 1 != BN)\n    { /* atomically commit C-tile to global memory */\n      SINT bn = 0;\n#    if (1 != BN)\n      UNROLL(BN)\n      for (; bn < BN; ++bn)\n#    endif\n      {\n        const int n = bn + n0;\n#    if (SN % BN)\n        if (n < SN) /* n < SN */\n#    endif\n        {\n#    if (SM % BM)\n          UNROLL(BM)\n          for (SINT bm = 0, m = m0; bm < BM && m < SM; m = ++bm + m0)\n#    else\n          UNROLL_FORCE(BM)\n          for (SINT bm = 0, m = m0; bm < BM; m = ++bm + m0)\n#    endif\n          {\n#    if defined(SLM_C)\n#      if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN))\n            const int mc = m, nc = n;\n#      else\n            const int mc = m;\n#      endif\n#    else\n#      if (1 < BS) && (defined(SLM_C) || (BM < SM && 1 != BN))\n            const int mc = bm, nc = bn;\n#      else\n            const int mc = bm;\n#      endif\n#    endif\n#    if defined(ATOMIC_INC_NZ)\n            if (ZERO != CNM(nc, mc))\n#    endif\n            {\n              ACCUMULATE(&CDX(m, n), CNM(nc, mc));\n              CNM(nc, mc) = ZERO; /* reset */\n            }\n          }\n        }\n      }\n#  else\n    { /* atomically commit C-column to global memory */\n      SINT m = 0;\n#    if defined(ATOMIC_ADD2_GLOBAL)\n      UNROLL_AUTO for (; m < (SM - 1); m += 2) {\n#      if defined(ATOMIC_INC_NZ)\n        if (ZERO != CNM(idx, m) && ZERO != CNM(idx, m + 1))\n#      endif\n        {\n          const float2 r2 = (float2)(CNM(idx, m), CNM(idx, m + 1));\n          ATOMIC_ADD2_GLOBAL(&CDX(m, idx), r2);\n          CNM(idx, m) = CNM(idx, m + 1) = ZERO; /* reset */\n        }\n      }\n#    else\n      UNROLL(SM)\n#    endif\n#    if !defined(ATOMIC_ADD2_GLOBAL) || (SM & 1)\n      for (; m < SM; ++m) {\n#      if defined(ATOMIC_INC_NZ)\n        if (ZERO != CNM(idx, m))\n#      endif\n        {\n          ACCUMULATE(&CDX(m, idx), CNM(idx, m));\n          CNM(idx, m) = ZERO; /* reset */\n        }\n      }\n#    endif\n#  endif\n      /* next iteration */\n      c0 = c1;\n    }\n#endif\n#if defined(BARRIER) && (MAX(1, SG) < WG) && defined(SLM_A) && (BM <= SM || 1 != BN || 1 != BK)\n    BARRIER(CLK_LOCAL_MEM_FENCE);\n#endif\n  }\n}\n"
  },
  {
    "path": "src/acc/opencl/smm/kernels/transpose.cl",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n\n__attribute__((reqd_work_group_size(WG, 1, 1))) kernel void FN(\n  int trs_offset, CONSTANT const int* restrict trs_stack, global T* restrict matrix) {\n  /* offset in the transpose-stack that this block ID should handle */\n  const int offset = trs_stack[trs_offset + get_group_id(0)];\n  /* matrix according to the index (transpose-stack) */\n  global T* const restrict mat = matrix + offset;\n  const int idx = get_local_id(0);\n#if (SM != SN) || (0 == INPLACE)\n  /* local memory buffer */\n  local T buf[SM][SN];\n#endif\n#if (WG == SM)\n  const int m = idx;\n#  if (SM != SN) || (0 == INPLACE)\n  /* copy matrix elements into local buffer */\n  for (int n = 0; n < SN; ++n) buf[m][n] = mat[SM * n + m];\n  barrier(CLK_LOCAL_MEM_FENCE);\n  /* overwrite matrix elements (gather) */\n  for (int n = 0; n < SN; ++n) mat[SN * m + n] = buf[m][n];\n#  else\n  for (int n = 0; n < m; ++n) {\n    const int i = SM * n + m;\n    const int j = SN * m + n;\n    const T tmp = mat[i];\n    mat[i] = mat[j];\n    mat[j] = tmp;\n  }\n#  endif\n#else\n  T prv[SN]; /* private buffer */\n#  if (SM != SN) || (0 == INPLACE)\n  /* copy matrix elements into local buffer */\n  for (int m = idx; m < SM; m += WG) {\n    for (int n = 0; n < SN; ++n) buf[m][n] = mat[SM * n + m];\n  }\n  barrier(CLK_LOCAL_MEM_FENCE);\n#  endif\n  for (int m = idx; m < SM; m += WG) {\n#  if (SM != SN) || (0 == INPLACE)\n    for (int n = 0; n < SN; ++n) prv[n] = buf[m][n];\n    /* overwrite matrix elements (gather) */\n    for (int n = 0; n < SN; ++n) mat[SN * m + n] = prv[n];\n#  else\n    for (int n = 0; n < SN; ++n) prv[n] = mat[SM * n + m];\n    for (int n = 0; n < m; ++n) {\n      const int i = SM * n + m;\n      const int j = SN * m + n;\n      mat[i] = mat[j];\n      mat[j] = prv[n];\n    }\n#  endif\n  }\n#endif\n}\n"
  },
  {
    "path": "src/acc/opencl/smm/opencl_libsmm.c",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#if defined(__OPENCL)\n#  include \"opencl_libsmm.h\"\n/* Header opencl_kernels.h is generated by the build system using acc_opencl.sh */\n#  include \"opencl_kernels.h\"\n#  include \"../../acc_bench.h\"\n#  include <ctype.h>\n#  if !defined(OPENCL_KERNELS_SOURCE_TRANSPOSE)\n#    error \"OpenCL transpose-kernel code not found!\"\n#  endif\n#  if !defined(OPENCL_KERNELS_SOURCE_MULTIPLY)\n#    error \"OpenCL SMM-kernel code not found!\"\n#  endif\n#  if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER\n#    define OPENCL_LIBSMM_DESCINIT(BLOB, PREC, M, N, K, LDA, LDB, LDC, FLAGS, PREFETCH) \\\n      libxsmm_gemm_descriptor_init(BLOB, PREC, PREC, PREC, PREC, M, N, K, LDA, LDB, LDC, FLAGS, PREFETCH)\n#  else\n#    define OPENCL_LIBSMM_DESCINIT(BLOB, PREC, M, N, K, LDA, LDB, LDC, FLAGS, PREFETCH) \\\n      libxsmm_gemm_descriptor_dinit(BLOB, PREC, M, N, K, LDA, LDB, LDC, 1.0, 1.0, FLAGS, PREFETCH)\n#  endif\n#  if !defined(OPENCL_LIBSMM_KERNELNAME_TRANS)\n#    define OPENCL_LIBSMM_KERNELNAME_TRANS \"trans\"\n#  endif\n#  if !defined(OPENCL_LIBSMM_KERNELNAME_SMM)\n#    define OPENCL_LIBSMM_KERNELNAME_SMM \"smm\"\n#  endif\n#  if !defined(OPENCL_LIBSMM_NLOCKS_TRANS)\n#    define OPENCL_LIBSMM_NLOCKS_TRANS 16\n#  endif\n#  if !defined(OPENCL_LIBSMM_NLOCKS_SMM)\n#    define OPENCL_LIBSMM_NLOCKS_SMM 16\n#  endif\n#  if !defined(OPENCL_LIBSMM_TODO) && 0\n#    define OPENCL_LIBSMM_TODO\n#  endif\n/* default: decompose C-matrix into column-vectors (BMxBN) */\n#  if !defined(OPENCL_LIBSMM_DEFAULT_BM)\n#    define OPENCL_LIBSMM_DEFAULT_BM INT_MAX\n#  endif\n#  if !defined(OPENCL_LIBSMM_DEFAULT_BN)\n#    define OPENCL_LIBSMM_DEFAULT_BN 1\n#  endif\n#  if !defined(OPENCL_LIBSMM_DEFAULT_BK)\n#    if 1\n#      define OPENCL_LIBSMM_DEFAULT_BK INT_MAX\n#    else\n#      define OPENCL_LIBSMM_DEFAULT_BK 1\n#    endif\n#  endif\n#  if !defined(OPENCL_LIBSMM_DEFAULT_BS)\n#    define OPENCL_LIBSMM_DEFAULT_BS 8\n#  endif\n#  if !defined(OPENCL_LIBSMM_BS_MIN) && 1\n#    define OPENCL_LIBSMM_BS_MIN 32\n#  endif\n#  if !defined(OPENCL_LIBSMM_SMM_S)\n#    define OPENCL_LIBSMM_SMM_S 64\n#  endif\n#  if !defined(OPENCL_LIBSMM_VMIN)\n#    define OPENCL_LIBSMM_VMIN 8\n#  endif\n\n/* approximate arithmetic intensity for SMMs like C += Ai * Bi (beta=1) */\n#  define OPENCL_LIBSMM_AI(M, N, K, TYPESIZE) ((2.0 * (M) * (N) * (K)) / ((TYPESIZE) * (K) * ((M) + (N))))\n/* determine type-size of a given type-ID */\n#  define OPENCL_LIBSMM_TYPESIZE(TYPEID) \\\n    (dbcsr_type_real_8 == (TYPEID) ? ((int)sizeof(double)) : (dbcsr_type_real_4 == (TYPEID) ? ((int)sizeof(float)) : 0 /*unknown*/))\n\n#  define OPENCL_LIBSMM_TRANSENV(KEY) opencl_libsmm_getenv(\"OPENCL_LIBSMM_TRANS\", KEY)\n#  define OPENCL_LIBSMM_SMMENV(KEY) opencl_libsmm_getenv(\"OPENCL_LIBSMM_SMM\", KEY)\n\n\n#  if defined(__cplusplus)\nextern \"C\" {\n#  endif\n\n/* Pointer to DBM kernel-launch function (optional, can be NULL) */\nopencl_libsmm_acc_dbm_launch_fn_t opencl_libsmm_acc_dbm_launch_fn;\n/* track initialization status of LIBSMM */\nint opencl_libsmm_initialized;\n\n\nint opencl_libsmm_write_trans_params(FILE* stream, int only_key, const opencl_libsmm_transkey_t* key,\n  const opencl_libsmm_trans_t* config, const char* delim, const char* begin, const char* close) {\n  int result = 0;\n  if (NULL != stream) {\n    const char d = (NULL == delim ? *ACC_OPENCL_DELIMS : *delim);\n    if (NULL != key || 0 == only_key) result += fprintf(stream, \"%c\", NULL == begin ? '{' : *begin);\n    if (NULL != config) {\n      if (NULL != key) {\n        result += fprintf(stream, \"%i%c%i%c%i\", (int)key->type, d, key->m, d, key->n);\n        /*if (0 == only_key) result += fprintf(stream, \"%c\", d);*/\n      }\n    }\n    else {\n      if (NULL != key) {\n        result += fprintf(stream, \"t%cm%cn\", d, d);\n        /*if (0 == only_key) result += fprintf(stream, \"%c\", d);*/\n      }\n    }\n    if (NULL != key || 0 == only_key) result += fprintf(stream, \"%c\", NULL == close ? '}' : *close);\n  }\n  else result = -1;\n  assert(0 < result);\n  return result;\n}\n\n\nint opencl_libsmm_write_smm_params(FILE* stream, int only_key, const opencl_libsmm_smmkey_t* key, const opencl_libsmm_smm_t* config,\n  const char* delim, const char* begin, const char* close) {\n  int result = 0;\n  if (NULL != stream) {\n    const char d = (NULL == delim ? *ACC_OPENCL_DELIMS : *delim);\n    if (NULL != key || 0 == only_key) result += fprintf(stream, \"%c\", NULL == begin ? '{' : *begin);\n    if (NULL != config) {\n      if (NULL != key) {\n        result += fprintf(stream, \"%i%c%i%c%i%c%i\", (int)key->type, d, key->m, d, key->n, d, key->k);\n        if (0 == only_key) result += fprintf(stream, \"%c \", d);\n      }\n      if (0 == only_key) {\n        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,\n          config->bn, d, config->bk, d, config->ws, d, config->wg, d, config->lu, d, config->nz, d, config->al, d, config->tb, d,\n          config->tc, d, config->ap, d, config->aa, d, config->ab, d, config->ac);\n        if (0 != config->flags) result += fprintf(stream, \"%c %i\", d, config->flags);\n      }\n    }\n    else {\n      if (NULL != key) {\n        result += fprintf(stream, \"t%cm%cn%ck\", d, d, d);\n        if (0 == only_key) result += fprintf(stream, \"%c \", d);\n      }\n      if (0 == only_key) {\n        result += fprintf(\n          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);\n      }\n    }\n    if (NULL != key || 0 == only_key) result += fprintf(stream, \"%c\", NULL == close ? '}' : *close);\n  }\n  else result = -1;\n  assert(0 < result);\n  return result;\n}\n\n\nint opencl_libsmm_read_smm_params(char* parambuf, opencl_libsmm_smmkey_t* key, opencl_libsmm_smm_t* value,\n  opencl_libsmm_perfest_t* perfest, char* device, int* key_ok) {\n  const char* const end = parambuf + strlen(parambuf); /* before strtok */\n  char* s = strtok(parambuf, ACC_OPENCL_DELIMS);\n  const int opt_consumed = (NULL != perfest ? 2 : 0) + (NULL != device ? 1 : 0);\n  int result = EXIT_SUCCESS, i = 0, ivalue, consumed = 0, c = 0, max_consumed = opt_consumed + 19;\n  double gflops;\n  assert(NULL != key && NULL != value);\n  LIBXSMM_MEMZERO127(key); /* potentially heterogeneous key-data (alignment gaps) */\n  memset(value, 0, sizeof(opencl_libsmm_smm_t));\n  for (; NULL != s;\n    ++i, s = (c != consumed ? ((s + 1) < end ? strtok((s + 1) + strlen(s), ACC_OPENCL_DELIMS) : NULL) : s), c = consumed)\n  {\n    switch (i) {\n      case 0:\n        if (NULL != device && 1 == sscanf(s, \"%[^\" ACC_OPENCL_DELIMS \"]\", device)) {\n          ++consumed; /* optional device name */\n        }\n        break;\n      case 1:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          key->type = (libsmm_acc_data_t)ivalue;\n          ++consumed;\n        }\n        break;\n      case 2:\n        if (1 == sscanf(s, \"%i\", &ivalue) && 0 < ivalue) {\n          key->m = ivalue;\n          ++consumed;\n        }\n        break;\n      case 3:\n        if (1 == sscanf(s, \"%i\", &ivalue) && 0 < ivalue) {\n          key->n = ivalue;\n          ++consumed;\n        }\n        break;\n      case 4:\n        if (1 == sscanf(s, \"%i\", &ivalue) && 0 < ivalue) {\n          key->k = ivalue;\n          ++consumed;\n        }\n        break;\n      case 5:\n        if (NULL != perfest && 1 == sscanf(s, \"%i\", &ivalue)) {\n          value->s = ivalue;\n          ++consumed; /* optional \"S\" param */\n        }\n        break;\n      case 6:\n        if (NULL != perfest && 1 == sscanf(s, \"%lf\", &gflops) && 0 <= gflops) {\n          value->gflops = gflops;\n          ++consumed; /* optional \"GFLOPS\" param */\n        }\n        break;\n      case 7:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->bs = ivalue;\n          ++consumed;\n        }\n        break;\n      case 8:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->bm = ivalue;\n          ++consumed;\n        }\n        break;\n      case 9:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->bn = ivalue;\n          ++consumed;\n        }\n        break;\n      case 10:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->bk = ivalue;\n          ++consumed;\n        }\n        break;\n      case 11:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->ws = ivalue;\n          ++consumed;\n        }\n        break;\n      case 12:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->wg = ivalue;\n          ++consumed;\n        }\n        break;\n      case 13:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->lu = ivalue;\n          ++consumed;\n        }\n        break;\n      case 14:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->nz = ivalue;\n          ++consumed;\n        }\n        break;\n      case 15:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->al = ivalue;\n          ++consumed;\n        }\n        break;\n      case 16:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->tb = ivalue;\n          ++consumed;\n        }\n        break;\n      case 17:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->tc = ivalue;\n          ++consumed;\n        }\n        break;\n      case 18:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->ap = ivalue;\n          ++consumed;\n        }\n        break;\n      case 19:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->aa = ivalue;\n          ++consumed;\n        }\n        break;\n      case 20:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->ab = ivalue;\n          ++consumed;\n        }\n        break;\n      case 21:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->ac = ivalue;\n          ++consumed;\n        }\n        break;\n      case 22:\n        if (1 == sscanf(s, \"%i\", &ivalue)) {\n          value->flags = ivalue;\n          ++max_consumed;\n          ++consumed;\n        }\n        break;\n      default: s = NULL; /* break */\n    }\n  }\n  if (max_consumed == consumed) {\n    switch (key->type) {\n      case dbcsr_type_real_8:\n        if (NULL != perfest && 0 < gflops) {\n          const double ratio = gflops / OPENCL_LIBSMM_AI(key->m, key->n, key->k, sizeof(double));\n#  if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER\n          libxsmm_kahan_sum(log(ratio), &perfest->gf_ai_dratio_sumlog, &perfest->gf_ai_dratio_kahan);\n#  else\n          perfest->gf_ai_dratio_sumlog += log(ratio);\n#  endif\n          if (perfest->gf_ai_dratio_max < ratio) perfest->gf_ai_dratio_max = ratio;\n          ++perfest->dcount;\n        }\n        break;\n      case dbcsr_type_real_4:\n        if (NULL != perfest && 0 < gflops) {\n          const double ratio = gflops / OPENCL_LIBSMM_AI(key->m, key->n, key->k, sizeof(float));\n#  if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER\n          libxsmm_kahan_sum(log(ratio), &perfest->gf_ai_sratio_sumlog, &perfest->gf_ai_sratio_kahan);\n#  else\n          perfest->gf_ai_sratio_sumlog += log(ratio);\n#  endif\n          if (perfest->gf_ai_sratio_max < ratio) perfest->gf_ai_sratio_max = ratio;\n          ++perfest->scount;\n        }\n        break;\n      default: result = EXIT_FAILURE;\n    }\n  }\n  else result = EXIT_FAILURE;\n  if (NULL != key_ok && 4 <= consumed) *key_ok = 1;\n  return result;\n}\n\n\nint libsmm_acc_init(void) {\n#  if defined(_OPENMP)\n  /* initialization/finalization is not meant to be thread-safe */\n  int result = ((0 == omp_in_parallel() || /*main*/ 0 == omp_get_thread_num()) ? EXIT_SUCCESS : EXIT_FAILURE);\n#    pragma omp critical(opencl_libsmm_initialized)\n#  else\n  int result = EXIT_SUCCESS;\n#  endif\n  ++opencl_libsmm_initialized;\n  /* multiple calls to libsmm_acc_init are not considered as an error */\n  if (1 == opencl_libsmm_initialized) {\n#  if !defined(__DBCSR_ACC)\n    /* DBCSR shall call c_dbcsr_acc_init as well as libsmm_acc_init (since both interfaces are used).\n     * Also, libsmm_acc_init may privately call c_dbcsr_acc_init (as it depends on the ACC interface).\n     * The implementation of c_dbcsr_acc_init should hence be safe against \"over initialization\".\n     * However, DBCSR only calls c_dbcsr_acc_init (and expects an implicit libsmm_acc_init).\n     */\n    if (EXIT_SUCCESS == result) result = c_dbcsr_acc_init();\n#  endif\n    libxsmm_init();\n    if (EXIT_SUCCESS == result) {\n      opencl_libsmm_perfest_t perfest;\n      char* const env_params = getenv(\"OPENCL_LIBSMM_SMM_PARAMS\"); /* !opencl_libsmm_getenv */\n      memset(&perfest, 0, sizeof(perfest));\n      if (NULL == env_params || '0' != *env_params) {\n        char buffer[ACC_OPENCL_BUFFERSIZE], bufname[ACC_OPENCL_BUFFERSIZE];\n#  if defined(OPENCL_KERNELS_DEVICES)\n        const int ndevices_params = (int)(sizeof(OPENCL_KERNELS_DEVICES) / sizeof(*OPENCL_KERNELS_DEVICES));\n#  endif\n        opencl_libsmm_smm_t config;\n        opencl_libsmm_smmkey_t key, key_direct;\n        int key_direct_skip = 0, ntuned = 0;\n        if (NULL != env_params && '\\0' != *env_params) { /* filename */\n          FILE* const file = fopen(env_params, \"r\");\n          if (NULL != file) {\n            /* consume first line, check for device entry, and skip CSV header */\n            if (NULL != fgets(buffer, ACC_OPENCL_BUFFERSIZE, file)) {\n              char* const device = (NULL != LIBXSMM_STRISTR(buffer, \"device\") ? bufname : NULL);\n              opencl_libsmm_perfest_t* const gflops = (NULL != LIBXSMM_STRISTR(buffer, \"gflops\") ? &perfest : NULL);\n              while (NULL != fgets(buffer, ACC_OPENCL_BUFFERSIZE, file)) { /* read params from CSV-file */\n                if (EXIT_SUCCESS == opencl_libsmm_read_smm_params(buffer, &key, &config, gflops, device, NULL /*key_ok*/)) {\n                  opencl_libsmm_smm_t* config_init;\n                  c_dbcsr_acc_opencl_config.devmatch = 0; /* disable device-match */\n                  key.devuid = 0;\n                  config_init = (opencl_libsmm_smm_t*)libxsmm_xdispatch(&key, sizeof(key));\n                  if (NULL == config_init) {\n                    if (NULL == libxsmm_xregister(&key, sizeof(key), sizeof(config), &config)) {\n                      result = EXIT_FAILURE;\n                      break;\n                    }\n                    else ++ntuned;\n                  }\n                  else if (config_init->gflops < config.gflops) { /* update */\n                    memcpy(config_init, &config, sizeof(config));\n                  }\n                }\n                else {\n                  if (0 != c_dbcsr_acc_opencl_config.verbosity) {\n                    fprintf(stderr, \"WARN LIBSMM: failed to load tuned parameters from CSV-file!\\n\");\n                  }\n                  break; /* invalid entry */\n                }\n              }\n            }\n            else { /* invalid header */\n              result = EXIT_FAILURE;\n            }\n            fclose(file);\n          }\n          else if (EXIT_SUCCESS == opencl_libsmm_read_smm_params(\n                                     env_params, &key_direct, &config, NULL /*perfest*/, NULL /*device*/, &key_direct_skip))\n          { /* try OPENCL_LIBSMM_SMM_PARAMS as string of kernel parameters (not device-specific) */\n            assert(0 == key_direct.devuid && 0 != key_direct_skip);\n            if (NULL != libxsmm_xregister(&key_direct, sizeof(key_direct), sizeof(config), &config)) {\n              c_dbcsr_acc_opencl_config.devmatch = 0; /* disable device-match */\n              ntuned = 1;\n            }\n            else result = EXIT_FAILURE;\n          }\n          else if (0 == key_direct_skip && 0 != c_dbcsr_acc_opencl_config.verbosity) { /* soft-error */\n            fprintf(stderr, \"WARN LIBSMM: failed to open parameter file!\\n\");\n          }\n        }\n#  if defined(OPENCL_KERNELS_PARAMS_SMM) && defined(OPENCL_KERNELS_DEVICES)\n        if (EXIT_SUCCESS == result && (0 == ntuned || 0 != key_direct_skip)) {\n          const char *line = OPENCL_KERNELS_PARAMS_SMM, *next;\n#    if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER\n          const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n          unsigned int default_uid = c_dbcsr_acc_opencl_config.device.uid;\n          int active_match = -1;\n          if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(\n                                device_id, bufname, ACC_OPENCL_BUFFERSIZE, NULL /*platform*/, 0 /*platform_maxlen*/, /*cleanup*/ 1))\n          { /* determine best-matching parameters based on name of device */\n            int i = 0, count = 0;\n            double best = 0;\n            if (1 >= c_dbcsr_acc_opencl_config.devmatch) {\n              c_dbcsr_acc_opencl_device_uid(device_id, bufname, &default_uid);\n            }\n            for (; i < ndevices_params; ++i) {\n              const int n = c_dbcsr_acc_opencl_strimatch(bufname, OPENCL_KERNELS_DEVICES[i], NULL, &count);\n              if (0 != n && 0 != count) {\n                const double score = (double)n / count;\n                unsigned int uid;\n                if (best < score ||\n                    (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_uid(NULL /*device*/, OPENCL_KERNELS_DEVICES[i], &uid) &&\n                      uid == default_uid))\n                {\n                  active_match = i;\n                  best = score;\n                }\n              }\n            }\n          }\n#    endif\n          do {\n            next = strchr(line, '\\n');\n            if (NULL != next && next < (line + ACC_OPENCL_BUFFERSIZE)) {\n              const int len = next - line;\n              memcpy(buffer, line, len);\n              buffer[len] = '\\0';\n              if (EXIT_SUCCESS == opencl_libsmm_read_smm_params(/* read params from embedded params */\n                                    buffer, &key, &config, &perfest, bufname /*consume name/id*/, NULL /*key_ok*/))\n              {\n                if (0 == key_direct_skip || 0 != memcmp(&key_direct, &key, (const char*)&key.k - (const char*)&key)) {\n                  opencl_libsmm_smm_t* config_init;\n                  const int i = atoi(bufname);\n                  if (0 >= ndevices_params || 0 == c_dbcsr_acc_opencl_config.devmatch || 0 > i || ndevices_params <= i ||\n                      EXIT_SUCCESS != c_dbcsr_acc_opencl_device_uid(NULL /*device*/, OPENCL_KERNELS_DEVICES[i], &key.devuid))\n                  {\n                    key.devuid = 0;\n                  }\n                  config_init = (opencl_libsmm_smm_t*)libxsmm_xdispatch(&key, sizeof(key)); /* duplicate? */\n                  if (NULL == config_init) {\n                    if (NULL != libxsmm_xregister(&key, sizeof(key), sizeof(config), &config)) ++ntuned;\n                    else { /* failed to register */\n                      result = EXIT_FAILURE;\n                      break;\n                    }\n                  }\n                  else if (config_init->gflops < config.gflops) { /* update */\n                    memcpy(config_init, &config, sizeof(config));\n                  }\n#    if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER\n                  if (active_match == i && 0 != default_uid) {\n                    key.devuid = default_uid;\n                    config_init = (opencl_libsmm_smm_t*)libxsmm_xdispatch(&key, sizeof(key));\n                    if (NULL != config_init || NULL != libxsmm_xregister(&key, sizeof(key), sizeof(config), &config)) {\n                      static int info = 0;\n                      if (0 == info && 0 == c_dbcsr_acc_opencl_config.nrank && 0 != c_dbcsr_acc_opencl_config.verbosity &&\n                          EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(device_id, bufname, ACC_OPENCL_BUFFERSIZE,\n                                            NULL /*platform*/, 0 /*platform_maxlen*/, /*cleanup*/ 0))\n                      {\n                        assert(i < ndevices_params);\n                        if (default_uid != key.devuid) {\n                          fprintf(/* print best-matching device */\n                            stderr, \"INFO ACC/LIBSMM: PARAMS of \\\"%s\\\" used for \\\"%s\\\"\\n\", OPENCL_KERNELS_DEVICES[i], bufname);\n                        }\n                        else {\n                          fprintf(\n                            stderr, \"INFO ACC/LIBSMM: PARAMS of \\\"%s\\\" used to instantiate kernels\\n\", OPENCL_KERNELS_DEVICES[i]);\n                        }\n                        info = 1;\n                      }\n                    }\n                  }\n#    endif\n                }\n              }\n              else {\n                if (0 != c_dbcsr_acc_opencl_config.verbosity) {\n                  fprintf(stderr, \"WARN LIBSMM: failed to load embedded parameters!\\n\");\n                }\n                break;\n              }\n              line = ++next;\n            }\n          } while (NULL != next);\n        }\n#  endif\n#  if defined(OPENCL_KERNELS_DEVICES)\n        if (EXIT_SUCCESS == result && 0 != ntuned && 0 == c_dbcsr_acc_opencl_config.nrank &&\n            (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity))\n        {\n          fprintf(stderr, \"INFO ACC/LIBSMM: PARAMS in %i set%s loaded targeting \", ntuned, 1 != ntuned ? \"s\" : \"\");\n          if (0 != c_dbcsr_acc_opencl_config.devmatch) {\n            fprintf(stderr, \"%i device%s\\n\", ndevices_params, 1 != ndevices_params ? \"s\" : \"\");\n            if (3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) {\n              unsigned int i = 0;\n              for (; i < (unsigned int)ndevices_params; ++i) {\n                fprintf(stderr, \"INFO ACC/LIBSMM: PARAMS -> \\\"%s\\\"\\n\", OPENCL_KERNELS_DEVICES[i]);\n              }\n            }\n          }\n          else fprintf(stderr, \"any device\\n\");\n        }\n#  endif\n      }\n    }\n  }\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint libsmm_acc_finalize(void) {\n  /* Routine libsmm_acc_init is called in master thread inside of parallel region\n   * However, libsmm_acc_finalize is indirectly called (c_dbcsr_acc_finalize)\n   * inside of a parallel region (not just the master thread).\n   */\n#  if defined(_OPENMP)\n  /* initialization/finalization is not meant to be thread-safe */\n  int result = ((0 == omp_in_parallel() || /*main*/ 0 == omp_get_thread_num()) ? EXIT_SUCCESS : EXIT_FAILURE);\n#    pragma omp critical(opencl_libsmm_initialized)\n#  else\n  int result = EXIT_SUCCESS;\n#  endif\n  --opencl_libsmm_initialized;\n  /* multiple calls to libsmm_acc_finalize are not considered as an error */\n  if (0 == opencl_libsmm_initialized) {\n#  if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER\n    char fname[ACC_OPENCL_MAXSTRLEN];\n    const void* regentry = libxsmm_get_registry_begin(LIBXSMM_KERNEL_KIND_USER, NULL /*key*/);\n    for (; NULL != regentry; regentry = libxsmm_get_registry_next(regentry, NULL /*key*/)) {\n      /* opencl_libsmm_trans_t/opencl_libsmm_smm_t carry cl_kernel as 1st data member */\n      cl_kernel kernel = *(const cl_kernel*)regentry;\n      if (NULL == kernel) kernel = ((const opencl_libsmm_smm_t*)regentry)->kernel[1];\n      if (NULL != kernel) { /* only consider user-entry if clGetKernelInfo succeeded */\n        int result_entry = clGetKernelInfo(kernel, CL_KERNEL_FUNCTION_NAME, sizeof(fname), fname, NULL);\n        if (EXIT_SUCCESS == result_entry) {\n          if (NULL != strstr(fname, OPENCL_LIBSMM_KERNELNAME_TRANS)) { /* trans-kernel */\n            result_entry = clReleaseKernel(kernel);\n          }\n          else if (NULL != strstr(fname, OPENCL_LIBSMM_KERNELNAME_SMM)) { /* SMM-kernel */\n            result_entry = clReleaseKernel(kernel);\n            if (EXIT_SUCCESS == result_entry && kernel != ((const opencl_libsmm_smm_t*)regentry)->kernel[1]) {\n              kernel = ((const opencl_libsmm_smm_t*)regentry)->kernel[1]; /* release 2nd kernel */\n              if (NULL != kernel) result_entry = clReleaseKernel(kernel);\n            }\n          }\n          if (EXIT_SUCCESS != result_entry) result = result_entry;\n        }\n      }\n    }\n#  endif\n#  if !defined(__DBCSR_ACC)\n    /* DBCSR shall call c_dbcsr_acc_init as well as libsmm_acc_init (since both interfaces are used).\n     * Also, libsmm_acc_init may privately call c_dbcsr_acc_init (as it depends on the ACC interface).\n     * The implementation of c_dbcsr_acc_init should hence be safe against \"over initialization\".\n     * However, DBCSR only calls c_dbcsr_acc_init (and expects an implicit libsmm_acc_init).\n     */\n    if (EXIT_SUCCESS == result) result = c_dbcsr_acc_finalize();\n#  endif\n    libxsmm_finalize();\n  }\n  /* c_dbcsr_acc_finalize is not called since it can be used independently */\n  return result;\n}\n\n\nc_dbcsr_acc_bool_t libsmm_acc_is_thread_safe(void) {\n  /* match DBCSR's threading level */\n#  if defined(_OPENMP)\n  return 1;\n#  else\n  return 0;\n#  endif\n}\n\n\nconst char* opencl_libsmm_getenv(const char domain[], const char key[]) {\n  char buffer[ACC_OPENCL_BUFFERSIZE];\n  const size_t keylen = strlen(key);\n  const char* result = NULL;\n  int nchar;\n  if (2 != keylen) {\n    nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), \"%s_%s\", domain, key);\n    if (0 < nchar && (int)sizeof(buffer) > nchar) result = getenv(buffer);\n  }\n  else {\n    nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), \"%s_PARAMS\", domain);\n    if (0 < nchar && (int)sizeof(buffer) > nchar) result = getenv(buffer);\n    if (NULL == result || '0' != *result) {\n      nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), \"%s_%s\", domain, key);\n      result = (0 < nchar && (int)sizeof(buffer) > nchar) ? getenv(buffer) : NULL;\n    }\n    else {\n      result = NULL;\n    }\n  }\n  return result;\n}\n\n\nint libsmm_acc_transpose(const int* dev_trs_stack, int offset, int stack_size, void* dev_data, libsmm_acc_data_t datatype, int m,\n  int n, int max_kernel_dim, void* stream) {\n  c_dbcsr_acc_opencl_info_memptr_t info_stack, info_mdata;\n  int result = EXIT_SUCCESS;\n  const int mn = m * n;\n  assert((NULL != dev_trs_stack && NULL != stream && NULL != dev_data && 0 <= offset && 0 < stack_size) || 0 == stack_size);\n  assert(0 < m && 0 < n);\n  if (0 == stack_size || 1 == mn) return EXIT_SUCCESS;\n  result |= c_dbcsr_acc_opencl_info_devptr(&info_stack, dev_trs_stack, sizeof(int), NULL /*amount*/, NULL /*offset*/);\n  result |= c_dbcsr_acc_opencl_info_devptr(&info_mdata, dev_data, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/);\n  if (EXIT_SUCCESS == result &&\n      (\n#  if defined(OPENCL_LIBSMM_F64)\n        dbcsr_type_real_8 == datatype\n#  else\n        0\n#  endif\n        ||\n#  if defined(OPENCL_LIBSMM_F32)\n        dbcsr_type_real_4 == datatype\n#  else\n        0\n#  endif\n        ) &&\n      mn <= (max_kernel_dim * max_kernel_dim))\n  {\n    const libxsmm_timer_tickint start = libxsmm_timer_tick();\n    const c_dbcsr_acc_opencl_stream_t* const str = ACC_OPENCL_STREAM(stream);\n    opencl_libsmm_trans_t* config;\n    opencl_libsmm_transkey_t key;\n    LIBXSMM_MEMZERO127(&key); /* potentially heterogeneous key-data (alignment gaps) */\n    key.type = datatype;\n    key.m = m;\n    key.n = n; /* initialize key */\n    config = (opencl_libsmm_trans_t*)libxsmm_xdispatch(&key, sizeof(key));\n    if (NULL == config) {\n      char buffer[ACC_OPENCL_BUFFERSIZE], build_params[ACC_OPENCL_BUFFERSIZE];\n      char fname[ACC_OPENCL_MAXSTRLEN];\n      int nchar = LIBXSMM_SNPRINTF(fname, sizeof(fname),\n        /* kernel name are meant to be unambiguous (BLAS-typeprefix and kernelsize) */\n        \"x\" OPENCL_LIBSMM_KERNELNAME_TRANS \"%ix%i\", m, n);\n#  if defined(__DBCSR_ACC)\n      int routine_handle;\n      c_dbcsr_timeset(LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_STRPTR, LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_LENPTR, &routine_handle);\n#  endif\n      if (0 < nchar && (int)sizeof(fname) > nchar) {\n        const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n        const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n        const char *const env_cl = OPENCL_LIBSMM_TRANSENV(\"BUILDOPTS\"), *const env_bm = OPENCL_LIBSMM_TRANSENV(\"BM\");\n        const char* const cmem = (EXIT_SUCCESS != c_dbcsr_acc_opencl_use_cmem(devinfo) ? \"global\" : \"constant\");\n        const char* const build_format = \"-DCONSTANT=%s -DINPLACE=%i -DFN=%s -DSM=%i -DSN=%i -DWG=%i -DT=%s\";\n        const char *const env_inplace = OPENCL_LIBSMM_TRANSENV(\"INPLACE\"), *tname = \"\";\n#  if defined(OPENCL_LIBSMM_TRANS_INPLACE)\n        const int inplace = ((m == n) && (NULL == env_inplace ? 1 : ('0' != *env_inplace)));\n#  else\n        const int inplace = ((m == n) && (NULL == env_inplace ? 0 : ('0' != *env_inplace)));\n#  endif\n        const int blockm = ((NULL == env_bm || '\\0' == *env_bm) ? 0 : atoi(env_bm));\n        const int bm = (0 >= blockm ? m : LIBXSMM_MIN(blockm, m));\n        opencl_libsmm_trans_t new_config;\n        memset(&new_config, 0, sizeof(new_config));\n        switch (datatype) {\n          case dbcsr_type_real_8: {\n            tname = \"char8\"; /* double */\n            fname[0] = 'd';\n          } break;\n          case dbcsr_type_real_4: {\n            tname = \"float\";\n            fname[0] = 's';\n          } break;\n          default: assert('\\0' == *tname);\n        }\n        new_config.wgsize = LIBXSMM_MIN((size_t)((m == bm || 0 == (m % bm)) ? bm : m), devinfo->wgsize[0]);\n        nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), \"%s\", NULL == env_cl ? \"\" : env_cl);\n        if (0 <= /*<*/ nchar && (int)sizeof(buffer) > nchar) {\n          nchar = LIBXSMM_SNPRINTF(\n            build_params, sizeof(build_params), build_format, cmem, inplace, fname, m, n, (int)new_config.wgsize, tname);\n        }\n        if ('\\0' != *tname && 0 < nchar && (int)sizeof(build_params) > nchar) {\n          result = c_dbcsr_acc_opencl_kernel(0 /*source_kind*/, OPENCL_KERNELS_SOURCE_TRANSPOSE, fname, build_params, buffer,\n            NULL /*try*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &new_config.kernel);\n          if (EXIT_SUCCESS == result) {\n            size_t wgsize_max;\n            assert(NULL != new_config.kernel);\n            result = clGetKernelWorkGroupInfo(\n              new_config.kernel, device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &wgsize_max, NULL);\n            if (EXIT_SUCCESS == result) {\n              assert(0 < wgsize_max);\n              if (wgsize_max < new_config.wgsize) {\n                new_config.wgsize = wgsize_max;\n                nchar = LIBXSMM_SNPRINTF(\n                  build_params, sizeof(build_params), build_format, cmem, inplace, fname, m, n, (int)new_config.wgsize, tname);\n                if (0 < nchar && (int)sizeof(build_params) > nchar) {\n                  result = c_dbcsr_acc_opencl_kernel(0 /*source_kind*/, OPENCL_KERNELS_SOURCE_TRANSPOSE, fname, build_params,\n                    buffer, NULL /*try*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &new_config.kernel);\n                }\n                else result = EXIT_FAILURE;\n              }\n              if (EXIT_SUCCESS == result) {\n                config = (opencl_libsmm_trans_t*)libxsmm_xregister(&key, sizeof(key), sizeof(new_config), &new_config);\n                if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) {\n                  const double duration = libxsmm_timer_duration(start, libxsmm_timer_tick());\n                  LIBXSMM_STDIO_ACQUIRE();\n                  fprintf(stderr, \"INFO ACC/LIBSMM: TRANS-kernel \");\n                  opencl_libsmm_write_trans_params(\n                    stderr, 0 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n                  fprintf(stderr, \"=\");\n                  opencl_libsmm_write_trans_params(\n                    stderr, 0 /*only_key*/, &key, config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n                  fprintf(stderr, \" gen=%.1f ms\\n\", 1E3 * duration);\n                  LIBXSMM_STDIO_RELEASE();\n                }\n              }\n            }\n          }\n        }\n        else if (EXIT_SUCCESS == result) {\n          result = EXIT_FAILURE;\n        }\n      }\n      else {\n        result = EXIT_FAILURE;\n      }\n#  if defined(__DBCSR_ACC)\n      c_dbcsr_timestop(&routine_handle);\n#  endif\n    }\n    assert((NULL != config && NULL != config->kernel && 0 < config->wgsize) || EXIT_SUCCESS != result);\n    if (EXIT_SUCCESS == result) {\n      const size_t work_size = config->wgsize * stack_size;\n      assert(!(OPENCL_LIBSMM_NLOCKS_TRANS & (OPENCL_LIBSMM_NLOCKS_TRANS - 1))); /* POT */\n      { /* calling clSetKernelArg/clEnqueueNDRangeKernel must be consistent */\n        static ACC_OPENCL_ATOMIC_LOCKTYPE locks[OPENCL_LIBSMM_NLOCKS_TRANS];\n#  if (1 < OPENCL_LIBSMM_NLOCKS_TRANS)\n        const unsigned int hash = libxsmm_hash(&config->kernel, sizeof(cl_kernel), 25071975 /*seed*/);\n        const unsigned int lidx = LIBXSMM_MOD2(hash, OPENCL_LIBSMM_NLOCKS_TRANS);\n        ACC_OPENCL_ATOMIC_LOCKTYPE* const lock = locks + lidx;\n#  else\n        ACC_OPENCL_ATOMIC_LOCKTYPE* const lock = locks;\n#  endif\n        ACC_OPENCL_ATOMIC_ACQUIRE(lock);\n        ACC_OPENCL_CHECK(\n          result, clSetKernelArg(config->kernel, 0, sizeof(int), &offset), \"set offset argument of transpose kernel\");\n        ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel, 1, info_stack.memory),\n          \"set batch-list argument of transpose kernel\");\n        ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel, 2, info_mdata.memory),\n          \"set matrix-data argument of transpose kernel\");\n        ACC_OPENCL_CHECK(result,\n          clEnqueueNDRangeKernel(\n            str->queue, config->kernel, 1 /*work_dim*/, NULL /*offset*/, &work_size, &config->wgsize, 0, NULL, NULL),\n          \"launch transpose kernel\");\n        /* eventually update performance counters inside of locked region */\n        if ((3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) && EXIT_SUCCESS == result) {\n          LIBXSMM_STDIO_ACQUIRE();\n          fprintf(stderr, \"INFO ACC/LIBSMM: TRANS-kernel \");\n          opencl_libsmm_write_trans_params(\n            stderr, 1 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n          fprintf(stderr, \"=\");\n          opencl_libsmm_write_trans_params(stderr, 1 /*only_key*/, &key, config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n          fprintf(stderr, \" ss=%i\\n\", stack_size);\n          LIBXSMM_STDIO_RELEASE();\n        }\n        ACC_OPENCL_ATOMIC_RELEASE(lock);\n      }\n    }\n  }\n  else if (EXIT_SUCCESS == result) result = EXIT_FAILURE;\n  ACC_OPENCL_RETURN(result);\n}\n\n\nc_dbcsr_acc_bool_t libsmm_acc_process_suitable(\n  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) {\n  c_dbcsr_acc_bool_t result = 0; /* false */\n  const int mn = m_max * n_max;\n  if (0 < mn && 0 < k_max && 0 < stack_size &&\n      0 != def_mnk /*homogeneous*/\n      /* allow k_max to exceed max_kernel_dim, TODO: BLAS for large kernels (m,n) */\n      && mn <= (max_kernel_dim * max_kernel_dim))\n  {\n    switch (datatype) {\n#  if defined(OPENCL_LIBSMM_F64)\n      case dbcsr_type_real_8: {\n        result = 1; /* true */\n      } break;\n#  endif\n#  if defined(OPENCL_LIBSMM_F32)\n      case dbcsr_type_real_4: {\n        result = 1; /* true */\n      } break;\n#  endif\n      default: assert(/*false*/ 0 == result);\n    }\n  }\n  if ((/*false*/ 0 == result) && (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity)) {\n    opencl_libsmm_smmkey_t key;\n    opencl_libsmm_smm_t dummy;\n    key.type = datatype;\n    key.m = m_max;\n    key.n = n_max;\n    key.k = k_max; /* initialize key */\n    memset(&dummy, 0, sizeof(dummy)); /* mute warnings about potentially uninitialized data */\n    LIBXSMM_STDIO_ACQUIRE();\n    fprintf(stderr, \"INFO ACC/LIBSMM: SMM-kernel \");\n    opencl_libsmm_write_smm_params(stderr, 1 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n    fprintf(stderr, \"=\");\n    opencl_libsmm_write_smm_params(stderr, 1 /*only_key*/, &key, &dummy, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n    fprintf(stderr, \" ss=%i\", stack_size);\n    if (mn <= (max_kernel_dim * max_kernel_dim)) {\n      fprintf(stderr, 0 != def_mnk ? \" is ignored\\n\" : \" is inhomogeneous\\n\");\n    }\n    else fprintf(stderr, \" is too large\\n\");\n    LIBXSMM_STDIO_RELEASE();\n  }\n  return result;\n}\n\n\n#  if defined(OPENCL_LIBSMM_PFORMAT) && (0 < OPENCL_LIBSMM_PFORMAT)\nvoid opencl_libsmm_acc_set_dbm_launch_fn(opencl_libsmm_acc_dbm_launch_fn_t launch_fn) {\n  opencl_libsmm_acc_dbm_launch_fn = launch_fn;\n}\n#  else\nint opencl_libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype,\n  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,\n  c_dbcsr_acc_bool_t def_mnk, void* stream, void* c_stream, int param_format, cl_event* event);\n#  endif\nint opencl_libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype,\n  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,\n  c_dbcsr_acc_bool_t def_mnk, void* stream, void* c_stream, int param_format, cl_event* event) {\n  int result = EXIT_SUCCESS;\n  LIBXSMM_UNUSED(host_param_stack); /* TODO */\n  LIBXSMM_UNUSED(c_stream); /* TODO */\n  assert(0 == stack_size || (NULL != dev_a_data && NULL != dev_b_data && NULL != dev_c_data && NULL != dev_param_stack));\n  assert(0 < max_kernel_dim && NULL != stream && 0 <= stack_size && 0 <= m_max && 0 <= n_max && 0 <= k_max);\n  if (0 != libsmm_acc_process_suitable(def_mnk, datatype, stack_size, m_max, n_max, k_max, max_kernel_dim)) {\n    const libxsmm_timer_tickint start = libxsmm_timer_tick();\n    const c_dbcsr_acc_opencl_device_t* const devinfo = &c_dbcsr_acc_opencl_config.device;\n    c_dbcsr_acc_opencl_info_memptr_t info_stack, info_adata, info_bdata, info_cdata;\n    opencl_libsmm_smmkey_t key;\n    const c_dbcsr_acc_opencl_stream_t* const str = ACC_OPENCL_STREAM(stream);\n    LIBXSMM_MEMZERO127(&key); /* potentially heterogeneous key-data */\n    key.devuid = ((1 != c_dbcsr_acc_opencl_config.devmatch && ((unsigned int)-1) != c_dbcsr_acc_opencl_config.devmatch)\n                    ? c_dbcsr_acc_opencl_config.devmatch\n                    : devinfo->uid);\n    key.type = datatype;\n    key.m = m_max;\n    key.n = n_max;\n    key.k = k_max;\n    result |= c_dbcsr_acc_opencl_info_devptr(&info_stack, dev_param_stack, sizeof(int), NULL /*amount*/, NULL /*offset*/);\n    result |= c_dbcsr_acc_opencl_info_devptr(&info_adata, dev_a_data, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/);\n    result |= c_dbcsr_acc_opencl_info_devptr(&info_bdata, dev_b_data, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/);\n    result |= c_dbcsr_acc_opencl_info_devptr(&info_cdata, dev_c_data, 1 /*elsize*/, NULL /*amount*/, NULL /*offset*/);\n    if (EXIT_SUCCESS == result) {\n      static ACC_OPENCL_ATOMIC_LOCKTYPE locks[OPENCL_LIBSMM_NLOCKS_SMM];\n      const char *const env_s = OPENCL_LIBSMM_SMMENV(\"S\"), *const env_bs = OPENCL_LIBSMM_SMMENV(\"BS\");\n      const int s = ((NULL == env_s || '\\0' == *env_s) ? OPENCL_LIBSMM_SMM_S : atoi(env_s));\n      int kernel_idx = 0, bs = ((NULL == env_bs || '\\0' == *env_bs) ? 0 : atoi(env_bs));\n      opencl_libsmm_smm_t* config;\n      ACC_OPENCL_ATOMIC_LOCKTYPE* lock = locks;\n#  if (1 < OPENCL_LIBSMM_NLOCKS_SMM)\n      assert(!(OPENCL_LIBSMM_NLOCKS_SMM & (OPENCL_LIBSMM_NLOCKS_SMM - 1))); /* POT */\n      lock += LIBXSMM_MOD2(libxsmm_hash(&key, sizeof(key), 25071975 /*seed*/), OPENCL_LIBSMM_NLOCKS_SMM);\n#  endif\n      ACC_OPENCL_ATOMIC_ACQUIRE(lock); /* calling clSetKernelArg/clEnqueueNDRangeKernel must be consistent */\n      config = (opencl_libsmm_smm_t*)libxsmm_xdispatch(&key, sizeof(key));\n      if (0 >= bs) bs = ((NULL != config && 0 < config->bs) ? config->bs : OPENCL_LIBSMM_DEFAULT_BS);\n      /* determine kernel-kind (mini-batch vs. mini-kernel) */\n      if (1 == bs || 0 > s || (bs * s) > stack_size) kernel_idx = bs = 1;\n      if (NULL == config || NULL == config->kernel[kernel_idx]) {\n        char buffer[ACC_OPENCL_BUFFERSIZE], build_params[ACC_OPENCL_BUFFERSIZE], fname[ACC_OPENCL_MAXSTRLEN];\n        int nchar = LIBXSMM_SNPRINTF(fname, sizeof(fname),\n          /* kernel name are meant to be unambiguous (BLAS-typeprefix and kernelsize) */\n          \"x\" OPENCL_LIBSMM_KERNELNAME_SMM \"%ix%ix%i\", m_max, n_max, k_max);\n#  if defined(__DBCSR_ACC)\n        int routine_handle;\n        c_dbcsr_timeset(LIBSMM_ACC_PROCESS_ROUTINE_NAME_STRPTR, LIBSMM_ACC_PROCESS_ROUTINE_NAME_LENPTR, &routine_handle);\n#  endif\n        result = ((0 < nchar && (int)sizeof(fname) > nchar) ? EXIT_SUCCESS : EXIT_FAILURE);\n        if (EXIT_SUCCESS == result) {\n          c_dbcsr_acc_opencl_atomic_fp_t tkind = c_dbcsr_acc_opencl_atomic_fp_no;\n          const char* tname = NULL;\n          switch (datatype) {\n            case dbcsr_type_real_8: {\n              tkind = c_dbcsr_acc_opencl_atomic_fp_64;\n              tname = \"double\";\n              fname[0] = 'd';\n            } break;\n            case dbcsr_type_real_4: {\n              tkind = c_dbcsr_acc_opencl_atomic_fp_32;\n              tname = \"float\";\n              fname[0] = 's';\n            } break;\n            default: assert(NULL == tname);\n          }\n          if (NULL != tname) {\n            const char *extensions[] = {NULL, NULL}, *const env_devid = OPENCL_LIBSMM_SMMENV(\"DEVID\");\n            const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[c_dbcsr_acc_opencl_config.device_id];\n            const unsigned int devuid = (NULL == env_devid || '\\0' == *env_devid) ? devinfo->uid\n                                                                                  : (unsigned int)strtoul(env_devid, NULL, 0);\n            size_t nextensions = sizeof(extensions) / sizeof(*extensions), sgs = 0, wgsize_prf = 1;\n            const char *const env_bm = OPENCL_LIBSMM_SMMENV(\"BM\"), *const env_bn = OPENCL_LIBSMM_SMMENV(\"BN\");\n            const char *const env_bk = OPENCL_LIBSMM_SMMENV(\"BK\"), *const env_ws = OPENCL_LIBSMM_SMMENV(\"WS\");\n            const char *const env_wg = OPENCL_LIBSMM_SMMENV(\"WG\"), *const env_lu = OPENCL_LIBSMM_SMMENV(\"LU\");\n            const char *const env_nz = OPENCL_LIBSMM_SMMENV(\"NZ\"), *const env_al = OPENCL_LIBSMM_SMMENV(\"AL\");\n            const char *const env_tb = OPENCL_LIBSMM_SMMENV(\"TB\"), *const env_tc = OPENCL_LIBSMM_SMMENV(\"TC\");\n            const char *const env_ap = OPENCL_LIBSMM_SMMENV(\"AP\"), *const env_aa = OPENCL_LIBSMM_SMMENV(\"AA\");\n            const char *const env_ab = OPENCL_LIBSMM_SMMENV(\"AB\"), *const env_ac = OPENCL_LIBSMM_SMMENV(\"AC\");\n            const char *const env_xf = OPENCL_LIBSMM_SMMENV(\"XF\"), *const env_cl = OPENCL_LIBSMM_SMMENV(\"BUILDOPTS\");\n            const char* const intel_xf = \"-cl-intel-256-GRF-per-thread\";\n            const int blockn = ((NULL == env_bn || '\\0' == *env_bn) ? 0 : atoi(env_bn));\n            const int blockk = ((NULL == env_bk || '\\0' == *env_bk) ? 0 : atoi(env_bk));\n            const int wgmin = ((NULL == env_ws || '\\0' == *env_ws) ? 0 : atoi(env_ws));\n            const int default_aa = (((0x0bd0 > devuid || 0x0bdb < devuid)) ? ((k_max % OPENCL_LIBSMM_VMIN) ? 1 : 2) : 0);\n            const int default_ab = (((0x0bd0 > devuid || 0x0bdb < devuid) && 0x020a != devuid) ? 3 : 0), default_ac = 0;\n            const int default_bk = (((0x0bd0 > devuid || 0x0bdb < devuid || n_max < k_max) && 0x020a != devuid)\n                                      ? (0 == kernel_idx ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BK, m_max)\n                                                         : LIBXSMM_MIN(OPENCL_LIBSMM_VMIN, m_max))\n                                      : 1);\n            const int default_wg = (((0x0bd0 > devuid || 0x0bdb < devuid)) ? (0 == kernel_idx ? 0 : -2) : -1);\n            const int default_lu = (0 != devinfo->intel ? -1 : 0);\n            int defaults, blockm, nbm, nbn;\n            opencl_libsmm_smm_t new_config;\n            if (NULL == config) {\n              memset(&new_config, 0, sizeof(new_config));\n            }\n            else { /* preserve kernels, performance counters, etc. */\n              memcpy(&new_config, config, sizeof(opencl_libsmm_smm_t));\n            }\n            if (NULL == env_xf || '\\0' == *env_xf) {\n              if (0 != devinfo->intel && CL_DEVICE_TYPE_GPU == devinfo->type && NULL != env_cl && NULL != strstr(env_cl, intel_xf))\n              {\n                new_config.flags = 1;\n              }\n            }\n            else new_config.flags = atoi(env_xf);\n            defaults = ((NULL == config || 0 != kernel_idx || (NULL != config && new_config.flags != config->flags)) ? 1 : 0);\n            new_config.lu = LIBXSMM_MAX(-2, (NULL == env_lu || '\\0' == *env_lu) ? (0 != defaults ? default_lu : config->lu)\n                                                                                : atoi(env_lu)); /* populate only lower bound */\n            blockm = ((NULL == env_bm || '\\0' == *env_bm || 1 < new_config.lu) /* 1<LU ignores BM */\n                        ? (1 >= new_config.lu ? 0 : LIBXSMM_UP(m_max / new_config.lu, OPENCL_LIBSMM_VMIN))\n                        : atoi(env_bm));\n            /* two defaults for new_config parameters: 1st - regular, 2nd - BS=1 kernel */\n            new_config.bm = (0 >= blockm ? (0 == kernel_idx ? (0 != defaults ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BM, m_max)\n                                                                             : LIBXSMM_CLMP(config->bm, 1, m_max))\n                                                            : LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BM, m_max))\n                                         : LIBXSMM_MIN(blockm, m_max));\n            new_config.bn = (0 >= blockn ? (0 == kernel_idx ? (0 != defaults ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BN, n_max)\n                                                                             : LIBXSMM_CLMP(config->bn, 1, n_max))\n                                                            : LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BN, n_max))\n                                         : LIBXSMM_MIN(blockn, n_max));\n            new_config.bk = (0 >= blockk ? (0 != defaults ? default_bk : LIBXSMM_CLMP(config->bk, 1, m_max))\n                                         : LIBXSMM_MIN(blockk, m_max));\n            new_config.ws = (0 >= wgmin ? (0 == kernel_idx ? (0 != defaults ? LIBXSMM_MAX(m_max, n_max)\n                                                                            : LIBXSMM_CLMP(config->ws, 1, n_max * m_max))\n                                                           : LIBXSMM_MAX(m_max, n_max))\n                                        : LIBXSMM_MIN(wgmin, n_max * m_max));\n            new_config.wg = LIBXSMM_CLMP(\n              (NULL == env_wg || '\\0' == *env_wg) ? (0 != defaults ? default_wg : config->wg) : atoi(env_wg), -2, 2);\n            new_config.nz = LIBXSMM_CLMP(\n              (NULL == env_nz || '\\0' == *env_nz) ? (0 != defaults ? /*default*/ 0 : config->nz) : atoi(env_nz), 0, 1);\n#  if defined(OPENCL_LIBSMM_TODO)\n            new_config.al = LIBXSMM_CLMP(/* bug with AL=1 and XF=1? */\n              (NULL == env_al || '\\0' == *env_al) ? (0 != defaults ? /*default*/ 0 : config->al) : atoi(env_al), 0, 1);\n#  else\n            LIBXSMM_UNUSED(env_al);\n            new_config.al = 0;\n#  endif\n            new_config.tb = LIBXSMM_CLMP(\n              (NULL == env_tb || '\\0' == *env_tb) ? (0 != defaults ? /*default*/ 0 : config->tb) : atoi(env_tb), 0, 1);\n            new_config.tc = LIBXSMM_CLMP(\n              (NULL == env_tc || '\\0' == *env_tc) ? (0 != defaults ? /*default*/ 1 : config->tc) : atoi(env_tc), 0, 1);\n            new_config.ap = LIBXSMM_CLMP(\n              (NULL == env_ap || '\\0' == *env_ap) ? (0 != defaults ? /*default*/ 0 : config->ap) : atoi(env_ap), 0, 1);\n            new_config.aa = LIBXSMM_CLMP(/* bug with AA=2 and XF=1? */\n              (NULL == env_aa || '\\0' == *env_aa) ? (0 != defaults ? default_aa : config->aa) : atoi(env_aa), 0, 2);\n            new_config.ab = LIBXSMM_CLMP(\n              (NULL == env_ab || '\\0' == *env_ab) ? (0 != defaults ? default_ab : config->ab) : atoi(env_ab), 0, 2);\n            new_config.ac = LIBXSMM_CLMP(\n              (NULL == env_ac || '\\0' == *env_ac) ? (0 != defaults ? default_ac : config->ac) : atoi(env_ac), 0, 1);\n            if (0 >= new_config.s) new_config.s = stack_size;\n            if (0 == kernel_idx || 1 >= new_config.bs) new_config.bs = bs;\n            nbm = (m_max + new_config.bm - 1) / new_config.bm;\n            nbn = (n_max + new_config.bn - 1) / new_config.bn;\n            new_config.wgsize[kernel_idx] = LIBXSMM_MAX(nbm * nbn, new_config.ws);\n            if (0 != new_config.wg) {\n              if (1 < devinfo->wgsize[2]) { /* subgroups supported */\n                if (new_config.wgsize[kernel_idx] <= devinfo->wgsize[2]) {\n                  sgs = devinfo->wgsize[2];\n                }\n                else if (new_config.wgsize[kernel_idx] <= devinfo->wgsize[1]) {\n                  sgs = devinfo->wgsize[1];\n                }\n              }\n              wgsize_prf = LIBXSMM_UP(new_config.wgsize[kernel_idx], 0 != sgs ? sgs : devinfo->wgsize[1]);\n            }\n            else { /* cover exactly */\n              wgsize_prf = new_config.wgsize[kernel_idx];\n            }\n            if (2 <= new_config.wg) wgsize_prf = LIBXSMM_UP2POT(wgsize_prf);\n            if (wgsize_prf < (2 * new_config.wgsize[kernel_idx])) new_config.wgsize[kernel_idx] = wgsize_prf; /* limit */\n            assert(1 <= bs && 0 < new_config.wgsize[kernel_idx] && 0 < wgsize_prf);\n            /* ensure minimum requested WG-size */\n            while ((nbm * nbn) < new_config.ws && (nbm < m_max || nbn < n_max)) {\n              if (nbn < n_max) ++nbn;\n              else if (nbm < m_max) ++nbm;\n            }\n            if ((nbm * nbn) < new_config.ws) {\n              new_config.bn = (n_max + nbn - 1) / nbn;\n              new_config.bm = (m_max + nbm - 1) / nbm;\n              new_config.wgsize[kernel_idx] = (2 > new_config.wg ? (nbm * nbn) : ((int)LIBXSMM_UP2POT(nbm * nbn)));\n            }\n            else { /* reset */\n              nbm = (m_max + new_config.bm - 1) / new_config.bm;\n              nbn = (n_max + new_config.bn - 1) / new_config.bn;\n            }\n            /* limit WG-size to maximum WG-size */\n            while (devinfo->wgsize[0] < new_config.wgsize[kernel_idx] && (new_config.bm < m_max || new_config.bn < n_max)) {\n              if (new_config.bn < n_max) {\n                ++new_config.bn;\n                nbn = (n_max + new_config.bn - 1) / new_config.bn;\n              }\n              else if (new_config.bm < m_max) {\n                ++new_config.bm;\n                nbm = (m_max + new_config.bm - 1) / new_config.bm;\n              }\n              new_config.wgsize[kernel_idx] = (2 > new_config.wg ? (nbm * nbn) : ((int)LIBXSMM_UP2POT(nbm * nbn)));\n            }\n            if (new_config.wgsize[kernel_idx] <= devinfo->wgsize[0]) { /* SMM can be handled by device */\n              const char* const cmem = (EXIT_SUCCESS != c_dbcsr_acc_opencl_use_cmem(devinfo) ? \"global\" : \"constant\");\n              const char* const env_nrepeat = getenv(\"NREPEAT_SMM\");\n              const int typesize = OPENCL_LIBSMM_TYPESIZE(datatype);\n              const int slm_a = (1 != new_config.aa ? 0 : (LIBXSMM_ISPOT(k_max * typesize) + 1));\n              const int slm_b = (1 != new_config.ab ? 0 : (LIBXSMM_ISPOT(k_max * typesize) + 1));\n              const int slm_c = (1 != new_config.ac ? 0 : (LIBXSMM_ISPOT(m_max * typesize) + 1));\n              /* compose build parameters and flags */\n              nchar = LIBXSMM_SNPRINTF(build_params, sizeof(build_params),\n                \"-DT=%s -DGPU=%u -DCONSTANT=%s -DWG=%i -DSG=%i -DFN=%s -DREPEAT=%i -DLU=%i \"\n                \"-DSM=%i -DSN=%i -DSK=%i -DBS=%i -DVL=%i %s -DBM=%i -DBN=%i -DBK=%i \"\n                \"%s %s %s %s %s %s %s %s \", /* space! */\n                tname, CL_DEVICE_TYPE_GPU == devinfo->type, cmem, (int)new_config.wgsize[kernel_idx], (int)sgs, fname,\n                NULL == env_nrepeat ? 1 : atoi(env_nrepeat), new_config.lu, m_max, n_max, k_max, bs, OPENCL_LIBSMM_VMIN,\n                bs == new_config.bs ? \"-DBSC\" : \"\", new_config.bm, new_config.bn, new_config.bk,\n                0 == new_config.tb ? \"\" : \"-DTRACK_B\", 0 != new_config.tc ? \"-DTRACK_C\" : \"\",\n                0 == new_config.nz ? \"\" : \"-DATOMIC_INC_NZ\", 0 == new_config.al ? \"\" : \"-DAL\", 0 == new_config.ap ? \"\" : \"-DSLM_P\",\n                0 == new_config.aa ? \"\" : (1 == slm_a ? \"-DSLM_A=1\" : (0 != slm_a ? \"-DSLM_A=2\" : \"-DREG_A\")),\n                0 == new_config.ab ? \"\" : (1 == slm_b ? \"-DSLM_B=1\" : (0 != slm_b ? \"-DSLM_B=2\" : \"-DREG_B\")),\n                0 == new_config.ac ? \"\" : (1 == slm_c ? \"-DSLM_C=1\" : \"-DSLM_C=2\"));\n              /* apply support for FP-atomics */\n              if (0 < nchar && (int)sizeof(build_params) > nchar) {\n                nchar = c_dbcsr_acc_opencl_flags_atomics(&c_dbcsr_acc_opencl_config.device, tkind, extensions, &nextensions,\n                  build_params + nchar, sizeof(build_params) - nchar);\n              }\n              else result = EXIT_FAILURE;\n              if (0 < nchar && (int)sizeof(build_params) > nchar) {\n                nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), \"%s %s%s\",\n                  (0 == new_config.flags || 0 == devinfo->intel || CL_DEVICE_TYPE_GPU != devinfo->type) ? \"\" : intel_xf,\n                  0 == c_dbcsr_acc_opencl_config.debug ? \"-cl-fast-relaxed-math -cl-denorms-are-zero \" : \"\",\n                  NULL == env_cl ? \"\" : env_cl);\n                if (0 >= nchar || (int)sizeof(buffer) <= nchar) result = EXIT_FAILURE;\n              }\n              else result = EXIT_FAILURE;\n            }\n            else { /* matrix-size causes too large WG-size */\n              result = EXIT_FAILURE;\n            }\n            if (EXIT_SUCCESS == result) {\n              const char* const env_kernel = OPENCL_LIBSMM_SMMENV(\"KERNEL\");\n              result = c_dbcsr_acc_opencl_kernel(NULL == env_kernel ? 0 : 1,\n                NULL == env_kernel ? OPENCL_KERNELS_SOURCE_MULTIPLY : env_kernel, fname, build_params, buffer, NULL /*cl_try*/,\n                NULL /*cl_try_ok*/, extensions, nextensions, new_config.kernel + kernel_idx);\n              if (EXIT_SUCCESS == result) {\n                size_t wgsize_max_kernel = devinfo->wgsize[0];\n                result = clGetKernelWorkGroupInfo(\n                  new_config.kernel[kernel_idx], device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &wgsize_max_kernel, NULL);\n                if (EXIT_SUCCESS == result) {\n                  assert(0 < new_config.wgsize[kernel_idx] && 0 < wgsize_max_kernel);\n                  assert(wgsize_max_kernel <= devinfo->wgsize[0]);\n                  if (new_config.wgsize[kernel_idx] <= wgsize_max_kernel) { /* check planned WG-size vs kernel-specific WG-size */\n                    if (NULL == config || NULL == config->kernel[kernel_idx]) {\n                      config = (opencl_libsmm_smm_t*)libxsmm_xregister(&key, sizeof(key), sizeof(new_config), &new_config);\n                    }\n                    if (NULL != config) {\n                      if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) {\n                        const double duration = libxsmm_timer_duration(start, libxsmm_timer_tick());\n                        LIBXSMM_STDIO_ACQUIRE();\n                        fprintf(stderr, \"INFO ACC/LIBSMM: SMM-kernel \");\n                        opencl_libsmm_write_smm_params(\n                          stderr, 0 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n                        fprintf(stderr, \"=\");\n                        opencl_libsmm_write_smm_params(\n                          stderr, 0 /*only_key*/, &key, &new_config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n                        fprintf(stderr, \" gen=%.1f ms\\n\", 1E3 * duration);\n                        LIBXSMM_STDIO_RELEASE();\n                      }\n                    }\n                    /* failed to register config */\n                    else result = EXIT_FAILURE;\n                  }\n                  else {\n                    if (0 != c_dbcsr_acc_opencl_config.verbosity) {\n                      fprintf(stderr, \"ERROR LIBSMM: tile-size causes too large WG-size (min(%u,%u) < %u)!\\n\",\n                        (unsigned int)wgsize_max_kernel, (unsigned int)devinfo->wgsize[0],\n                        (unsigned int)new_config.wgsize[kernel_idx]);\n                    }\n                    result = EXIT_FAILURE; /* tile-size causes too large WG-size */\n                  }\n                }\n              }\n#  if defined(NDEBUG)\n              else if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) {\n                LIBXSMM_STDIO_ACQUIRE();\n                fprintf(stderr, \"WARNING: SMM-kernel \");\n                opencl_libsmm_write_smm_params(\n                  stderr, 0 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n                fprintf(stderr, \"=\");\n                opencl_libsmm_write_smm_params(\n                  stderr, 0 /*only_key*/, &key, &new_config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n                fprintf(stderr, \" failed to compile!\\n\");\n                LIBXSMM_STDIO_RELEASE();\n              }\n#  endif\n            }\n          }\n          /* insufficient device capabilities */\n          else result = EXIT_FAILURE;\n        }\n        /* remove configuration from registry to avoid infinitely retrying code generation */\n        if (EXIT_SUCCESS != result && NULL != config) {\n          libxsmm_xrelease(&key, sizeof(key));\n        }\n#  if defined(__DBCSR_ACC)\n        c_dbcsr_timestop(&routine_handle);\n#  endif\n      }\n      assert(EXIT_SUCCESS != result || (NULL != config && NULL != config->kernel[kernel_idx]));\n      assert(EXIT_SUCCESS != result || (1 <= config->bm && config->bm <= m_max));\n      assert(EXIT_SUCCESS != result || (1 <= config->bn && config->bn <= n_max));\n      assert(EXIT_SUCCESS != result || (1 <= config->bk && config->bk <= m_max));\n      assert(EXIT_SUCCESS != result || (1 <= config->ws && config->ws <= (m_max * n_max)));\n      assert(EXIT_SUCCESS != result || (-2 <= config->wg && 2 >= config->wg));\n      assert(EXIT_SUCCESS != result || (-2 <= config->lu /*&& 2 >= config->lu*/));\n      assert(EXIT_SUCCESS != result || (0 <= config->nz && 1 >= config->nz));\n      assert(EXIT_SUCCESS != result || (0 <= config->al && 1 >= config->al));\n      assert(EXIT_SUCCESS != result || (0 <= config->tb && 1 >= config->tb));\n      assert(EXIT_SUCCESS != result || (0 <= config->tc && 1 >= config->tc));\n      assert(EXIT_SUCCESS != result || (0 <= config->ap && 1 >= config->ap));\n      assert(EXIT_SUCCESS != result || (0 <= config->aa && 2 >= config->aa));\n      assert(EXIT_SUCCESS != result || (0 <= config->ab && 2 >= config->ab));\n      assert(EXIT_SUCCESS != result || (0 <= config->ac && 1 >= config->ac));\n      assert(EXIT_SUCCESS != result || (1 <= config->wgsize[kernel_idx]));\n      assert(EXIT_SUCCESS != result || (1 <= config->s && 1 <= config->bs));\n      if (EXIT_SUCCESS == result) {\n        size_t work_size;\n        /* scale intra-kernel batchsize according to stacksize */\n        if (0 == kernel_idx && 1 < config->bs && stack_size < config->s) {\n#  if defined(OPENCL_LIBSMM_BS_MIN)\n          const int config_bs = LIBXSMM_MAX(config->bs, OPENCL_LIBSMM_BS_MIN);\n#  else\n          const int config_bs = config->bs;\n#  endif\n          bs = (stack_size * config_bs + config->s - 1) / (config->s - 1);\n          if (config->bs < bs) bs = config->bs;\n        }\n        /* adjust launchsize according to intra-kernel batchsize */\n        work_size = ((stack_size + bs - 1) / bs) * config->wgsize[kernel_idx];\n        /* calling clSetKernelArg/clEnqueueNDRangeKernel must be consistent */\n        ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel[kernel_idx], 0, info_cdata.memory),\n          \"set C-matrix argument of SMM-kernel\");\n        ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel[kernel_idx], 1, info_adata.memory),\n          \"set A-matrix argument of SMM-kernel\");\n        ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel[kernel_idx], 2, info_bdata.memory),\n          \"set B-matrix argument of SMM-kernel\");\n        ACC_OPENCL_CHECK(result, c_dbcsr_acc_opencl_set_kernel_ptr(config->kernel[kernel_idx], 3, info_stack.memory),\n          \"set batch-list argument of SMM-kernel\");\n        ACC_OPENCL_CHECK(result, clSetKernelArg(config->kernel[kernel_idx], 4, sizeof(int), &param_format),\n          \"set batch-format argument of SMM-kernel\");\n        if (0 == kernel_idx) {\n          assert(bs <= config->bs);\n          ACC_OPENCL_CHECK(result, clSetKernelArg(config->kernel[kernel_idx], 5, sizeof(int), &stack_size),\n            \"set stacksize argument of SMM-kernel\");\n          ACC_OPENCL_CHECK(\n            result, clSetKernelArg(config->kernel[kernel_idx], 6, sizeof(int), &bs), \"set minibatch argument of SMM-kernel\");\n        }\n        ACC_OPENCL_CHECK(result,\n          clEnqueueNDRangeKernel(str->queue, config->kernel[kernel_idx], 1 /*work_dim*/, NULL /*offset*/, &work_size,\n            config->wgsize + kernel_idx, 0, NULL, event),\n          \"launch SMM-kernel\");\n        /* eventually update performance counters inside of locked region */\n        if ((3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) && 0 == param_format &&\n            EXIT_SUCCESS == result)\n        {\n          LIBXSMM_STDIO_ACQUIRE();\n          fprintf(stderr, \"INFO ACC/LIBSMM: SMM-kernel \");\n          opencl_libsmm_write_smm_params(\n            stderr, 1 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n          fprintf(stderr, \"=\");\n          opencl_libsmm_write_smm_params(stderr, 1 /*only_key*/, &key, config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/);\n          fprintf(stderr, \" ss=%i\\n\", stack_size);\n          LIBXSMM_STDIO_RELEASE();\n        }\n      }\n      ACC_OPENCL_ATOMIC_RELEASE(lock);\n    }\n  }\n  else if (0 < stack_size) { /* inhomogeneous, large kernel, or unsupported datatype */\n    return -1; /* TODO: document result code to trigger host-fallback */\n  }\n  return result;\n}\n\n\nint libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype,\n  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,\n  c_dbcsr_acc_bool_t def_mnk, void* stream, void* c_stream) {\n  int result = EXIT_SUCCESS;\n#  if defined(OPENCL_LIBSMM_PFORMAT) && (0 < OPENCL_LIBSMM_PFORMAT)\n  assert(LIBXSMM_MAX(LIBXSMM_MAX(m_max, n_max), k_max) < (1 << (OPENCL_LIBSMM_PFORMAT - 1)));\n  if (dbcsr_type_real_8 == datatype && 0 != def_mnk && NULL != opencl_libsmm_acc_dbm_launch_fn) {\n    result = opencl_libsmm_acc_dbm_launch_fn(stream, 1.0 /*alpha*/, stack_size,\n      m_max | (n_max << OPENCL_LIBSMM_PFORMAT) | (k_max << (OPENCL_LIBSMM_PFORMAT * 2)), host_param_stack, dev_param_stack,\n      (const double*)dev_a_data, (const double*)dev_b_data, (double*)dev_c_data);\n  }\n  else\n#  endif\n  {\n    result = opencl_libsmm_acc_process(host_param_stack, dev_param_stack, stack_size, datatype, dev_a_data, dev_b_data, dev_c_data,\n      m_max, n_max, k_max, max_kernel_dim, def_mnk, stream, c_stream, 0 /*param_format*/, NULL /*event*/);\n  }\n  ACC_OPENCL_RETURN(result);\n}\n\n\nint c_calculate_norms(const double* mat, int nblks, const int* offsets, const int* nelems, float* norms, void* stream_ptr) {\n  LIBXSMM_UNUSED(mat);\n  LIBXSMM_UNUSED(nblks);\n  LIBXSMM_UNUSED(offsets);\n  LIBXSMM_UNUSED(nelems);\n  LIBXSMM_UNUSED(norms);\n  LIBXSMM_UNUSED(stream_ptr);\n  return -1;\n}\n\n#  if defined(__cplusplus)\n}\n#  endif\n\n#endif /*__OPENCL*/\n"
  },
  {
    "path": "src/acc/opencl/smm/opencl_libsmm.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: BSD-3-Clause                                                          */\n/*------------------------------------------------------------------------------------------------*/\n#ifndef OPENCL_LIBSMM_H\n#define OPENCL_LIBSMM_H\n\n#include \"../../acc_libsmm.h\"\n#include \"../acc_opencl.h\"\n\n/* Inplace-transpose by default (corresponding environment variable exists also) */\n#if !defined(OPENCL_LIBSMM_TRANS_INPLACE) && 0\n#  define OPENCL_LIBSMM_TRANS_INPLACE\n#endif\n#if !defined(OPENCL_LIBSMM_F32_OFF) && defined(__DBCSR_ACC) && 0\n#  define OPENCL_LIBSMM_F32_OFF\n#endif\n#if !defined(OPENCL_LIBSMM_F32) && !defined(OPENCL_LIBSMM_F32_OFF)\n#  define OPENCL_LIBSMM_F32\n#endif\n#if !defined(OPENCL_LIBSMM_F64) && !defined(OPENCL_LIBSMM_F64_OFF)\n#  define OPENCL_LIBSMM_F64\n#endif\n#if !defined(OPENCL_LIBSMM_PFORMAT) && 1\n#  define OPENCL_LIBSMM_PFORMAT 8\n#endif\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/** Type for querying transpose kernel configuration. */\ntypedef struct opencl_libsmm_transkey_t {\n  libsmm_acc_data_t type; /* must be the 1st data member */\n  int m, n;\n} opencl_libsmm_transkey_t;\n\n/** Type for transpose kernel configuration. */\ntypedef struct opencl_libsmm_trans_t {\n  cl_kernel kernel; /* must be the 1st data member */\n  size_t wgsize;\n} opencl_libsmm_trans_t;\n\n/** Type for querying SMM-kernel configuration. */\ntypedef struct opencl_libsmm_smmkey_t {\n  libsmm_acc_data_t type; /* must be the 1st data member */\n  int m, n, k;\n  /* device matching configuration (parameters) */\n  unsigned int devuid;\n} opencl_libsmm_smmkey_t;\n\n/** Type for SMM-kernel configuration. */\ntypedef struct opencl_libsmm_smm_t {\n  cl_kernel kernel[2]; /* must be the 1st data member */\n  size_t wgsize[2];\n  double gflops;\n  /* (pseudo-)parameters (either pretuned or determined) */\n  int s, bs, bm, bn, bk, ws, wg, lu, nz, al, tb, tc, ap, aa, ab, ac, flags;\n} opencl_libsmm_smm_t;\n\n/** Type to collect statistics about tuned SMM-kernels */\ntypedef struct opencl_libsmm_perfest_t {\n  double gf_ai_sratio_max, gf_ai_sratio_sumlog, gf_ai_sratio_kahan;\n  double gf_ai_dratio_max, gf_ai_dratio_sumlog, gf_ai_dratio_kahan;\n  size_t scount, dcount;\n} opencl_libsmm_perfest_t;\n\n\n/** Returns environment variable's value for given domain and key. */\nconst char* opencl_libsmm_getenv(const char domain[], const char key[]);\n\n/**\n * TRANS-kernel: write key and tunables into a (file-)stream.\n * If config=NULL, key/parameter names are written. The arguments\n * delim, begin, and close are optional as well (can be NULL).\n * With only the key being written the config still controls\n * if values or names are written.\n * Returns the number of characters written (negative if error).\n */\nint opencl_libsmm_write_trans_params(FILE* stream, int only_key, const opencl_libsmm_transkey_t* key,\n  const opencl_libsmm_trans_t* config, const char* delim, const char* begin, const char* close);\n\n/**\n * SMM-kernel: write key and tunables into a (file-)stream.\n * The environment variable OPENCL_LIBSMM_SMM_PARAMS=\"<output>\"\n * reproduces a configuration. If config=NULL, key/parameter\n * names are written. The arguments delim, begin, and close\n * are optional as well (can be NULL).\n * With only the key being written the config still controls\n * if values or names are written.\n * Returns the number of characters written (negative if error).\n */\nint opencl_libsmm_write_smm_params(FILE* stream, int only_key, const opencl_libsmm_smmkey_t* key, const opencl_libsmm_smm_t* config,\n  const char* delim, const char* begin, const char* close);\n\n/** Tokenize parambuf and initialize key/value pair. */\nint opencl_libsmm_read_smm_params(char* parambuf, opencl_libsmm_smmkey_t* key, opencl_libsmm_smm_t* value,\n  opencl_libsmm_perfest_t* perfest, char* device, int* key_ok);\n\nc_dbcsr_acc_bool_t libsmm_acc_process_suitable(\n  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);\n\n#if defined(OPENCL_LIBSMM_PFORMAT) && (0 < OPENCL_LIBSMM_PFORMAT)\ntypedef int (*opencl_libsmm_acc_dbm_launch_fn_t)(void* stream, double alpha, int ntasks, int param_format, const int* params_host,\n  const int* params, const double* pack_a_data, const double* pack_b_data, double* shard_c_data);\n/** Enables DBM-kernel for LIBSMM (revsere reuse). */\nvoid opencl_libsmm_acc_set_dbm_launch_fn(opencl_libsmm_acc_dbm_launch_fn_t launch_fn);\n\n/** Backend-specific variant of libsmm_acc_process, which allows to easier reuse LIBSMM kernels. */\nint opencl_libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int stack_size, libsmm_acc_data_t datatype,\n  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,\n  c_dbcsr_acc_bool_t def_mnk, void* stream, void* c_stream, int param_format, cl_event* event);\n#endif\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif /*OPENCL_LIBSMM_H*/\n"
  },
  {
    "path": "src/acc/opencl/smm/opencl_test.sh",
    "content": "#!/usr/bin/env bash\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: BSD-3-Clause                                                            #\n####################################################################################################\n\nHERE=\"$(cd \"$(dirname \"$0\")\" && pwd -P)\"\nTEST=acc_bench\nEXE=${HERE}/../../${TEST}\n\nif [ ! -e \"$1\" ]; then\n  >&2 echo \"USAGE: $0 logfile\"\n  exit 1\nfi\nif [ ! -e \"${EXE}\" ]; then\n  >&2 echo \"ERROR: please build ${TEST}!\"\n  exit 1\nfi\n\nsed -n \"s/FAILED\\[..*\\] \\(..*\\): \\(..*\\)/\\1 \\2/p\" \"$1\" | while read -r LINE; do\n  read -r MNK KEYVALS <<<\"${LINE}\"\n  EXPORT=\"\"\n  for KEYVAL in ${KEYVALS}; do\n    EXPORT=\"${EXPORT} OPENCL_LIBSMM_SMM_${KEYVAL}\"\n  done\n  if [ \"${EXPORT}\" ]; then\n    echo \"${MNK}: ${KEYVALS}\"\n    eval \"${EXPORT} ${EXE} ${MNK} 2>&1\" | sed \"s/^/  /\"\n  fi\ndone\n"
  },
  {
    "path": "src/acc/opencl/smm/params/README.md",
    "content": "# Tuned Parameters\n\nThe 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).\n\nTuned 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.\n\nParameters 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.\n\nParameters 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.\n"
  },
  {
    "path": "src/acc/opencl/smm/params/tune_multiply_A100.csv",
    "content": "DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\n"
  },
  {
    "path": "src/acc/opencl/smm/params/tune_multiply_BMG.csv",
    "content": "DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\n"
  },
  {
    "path": "src/acc/opencl/smm/params/tune_multiply_GH200.csv",
    "content": "DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\n"
  },
  {
    "path": "src/acc/opencl/smm/params/tune_multiply_H100.csv",
    "content": "DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\nNVIDIA 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\n"
  },
  {
    "path": "src/acc/opencl/smm/params/tune_multiply_Mi250.csv",
    "content": "DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC\ngfx90a [0x989f];3;1;1;1;30000;0;8;1;1;1;1;1;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;3;3;30000;0;10;3;1;3;1;-1;0;0;1;1;1;0;2;0;0;0\ngfx90a [0x989f];3;3;3;4;30000;0;25;3;1;2;1;0;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;3;3;5;30000;0;29;3;1;2;1;-1;-2;0;1;0;1;0;2;2;1;0\ngfx90a [0x989f];3;3;3;6;30000;0;29;3;1;2;1;-2;-2;0;1;1;1;0;0;0;0;0\ngfx90a [0x989f];3;3;3;7;30000;0;29;3;1;2;1;-1;0;0;1;1;1;0;2;2;1;0\ngfx90a [0x989f];3;3;3;8;30000;0;9;3;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;3;3;9;30000;0;9;3;1;2;1;-2;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;3;10;30000;0;37;3;1;1;1;0;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;3;11;30000;0;8;3;1;3;1;1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;3;12;30000;0;6;3;1;3;1;-2;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;3;3;16;30000;0;9;3;1;1;1;1;-1;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;3;23;30000;0;3;3;1;1;1;-1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;4;3;30000;0;21;3;1;1;1;0;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;3;4;4;30000;0;25;3;1;2;1;0;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;3;5;3;30000;0;18;3;1;1;1;1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;3;5;5;30000;0;25;3;1;2;1;-1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;6;3;30000;0;15;3;1;1;1;1;0;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;3;6;6;30000;0;25;3;1;3;1;-1;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;3;7;3;30000;0;15;3;1;2;1;-1;0;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;3;7;7;30000;0;29;3;1;1;1;-1;0;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;3;8;3;30000;0;15;3;1;2;1;1;-1;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;8;8;30000;0;29;3;1;1;1;0;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;3;9;3;30000;0;15;3;1;1;1;-1;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;3;9;9;30000;0;25;3;1;3;1;0;-2;0;1;1;1;0;0;2;1;0\ngfx90a [0x989f];3;3;10;3;30000;0;15;3;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;10;10;30000;0;25;3;1;1;1;0;-2;0;0;1;1;0;2;2;0;0\ngfx90a [0x989f];3;3;11;3;30000;0;15;3;1;3;1;0;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;3;11;11;30000;0;30;3;1;1;1;1;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;12;3;30000;0;15;3;1;1;1;-1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;3;12;12;30000;0;25;3;1;2;1;-2;-1;0;0;0;1;0;2;1;0;0\ngfx90a [0x989f];3;3;16;3;30000;0;15;3;1;2;1;0;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;3;16;16;30000;0;40;3;1;1;1;-2;0;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;3;23;3;30000;0;15;3;1;3;1;0;0;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;3;23;23;30000;0;50;3;1;3;1;-1;0;0;1;0;1;1;0;0;1;0\ngfx90a [0x989f];3;4;3;3;30000;0;18;4;1;3;1;1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;4;3;4;30000;0;25;4;1;2;1;-1;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;4;4;3;30000;0;21;4;1;2;1;-2;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;4;4;4;30000;0;16;4;1;2;1;1;3;1;1;1;1;0;0;0;0;0\ngfx90a [0x989f];3;4;4;5;30000;0;9;4;1;2;1;-1;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;4;4;6;30000;0;29;4;1;3;1;0;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;4;4;7;30000;0;29;4;1;2;1;-1;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;4;4;8;30000;0;9;4;1;2;1;-2;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;4;4;9;30000;0;25;4;1;3;1;1;-1;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;4;4;10;30000;0;25;4;1;2;1;0;-1;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;4;4;11;30000;0;25;4;1;4;1;0;-1;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;4;4;12;30000;0;29;4;1;4;1;1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;4;4;16;30000;0;4;4;1;2;1;-1;-1;0;1;0;1;0;0;0;0;0\ngfx90a [0x989f];3;4;4;23;30000;0;30;4;1;3;1;0;0;0;1;0;1;0;0;2;1;0\ngfx90a [0x989f];3;4;5;4;30000;0;25;4;1;2;1;0;3;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;4;5;5;30000;0;25;4;1;1;1;-1;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;4;6;4;30000;0;21;4;1;2;1;-1;1;0;1;1;1;0;0;2;0;0\ngfx90a [0x989f];3;4;6;6;30000;0;25;4;1;3;1;1;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;4;7;4;30000;0;21;4;1;1;1;-2;0;0;1;1;1;0;0;0;0;0\ngfx90a [0x989f];3;4;7;7;30000;0;25;4;1;4;1;0;-2;0;1;0;1;0;2;2;1;0\ngfx90a [0x989f];3;4;8;4;30000;0;25;4;1;3;1;1;-1;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;4;8;8;30000;0;9;4;1;2;1;0;-1;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;4;9;4;30000;0;20;4;1;4;1;1;0;0;1;0;1;0;2;0;1;0\ngfx90a [0x989f];3;4;9;9;30000;0;26;4;1;3;1;1;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;4;10;4;30000;0;20;4;1;4;1;0;-1;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;4;10;10;30000;0;25;4;1;2;1;0;0;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;4;11;4;30000;0;18;4;1;1;1;0;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;4;11;11;30000;0;30;4;1;4;1;0;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;4;12;4;30000;0;20;4;1;3;1;-1;-2;0;1;0;1;0;2;2;0;0\ngfx90a [0x989f];3;4;12;12;30000;0;40;4;1;4;1;1;-1;0;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;4;16;4;30000;0;20;4;1;1;1;1;-1;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;4;16;16;30000;0;30;4;1;1;1;1;-1;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;4;23;4;30000;0;24;4;1;2;1;-2;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;4;23;23;30000;0;25;4;1;1;1;-2;-1;0;0;0;1;0;0;1;0;0\ngfx90a [0x989f];3;5;3;3;30000;0;18;5;1;5;1;0;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;5;3;5;30000;0;12;5;1;2;1;1;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;5;4;4;30000;0;24;5;1;4;1;0;0;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;5;4;5;30000;0;9;5;1;5;1;0;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;5;3;30000;0;20;5;1;2;1;-1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;5;5;4;30000;0;9;5;1;2;1;0;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;5;5;30000;0;10;5;1;2;1;0;-1;0;1;1;1;1;0;0;0;0\ngfx90a [0x989f];3;5;5;6;30000;0;9;5;1;4;1;-2;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;5;7;30000;0;20;5;1;2;1;0;1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;5;8;30000;0;24;5;1;3;1;-1;-1;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;5;5;9;30000;0;25;5;1;5;1;0;0;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;5;5;10;30000;0;25;5;1;2;1;1;-1;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;5;5;11;30000;0;25;5;1;2;1;0;1;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;5;5;12;30000;0;12;5;1;3;1;-2;0;0;1;1;1;0;2;0;0;0\ngfx90a [0x989f];3;5;5;16;30000;0;25;5;1;5;1;1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;5;5;23;30000;0;30;5;1;3;5;0;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;6;5;30000;0;20;5;1;4;1;-1;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;6;6;30000;0;9;5;1;5;1;0;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;7;5;30000;0;9;5;1;1;1;1;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;7;7;30000;0;20;5;1;3;1;0;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;8;5;30000;0;12;5;1;5;1;-1;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;8;8;30000;0;20;5;1;5;1;1;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;9;5;30000;0;20;5;1;2;1;1;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;5;9;9;30000;0;25;5;1;2;1;1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;5;10;5;30000;0;20;5;1;4;1;-1;-1;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;5;10;10;30000;0;25;5;1;2;1;-1;0;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;5;11;5;30000;0;20;5;1;5;1;1;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;5;11;11;30000;0;25;5;1;3;1;-1;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;12;5;30000;0;20;5;1;4;1;-1;0;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;5;12;12;30000;0;25;5;1;5;1;0;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;5;16;5;30000;0;20;5;1;4;1;-1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;5;16;16;30000;0;26;5;1;4;1;0;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;5;23;5;30000;0;24;5;1;2;1;-2;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;5;23;23;30000;0;24;5;1;1;1;-2;-1;0;0;1;1;1;0;1;0;0\ngfx90a [0x989f];3;6;3;3;30000;0;16;6;1;4;1;-2;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;6;3;6;30000;0;15;6;1;6;1;-1;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;4;4;30000;0;18;6;1;4;1;-1;-1;0;1;0;1;0;0;0;0;0\ngfx90a [0x989f];3;6;4;6;30000;0;15;6;1;3;1;0;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;6;5;5;30000;0;12;6;1;2;1;1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;6;5;6;30000;0;15;6;1;5;1;-1;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;6;3;30000;0;15;6;1;3;1;-1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;6;6;4;30000;0;15;6;1;2;1;-1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;6;6;5;30000;0;9;6;1;6;1;1;-1;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;6;6;6;30000;0;12;6;1;6;1;-2;-1;0;1;1;1;1;2;0;0;0\ngfx90a [0x989f];3;6;6;7;30000;0;12;6;1;4;1;-1;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;6;8;30000;0;20;6;1;4;1;-2;-2;0;1;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;6;9;30000;0;20;6;1;6;1;0;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;6;10;30000;0;15;6;1;1;1;-2;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;6;11;30000;0;24;6;1;5;1;-1;0;1;0;1;1;1;2;2;0;0\ngfx90a [0x989f];3;6;6;12;30000;0;20;6;1;6;1;-1;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;6;6;16;30000;0;25;6;1;4;1;0;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;6;6;23;30000;0;15;6;1;1;1;0;-2;0;0;1;1;0;2;2;0;0\ngfx90a [0x989f];3;6;7;6;30000;0;15;6;1;3;1;1;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;6;7;7;30000;0;15;6;1;4;1;1;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;8;6;30000;0;15;6;1;5;1;-1;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;8;8;30000;0;20;6;1;5;1;-2;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;9;6;30000;0;15;6;1;4;1;-2;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;6;9;9;30000;0;9;6;1;1;1;-1;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;10;6;30000;0;15;6;1;4;1;-2;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;10;10;30000;0;25;6;1;1;1;0;-1;0;1;1;1;1;0;0;0;0\ngfx90a [0x989f];3;6;11;6;30000;0;15;6;1;2;1;-1;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;6;11;11;30000;0;25;6;1;1;1;-2;-2;0;1;1;1;1;2;0;0;0\ngfx90a [0x989f];3;6;12;6;30000;0;15;6;1;6;1;-2;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;6;12;12;30000;0;24;6;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;6;16;6;30000;0;20;6;1;6;1;1;-1;1;1;0;1;1;0;0;0;0\ngfx90a [0x989f];3;6;16;16;30000;0;26;6;1;1;1;0;0;1;1;0;1;1;2;2;1;0\ngfx90a [0x989f];3;6;23;6;30000;0;24;6;1;6;1;1;0;1;0;1;1;1;0;0;0;0\ngfx90a [0x989f];3;6;23;23;30000;0;24;6;1;5;1;0;-2;0;0;0;1;0;2;1;0;0\ngfx90a [0x989f];3;7;3;3;30000;0;15;7;1;2;1;-1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;7;3;7;30000;0;12;7;1;4;1;-2;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;7;4;4;30000;0;15;7;1;3;1;0;-2;0;1;1;1;0;0;2;0;0\ngfx90a [0x989f];3;7;4;7;30000;0;12;7;1;2;1;0;0;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;7;5;5;30000;0;12;7;1;3;1;-1;1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;7;5;7;30000;0;12;7;1;3;1;1;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;7;6;6;30000;0;12;7;1;3;1;-1;1;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;7;6;7;30000;0;12;7;1;2;1;0;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;7;7;3;30000;0;15;7;1;4;1;0;-1;0;1;0;1;0;0;2;0;0\ngfx90a [0x989f];3;7;7;4;30000;0;18;7;1;3;1;1;1;0;0;0;1;1;2;2;0;0\ngfx90a [0x989f];3;7;7;5;30000;0;12;7;1;6;1;1;-2;0;1;1;1;0;2;0;0;0\ngfx90a [0x989f];3;7;7;6;30000;0;15;7;1;6;1;-1;0;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;7;7;7;30000;0;12;7;1;2;1;1;0;0;1;0;1;1;0;0;0;0\ngfx90a [0x989f];3;7;7;8;30000;0;13;7;1;6;1;-1;-2;1;1;1;1;1;0;0;0;0\ngfx90a [0x989f];3;7;7;9;30000;0;15;7;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;7;7;10;30000;0;15;7;1;7;1;-1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;7;7;11;30000;0;15;7;1;1;1;-1;-2;0;0;1;1;1;2;2;0;0\ngfx90a [0x989f];3;7;7;12;30000;0;12;7;1;1;1;1;-2;1;1;1;1;1;2;2;1;0\ngfx90a [0x989f];3;7;7;16;30000;0;15;7;1;1;1;-1;-2;1;1;0;1;1;2;1;0;0\ngfx90a [0x989f];3;7;7;23;30000;0;12;7;1;1;7;-2;0;0;0;1;1;1;2;1;0;0\ngfx90a [0x989f];3;7;8;7;30000;0;15;7;1;3;1;-2;1;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;7;8;8;30000;0;20;7;1;7;1;-1;-1;0;1;0;1;1;0;2;1;0\ngfx90a [0x989f];3;7;9;7;30000;0;20;7;1;6;1;-2;0;0;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;7;9;9;30000;0;15;7;1;1;1;1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;7;10;7;30000;0;20;7;1;4;1;1;0;0;1;0;1;1;2;0;0;0\ngfx90a [0x989f];3;7;10;10;30000;0;15;7;1;1;1;-2;0;1;0;0;1;0;2;2;1;0\ngfx90a [0x989f];3;7;11;7;30000;0;20;7;1;6;1;-2;0;0;1;0;1;1;2;2;0;0\ngfx90a [0x989f];3;7;11;11;30000;0;15;7;1;1;1;1;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;7;12;7;30000;0;24;7;1;2;1;1;-1;1;0;0;1;1;0;0;0;0\ngfx90a [0x989f];3;7;12;12;30000;0;13;7;1;7;1;0;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;7;16;7;30000;0;24;7;1;7;1;0;-2;1;1;0;1;1;2;2;1;0\ngfx90a [0x989f];3;7;16;16;30000;0;24;7;1;7;1;0;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;7;23;7;30000;0;25;7;1;3;1;-2;1;1;1;1;1;1;0;0;0;0\ngfx90a [0x989f];3;7;23;23;30000;0;24;7;1;1;1;1;-2;1;0;1;1;1;2;0;1;0\ngfx90a [0x989f];3;8;3;3;30000;0;15;8;1;4;1;1;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;8;3;8;30000;0;15;8;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;8;4;4;30000;0;9;8;1;1;1;-2;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;8;4;8;30000;0;7;8;1;1;1;1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;8;5;5;30000;0;12;8;1;2;1;-1;4;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;8;5;8;30000;0;15;8;1;1;1;1;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;8;6;6;30000;0;12;8;1;8;1;-2;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;8;6;8;30000;0;15;8;1;1;1;-2;-1;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;8;7;7;30000;0;13;8;1;5;1;1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;8;7;8;30000;0;20;8;1;6;1;-1;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;8;8;3;30000;0;15;8;1;1;1;1;-1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;8;8;4;30000;0;15;8;1;7;1;0;-1;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;8;8;5;30000;0;15;8;1;8;1;0;-1;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;8;8;6;30000;0;15;8;1;4;1;0;0;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;8;8;7;30000;0;15;8;1;4;1;1;-1;1;1;1;1;1;0;0;1;0\ngfx90a [0x989f];3;8;8;8;30000;0;10;8;1;3;1;-1;0;0;1;1;1;1;0;2;1;0\ngfx90a [0x989f];3;8;8;16;30000;0;12;8;1;1;1;-1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;8;8;23;30000;0;12;8;1;1;1;1;-2;1;1;0;1;1;2;1;0;0\ngfx90a [0x989f];3;8;16;8;30000;0;24;8;1;2;1;-1;1;1;1;1;1;1;0;2;1;0\ngfx90a [0x989f];3;8;16;16;30000;0;20;8;1;1;1;1;-2;1;1;0;1;1;0;2;1;0\ngfx90a [0x989f];3;8;23;8;30000;0;26;8;1;8;1;1;-1;1;1;1;1;1;2;2;1;0\ngfx90a [0x989f];3;8;23;23;30000;0;24;8;1;8;1;0;-2;0;0;0;1;0;0;1;0;0\ngfx90a [0x989f];3;9;3;3;30000;0;9;9;1;9;1;-1;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;9;3;9;30000;0;10;9;1;1;1;-2;0;0;1;1;1;1;2;2;0;0\ngfx90a [0x989f];3;9;4;4;30000;0;12;9;1;1;1;1;0;0;0;1;1;0;2;2;0;0\ngfx90a [0x989f];3;9;4;9;30000;0;15;9;1;6;1;1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;9;5;5;30000;0;13;9;1;9;1;-2;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;9;5;9;30000;0;10;9;1;1;1;-2;0;1;1;0;1;1;2;0;0;0\ngfx90a [0x989f];3;9;6;6;30000;0;15;9;1;4;1;-1;1;0;1;1;1;1;0;0;1;0\ngfx90a [0x989f];3;9;6;9;30000;0;10;9;1;1;1;0;-2;1;1;1;1;1;0;2;0;0\ngfx90a [0x989f];3;9;7;7;30000;0;13;9;1;1;1;1;-2;0;1;0;1;1;2;0;0;0\ngfx90a [0x989f];3;9;7;9;30000;0;13;9;1;1;1;-2;0;1;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;9;9;3;30000;0;15;9;1;4;1;1;-1;0;1;0;1;1;0;0;0;0\ngfx90a [0x989f];3;9;9;4;30000;0;15;9;1;4;1;-1;-1;0;1;0;1;1;2;2;0;0\ngfx90a [0x989f];3;9;9;5;30000;0;15;9;1;2;1;0;1;0;1;0;1;1;2;0;0;0\ngfx90a [0x989f];3;9;9;6;30000;0;24;9;1;2;1;1;-2;0;0;1;1;1;0;0;1;0\ngfx90a [0x989f];3;9;9;7;30000;0;9;9;1;9;1;-1;0;1;1;1;1;1;0;0;1;0\ngfx90a [0x989f];3;9;9;9;30000;0;10;9;1;3;1;0;-1;0;1;1;1;1;0;2;1;0\ngfx90a [0x989f];3;9;9;16;30000;0;12;9;1;1;1;1;-2;0;0;1;1;1;2;2;0;0\ngfx90a [0x989f];3;9;9;23;30000;0;15;9;1;1;1;-1;-1;0;1;1;1;1;2;2;0;0\ngfx90a [0x989f];3;9;16;9;30000;0;24;9;1;8;1;0;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;9;16;16;30000;0;12;9;1;1;1;1;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;9;23;9;30000;0;26;9;1;8;1;0;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;9;23;23;30000;0;3;8;1;5;1;0;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;10;3;3;30000;0;10;10;1;8;1;0;-2;0;1;0;1;1;2;0;0;0\ngfx90a [0x989f];3;10;3;10;30000;0;12;10;1;1;1;-1;-2;0;0;1;1;1;2;0;0;0\ngfx90a [0x989f];3;10;4;4;30000;0;13;10;1;3;1;-2;-1;1;1;0;1;1;0;2;0;0\ngfx90a [0x989f];3;10;4;10;30000;0;12;10;1;1;1;0;0;0;1;1;1;1;2;2;0;0\ngfx90a [0x989f];3;10;5;5;30000;0;15;10;1;3;1;-1;-2;0;1;1;1;1;0;0;1;0\ngfx90a [0x989f];3;10;5;10;30000;0;10;10;1;1;1;-2;0;1;0;1;1;1;2;2;0;0\ngfx90a [0x989f];3;10;6;6;30000;0;9;10;1;1;1;-1;-1;1;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;10;6;10;30000;0;12;10;1;1;1;0;0;1;1;0;1;1;0;0;0;0\ngfx90a [0x989f];3;10;7;7;30000;0;20;10;1;8;1;1;0;0;1;1;1;1;2;2;0;0\ngfx90a [0x989f];3;10;7;10;30000;0;9;10;1;1;1;1;-2;0;1;0;1;1;2;0;0;0\ngfx90a [0x989f];3;10;10;3;30000;0;15;10;1;10;0;1;-1;1;1;1;1;1;0;0;0;0\ngfx90a [0x989f];3;10;10;4;30000;0;20;10;1;5;1;0;1;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;10;10;5;30000;0;15;10;1;3;0;0;0;0;0;0;1;1;2;2;1;0\ngfx90a [0x989f];3;10;10;6;30000;0;25;10;1;7;1;0;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;10;10;7;30000;0;15;10;1;1;1;0;0;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;10;10;10;30000;0;10;10;1;9;1;0;-2;0;1;1;1;1;0;1;0;0\ngfx90a [0x989f];3;10;10;16;30000;0;12;10;1;1;1;-2;0;0;1;1;1;0;2;0;0;0\ngfx90a [0x989f];3;10;10;23;30000;0;15;10;1;1;1;1;0;0;1;1;1;1;2;2;0;0\ngfx90a [0x989f];3;10;16;10;30000;0;13;10;1;1;1;-2;0;1;1;0;1;1;2;0;0;0\ngfx90a [0x989f];3;10;16;16;30000;0;15;10;1;1;1;-1;0;0;0;1;1;1;2;2;1;0\ngfx90a [0x989f];3;10;23;10;30000;0;24;10;1;4;1;-1;-1;0;1;1;1;1;0;0;1;0\ngfx90a [0x989f];3;10;23;23;30000;0;3;10;1;4;1;-2;2;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;11;3;3;30000;0;9;11;1;6;1;0;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;11;3;11;30000;0;10;11;1;1;1;-1;-2;0;1;1;1;1;0;2;1;0\ngfx90a [0x989f];3;11;4;4;30000;0;13;11;1;3;1;0;-1;0;1;0;1;1;0;2;0;0\ngfx90a [0x989f];3;11;4;11;30000;0;12;11;1;1;1;-2;0;0;1;1;1;1;2;2;0;0\ngfx90a [0x989f];3;11;5;5;30000;0;10;11;1;1;1;0;-2;0;1;1;1;1;0;0;0;0\ngfx90a [0x989f];3;11;5;11;30000;0;10;11;1;1;1;0;0;0;0;0;1;1;0;2;0;0\ngfx90a [0x989f];3;11;6;6;30000;0;12;11;1;6;1;1;0;0;1;1;1;1;2;1;0;0\ngfx90a [0x989f];3;11;6;11;30000;0;12;11;1;1;1;-1;0;0;1;1;1;1;2;2;0;0\ngfx90a [0x989f];3;11;7;7;30000;0;13;11;1;1;1;-1;0;0;1;1;1;1;2;0;0;0\ngfx90a [0x989f];3;11;7;11;30000;0;5;8;1;7;1;-1;2;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;11;11;3;30000;0;22;11;1;2;1;-1;1;0;1;0;1;1;2;0;1;0\ngfx90a [0x989f];3;11;11;4;30000;0;20;11;1;2;1;-1;-2;0;1;1;1;1;0;0;0;0\ngfx90a [0x989f];3;11;11;5;30000;0;20;11;1;5;1;-2;1;0;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;11;11;6;30000;0;24;11;1;1;1;-2;0;0;0;0;1;1;2;2;0;0\ngfx90a [0x989f];3;11;11;7;30000;0;9;8;1;9;1;1;1;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;11;11;11;30000;0;12;11;1;10;1;-2;-2;0;1;0;1;1;2;0;0;0\ngfx90a [0x989f];3;11;11;16;30000;0;3;8;1;11;1;1;-1;1;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;11;11;23;30000;0;15;11;1;1;1;1;-1;0;1;1;1;1;2;2;0;0\ngfx90a [0x989f];3;11;16;11;30000;0;15;11;1;1;1;0;-2;0;1;0;1;1;2;2;0;0\ngfx90a [0x989f];3;11;16;16;30000;0;3;8;1;1;1;-1;-1;1;1;0;1;0;1;2;0;0\ngfx90a [0x989f];3;11;23;11;30000;0;40;11;1;1;1;-1;-2;1;0;0;1;1;2;0;1;0\ngfx90a [0x989f];3;11;23;23;30000;0;3;8;1;7;1;-1;2;0;1;0;1;0;1;2;1;0\ngfx90a [0x989f];3;12;3;3;30000;0;15;12;1;2;1;-1;-2;0;1;0;1;0;0;0;0;0\ngfx90a [0x989f];3;12;3;12;30000;0;10;12;1;1;1;1;-2;0;0;1;1;1;0;2;1;0\ngfx90a [0x989f];3;12;4;4;30000;0;11;12;1;12;1;0;0;0;1;0;1;1;0;0;0;0\ngfx90a [0x989f];3;12;4;12;30000;0;12;12;1;1;12;1;0;0;0;1;1;1;0;2;1;0\ngfx90a [0x989f];3;12;5;5;30000;0;10;12;1;7;1;0;0;0;1;1;1;1;2;0;0;0\ngfx90a [0x989f];3;12;5;12;30000;0;12;12;1;1;1;0;-2;0;1;1;1;1;2;0;0;0\ngfx90a [0x989f];3;12;6;6;30000;0;13;12;1;1;1;1;-2;0;1;0;1;1;0;0;1;0\ngfx90a [0x989f];3;12;6;12;30000;0;12;12;1;1;1;-1;-2;1;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;12;7;7;30000;0;15;12;1;1;1;0;0;1;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;12;7;12;30000;0;12;12;1;1;1;-1;0;0;1;1;1;1;0;2;1;0\ngfx90a [0x989f];3;12;12;3;30000;0;20;12;1;12;0;-2;-2;0;1;0;1;0;2;2;0;0\ngfx90a [0x989f];3;12;12;4;30000;0;20;12;1;9;0;0;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;12;12;5;30000;0;9;12;1;2;1;-1;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;12;12;6;30000;0;15;12;1;12;1;-2;-2;0;0;0;1;0;0;0;0;0\ngfx90a [0x989f];3;12;12;7;30000;0;15;12;1;1;1;-2;-2;0;0;0;1;0;2;0;0;0\ngfx90a [0x989f];3;12;12;12;30000;0;12;12;1;8;1;0;0;0;1;0;1;1;0;1;0;0\ngfx90a [0x989f];3;12;12;16;30000;0;12;12;1;1;1;-1;-2;0;0;0;1;0;2;1;0;0\ngfx90a [0x989f];3;12;12;23;30000;0;4;8;1;2;1;1;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;12;16;12;30000;0;4;8;1;5;1;0;1;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;12;16;16;30000;0;15;12;1;1;1;1;0;0;0;1;1;1;2;2;0;0\ngfx90a [0x989f];3;12;23;12;30000;0;20;12;1;1;1;0;-2;0;0;1;1;1;2;2;1;0\ngfx90a [0x989f];3;12;23;23;30000;0;3;8;1;8;1;-2;-2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;13;13;13;30000;0;12;13;1;11;1;0;-1;0;1;0;1;1;0;2;1;0\ngfx90a [0x989f];3;13;13;23;30000;0;12;13;1;1;1;-2;-2;0;1;0;1;1;2;0;1;0\ngfx90a [0x989f];3;13;13;32;30000;0;3;13;1;9;13;0;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;13;23;13;30000;0;30;8;1;10;1;1;2;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;13;23;23;30000;0;3;8;1;6;1;-1;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;14;14;14;30000;0;10;14;1;10;1;0;0;0;1;1;1;1;0;2;0;0\ngfx90a [0x989f];3;14;14;23;30000;0;15;14;1;1;1;-2;0;0;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;14;14;29;30000;0;4;8;1;5;14;0;1;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;14;14;32;30000;0;3;8;1;9;1;1;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;14;23;14;30000;0;26;8;1;2;1;-2;1;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;14;23;23;30000;0;40;8;1;3;1;1;2;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;14;29;14;30000;0;40;8;1;14;1;-1;1;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;14;29;29;30000;0;3;8;1;7;1;1;1;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;14;29;32;30000;0;3;8;1;4;1;1;1;0;1;1;1;0;1;2;1;0\ngfx90a [0x989f];3;14;32;14;30000;0;50;8;1;14;1;1;3;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;14;32;29;30000;0;3;8;1;2;1;1;4;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;14;32;32;30000;0;40;8;1;4;1;1;4;0;1;0;1;1;1;0;1;0\ngfx90a [0x989f];3;15;15;15;30000;0;5;8;1;3;1;0;0;0;1;1;1;0;1;0;1;0\ngfx90a [0x989f];3;15;15;23;30000;0;4;8;1;15;1;0;0;1;1;1;1;0;1;0;1;0\ngfx90a [0x989f];3;15;23;15;30000;0;4;8;1;11;1;0;-2;1;1;1;1;0;1;2;1;0\ngfx90a [0x989f];3;15;23;23;30000;0;4;8;1;6;1;-1;3;1;1;0;1;0;1;2;1;0\ngfx90a [0x989f];3;16;3;3;30000;0;15;16;1;10;0;-1;-2;0;1;0;1;1;0;0;0;0\ngfx90a [0x989f];3;16;3;16;30000;0;15;16;1;1;1;-2;0;0;1;0;1;1;2;0;1;0\ngfx90a [0x989f];3;16;4;4;30000;0;12;16;1;6;1;0;-1;0;1;0;1;1;0;0;1;0\ngfx90a [0x989f];3;16;4;16;30000;0;4;8;1;7;1;0;-1;1;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;16;5;5;30000;0;21;8;1;7;1;-2;-2;0;0;1;1;0;1;2;0;0\ngfx90a [0x989f];3;16;5;16;30000;0;8;8;1;6;1;-1;2;0;1;0;1;0;1;0;0;0\ngfx90a [0x989f];3;16;6;6;30000;0;9;16;1;1;1;1;-2;1;0;1;1;1;2;0;1;0\ngfx90a [0x989f];3;16;6;16;30000;0;12;16;1;1;1;1;0;0;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;16;7;7;30000;0;10;16;1;1;0;-2;0;0;1;1;1;1;2;2;1;0\ngfx90a [0x989f];3;16;7;16;30000;0;24;16;1;13;1;0;0;0;1;0;1;1;2;2;0;0\ngfx90a [0x989f];3;16;8;8;30000;0;24;16;1;3;0;-2;-1;0;0;0;1;1;2;2;1;0\ngfx90a [0x989f];3;16;8;16;30000;0;7;8;1;4;1;0;0;1;0;1;1;0;1;2;0;0\ngfx90a [0x989f];3;16;9;9;30000;0;6;8;1;3;1;-2;1;1;1;0;1;1;1;0;0;0\ngfx90a [0x989f];3;16;9;16;30000;0;4;8;1;5;1;-2;2;1;1;1;1;0;1;2;0;0\ngfx90a [0x989f];3;16;10;10;30000;0;30;16;1;9;0;-1;2;0;1;0;1;0;1;0;0;0\ngfx90a [0x989f];3;16;10;16;30000;0;5;8;1;5;1;-2;0;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;16;11;11;30000;0;25;8;1;4;1;0;-1;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;16;11;16;30000;0;30;8;1;14;1;-1;1;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;16;12;12;30000;0;5;8;1;1;1;1;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;16;12;16;30000;0;5;16;1;14;1;0;2;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;16;16;3;30000;0;24;16;1;11;1;-1;-2;0;0;0;1;0;0;2;0;0\ngfx90a [0x989f];3;16;16;4;30000;0;24;16;1;1;1;0;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;16;16;5;30000;0;20;16;1;1;1;0;-2;1;0;0;1;1;2;2;1;0\ngfx90a [0x989f];3;16;16;6;30000;0;25;8;1;15;1;-1;2;1;0;0;1;1;1;0;0;0\ngfx90a [0x989f];3;16;16;7;30000;0;25;16;1;9;1;-2;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;16;16;8;30000;0;25;16;1;10;1;0;2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;16;16;9;30000;0;25;8;1;6;1;-2;2;1;1;1;1;0;1;2;0;0\ngfx90a [0x989f];3;16;16;10;30000;0;25;8;1;4;1;0;3;1;1;0;1;0;1;2;0;0\ngfx90a [0x989f];3;16;16;11;30000;0;25;8;1;8;1;1;2;1;1;0;1;0;1;2;0;0\ngfx90a [0x989f];3;16;16;12;30000;0;25;8;1;7;1;-2;-2;1;0;1;1;0;1;2;0;0\ngfx90a [0x989f];3;16;16;16;30000;0;12;16;1;2;1;1;-1;0;1;1;1;1;2;0;1;0\ngfx90a [0x989f];3;16;16;23;30000;0;4;8;1;4;1;0;-1;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;16;23;16;30000;0;40;8;1;4;1;-2;-1;1;1;1;1;0;1;2;0;0\ngfx90a [0x989f];3;16;23;23;30000;0;50;8;1;15;1;-1;-1;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;17;17;17;30000;0;12;17;1;12;1;-2;-2;0;1;0;1;0;0;2;0;0\ngfx90a [0x989f];3;17;17;23;30000;0;3;8;1;11;1;-1;1;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;17;17;32;30000;0;3;8;1;17;17;-1;-2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;17;17;35;30000;0;3;8;1;17;17;-1;0;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;17;23;17;30000;0;15;17;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0\ngfx90a [0x989f];3;17;23;23;30000;0;24;17;1;1;1;-1;0;1;0;0;1;1;2;1;0;0\ngfx90a [0x989f];3;17;32;17;30000;0;20;17;1;1;1;0;-2;1;0;0;1;1;2;0;0;0\ngfx90a [0x989f];3;17;32;35;30000;0;3;8;1;11;1;1;1;0;1;0;1;0;1;0;1;0\ngfx90a [0x989f];3;17;35;17;30000;0;25;17;1;5;1;-2;-1;1;1;0;1;0;1;2;0;0\ngfx90a [0x989f];3;17;35;32;30000;0;3;17;1;16;1;0;0;1;1;0;1;0;1;2;0;0\ngfx90a [0x989f];3;17;35;35;30000;0;20;17;1;1;1;1;0;1;1;1;1;0;0;0;0;0\ngfx90a [0x989f];3;18;18;18;30000;0;4;8;1;6;1;-2;-2;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;18;18;23;30000;0;3;8;1;14;1;0;-2;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;18;23;18;30000;0;4;18;1;4;1;1;3;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;18;23;23;30000;0;4;8;1;16;1;0;3;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;19;19;19;30000;0;40;8;1;10;1;1;3;0;0;0;1;0;1;2;0;0\ngfx90a [0x989f];3;19;19;23;30000;0;40;8;1;15;1;-1;-2;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;23;23;23;30000;0;20;23;1;10;23;-2;-2;0;1;1;1;1;2;2;0;0\ngfx90a [0x989f];3;28;28;28;30000;0;3;28;1;28;28;-2;2;0;0;0;1;0;1;0;0;0\ngfx90a [0x989f];3;32;32;32;30000;0;25;32;1;20;1;-2;0;0;1;0;1;0;2;0;0;0\ngfx90a [0x989f];3;35;17;17;30000;0;15;35;1;29;1;1;0;0;1;0;1;0;2;1;0;0\ngfx90a [0x989f];3;35;17;32;30000;0;20;35;1;1;1;0;-2;1;1;0;1;1;2;0;0;0\ngfx90a [0x989f];3;35;17;35;30000;0;7;35;1;31;1;-2;4;1;0;0;1;1;1;2;1;0\ngfx90a [0x989f];3;35;32;17;30000;0;39;35;1;35;1;1;4;0;1;1;1;1;1;0;0;0\ngfx90a [0x989f];3;35;32;35;30000;0;3;35;1;31;1;-2;0;1;1;0;1;1;1;2;0;0\ngfx90a [0x989f];3;35;35;17;30000;0;33;35;1;20;1;1;4;1;1;1;1;0;1;0;0;0\ngfx90a [0x989f];3;35;35;32;30000;0;15;35;1;35;35;-2;0;0;1;0;1;1;2;2;0;0\ngfx90a [0x989f];3;35;35;35;30000;0;2;35;1;30;0;1;-1;0;1;0;1;0;1;2;0;0\n"
  },
  {
    "path": "src/acc/opencl/smm/params/tune_multiply_P100.csv",
    "content": "DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\n"
  },
  {
    "path": "src/acc/opencl/smm/params/tune_multiply_PVC.csv",
    "content": "DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\nIntel(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\n"
  },
  {
    "path": "src/acc/opencl/smm/params/tune_multiply_V100.csv",
    "content": "DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\nTesla 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\n"
  },
  {
    "path": "src/acc/opencl/smm/requirements.txt",
    "content": "wheel\nopentuner\n"
  },
  {
    "path": "src/acc/opencl/smm/tune_multiply.py",
    "content": "#!/usr/bin/env python3\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: BSD-3-Clause                                                            #\n####################################################################################################\nimport opentuner\nfrom opentuner.search.manipulator import IntegerParameter\nfrom opentuner.tuningrunmain import TuningRunMain\nfrom opentuner import ConfigurationManipulator\nfrom opentuner import MeasurementInterface\nfrom opentuner import Result\nfrom signal import signal, SIGINT\nimport tempfile\nimport copy\nimport json\nimport glob\nimport math\nimport sys\nimport re\nimport os\n\ndefault_enable_tune = {\"tune\", \"enabled\", \"on\"}\ndefault_basename = \"tune_multiply\"\ndefault_mnk = \"23x23x23\"\ndefault_dbg = False\ndefault_retry = 1\ndefault_vlen = 8\n\ntype_dp = 3\ntype_sp = 1\n\n\ndef start(args):\n    \"\"\"Construct and start tuner instance\"\"\"\n    instance = SmmTuner(args)\n    if not default_dbg:\n        for retry in range(default_retry):\n            try:\n                TuningRunMain(instance, args).main()\n                return\n            except Exception as e:\n                ign = (\n                    \"[{}/{}]\".format(retry + 1, default_retry)\n                    if 1 < default_retry\n                    else \"\"\n                )\n                print(\"IGNORED{} {}: {}\".format(ign, type(e).__name__, e))\n                pass\n        instance.save_final_config(None, True)\n    else:\n        TuningRunMain(instance, args).main()\n\n\ndef env_intvalue(env, default, lookup=True):\n    value = os.getenv(env, default) if lookup else env if env is not None else default\n    try:\n        return int(value)\n    except ValueError:\n        return int(default)\n\n\ndef ilog2(n):\n    i, t = (0 if 1 != n else 1), 1\n    while t < n:\n        t <<= 1\n        i += 1\n    return i\n\n\nclass SmmTuner(MeasurementInterface):\n    def __init__(self, args):\n        \"\"\"Setup common state and define search space\"\"\"\n        super(SmmTuner, self).__init__(args)\n        mnk = tuple(max(int(i), 1) for i in self.args.mnk.split(\"x\"))\n        self.mnk = (mnk + (mnk[0], mnk[0]))[:3]\n        self.wsx = self.mnk[0] * self.mnk[1]\n        self.manip = ConfigurationManipulator()\n        # sanitize input arguments\n        self.args.mb = max(self.args.mb, 1)\n        self.args.bs = max(min(self.args.bs, self.args.mb), 1)\n        self.args.bm = [max(self.args.bm, 1), self.mnk[0]][0 == self.args.bm]\n        self.args.bn = [max(self.args.bn, 1), 1][0 == self.args.bn]\n        self.args.bk = [max(self.args.bk, 1), self.mnk[2]][0 == self.args.bk]\n        self.args.ws = min(self.args.ws, self.wsx)\n        self.gfbase = self.gfsave = self.gflops = self.gflogs = self.gfscnt = 0\n        self.config = self.typename = self.typeid = self.device = self.size = None\n        self.bs = self.bm = self.bn = self.bk = self.ws = self.wg = self.lu = None\n        self.nz = self.al = self.tb = self.tc = None\n        self.ap = self.aa = self.ab = self.ac = None\n        self.idevice, self.ndevices = None, 0\n        self.exepath = os.path.join(\n            os.path.dirname(sys.argv[0]), \"..\", \"..\", \"acc_bench\"\n        )\n        runcmd = self.launch([\"ACC_OPENCL_VERBOSE=2\"], 0, nrep=1)\n        self.run_result = (  # verbosity to capture device name and tuned parameters\n            self.call_program(\" \".join(runcmd))\n            if (  # consider validating parameters during merge\n                (self.args.merge is None or 0 > self.args.merge)\n                or (self.args.check is None or 0 != self.args.check)\n            )\n            and (self.args.update is None or \"\" == self.args.update)\n            else None\n        )\n        if self.run_result:\n            stdout = str(self.run_result[\"stdout\"])\n            if 0 >= self.args.size:\n                sizepat = \"(\\\\w+)\\\\s+[0-9]+\\\\s+([0-9]+)\"\n                size = re.search(sizepat, stdout)\n                self.size = int(size.group(2)) if size and size.group(2) else 0\n            else:\n                self.size = self.args.size\n            typename = re.search(\"typename \\\\(id=([0-9]+)\\\\):\\\\s+(\\\\w+)\", stdout)\n            self.typename = typename.group(2) if typename and typename.group(2) else \"\"\n            self.typeid = (\n                int(typename.group(1)) if typename and typename.group(1) else 0\n            )\n            devicepat = (\n                'INFO ACC/OpenCL:\\\\s+ndevices=([0-9]+)\\\\s+device[0-9]+=\"([^\"]+)\"'\n            )\n            device = re.search(devicepat, str(self.run_result[\"stderr\"]))\n            self.ndevices = int(device.group(1)) if device and device.group(1) else 0\n            self.device = device.group(2) if device and device.group(2) else \"\"\n            # idevice: make certain resources/names unique on a per-rank basis\n            envrank_mpich = os.getenv(\"PMI_RANK\")  # global\n            envrank_ompi = os.getenv(\"OMPI_COMM_WORLD_LOCAL_RANK\", envrank_mpich)\n            envrank = os.getenv(\"MPI_LOCALRANKID\", envrank_ompi)\n            if envrank:\n                self.idevice = int(envrank) % self.ndevices\n        elif self.args.update is not None and \"\" != self.args.update:\n            self.device = self.args.update\n        if self.run_result and 0 == self.run_result[\"returncode\"]:\n            seedpat = \"INFO ACC/LIBSMM:\\\\s+SMM-kernel\\\\s+{}={}\\\\s+gen=\".format(\n                \"{t,m,n,k, bs,bm,bn,bk, ws,wg, lu,nz,al, tb,tc, ap,aa,ab,ac}\",\n                \"{{{}, {}}}\".format(  # key and value\n                    \"{},{}\".format(  # t,m,n,k (key)\n                        self.typeid, \",\".join(map(str, self.mnk))\n                    ),\n                    \"{}, {}, {}, {}, {}\".format(  # value: if neg. \"-*[0-9]+\"\n                        \"(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)\",  # bs,bm,bn,bk\n                        \"(-*[0-9]+),(-*[0-9]+)\",  # ws,wg\n                        \"(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)\",  # lu,nz,al\n                        \"(-*[0-9]+),(-*[0-9]+)\",  # tb,tc\n                        \"(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)(, .+)*\",  # ap,aa,ab,ac[, ext]\n                    ),\n                ),\n            )\n            seed = re.search(seedpat, str(self.run_result[\"stderr\"]))\n            nprm = len(seed.groups()) if seed else 0\n            if 15 > nprm:\n                print(\"WARNING: missed to parse initial parameters!\")\n            maxlu = (self.mnk[0] + default_vlen - 1) / default_vlen\n            # setup fixed and tunable parameters\n            params, paramt = [], []\n            self.create_param(\"BS\", params, paramt, seed, 1, 1, self.args.mb)\n            self.create_param(\"BM\", params, paramt, seed, 2, 1, self.mnk[0])\n            self.create_param(\"BN\", params, paramt, seed, 3, 1, self.mnk[1])\n            self.create_param(\"BK\", params, paramt, seed, 4, 1, self.mnk[0])\n            self.create_param(\"WS\", params, paramt, seed, 5, 1, self.wsx)\n            self.create_param(\"WG\", params, paramt, seed, 6, -2, 1, False)  # avoid WG=2\n            self.create_param(\"LU\", params, paramt, seed, 7, -2, maxlu)\n            self.create_param(\"NZ\", params, paramt, seed, 8, 0, 1)\n            self.create_param(\"AL\", params, paramt, seed, 9, 0, 1)\n            self.create_param(\"TB\", params, paramt, seed, 10, 0, 1)\n            self.create_param(\"TC\", params, paramt, seed, 11, 0, 1)\n            self.create_param(\"AP\", params, paramt, seed, 12, 0, 1)\n            self.create_param(\"AA\", params, paramt, seed, 13, 0, 2)\n            self.create_param(\"AB\", params, paramt, seed, 14, 0, 2)\n            self.create_param(\"AC\", params, paramt, seed, 15, 0, 1)\n            if 15 < nprm and seed.group(16) and 2 < len(seed.group(16)):\n                self.create_param(\"XF\", params, paramt, seed.group(16)[2:], -1, 0, 1)\n            else:\n                self.create_param(\"XF\", params, paramt, 0, -1, 0, 1)\n            if not paramt:\n                sys.tracebacklimit = 0\n                raise RuntimeError(\n                    \"All parameters are fixed with environment variables!\"\n                )\n            for param in params + paramt:\n                self.manip.add_parameter(param)\n        if (\n            (  # consider to update and/or merge JSONS (update first)\n                self.args.merge is not None\n                and (0 <= self.args.merge or self.typeid)\n                and (\n                    (self.args.check is not None and 0 == self.args.check)\n                    or (self.run_result and 0 == self.run_result[\"returncode\"])\n                )\n            )\n            or (self.args.check is None or 0 != self.args.check)\n            or (self.args.update is None or \"\" != self.args.update)\n        ):\n            filepattern = \"{}-*.json\".format(default_basename)\n            filedot = \".\" + filepattern\n            filenames = glob.glob(\n                os.path.normpath(os.path.join(self.args.jsondir, filedot))\n            )\n            for filename in filenames:\n                self.rename_dotfile(filename)\n            filenames = glob.glob(\n                os.path.normpath(os.path.join(self.args.jsondir, filepattern))\n            )\n            if self.args.update is None or \"\" != self.args.update:\n                self.update_jsons(filenames)\n            elif self.args.check is None or 0 != self.args.check:\n                self.update_jsons(filenames)\n                if 0 < self.gfscnt and self.args.check and 0 > self.args.check:\n                    gmn = math.exp(self.gflogs / self.gfscnt)\n                    print(\"Geometric mean of {} GFLOPS/s\".format(round(gmn)))\n            elif self.args.merge is not None:\n                self.merge_jsons(filenames)\n            exit(0)\n        elif (\n            (self.typename and \"\" != self.typename)\n            and (self.device and \"\" != self.device)\n            and (self.typeid and 0 < self.ndevices)\n            and (self.size and 0 < self.size)\n        ):  # setup database (DB)\n            if self.args.database is None:  # adjust DB-location\n                tmpdir = os.path.join(tempfile.gettempdir(), \"opentuner\")\n                if self.idevice is not None:\n                    tmpdir += str(self.idevice)\n                try:\n                    os.mkdir(tmpdir)\n                except:  # noqa: E722\n                    pass\n                self.args.database = \"sqlite:///\" + os.path.join(\n                    tmpdir, \"{}.db\".format(os.getpid())\n                )\n            if not self.args.label:  # label for DB-session\n                self.args.label = \"{}-{}-{}-s{}\".format(\n                    default_basename,\n                    self.typename,\n                    \"x\".join(map(str, self.mnk)),\n                    ilog2(self.size),\n                )\n        else:\n            sys.tracebacklimit = 0\n            raise RuntimeError(\"Setup failed for {}!\".format(self.exepath))\n        # register signal handler (CTRL-C)\n        signal(SIGINT, self.handle_sigint)\n        self.handle_sigint_counter = 0\n\n    def manipulator(self):\n        return self.manip\n\n    def create_param(\n        self, name, params, paramt, match, match_id, value0, value1, expand=True\n    ):\n        \"\"\"Append integer-parameter to either params or paramt list\"\"\"\n        value_key = \"OPENCL_LIBSMM_SMM_{}\".format(name)\n        value_env = os.getenv(value_key)\n        attribute = getattr(self, name.lower(), None)\n        tunable = value_env in default_enable_tune\n        if 0 <= match_id:\n            if match and match.group(match_id):\n                value = int(match.group(match_id))\n            else:\n                value = 0 if value_env is None else int(value_env)\n            if not tunable:\n                tunable = value_env is None\n        else:\n            if attribute is None:\n                value = getattr(self.args, name.lower(), None)\n                if value is None:\n                    value = int(value_env if match is None else match)\n            else:\n                value = int(attribute)\n            if not tunable:\n                tunable = value_env is None and 0 != value\n        if tunable:  # consider expanding value range according to seed\n            v0 = min(value0, value) if expand else value0\n            v1 = max(value1, value) if expand else value1\n            paramt.append(IntegerParameter(name, v0, v1))\n        else:  # fixed parameter\n            params.append(IntegerParameter(name, value, value))\n        if attribute is None:\n            setattr(self, name.lower(), value)\n\n    def launch(self, envs, check=None, nrep=None, verbose=None):\n        \"\"\"Launch executable supplying environment and arguments\"\"\"\n        envlist = envs if isinstance(envs, list) else self.environment(envs)\n        mnk = (envs[\"M\"], envs[\"N\"], envs[\"K\"]) if \"M\" in envs else self.mnk\n        env_exe = \" \".join(map(str, envlist))\n        if verbose is not None and 0 != int(verbose):\n            msg = env_exe.replace(\"OPENCL_LIBSMM_SMM_\", \"\")\n            print(\"{}: {}\".format(\"x\".join(map(str, mnk)), msg))\n        env_std = \"OMP_PROC_BIND=TRUE OPENCL_LIBSMM_SMM_S=0\"\n        env_jit = \"NEO_CACHE_PERSISTENT=0 CUDA_CACHE_DISABLE=1\"\n        env_check = \"CHECK={}\".format(check if check is not None else 1)\n        env_intrn = \"{} {}\".format(  # consider device-id\n            \"\" if self.idevice is None else \"ACC_OPENCL_DEVICE={}\".format(self.idevice),\n            \"{} {} {}\".format(env_std, env_jit, env_check),  # environment\n        ).strip()\n        arg_exe = \"{} {} {}\".format(\n            self.args.r if nrep is None else nrep,\n            self.size if self.size else self.args.size,\n            \" \".join(map(str, mnk)),\n        ).strip()\n        return [env_exe, env_intrn, self.exepath, arg_exe]\n\n    def seed_configurations(self):\n        return [\n            {\n                \"BS\": self.bs if self.bs is not None else self.args.bs,\n                \"BM\": self.bm if self.bm is not None else self.args.bm,\n                \"BN\": self.bn if self.bn is not None else self.args.bn,\n                \"BK\": self.bk if self.bk is not None else self.args.bk,\n                \"WS\": self.ws if self.ws is not None else self.args.ws,\n                \"WG\": self.wg if self.wg is not None else self.args.wg,\n                \"NZ\": self.nz if self.nz is not None else self.args.nz,\n                \"LU\": self.lu if self.lu is not None else self.args.lu,\n                \"AL\": self.al if self.al is not None else self.args.al,\n                \"TB\": self.tb if self.tb is not None else self.args.tb,\n                \"TC\": self.tc if self.tc is not None else self.args.tc,\n                \"AP\": self.ap if self.ap is not None else self.args.ap,\n                \"AA\": self.aa if self.aa is not None else self.args.aa,\n                \"AB\": self.ab if self.ab is not None else self.args.ab,\n                \"AC\": self.ac if self.ac is not None else self.args.ac,\n                \"XF\": self.xf if self.xf is not None else 0,\n            }\n        ]\n\n    def objective(self):\n        if 0 == self.args.tlevel:\n            return opentuner.search.objective.MaximizeAccuracyMinimizeSize()\n        else:\n            return opentuner.search.objective.MaximizeAccuracy()\n\n    def environment(self, config):\n        return [\n            \"OPENCL_LIBSMM_SMM_{}={}\".format(key, config[key])\n            for key in sorted(config.keys())\n            if 2 == len(key)\n        ]\n\n    def run(self, desired_result, input=None, limit=None, message=None, nrep=None):\n        \"\"\"Run a configuration and return performance\"\"\"\n        try:\n            config = desired_result.configuration.data\n            mnk = self.mnk\n        except AttributeError:\n            config = desired_result\n            mnk = (config[\"M\"], config[\"N\"], config[\"K\"])\n        skip = False\n        if self.args.quick:\n            if 1 == config[\"AA\"] or 1 == config[\"AB\"]:\n                skip = True\n        performance = None\n        if not skip:\n            runcmd = self.launch(config, self.args.check, nrep, self.args.verbose)\n            self.run_result = self.call_program(\" \".join(runcmd))\n            result = self.run_result[\"returncode\"] if self.run_result else 1\n            if 0 == result:\n                performance = re.search(\n                    \"device:\\\\s+([0-9]+[^ ]*) ms\\\\s+([0-9]+[^ ]*)\",\n                    str(self.run_result[\"stdout\"]),\n                )\n        if performance and performance.group(1) and performance.group(2):\n            mseconds, gflops = float(performance.group(1)), float(performance.group(2))\n            if 0 < gflops:\n                self.gflogs = self.gflogs + math.log(gflops)\n                self.gfscnt = self.gfscnt + 1\n            if config is not desired_result:\n                kernelreq = round((100.0 * config[\"BM\"] * config[\"BN\"]) / self.wsx)\n                # gflops are reported as \"accuracy\" (console output)\n                result = Result(time=mseconds, accuracy=gflops, size=kernelreq)\n                if self.gflops < gflops:  # keep best config in case of early exit\n                    self.config = desired_result.configuration\n                    self.gflops = gflops\n                    if 0 != self.gfbase:\n                        self.save_final_config(self.config, final=False)\n                    else:  # seed configuration\n                        self.gfbase = gflops\n            elif not self.args.verbose:\n                if message:\n                    status = \"OK\"\n                    if 1 != int(nrep):\n                        gfbase = config[\"GFLOPS\"] if \"GFLOPS\" in config else 0\n                        if 0 < gfbase:\n                            status = \"{}x - \".format(round(gflops / gfbase, 2))\n                        status = status + \"{} GFLOPS/s\".format(round(gflops))\n                    print(\"{} - {}\".format(message, status), flush=True)\n                else:\n                    print(\".\", end=\"\", flush=True)\n        elif not skip:  # return non-competitive/bad result in case of an error\n            failed = runcmd[0].replace(\"OPENCL_LIBSMM_SMM_\", \"\")\n            if message:\n                msg = \"{} - FAILED\".format(message)\n            else:\n                msg = \"FAILED[{}] {}: {}\".format(\n                    result, \"x\".join(map(str, mnk)), failed\n                )\n            if config is not desired_result:\n                result = Result(time=float(\"inf\"), accuracy=0.0, size=100.0)\n            elif not self.args.verbose and not message:\n                print(\"\")\n            print(msg, flush=True)\n        else:\n            result = Result(time=float(\"inf\"), accuracy=0.0, size=100.0)\n        return result\n\n    def update_jsons(self, filenames):\n        \"\"\"Update device name or verify all JSONs\"\"\"\n        if self.device:\n            n = len(filenames)\n            for i, filename in enumerate(filenames):\n                try:\n                    with open(filename, \"r\") as file:\n                        data = json.load(file)\n                        if self.args.check is None or 0 != self.args.check:\n                            progress, r = \"[{}/{}]: {}\".format(i + 1, n, filename), 1\n                            if self.args.check is not None:\n                                r = max(self.args.check, 0)\n                            if \"TYPEID\" in data and self.typeid == data[\"TYPEID\"]:\n                                self.run(data, message=progress, nrep=r)\n                        elif \"DEVICE\" in data and data[\"DEVICE\"] != self.device:\n                            print(\"Updated {} to {}.\".format(filename, self.device))\n                            data.update({\"DEVICE\": self.device})\n                            file.close()\n                            with open(filename, \"w\") as file:\n                                json.dump(data, file, sort_keys=True)\n                                file.write(\"\\n\")\n                except (json.JSONDecodeError, KeyError):\n                    print(\"Failed to update {}.\".format(filename))\n        else:\n            print(\"Cannot determine device name.\")\n\n    def make_csv_record(self, data, filename):\n        \"\"\"Make key-value tuples from JSON-data\"\"\"\n        device = data[\"DEVICE\"] if \"DEVICE\" in data else self.device\n        value = (\n            data[\"S\"] if \"S\" in data else 0,  # pseudo key component\n            data[\"GFLOPS\"] if \"GFLOPS\" in data else 0,\n            data[\"BS\"],\n            data[\"BM\"],\n            data[\"BN\"],\n            data[\"BK\"] if \"BK\" in data else 0,\n            data[\"WS\"] if \"WS\" in data else 0,\n            data[\"WG\"] if \"WG\" in data else 0,\n            data[\"LU\"] if \"LU\" in data else 0,\n            data[\"NZ\"] if \"NZ\" in data else 0,\n            data[\"AL\"] if \"AL\" in data else 0,\n            data[\"TB\"] if \"TB\" in data else 0,\n            data[\"TC\"] if \"TC\" in data else 1,\n            data[\"AP\"] if \"AP\" in data else 0,\n            data[\"AA\"] if \"AA\" in data else 0,\n            data[\"AB\"] if \"AB\" in data else 0,\n            data[\"AC\"] if \"AC\" in data else 0,\n            data[\"XF\"] if \"XF\" in data else 0,\n            filename,  # last entry\n        )\n        return (device, data[\"TYPEID\"], data[\"M\"], data[\"N\"], data[\"K\"]), value\n\n    def merge_jsons(self, filenames):\n        \"\"\"Merge all JSONs into a single CSV-file\"\"\"\n        if not self.args.csvfile or (self.idevice is not None and 0 != self.idevice):\n            return  # early exit\n        merged, retain, delete = dict(), dict(), []\n        self.gflogs = self.gfscnt = skipcnt = 0\n        for filename in filenames:\n            try:\n                with open(filename, \"r\") as file:\n                    data = json.load(file)\n                if not data or (\n                    self.args.merge is not None\n                    and (\n                        (0 > self.args.merge and self.typeid != data[\"TYPEID\"])\n                        or (1 == self.args.merge and type_sp != data[\"TYPEID\"])\n                        or (2 == self.args.merge and type_dp != data[\"TYPEID\"])\n                    )\n                ):  # skip parameter set (JSON-file)\n                    skipcnt = skipcnt + 1\n                    continue\n                key, value = self.make_csv_record(data, filename)\n            except (json.JSONDecodeError, KeyError, TypeError):\n                print(\"Failed to merge {} into CSV-file.\".format(filename))\n                continue\n            except:  # noqa: E722\n                continue\n                pass\n            if bool(data) and key in merged:\n                gfbase, mname = merged[key][1], merged[key][-1]\n                gflops, mtime = value[1], os.path.getmtime(mname)\n                if gfbase < gflops:  # merged data is worse\n                    if mtime < os.path.getmtime(filename):  # older\n                        delete.append(mname)\n                    else:\n                        if key in retain:\n                            if retain[key][1] < gflops:\n                                delete.append(retain[key][-1])\n                        retain[key] = merged[key]\n                else:  # merged data is leading\n                    if mtime < os.path.getmtime(filename):  # older\n                        if key in retain:\n                            if retain[key][1] < gflops:\n                                delete.append(retain[key][-1])\n                                retain[key] = value\n                            else:\n                                delete.append(filename)\n                        else:\n                            retain[key] = value\n                    else:  # newer\n                        delete.append(filename)\n                    data = dict()  # ensure data is not merged\n            if bool(data) and (  # consider to finally validate result\n                (self.args.check is not None and 0 == self.args.check)\n                or 0 == self.run(data, nrep=1)\n            ):\n                merged[key] = value\n        # replace older/best with latest/best (forced refresh)\n        if self.args.delete and 3 <= self.args.delete:\n            for key, value in retain.items():\n                if key in merged:\n                    rname, mname = value[-1], merged[key][-1]\n                    if os.path.getmtime(mname) < os.path.getmtime(rname):\n                        retain[key] = merged[key]\n                        merged[key] = value\n        # print/delete outperformed results\n        if self.args.delete and 2 <= self.args.delete:\n            rfiles = [v[-1] for v in retain.values()]\n            delete = delete + rfiles\n        if bool(delete):\n            num, lst, msg = len(delete), \" \".join(delete), \"Remove\"\n            if self.args.delete and 3 != self.args.delete:\n                for filename in delete:\n                    try:\n                        os.remove(filename)\n                    except:  # noqa: E722\n                        pass\n                msg = \"Removed\"\n                skipcnt = skipcnt + num\n            print(\"{} {}: {}\".format(msg, num, lst))\n            print(\"\")\n        # write CSV-file and collect overall-statistics\n        if bool(merged):\n            with open(self.args.csvfile, \"w\") as csvfile:\n                csvfile.write(  # CSV header line with termination/newline\n                    \"{}{}{}{}{}{}{}{}{}\\n\".format(  # key-part\n                        self.args.csvsep.join([\"DEVICE\", \"TYPEID\", \"M\", \"N\", \"K\"]),\n                        self.args.csvsep,  # separator for value-part\n                        \"S\",  # pseudo-key component\n                        self.args.csvsep,\n                        self.args.csvsep.join([\"GFLOPS\", \"BS\", \"BM\", \"BN\", \"BK\"]),\n                        self.args.csvsep,\n                        self.args.csvsep.join([\"WS\", \"WG\", \"LU\", \"NZ\", \"AL\"]),\n                        self.args.csvsep,\n                        self.args.csvsep.join([\"TB\", \"TC\", \"AP\", \"AA\", \"AB\", \"AC\"]),\n                    )\n                )\n                types = [key[1] for key in merged.keys()]\n                pure = min(types) == max(types)\n                for key, value in sorted(merged.items()):  # CSV data lines (records)\n                    # FLOPS are normalized for double-precision (ratio of 1:2 assumed)\n                    gflops = value[1] if pure or type_sp != key[1] else value[1] * 0.5\n                    values = list(value[:-1])\n                    if self.args.nogflops:\n                        values[1] = 0  # zero instead of gflops written into CSV-file\n                    if 0 < gflops:\n                        self.gflogs = self.gflogs + math.log(gflops)\n                        self.gfscnt = self.gfscnt + 1\n                    strkey = self.args.csvsep.join([str(k) for k in key])\n                    strval = self.args.csvsep.join([str(v) for v in values])\n                    csvfile.write(\"{}{}{}\\n\".format(strkey, self.args.csvsep, strval))\n        # print summary information\n        msg = \"Merged {} of {} JSONs into {}\".format(\n            len(merged), len(filenames) - skipcnt, self.args.csvfile\n        )\n        if 0 < self.gfscnt:\n            gmn = math.exp(self.gflogs / self.gfscnt)\n            msg = \"{} (geometric mean of {} GFLOPS/s)\".format(msg, round(gmn))\n        if not self.args.verbose and (self.args.check is None or 0 != self.args.check):\n            print(\"\")\n        print(msg)\n\n    def rename_dotfile(self, dotfile):\n        try:\n            data = None\n            with open(dotfile, \"r\") as file:\n                data = json.load(file)\n            gflops = data[\"GFLOPS\"] if data and \"GFLOPS\" in data else 0\n            if 0 < gflops:\n                filemain = \"-\".join(os.path.basename(dotfile).split(\"-\")[1:4])\n                filename = \"{}-{}-{}gflops.json\".format(\n                    default_basename, filemain, round(gflops)\n                )\n                os.rename(dotfile, os.path.join(self.args.jsondir, filename))\n        except:  # noqa: E722\n            pass\n\n    def save_final_config(self, configuration, final=True):\n        \"\"\"Called at termination\"\"\"\n        if not final and (0 >= self.gflops or not configuration):\n            return  # nothing to save\n        config = configuration.data if configuration else None\n        cfgenv = self.environment(config) if config else None\n        envchk = os.getenv(\"CHECK\")  # force CHECKing result unless CHECK=0\n        result = self.run_result[\"returncode\"] if config and self.run_result else 1\n        if 0 == result and 0 == self.args.check and (envchk is None or \"0\" != envchk):\n            self.run_result = self.call_program(\" \".join(self.launch(cfgenv, 1)))\n            result = self.run_result[\"returncode\"] if self.run_result else 1\n        # extend result for easier reuse\n        if config:\n            config[\"DEVICE\"] = self.device\n            config[\"GFLOPS\"] = self.gflops\n            config[\"TYPEID\"] = self.typeid\n            config[\"M\"] = self.mnk[0]\n            config[\"N\"] = self.mnk[1]\n            config[\"K\"] = self.mnk[2]\n            config[\"S\"] = self.size\n        filedev = \"\" if self.idevice is None else \"-{}\".format(self.idevice)\n        filedot = os.path.join(\n            self.args.jsondir, \".{}{}.json\".format(self.args.label, filedev)\n        )\n        if config and self.gfsave < self.gflops:  # save intermediate result\n            if 0 == self.gfsave and os.path.exists(filedot):  # backup\n                self.rename_dotfile(filedot)\n            # self.manipulator().save_to_file(config, filename)\n            with open(filedot, \"w\") as file:\n                cfg = config\n                if \"XF\" in config and 0 == config[\"XF\"]:\n                    cfg = copy.deepcopy(config)\n                    del cfg[\"XF\"]\n                json.dump(cfg, file, sort_keys=True)\n                file.write(\"\\n\")  # append newline at EOF\n            self.gfsave = self.gflops\n        # check return code (consider not saving parameters)\n        if 0 != result and not final:  # incorrect result\n            failed = \" \".join(map(str, cfgenv)).replace(\"OPENCL_LIBSMM_SMM_\", \"\")\n            mnk = \"x\".join(map(str, self.mnk))\n            print(\"FAILED[{}] {}: {}\".format(result, mnk, failed), flush=True)\n            return\n        if final and 0 < self.gflops and os.path.exists(filedot):\n            filepattern = \"{}-*.json\".format(default_basename)\n            filenames = glob.glob(\n                os.path.normpath(os.path.join(self.args.jsondir, filepattern))\n            )\n            if not filenames and glob.glob(self.args.csvfile):\n                msg = \"WARNING: no JSON-file found but {} will be overwritten.\"\n                print(msg.format(self.args.csvfile))\n            fileonly = \"{}-{}gflops.json\".format(self.args.label, round(self.gflops))\n            filename = os.path.normpath(os.path.join(self.args.jsondir, fileonly))\n            try:\n                os.rename(filedot, filename)\n            except:  # noqa: E722\n                pass\n            if filename not in filenames:  # rebuild CSV-file\n                filenames.append(filename)\n                self.merge_jsons(filenames)\n            speedup = round((self.gflops / self.gfbase) if 0 < self.gfbase else 0, 1)\n            msg = \" ({}x over seed)\".format(speedup) if 1 < speedup else \"\"\n            print(\"Result{} was written to {}\".format(msg, filename))\n        elif final and self.args.merge is None:\n            print(\"WARNING: no tuned results produced!\")\n\n    def handle_sigint(self, signum, frame):\n        \"\"\"Handle SIGINT or CTRL-C\"\"\"\n        if 1 > self.handle_sigint_counter:  # avoid recursion\n            self.handle_sigint_counter = self.handle_sigint_counter + 1\n            msg = \"\\nWARNING: tuning {}-kernel interrupted.\"\n            print(msg.format(\"x\".join(map(str, self.mnk))))\n            try:\n                self.save_final_config(self.config, True)\n            except:  # noqa: E722\n                pass\n        exit(1)\n\n\nif __name__ == \"__main__\":\n    argparser = opentuner.default_argparser()\n    # adjust default value of existing arguments\n    argparser.set_defaults(no_dups=True)\n    # add primary arguments (parsed first)\n    argparser.add_argument(\n        \"mnk\",\n        type=str,\n        default=default_mnk,\n        nargs=\"?\",\n        help=\"Shape of SMM-kernel (MxNxK)\",\n    )\n    argparser.add_argument(\n        \"-r\",\n        \"--repetitions\",\n        type=int,\n        default=0,\n        nargs=\"?\",\n        dest=\"r\",\n        help=\"Repetitions per experiment\",\n    )\n    argparser.add_argument(\n        \"-e\",\n        \"--csv-separator\",\n        type=(lambda c: c if isinstance(c, str) and 1 == len(c) else False),\n        default=\";\",\n        nargs=\"?\",\n        dest=\"csvsep\",\n        help=\"Separator used in CSV-file\",\n    )\n    argparser.add_argument(\n        \"-o\",\n        \"--csv-filename\",\n        type=str,\n        default=\"{}.csv\".format(default_basename),\n        nargs=\"?\",\n        dest=\"csvfile\",\n        help=\"Generate CSV-file\",\n    )\n    argparser.add_argument(\n        \"-m\",\n        \"--csv-merge-jsons\",\n        type=int,\n        default=None,\n        const=-1,\n        nargs=\"?\",\n        dest=\"merge\",\n        help=\"Merge JSONs into CSV (-1: auto, 0: all, 1: SP, 2: DP, 3: hidden)\",\n    )\n    argparser.add_argument(\n        \"-x\",\n        \"--csv-nogflops\",\n        action=\"store_true\",\n        default=False,\n        dest=\"nogflops\",\n        help=\"Exclude real GFLOPS\",\n    )\n    argparser.add_argument(\n        \"-p\",\n        \"--jsons-dir\",\n        type=str,\n        default=\".\",\n        nargs=\"?\",\n        dest=\"jsondir\",\n        help=\"Directory to read/write JSONs\",\n    )\n    argparser.add_argument(\n        \"-u\",\n        \"--jsons-update\",\n        type=str,\n        default=\"\",\n        nargs=\"?\",\n        dest=\"update\",\n        help=\"Update JSONs (device name optional)\",\n    )\n    argparser.add_argument(\n        \"-c\",\n        \"--check\",\n        type=float,\n        default=0,\n        nargs=\"?\",\n        help=\"Validate kernel (none:verify, epsilon - 0:off, -1:verify perf.)\",\n    )\n    argparser.add_argument(\n        \"-d\",\n        \"--delete\",\n        type=int,\n        default=None,\n        const=1,\n        nargs=\"?\",\n        help=\"Remove JSONs (1:worse/old, 2:worse/new, 3:dry, 4:prefer/new)\",\n    )\n    argparser.add_argument(\n        \"-v\",\n        \"--verbose\",\n        action=\"store_true\",\n        default=False,\n        help=\"Verbose output\",\n    )\n    argparser.add_argument(\n        \"-a\",\n        \"--tuning-level\",\n        type=int,\n        default=-1,\n        nargs=\"?\",\n        dest=\"tlevel\",\n        help=\"Tunables: (0) all, (1) most, (2) some, (3) least\",\n    )\n    argparser.add_argument(\n        \"-q\",\n        \"--quick\",\n        action=\"store_true\",\n        default=False,\n        help=\"Omit certain configurations\",\n    )\n    argparser.add_argument(\n        \"-bm\",\n        \"--initial-bm\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_BM\", \"0\"),\n        nargs=\"?\",\n        dest=\"bm\",\n        help=\"Block/tile size (0:auto)\",\n    )\n    argparser.add_argument(\n        \"-bn\",\n        \"--initial-bn\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_BN\", \"0\"),\n        nargs=\"?\",\n        dest=\"bn\",\n        help=\"Block/tile size (0:auto)\",\n    )\n    argparser.add_argument(\n        \"-bk\",\n        \"--initial-bk\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_BK\", \"0\"),\n        nargs=\"?\",\n        dest=\"bk\",\n        help=\"Block size (0:auto)\",\n    )\n    argparser.add_argument(\n        \"-ws\",\n        \"--initial-ws\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_WS\", \"0\"),\n        nargs=\"?\",\n        dest=\"ws\",\n        help=\"Minimum WG-size (0:auto)\",\n    )\n    argparser.add_argument(\n        \"-wg\",\n        \"--initial-wg\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_WG\", \"0\"),\n        dest=\"wg\",\n        help=\"Size of WG: subgroups (-1), tight (0), round-up (1), PoT (2)\",\n    )\n    argparser.add_argument(\n        \"-lu\",\n        \"--initial-lu\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_LU\", \"-1\"),\n        dest=\"lu\",\n        help=\"Loop unroll (-2) full, (-1) no hints (default),\"\n        + \" (0) inner, (1) outer-dehint, (2) block-m\",\n    )\n    argparser.add_argument(\n        \"-nz\",\n        \"--initial-nz\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_NZ\", \"0\"),\n        dest=\"nz\",\n        help=\"Check (1) atomic increment to be non-zero (0:off)\",\n    )\n    argparser.add_argument(\n        \"-al\",\n        \"--initial-al\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_AL\", \"0\"),\n        dest=\"al\",\n        help=\"Access: transposed (0), linear (1)\",\n    )\n    argparser.add_argument(\n        \"-tb\",\n        \"--initial-tb\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_TB\", \"0\"),\n        dest=\"tb\",\n        help=\"Matrix B: untracked (0), tracked (1)\",\n    )\n    argparser.add_argument(\n        \"-tc\",\n        \"--initial-tc\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_TC\", \"1\"),\n        dest=\"tc\",\n        help=\"Matrix C: untracked (0), tracked (1)\",\n    )\n    argparser.add_argument(\n        \"-ap\",\n        \"--initial-ap\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_AP\", \"0\"),\n        dest=\"ap\",\n        help=\"Params: global (0), shared (1)\",\n    )\n    argparser.add_argument(\n        \"-aa\",\n        \"--initial-aa\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_AA\", \"0\"),\n        dest=\"aa\",\n        help=\"Matrix A: global (0), shared (1), register (2)\",\n    )\n    argparser.add_argument(\n        \"-ab\",\n        \"--initial-ab\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_AB\", \"0\"),\n        dest=\"ab\",\n        help=\"Matrix B: global (0), shared (1), register (2)\",\n    )\n    argparser.add_argument(\n        \"-ac\",\n        \"--initial-ac\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_AC\", \"0\"),\n        dest=\"ac\",\n        help=\"Matrix C: register (0), shared (1)\",\n    )\n    argparser.add_argument(\n        \"-bs\",\n        \"--initial-bs\",\n        type=int,\n        default=env_intvalue(\"OPENCL_LIBSMM_SMM_BS\", \"0\"),\n        nargs=\"?\",\n        dest=\"bs\",\n        help=\"Minibatch size (0:auto)\",\n    )\n    argparser.add_argument(\n        \"-mb\",\n        \"--max-bs\",\n        type=int,\n        default=0,\n        nargs=\"?\",\n        dest=\"mb\",\n        help=\"Maximum (mini-)batch size (0:auto)\",\n    )\n    argparser.add_argument(\n        \"-s\",\n        \"--batchsize\",\n        type=int,\n        default=0,\n        nargs=\"?\",\n        dest=\"size\",\n        help=\"Size of batch (a.k.a. stacksize)\",\n    )\n    args, argd = argparser.parse_args(), argparser.parse_args([])\n    # OPENCL_LIBSMM_SMM_xx=tune|enabled|on must be given to permit tuning)\n    if os.getenv(\"OPENCL_LIBSMM_SMM_WS\") not in default_enable_tune:\n        os.environ[\"OPENCL_LIBSMM_SMM_WS\"] = \"{}\".format(args.ws)\n    # fix tunables according to level of tuning\n    if 1 <= args.tlevel or 0 > args.tlevel:\n        os.environ[\"OPENCL_LIBSMM_SMM_BM\"] = \"{}\".format(args.bm)\n        os.environ[\"OPENCL_LIBSMM_SMM_BN\"] = \"{}\".format(args.bn)\n        os.environ[\"OPENCL_LIBSMM_SMM_AL\"] = \"{}\".format(args.al)\n    if 2 <= args.tlevel or 0 > args.tlevel:\n        os.environ[\"OPENCL_LIBSMM_SMM_TB\"] = \"{}\".format(args.tb)\n        os.environ[\"OPENCL_LIBSMM_SMM_TC\"] = \"{}\".format(args.tc)\n        os.environ[\"OPENCL_LIBSMM_SMM_AP\"] = \"{}\".format(args.ap)\n        os.environ[\"OPENCL_LIBSMM_SMM_AC\"] = \"{}\".format(args.ac)\n        os.environ[\"OPENCL_LIBSMM_SMM_NZ\"] = \"{}\".format(args.nz)\n    if 3 <= args.tlevel:\n        os.environ[\"OPENCL_LIBSMM_SMM_BK\"] = \"{}\".format(args.bk)\n        os.environ[\"OPENCL_LIBSMM_SMM_WG\"] = \"{}\".format(args.wg)\n    if 4 <= args.tlevel:\n        os.environ[\"OPENCL_LIBSMM_SMM_LU\"] = \"{}\".format(args.lu)\n    if 0 == args.mb:\n        args.mb = 64\n    # construct and start tuner instance\n    if os.path.isfile(args.mnk):\n        with open(args.mnk, \"r\") as file:\n            while True:\n                line = file.readline()\n                if not line:\n                    break\n                args.mnk, args.label = line.strip(), \"\"\n                if args.mnk:\n                    start(args)\n                    print(\"\")\n    else:\n        if os.path.isdir(args.mnk):\n            args.jsondir = args.mnk\n            args.mnk = default_mnk\n            if args.merge is None:\n                args.merge = -1\n        else:\n            try:\n                mnk = tuple(max(int(i), 1) for i in args.mnk.split(\"x\"))\n            except:  # noqa: E722\n                mnk = None\n                pass\n            if not mnk:\n                sys.tracebacklimit = 0\n                raise RuntimeError(\"Cannot parse MxNxK triplet or filename.\")\n        start(args)\n"
  },
  {
    "path": "src/acc/opencl/smm/tune_multiply.sh",
    "content": "#!/usr/bin/env bash\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: BSD-3-Clause                                                            #\n####################################################################################################\n\nXARGS=$(command -v xargs)\nSORT=$(command -v sort)\nHEAD=$(command -v head)\nSED=$(command -v gsed)\nCUT=$(command -v cut)\nLS=$(command -v ls)\nRM=$(command -v rm)\nWC=$(command -v wc)\n\n# initial delay before auto-tuning (interactive)\nWAIT_DEFAULT=12\n\n# GNU sed is desired (macOS)\nif [ ! \"${SED}\" ]; then\n  SED=$(command -v sed)\nfi\n\nif [ \"${XARGS}\" ] && [ \"${SORT}\" ] && [ \"${HEAD}\" ] && [ \"${SED}\" ] && \\\n   [ \"${LS}\" ] && [ \"${RM}\" ] && [ \"${WC}\" ];\nthen\n  EXTRA=\"\"\n  while test $# -gt 0; do\n    case \"$1\" in\n    -h|--help)\n      HELP=1\n      shift $#;;\n    -c|--continue)\n      CONTINUE=1\n      shift 1;;\n    -w|--wait)\n      WAIT=$2\n      shift 2;;\n    -u|--update)\n      UPDATE=1\n      shift 1;;\n    -d|--delete)\n      DELETE=1\n      shift 1;;\n    -a|--tuning-level)\n      TLEVEL=$2\n      shift 2;;\n    -b|--backwards)\n      REVERSE=1\n      shift 1;;\n    -t|--maxtime)\n      MAXTIME=$2\n      shift 2;;\n    -p|--jsondir)\n      JSONDIR=$2\n      shift 2;;\n    -k|--specid)\n      SPECID=$2\n      shift 2;;\n    -m|--limit)\n      MAXEXT=$2\n      shift 2;;\n    -n|--triplets)\n      MAXNUM=$2\n      shift 2;;\n    -r|--bound)\n      BOUNDL=$2\n      BOUNDU=$3\n      shift 3;;\n    -i|--part)\n      PART=$2\n      shift 2;;\n    -j|--nparts)\n      NPARTS=$2\n      shift 2;;\n    -s|--batchsize)\n      BATCHSIZE=$2\n      shift 2;;\n    *)\n      if [ \"-\" != \"${1:0:1}\" ]; then\n        break\n      else\n        EXTRA+=\" $1\"\n        shift\n      fi;;\n    esac\n  done\n  # default/basic settings\n  if [ ! \"${BATCHSIZE}\" ]; then BATCHSIZE=0; fi\n  if [ ! \"${JSONDIR}\" ]; then JSONDIR=.; fi\n  if [ ! \"${TLEVEL}\" ]; then TLEVEL=-1; fi\n  if [ ! \"${NPARTS}\" ]; then NPARTS=${PMI_SIZE:-${OMPI_COMM_WORLD_SIZE:-1}}; fi\n  if [ ! \"${PART}\" ]; then\n    PART0=${PMI_RANK:-${OMPI_COMM_WORLD_RANK:-0}}\n    PART=$(((PART0+1)%NPARTS+1))\n  fi\n  if [ ! \"${WAIT}\" ] && [ \"1\" != \"${NPARTS}\" ]; then WAIT=0; fi\n  # sanity checks\n  if [ \"0\" != \"$((NPARTS<PART))\" ]; then\n    >&2 echo \"ERROR: part-number ${PART} is larger than the requested ${NPARTS} parts!\"\n    exit 1\n  elif [ \"0\" != \"$((1>PART))\" ]; then\n    >&2 echo \"ERROR: part-number must be 1-based!\"\n    exit 1\n  fi\n  if [ \"${SPECID}\" ] && [ \"$1\" ]; then\n    >&2 echo \"ERROR: --specid and <triplet-spec> are mutual exclusive!\"\n    exit 1\n  fi\n  # how to print standard vs error messages\n  if [ ! \"${HELP}\" ] || [ \"0\" = \"${HELP}\" ]; then\n    JSONS=$(${LS} -1 ${JSONDIR}/tune_multiply-*-*x*x*-*gflops.json 2>/dev/null)\n    HERE=$(cd \"$(dirname \"$0\")\" && pwd -P)\n    ECHO=\">&2 echo\"\n    if [ \"${UPDATE}\" ] && [ \"0\" != \"${UPDATE}\" ]; then\n      MNKS=$(${SED} -n \"s/.*tune_multiply-..*-\\(..*x..*x.[^-]*\\)-..*gflops\\.json/\\1/p\" <<<\"${JSONS}\" \\\n         | ${SORT} -u -n -tx -k1,1 -k2,2 -k3,3)\n    elif [ \"${SPECID}\" ]; then\n      MNKS=$(eval \"${HERE}/../../acc_triplets.sh -k ${SPECID} 2>/dev/null\")\n    else\n      if [[ \"$*\" != *\"x\"* ]]; then\n        MNKS=$(eval \"${HERE}/../../acc_triplets.sh $* 2>/dev/null\")\n      else\n        MNKS=\"$*\"\n      fi\n    fi\n  else\n    ECHO=\"echo\"\n  fi\n  if [ ! \"${WAIT}\" ] || [[ (\"${HELP}\" && \"0\" != \"${HELP}\") ]]; then\n    eval \"${ECHO} \\\"Usage: $0 [options] [<triplet-spec>]\\\"\"\n    eval \"${ECHO} \\\"       Options must precede triplet specification\\\"\"\n    eval \"${ECHO} \\\"       -w|--wait N: initial delay before auto-tuning (default: ${WAIT_DEFAULT} s)\\\"\"\n    eval \"${ECHO} \\\"       -c|--continue: proceed with plan if tuning is interrupted\\\"\"\n    eval \"${ECHO} \\\"       -u|--update: retune all JSONs found in directory (see -p)\\\"\"\n    eval \"${ECHO} \\\"       -s|--batchsize N: Number of batched SMMs (a.k.a. stacksize)\\\"\"\n    eval \"${ECHO} \\\"       -a|--tuning-level N=0..3: all, most, some, least tunables\\\"\"\n    eval \"${ECHO} \\\"       -b|--backwards: tune in descending order of triplets\\\"\"\n    eval \"${ECHO} \\\"       -t|--maxtime N: number of seconds spent per kernel\\\"\"\n    eval \"${ECHO} \\\"       -p|--jsondir P: path to JSON-files (tuned params)\\\"\"\n    eval \"${ECHO} \\\"       -i|--part N (1-based): Nth session out of nparts\\\"\"\n    eval \"${ECHO} \\\"       -j|--nparts N: number of total sessions (see -i)\\\"\"\n    eval \"${ECHO} \\\"       -r|--bound L U: limit L**3 < MNK <= U**3\\\"\"\n    eval \"${ECHO} \\\"       -m|--limit N: limit any shape extent to N\\\"\"\n    eval \"${ECHO} \\\"       -n|--triplets N: limit number of triplet\\\"\"\n    eval \"${ECHO} \\\"       -k|--specid N: predefined triplets\\\"\"\n    eval \"${ECHO} \\\"        0-10: older to newer (larger), e.g.,\\\"\"\n    eval \"${ECHO} \\\"           0:  201 kernels\\\"\"\n    eval \"${ECHO} \\\"          10: 1266 kernels\\\"\"\n    eval \"${ECHO} \\\"       <triplet-spec>, e.g., 134 kernels \\\\\\\"23, 5 32 13 24 26, 4 9\\\\\\\"\\\"\"\n    eval \"${ECHO} \\\"         MxNxK's can be also given directly, e.g.,\\\"\"\n    eval \"${ECHO} \\\"         1x1x1 2x2x2 2x2x3 2x3x2 2x3x3 3x2x2 3x2x3 3x3x2 3x3x3\\\"\"\n    eval \"${ECHO} \\\"         (which is equivalent to \\\\\\\"1, 2 3\\\\\\\")\\\"\"\n    eval \"${ECHO}\"\n    if [ \"${HELP}\" ] && [ \"0\" != \"${HELP}\" ]; then exit 0; fi\n  fi\n  if [ \"${MNKS}\" ]; then\n    if [ \"${BOUNDL}\" ] || [ \"${BOUNDU}\" ]; then\n      if [ ! \"${BOUNDL}\" ]; then BOUNDL=0; elif [ ! \"${BOUNDU}\" ]; then BOUNDU=0; fi\n      if [ \"0\" != \"$((0<=BOUNDL))\" ]; then\n        for MNK in $(${SED} \"s/x/*/g\" <<<\"${MNKS}\"); do\n          S=$((MNK))\n          if [ \"0\" != \"$((BOUNDL<BOUNDU))\" ]; then\n            if [ \"0\" != \"$((BOUNDL**3<S&&S<=BOUNDU**3))\" ]; then TMP=\"${TMP} ${MNK}\"; fi\n          else\n            if [ \"0\" != \"$((BOUNDL**3<S))\" ]; then TMP=\"${TMP} ${MNK}\"; fi\n          fi\n        done\n        MNKS=$(${SED} \"s/*/x/g\" <<<\"${TMP}\")\n      fi\n    fi\n    if [ \"${MNKS}\" ] && [ \"${MAXEXT}\" ] && [ \"0\" != \"$((0<MAXEXT))\" ]; then\n      TMP=\"\"\n      for MNK in ${MNKS}; do\n        for EXT in $(${SED} \"s/x/ /g\" <<<\"${MNK}\"); do\n          if [ \"0\" != \"$((MAXEXT<EXT))\" ]; then continue 2; fi\n        done\n        TMP=\"${TMP} ${MNK}\"\n      done\n      MNKS=${TMP}\n    fi\n    if [ \"${REVERSE}\" ] && [ \"0\" != \"${REVERSE}\" ] && \\\n       [ \"$(command -v tr)\" ] && [ \"$(command -v tac)\" ];\n    then\n      MNKS=$(tr ' ' '\\n' <<<\"${MNKS}\" | tac | tr '\\n' ' '; echo)\n    fi\n    if [ \"${MNKS}\" ] && [ \"${MAXNUM}\" ] && [ \"0\" != \"$((0<MAXNUM))\" ]; then\n      MNKS=$(${XARGS} -n1 <<<\"${MNKS}\" | ${HEAD} -n\"${MAXNUM}\" | ${XARGS})\n    else\n      MNKS=$(${XARGS} <<<\"${MNKS}\")\n    fi\n  fi\n  NTRIPLETS=$(${WC} -w <<<\"${MNKS}\")\n  if [ \"0\" != \"$((0==NTRIPLETS))\" ]; then\n    if [ \"${HELP}\" ] || [ \"0\" = \"${HELP}\" ]; then exit 0; fi\n    >&2 echo \"ERROR: invalid or no <triplet-spec> given!\"\n    exit 1\n  fi\n  if [ ! \"${WAIT}\" ] || [ \"0\" != \"${WAIT}\" ]; then\n    if [ \"0\" = \"$((NPARTS<=NTRIPLETS))\" ]; then\n      >&2 echo \"WARNING: problem is over-decomposed!\"\n    fi\n    echo \"Session ${PART} of ${NPARTS} part(s).\"\n  fi\n  if [ ! \"${MAXTIME}\" ] && [[ (! \"${CONTINUE}\"  || \\\n      \"${CONTINUE}\" = \"false\"                   || \\\n      \"${CONTINUE}\" = \"no\"                      || \\\n      \"${CONTINUE}\" = \"0\") ]];\n  then\n    MAXTIME=160\n  fi\n  PARTLOSZ=$((NPARTS<NTRIPLETS?(NTRIPLETS/NPARTS):1))\n  PARTUPSZ=$(((NTRIPLETS+NPARTS-1)/NPARTS))\n  PARTUPNM=$((PARTUPSZ!=PARTLOSZ?(NTRIPLETS-PARTLOSZ*NPARTS):(NTRIPLETS/PARTUPSZ)))\n  PARTLONM=$((NPARTS-PARTUPNM)); PARTZERO=PART-1\n  PARTOFFS=$((PARTZERO<=PARTUPNM?(PARTZERO*PARTUPSZ):(PARTUPNM*PARTUPSZ+(PARTZERO-PARTUPNM)*PARTLOSZ)))\n  PARTSIZE=$((PART<=PARTUPNM?PARTUPSZ:PARTLOSZ))\n  if [ \"${MAXTIME}\" ] && [ \"0\" != \"$((0<MAXTIME))\" ]; then\n    if [[ ! \"${WAIT}\" || \"0\" != \"${WAIT}\" ]] && [ \"1\" = \"${PART}\" ]; then\n      HRS=$((MAXTIME*PARTSIZE/3600))\n      MNS=$(((MAXTIME*PARTSIZE-HRS*3600+59)/60))\n      echo \"Tuning ${NTRIPLETS} kernels will take about ${HRS}h${MNS}m.\"\n    fi\n    MAXTIME=\"--stop-after=${MAXTIME}\"\n  else\n    echo \"Tuning ${PARTSIZE} kernels will take an unknown time (no limit given).\"\n  fi\n  if [ \"${DELETE}\" ] && [ \"0\" != \"${DELETE}\" ]; then DELETE=-d; fi\n  NJSONS=$(${WC} -l <<<\"${JSONS}\")\n  if [ \"0\" != \"${NJSONS}\" ]; then\n    if [ ! \"${UPDATE}\" ] || [ \"0\" = \"${UPDATE}\" ]; then\n      >&2 echo \"Already found ${NJSONS} (unrelated?) JSON-files.\"\n    fi\n  elif [ -e tune_multiply.csv ]; then\n    >&2 echo \"No JSON file found but (unrelated?) tune_multiply.csv exists.\"\n  fi\n  if [ ! \"${WAIT}\" ]; then WAIT=${WAIT_DEFAULT}; fi\n  if [ \"0\" != \"$((0<WAIT))\" ] && [ \"$(command -v sleep)\" ]; then\n    echo\n    echo \"Tuning will start in ${WAIT} seconds. Hit CTRL-C to abort.\"\n    sleep ${WAIT}\n  fi\n  N=0\n  MNKPART=$(${CUT} -d' ' -f $((PARTOFFS+1))-$((PARTOFFS+PARTSIZE)) <<<\"${MNKS}\")\n  for MNK in ${MNKPART}; do\n    if [ \"0\" != \"$(((N)<PARTSIZE))\" ]; then\n      if [ \"1\" != \"${NPARTS}\" ] && [ \"${HOSTNAME}\" ]; then STEP=\"@${HOSTNAME}\"; fi\n      echo\n      echo \"[$((N+1))/${PARTSIZE}]${STEP}: auto-tuning ${MNK}-kernel...\"\n      # avoid mixing database of previous results into new session\n      ${RM} -rf ./opentuner.db\n      eval \"${HERE}/tune_multiply.py ${MNK} ${DELETE} -p ${JSONDIR} -s ${BATCHSIZE} -a ${TLEVEL} ${MAXTIME}${EXTRA}\"\n      RESULT=$?\n      # environment var. CONTINUE allows to proceed with next kernel\n      # even if tune_multiply.py returned non-zero exit code\n      if [[ (\"0\" != \"${RESULT}\") && \\\n            (\"${CONTINUE}\" = \"\" \\\n          || \"${CONTINUE}\" = \"0\" \\\n          || \"${CONTINUE}\" = \"no\" \\\n          || \"${CONTINUE}\" = \"false\") ]];\n      then\n        exit ${RESULT}\n      fi\n    else\n      break\n    fi\n    N=$((N+1))\n  done\n  if [ \"${RESULT}\" ]; then\n    ${RM} -rf ./opentuner.db\n  fi\nelse\n  >&2 echo \"ERROR: missing prerequisites!\"\n  exit 1\nfi\n"
  },
  {
    "path": "src/base/PACKAGE",
    "content": "{\n\"description\": \"base routines needed to abstract away some machine/compiler dependent functionality\",\n\"archive\": \"libdbcsr\",\n\"requires\": []\n}\n"
  },
  {
    "path": "src/base/dbcsr_base_hooks.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_base_hooks\n   !! Central dispatch for basic hooks\n   USE dbcsr_kinds, ONLY: default_string_length\n   USE dbcsr_machine, ONLY: default_output_unit, &\n                            m_abort, &\n                            m_flush\n\n   IMPLICIT NONE\n   PRIVATE\n\n   !API\n   PUBLIC :: dbcsr_abort, dbcsr_warn, timeset, timestop\n   !API\n   PUBLIC :: dbcsr_abort_hook, dbcsr_warn_hook, timeset_hook, timestop_hook, &\n             timeset_interface, timestop_interface, &\n             dbcsr_abort_interface, dbcsr_warn_interface\n   !API\n   PUBLIC :: dbcsr__a, dbcsr__b, dbcsr__w, dbcsr__l\n\n   ! this interface (with subroutines in it) must to be defined right before\n   ! the regular subroutines/functions - otherwise prettify.py will screw up.\n   INTERFACE\n      SUBROUTINE dbcsr_abort_interface(location, message)\n         CHARACTER(len=*), INTENT(in)                       :: location, message\n\n      END SUBROUTINE dbcsr_abort_interface\n\n      SUBROUTINE dbcsr_warn_interface(location, message)\n         CHARACTER(len=*), INTENT(in)                       :: location, message\n\n      END SUBROUTINE dbcsr_warn_interface\n\n      SUBROUTINE timeset_interface(routineN, handle)\n         CHARACTER(LEN=*), INTENT(IN)                       :: routineN\n         INTEGER, INTENT(OUT)                               :: handle\n\n      END SUBROUTINE timeset_interface\n\n      SUBROUTINE timestop_interface(handle)\n         INTEGER, INTENT(IN)                                :: handle\n\n      END SUBROUTINE timestop_interface\n   END INTERFACE\n\n   PROCEDURE(dbcsr_abort_interface), POINTER :: dbcsr_abort_hook => Null()\n   PROCEDURE(dbcsr_warn_interface), POINTER :: dbcsr_warn_hook => Null()\n   PROCEDURE(timeset_interface), POINTER :: timeset_hook => Null()\n   PROCEDURE(timestop_interface), POINTER :: timestop_hook => Null()\n\nCONTAINS\n\n   SUBROUTINE dbcsr_abort(location, message)\n      !! Terminate the program\n      CHARACTER(len=*), INTENT(in)                       :: location, message\n\n      IF (ASSOCIATED(dbcsr_abort_hook)) THEN\n         CALL dbcsr_abort_hook(location, message)\n      ELSE\n         WRITE (default_output_unit, *) \"ABORT in \"//TRIM(location)//\" \"//TRIM(message)\n         CALL m_flush(default_output_unit)\n         CALL m_abort()\n      END IF\n      ! compiler hint\n      STOP \"Never return from here\"\n   END SUBROUTINE dbcsr_abort\n\n   SUBROUTINE dbcsr_warn(location, message)\n      !! Issue a warning\n      CHARACTER(len=*), INTENT(in)                       :: location, message\n\n      IF (ASSOCIATED(dbcsr_warn_hook)) THEN\n         CALL dbcsr_warn_hook(location, message)\n      ELSE\n         WRITE (default_output_unit, *) \"WARNING in \"//TRIM(location)//\" \"//TRIM(message)\n         CALL m_flush(default_output_unit)\n      END IF\n   END SUBROUTINE dbcsr_warn\n\n   SUBROUTINE timeset(routineN, handle)\n      !! Start timer\n      CHARACTER(LEN=*), INTENT(IN)                       :: routineN\n      INTEGER, INTENT(OUT)                               :: handle\n\n      IF (ASSOCIATED(timeset_hook)) THEN\n         CALL timeset_hook(routineN, handle)\n      ELSE\n         handle = -1\n      END IF\n   END SUBROUTINE timeset\n\n   SUBROUTINE timestop(handle)\n      !! Stop timer\n      INTEGER, INTENT(IN)                                :: handle\n\n      IF (ASSOCIATED(timestop_hook)) THEN\n         CALL timestop_hook(handle)\n      ELSE\n         IF (handle /= -1) &\n            CALL dbcsr_abort(dbcsr__l(\"base_hooks.F\", __LINE__), \"Got wrong handle\")\n      END IF\n   END SUBROUTINE timestop\n\n   SUBROUTINE dbcsr__a(filename, lineNr)\n      !! DBCSR_ASSERT handler\n      CHARACTER(len=*), INTENT(in)                       :: filename\n      INTEGER, INTENT(in)                                :: lineNr\n\n      CALL dbcsr_abort(location=dbcsr__l(filename, lineNr), message=\"DBCSR_ASSERT failed\")\n      ! compiler hint\n      STOP \"Never return from here\"\n   END SUBROUTINE dbcsr__a\n\n   SUBROUTINE dbcsr__b(filename, lineNr, message)\n      !! DBCSR_ABORT handler\n      CHARACTER(len=*), INTENT(in)                       :: filename\n      INTEGER, INTENT(in)                                :: lineNr\n      CHARACTER(len=*), INTENT(in)                       :: message\n\n      CALL dbcsr_abort(location=dbcsr__l(filename, lineNr), message=message)\n      ! compiler hint\n      STOP \"Never return from here\"\n   END SUBROUTINE dbcsr__b\n\n   SUBROUTINE dbcsr__w(filename, lineNr, message)\n      !! DBCSR_WARN handler\n      CHARACTER(len=*), INTENT(in)                       :: filename\n      INTEGER, INTENT(in)                                :: lineNr\n      CHARACTER(len=*), INTENT(in)                       :: message\n\n      CALL dbcsr_warn(location=dbcsr__l(filename, lineNr), message=message)\n   END SUBROUTINE dbcsr__w\n\n   FUNCTION dbcsr__l(filename, lineNr) RESULT(location)\n      !! Helper routine to assemble __LOCATION__\n      CHARACTER(len=*), INTENT(in)                       :: filename\n      INTEGER, INTENT(in)                                :: lineNr\n      CHARACTER(len=default_string_length)               :: location\n\n      CHARACTER(len=15)                                  :: lineNr_str\n\n      WRITE (lineNr_str, FMT='(I10)') lineNr\n      location = TRIM(filename)//\":\"//TRIM(ADJUSTL(lineNr_str))\n\n   END FUNCTION dbcsr__l\n\nEND MODULE dbcsr_base_hooks\n"
  },
  {
    "path": "src/base/dbcsr_base_uses.f90",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n! Basic use statements and preprocessor macros\n! should be included in the use statements\n\n  USE dbcsr_base_hooks, ONLY: dbcsr__a, &\n                              dbcsr__b, &\n                              dbcsr__w, &\n                              dbcsr__l, &\n                              dbcsr_abort, &\n                              dbcsr_warn, &\n                              timeset, &\n                              timestop\n\n! Dangerous: Full path can be arbitrarily long and might overflow Fortran line.\n#if !defined(__SHORT_FILE__)\n#define __SHORT_FILE__ __FILE__\n#endif\n\n#define __LOCATION__ dbcsr__l(__SHORT_FILE__,__LINE__)\n#define DBCSR_WARN(msg) CALL dbcsr__w(__SHORT_FILE__,__LINE__,msg)\n#define DBCSR_ABORT(msg) CALL dbcsr__b(__SHORT_FILE__,__LINE__,msg)\n\n! DBCSR_ASSERT can be elided if NDEBUG is defined.\n#if defined(NDEBUG)\n# define DBCSR_ASSERT(cond)\n#else\n# define DBCSR_ASSERT(cond) IF(.NOT.(cond))CALL dbcsr__a(__SHORT_FILE__,__LINE__)\n#endif\n\n! The MARK_USED macro can be used to mark an argument/variable as used.\n! It is intended to make it possible to switch on -Werror=unused-dummy-argument,\n! but deal elegantly with e.g. library wrapper routines that take arguments only used if the library is linked in.\n! This code should be valid for any Fortran variable, is always standard conforming,\n! and will be optimized away completely by the compiler\n#define MARK_USED(foo) IF(.FALSE.)THEN; DO ; IF(SIZE(SHAPE(foo))==-1) EXIT ;  END DO ; ENDIF\n\n! Calculate version number from 2 or 3 components. Can be used for comparison e.g.,\n! TO_VERSION3(4, 9, 0) <= TO_VERSION3(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)\n! TO_VERSION(8, 0) <= TO_VERSION(__GNUC__, __GNUC_MINOR__)\n#define TO_VERSION2(MAJOR, MINOR) ((MAJOR) * 10000 + (MINOR) * 100)\n#define TO_VERSION3(MAJOR, MINOR, UPDATE) (TO_VERSION2(MAJOR, MINOR) + (UPDATE))\n#define TO_VERSION TO_VERSION2\n\n! Rely on incorrect expansion inside of quotes to avoid issue of handling hash-character.\n!&<\n#if defined(__GNUC__)\n#define DBCSR_STRINGIZE(A) \"A\"\n#else\n#define DBCSR_STRINGIZE(A) #A\n#endif\n!&>\n\n! LIBXSMM has a FORTRAN-suitable header with macro/version definitions (since v1.8.2).\n! Allows macro-toggles (in addition to parameters).\n#if defined(__LIBXSMM)\n#include <libxsmm_config.h>\n#if !defined(LIBXSMM_CONFIG_VERSION)\n#error LIBXSMM v1.8.2 or later is required!\n#endif\n#endif\n\n! Aliasing __MPI_F08 macro of CP2K to __USE_MPI_F08 macro in DBCSR\n#if defined(__parallel) && defined(__MPI_F08)\n#define __USE_MPI_F08 1\n#endif\n"
  },
  {
    "path": "src/base/dbcsr_kinds.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_kinds\n   !! Defines the basic variable types\n   !! @note\n   !! Data type definitions; tested on:\n   !! - IBM AIX xlf90\n   !! - SGI IRIX  f90\n   !! - CRAY T3E  f90\n   !! - DEC ALPHA f90\n   !! - NAG_F90\n   !! - SUN\n   !! - HITACHI\n\n   IMPLICIT NONE\n\n   PRIVATE\n   PUBLIC :: sp, dp, print_kind_info, dp_size, sp_size, int_size\n   PUBLIC :: int_1, int_4, int_8, int_1_size, int_2_size, int_4_size, int_8_size\n   PUBLIC :: real_4, real_8, real_4_size, real_8_size\n   PUBLIC :: default_string_length, default_path_length, max_line_length\n\n   INTEGER, PARAMETER :: sp = SELECTED_REAL_KIND(6, 30)\n   INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(14, 200)\n   ! we rely on this (libraries) but do not check this\n   INTEGER, PARAMETER :: dp_size = 8, &\n                         int_size = BIT_SIZE(0)/8, &\n                         sp_size = 4\n\n   INTEGER, PARAMETER :: real_4 = SELECTED_REAL_KIND(6, 30)\n   INTEGER, PARAMETER :: real_8 = SELECTED_REAL_KIND(14, 200)\n   INTEGER, PARAMETER :: real_4_size = 4\n   INTEGER, PARAMETER :: real_8_size = 8\n\n   INTEGER, PARAMETER :: int_1 = SELECTED_INT_KIND(2)\n   INTEGER, PARAMETER :: int_1_size = BIT_SIZE(INT(0, int_1))/8\n\n   INTEGER, PARAMETER :: int_2 = SELECTED_INT_KIND(4)\n   INTEGER, PARAMETER :: int_2_size = BIT_SIZE(INT(0, int_2))/8\n\n   INTEGER, PARAMETER :: int_4 = SELECTED_INT_KIND(5)\n   INTEGER, PARAMETER :: int_4_size = BIT_SIZE(INT(0, int_4))/8\n\n   INTEGER, PARAMETER :: int_8 = SELECTED_INT_KIND(10)\n   INTEGER, PARAMETER :: int_8_size = BIT_SIZE(INT(0, int_8))/8\n\n   INTEGER, PARAMETER :: default_string_length = 80\n   INTEGER, PARAMETER :: default_path_length = 1024\n   INTEGER, PARAMETER :: max_line_length = 2*default_path_length\n   CHARACTER(LEN=1), PARAMETER, PUBLIC :: default_blank_character(2) = (/\" \", CHAR(9)/)\n\nCONTAINS\n\n   SUBROUTINE print_kind_info(iw)\n      !! Print informations about the used data types.\n\n      INTEGER, INTENT(IN)                                :: iw\n\n      WRITE (iw, '( /, T2, A )') 'DATA TYPE INFORMATION:'\n\n      WRITE (iw, '( /,T2,A,T79,A,2(/,T2,A,T75,I6),3(/,T2,A,T67,E14.8) )') &\n         'REAL: Data type name:', 'dp', '      Kind value:', KIND(0.0_dp), &\n         '      Precision:', PRECISION(0.0_dp), &\n         '      Smallest non-negligible quantity relative to 1:', &\n         EPSILON(0.0_dp), &\n         '      Smallest positive number:', TINY(0.0_dp), &\n         '      Largest representable number:', HUGE(0.0_dp)\n      WRITE (iw, '( /,T2,A,T79,A,2(/,T2,A,T75,I6),3(/,T2,A,T67,E14.8) )') &\n         '      Data type name:', 'sp', '      Kind value:', KIND(0.0_sp), &\n         '      Precision:', PRECISION(0.0_sp), &\n         '      Smallest non-negligible quantity relative to 1:', &\n         EPSILON(0.0_sp), &\n         '      Smallest positive number:', TINY(0.0_sp), &\n         '      Largest representable number:', HUGE(0.0_sp)\n      WRITE (iw, '( /,T2,A,T72,A,4(/,T2,A,T61,I20) )') &\n         'INTEGER: Data type name:', '(default)', '         Kind value:', &\n         KIND(0), &\n         '         Bit size:', BIT_SIZE(0), &\n         '         Largest representable number:', HUGE(0)\n      WRITE (iw, '( /,T2,A,T72,A,/,T2,A,T75,I6,/ )') &\n         'LOGICAL: Data type name:', '(default)', &\n         '         Kind value:', KIND(.TRUE.)\n      WRITE (iw, '( /,T2,A,T72,A,/,T2,A,T75,I6,/ )') &\n         'CHARACTER: Data type name:', '(default)', &\n         '           Kind value:', KIND('C')\n\n   END SUBROUTINE print_kind_info\n\nEND MODULE dbcsr_kinds\n\n"
  },
  {
    "path": "src/base/dbcsr_machine.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_machine\n   USE ISO_FORTRAN_ENV, ONLY: input_unit, &\n                              output_unit\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          dp, &\n                          int_8\n   USE dbcsr_machine_internal, ONLY: &\n      m_abort, m_chdir, m_flush_internal => m_flush, m_getarg, m_getcwd, m_getlog, m_getpid, &\n      m_hostnm, m_iargc, m_memory, m_memory_details, m_memory_max, m_mov, m_procrun\n\n!$ USE OMP_LIB, ONLY: omp_get_wtime\n\n   IMPLICIT NONE\n\n   ! Except for some error handling code, all code should\n   ! get a unit number from the print keys or from the logger, in order\n   ! to guarantee correct output behavior,\n   ! for example in farming or path integral runs\n   ! default_input_unit should never be used\n   ! but we need to know what it is, as we should not try to open it for output\n   INTEGER, PUBLIC, PARAMETER                   :: default_output_unit = output_unit, &\n                                                   default_input_unit = input_unit\n\n   PRIVATE\n\n   PUBLIC :: m_walltime, m_datum, m_flush, m_flush_internal, &\n             m_hostnm, m_getcwd, m_getlog, m_getpid, m_getarg, m_procrun, &\n             m_memory, m_iargc, m_abort, m_chdir, m_mov, m_memory_details, &\n             m_energy, m_memory_max, m_cpuinfo\n\n   ! should only be set according to the state in &GLOBAL\n   LOGICAL, SAVE, PUBLIC :: flush_should_flush = .FALSE.\n\nCONTAINS\n\n   SUBROUTINE m_flush(lunit)\n      !! flushes units if the &GLOBAL flag is set accordingly\n      !! @note\n      !! flushing might degrade performance significantly (30% and more)\n\n      INTEGER, INTENT(IN)                                :: lunit\n\n      IF (flush_should_flush) CALL m_flush_internal(lunit)\n   END SUBROUTINE\n   FUNCTION m_walltime() RESULT(wt)\n      !! returns time from a real-time clock, protected against rolling\n      !! early/easily\n      !! @note\n      !! same implementation for all machines.\n      !! might still roll, if not called multiple times per count_max/count_rate\n\n#if defined(__LIBXSMM)\n      USE libxsmm, ONLY: libxsmm_timer_tick, libxsmm_timer_duration\n#endif\n      REAL(KIND=dp)                                      :: wt\n\n#if defined(__LIBXSMM)\n      wt = libxsmm_timer_duration(0_int_8, libxsmm_timer_tick())\n#else\n\n      INTEGER(KIND=int_8)                                :: count\n      INTEGER(KIND=int_8), SAVE                          :: count_max, count_rate, cycles = -1, &\n                                                            last_count\n!$    IF (.FALSE.) THEN\n! count lies in [0,count_max] and increases monotonically\n\n         IF (cycles == -1) THEN ! get parameters of system_clock and initialise\n            CALL SYSTEM_CLOCK(count_rate=count_rate, count_max=count_max)\n            cycles = 0\n            last_count = 0\n         END IF\n\n         CALL SYSTEM_CLOCK(count=count)\n\n         ! protect against non-standard cases where time might be non-monotonous,\n         ! but it is unlikely that the clock cycled (e.g. underlying system clock adjustments)\n         ! i.e. if count is smaller than last_count by only a small fraction of count_max,\n         ! we use last_count instead\n         ! if count is smaller, we assume that the clock cycled.\n         IF (count < last_count) THEN\n            IF (last_count - count < count_max/100) THEN\n               count = last_count\n            ELSE\n               cycles = cycles + 1\n            END IF\n         END IF\n\n         ! keep track of our history\n         last_count = count\n\n         wt = (REAL(count, KIND=dp) + REAL(cycles, KIND=dp)*(1.0_dp + REAL(count_max, KIND=dp))) &\n              /REAL(count_rate, KIND=dp)\n!$    ELSE\n!$       wt = omp_get_wtime()\n!$    END IF\n#endif\n   END FUNCTION m_walltime\n\n   SUBROUTINE m_cpuinfo(model_name)\n      !! reads /proc/cpuinfo if it exists (i.e. Linux) to return relevant info\n\n      CHARACTER(LEN=default_string_length)               :: model_name\n         !! as obtained from the 'model name' field, UNKNOWN otherwise\n\n      INTEGER, PARAMETER                                 :: bufferlen = 2048\n\n      CHARACTER(LEN=bufferlen)                           :: buffer\n      INTEGER                                            :: i, icol, iline, imod, stat\n\n      model_name = \"UNKNOWN\"\n      buffer = \"\"\n      OPEN (121245, FILE=\"/proc/cpuinfo\", ACTION=\"READ\", STATUS=\"OLD\", ACCESS=\"STREAM\", IOSTAT=stat)\n      IF (stat == 0) THEN\n         DO i = 1, bufferlen\n            READ (121245, END=999) buffer(I:I)\n         END DO\n999      CLOSE (121245)\n         imod = INDEX(buffer, \"model name\")\n         IF (imod > 0) THEN\n            icol = imod - 1 + INDEX(buffer(imod:), \":\")\n            iline = icol - 1 + INDEX(buffer(icol:), NEW_LINE('A'))\n            IF (iline == icol - 1) iline = bufferlen + 1\n            model_name = buffer(icol + 1:iline - 1)\n         END IF\n      END IF\n   END SUBROUTINE m_cpuinfo\n\n   FUNCTION m_energy() RESULT(wt)\n      !! returns the energy used since some time in the past.\n      !! The precise meaning depends on the infrastructure is available.\n      !! In the cray_pm_energy case, this is the energy used by the node in kJ.\n\n      REAL(KIND=dp)                            :: wt\n\n#if defined(__CRAY_PM_ENERGY)\n      wt = read_energy(\"/sys/cray/pm_counters/energy\")\n#elif defined(__CRAY_PM_ACCEL_ENERGY)\n      wt = read_energy(\"/sys/cray/pm_counters/accel_energy\")\n#else\n      wt = 0.0 ! fallback default\n#endif\n\n   END FUNCTION m_energy\n\n#if defined(__CRAY_PM_ACCEL_ENERGY) || defined(__CRAY_PM_ENERGY)\n   FUNCTION read_energy(filename) RESULT(wt)\n      !! reads energy values from the sys-filesystem\n      CHARACTER(LEN=*)                                   :: filename\n      REAL(KIND=dp)                                      :: wt\n\n      CHARACTER(LEN=80)                                  :: DATA\n      INTEGER                                            :: i, iostat\n      INTEGER(KIND=int_8)                                :: raw\n\n      OPEN (121245, FILE=filename, ACTION=\"READ\", STATUS=\"OLD\", ACCESS=\"STREAM\")\n      DO I = 1, 80\n         READ (121245, END=999) DATA(I:I)\n      END DO\n999   CLOSE (121245)\n      DATA(I:80) = \"\"\n      READ (DATA, *, IOSTAT=iostat) raw\n      IF (iostat .NE. 0) THEN\n         wt = 0.0_dp\n      ELSE\n         ! convert from J to kJ\n         wt = raw/1000.0_dp\n      END IF\n   END FUNCTION read_energy\n#endif\n\n   SUBROUTINE m_datum(cal_date)\n      !! returns a datum in human readable format using a standard Fortran routine\n      CHARACTER(len=*), INTENT(OUT)                      :: cal_date\n\n      CHARACTER(len=10)                                  :: time\n      CHARACTER(len=8)                                   :: date\n\n      CALL DATE_AND_TIME(date=date, time=time)\n      cal_date = date(1:4)//\"-\"//date(5:6)//\"-\"//date(7:8)//\" \"//time(1:2)//\":\"//time(3:4)//\":\"//time(5:10)\n\n   END SUBROUTINE m_datum\n\nEND MODULE dbcsr_machine\n"
  },
  {
    "path": "src/base/dbcsr_machine_internal.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_machine_internal\n\n! use POSIX per default\n#include \"base/dbcsr_machine_posix.f90\"\n\nEND MODULE dbcsr_machine_internal\n"
  },
  {
    "path": "src/base/dbcsr_machine_posix.f90",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n!! Implementation of machine interface based on Fortran 2003 and POSIX\n\n  USE dbcsr_kinds, ONLY: dp, int_8, default_path_length, &\n                         default_string_length\n  USE ISO_C_BINDING, ONLY: C_INT, C_NULL_CHAR, C_CHAR, C_PTR, C_NULL_PTR, C_ASSOCIATED, C_F_POINTER\n\n  IMPLICIT NONE\n  PRIVATE\n\n  PUBLIC :: m_flush, m_memory, &\n            m_hostnm, m_getcwd, m_getlog, m_getpid, m_getarg, &\n            m_iargc, m_abort, m_chdir, m_mov, &\n            m_memory_details, m_procrun\n\n  INTEGER(KIND=int_8), PUBLIC, SAVE :: m_memory_max = 0\n\n  CONTAINS\n\n  SUBROUTINE m_abort()\n     !! Can be used to get a nice core\n     INTERFACE\n        SUBROUTINE abort() BIND(C, name=\"abort\")\n        END SUBROUTINE\n     END INTERFACE\n\n     CALL abort()\n  END SUBROUTINE m_abort\n\n  FUNCTION m_iargc() RESULT(ic)\n     !! The number of arguments of the fortran program\n     INTEGER                                  :: ic\n\n     ic = COMMAND_ARGUMENT_COUNT()\n  END FUNCTION m_iargc\n\n  SUBROUTINE m_flush(lunit)\n     !! Flush a given unit\n     INTEGER, INTENT(IN)                      :: lunit\n\n     FLUSH (lunit)\n  END SUBROUTINE m_flush\n\n  FUNCTION m_procrun(pid) RESULT(run_on)\n     !! Returns if a process is running on the local machine\n     !! 1 if yes and 0 if not\n     INTEGER, INTENT(IN)       ::   pid\n     INTEGER                   ::   run_on\n     INTEGER                   ::   istat\n\n     INTERFACE\n        FUNCTION kill(pid, sig) BIND(C, name=\"kill\") RESULT(errno)\n           IMPORT\n           INTEGER(KIND=C_INT), VALUE                :: pid, sig\n           INTEGER(KIND=C_INT)                      :: errno\n        END FUNCTION\n     END INTERFACE\n\n     ! If sig is 0, then no signal is sent, but error checking is still\n     ! performed; this can be used to check for the existence of a process\n     ! ID or process group ID.\n\n     istat = kill(pid=pid, sig=0)\n     IF (istat == 0) THEN\n        run_on = 1 ! no error, process exists\n     ELSE\n        run_on = 0 ! error, process probably does not exist\n     END IF\n\n  END FUNCTION m_procrun\n\n  SUBROUTINE m_memory(mem)\n     !! Returns the total amount of memory [bytes] in use, if known, zero otherwise\n\n     INTEGER(KIND=int_8), OPTIONAL, INTENT(OUT)         :: mem\n     INTEGER(KIND=int_8)                      :: mem_local\n\n     !\n     ! __NO_STATM_ACCESS can be used to disable the stuff, if getpagesize\n     ! lead to linking errors or /proc/self/statm can not be opened\n     !\n#if defined(__NO_STATM_ACCESS)\n     mem_local = 0\n#else\n     INTEGER(KIND=int_8)                      :: m1, m2, m3\n     CHARACTER(LEN=80) :: DATA\n     INTEGER :: iostat, i\n\n     ! the size of a page, might not be available everywhere\n     INTERFACE\n        FUNCTION getpagesize() BIND(C, name=\"getpagesize\") RESULT(RES)\n           IMPORT\n           INTEGER(C_INT) :: RES\n        END FUNCTION\n     END INTERFACE\n\n     !\n     ! reading from statm\n     !\n     mem_local = -1\n     DATA = \"\"\n     OPEN (121245, FILE=\"/proc/self/statm\", ACTION=\"READ\", STATUS=\"OLD\", ACCESS=\"STREAM\")\n     DO I = 1, 80\n        READ (121245, END=999) DATA(I:I)\n     END DO\n999  CLOSE (121245)\n     DATA(I:80) = \"\"\n     ! m1 = total\n     ! m2 = resident\n     ! m3 = shared\n     READ (DATA, *, IOSTAT=iostat) m1, m2, m3\n     IF (iostat .NE. 0) THEN\n        mem_local = 0\n     ELSE\n        mem_local = m2\n#if defined(__STATM_TOTAL)\n        mem_local = m1\n#endif\n#if defined(__STATM_RESIDENT)\n        mem_local = m2\n#endif\n        mem_local = mem_local*getpagesize()\n     END IF\n#endif\n\n     m_memory_max = MAX(mem_local, m_memory_max)\n     IF (PRESENT(mem)) mem = mem_local\n\n  END SUBROUTINE m_memory\n\n! **************************************************************************************************\n! *** get more detailed memory info, all units are bytes.\n! *** the only 'useful' option is MemLikelyFree which is an estimate of remaining memory\n! *** assumed to give info like /proc/meminfo while MeMLikelyFree is the amount of\n! *** memory we're likely to be able to allocate, but not necessarily in one chunk\n! *** zero means not available\n! **************************************************************************************************\n  SUBROUTINE m_memory_details(MemTotal, MemFree, Buffers, Cached, Slab, SReclaimable, MemLikelyFree)\n\n     INTEGER(kind=int_8), OPTIONAL :: MemTotal, MemFree, Buffers, Cached, Slab, SReclaimable, MemLikelyFree\n\n     INTEGER, PARAMETER :: Nbuffer = 10000\n     CHARACTER(LEN=Nbuffer) :: meminfo\n\n     INTEGER :: i\n\n     MemTotal = 0\n     MemFree = 0\n     Buffers = 0\n     Cached = 0\n     Slab = 0\n     SReclaimable = 0\n     MemLikelyFree = 0\n     meminfo = \"\"\n\n     OPEN (UNIT=8123, file=\"/proc/meminfo\", ACCESS=\"STREAM\", ERR=901)\n     i = 0\n     DO\n        i = i + 1\n        IF (i > Nbuffer) EXIT\n        READ (8123, END=900, ERR=900) meminfo(i:i)\n     END DO\n900  CONTINUE\n     meminfo(i:Nbuffer) = \"\"\n901  CONTINUE\n     CLOSE (8123, ERR=902)\n902  CONTINUE\n     MemTotal = get_field_value_in_bytes('MemTotal:')\n     MemFree = get_field_value_in_bytes('MemFree:')\n     Buffers = get_field_value_in_bytes('Buffers:')\n     Cached = get_field_value_in_bytes('Cached:')\n     Slab = get_field_value_in_bytes('Slab:')\n     SReclaimable = get_field_value_in_bytes('SReclaimable:')\n     ! opinions here vary but this might work\n     MemLikelyFree = MemFree + Buffers + Cached + SReclaimable\n\n  CONTAINS\n     INTEGER(int_8) FUNCTION get_field_value_in_bytes(field)\n        CHARACTER(LEN=*) :: field\n        INTEGER :: start\n        INTEGER(KIND=int_8) :: value\n        get_field_value_in_bytes = 0\n        start = INDEX(meminfo, field)\n        IF (start .NE. 0) THEN\n           start = start + LEN_TRIM(field)\n           IF (start .LT. Nbuffer) THEN\n              READ (meminfo(start:), *, ERR=999, END=999) value\n              ! XXXXXXX convert from Kb to bytes XXXXXXXX\n              get_field_value_in_bytes = value*1024\n999           CONTINUE\n           END IF\n        END IF\n     END FUNCTION\n  END SUBROUTINE m_memory_details\n\n! *****************************************************************************\n  SUBROUTINE m_mov(source, TARGET)\n\n     CHARACTER(LEN=*), INTENT(IN)             :: source, TARGET\n\n     INTEGER                                  :: istat\n\n     INTERFACE\n        FUNCTION unlink(path) BIND(C, name=\"unlink\") RESULT(errno)\n           IMPORT\n           CHARACTER(KIND=C_CHAR), DIMENSION(*)     :: path\n           INTEGER(KIND=C_INT)                      :: errno\n        END FUNCTION\n     END INTERFACE\n\n     INTERFACE\n        FUNCTION rename(src, dest) BIND(C, name=\"rename\") RESULT(errno)\n           IMPORT\n           CHARACTER(KIND=C_CHAR), DIMENSION(*)     :: src, dest\n           INTEGER(KIND=C_INT)                      :: errno\n        END FUNCTION\n     END INTERFACE\n\n     IF (TARGET == source) THEN\n        WRITE (*, *) \"Warning: m_mov \", TRIM(TARGET), \" equals \", TRIM(source)\n        RETURN\n     END IF\n\n     ! first remove target (needed on windows / mingw)\n     istat = unlink(TRIM(TARGET)//c_null_char)\n     ! ignore istat of unlink\n\n     ! now move\n     istat = rename(TRIM(source)//c_null_char, TRIM(TARGET)//c_null_char)\n     IF (istat .NE. 0) THEN\n        WRITE (*, *) \"Trying to move \"//TRIM(source)//\" to \"//TRIM(TARGET)//\".\"\n        WRITE (*, *) \"rename returned status: \", istat\n        WRITE (*, *) \"Problem moving file\"\n        CALL m_abort()\n     END IF\n  END SUBROUTINE m_mov\n\n! *****************************************************************************\n  SUBROUTINE m_hostnm(hname)\n     CHARACTER(len=*), INTENT(OUT)            :: hname\n\n     INTEGER                                  :: istat, i\n     CHARACTER(len=default_path_length)       :: buf\n\n     INTERFACE\n        FUNCTION gethostname(buf, buflen) BIND(C, name=\"gethostname\") RESULT(errno)\n           IMPORT\n           CHARACTER(KIND=C_CHAR), DIMENSION(*)     :: buf\n           INTEGER(KIND=C_INT), VALUE               :: buflen\n           INTEGER(KIND=C_INT)                      :: errno\n        END FUNCTION\n     END INTERFACE\n\n     istat = gethostname(buf, LEN(buf))\n     IF (istat /= 0) THEN\n        WRITE (*, *) \"m_hostnm failed\"\n        CALL m_abort()\n     END IF\n     i = INDEX(buf, c_null_char) - 1\n     hname = buf(1:i)\n  END SUBROUTINE m_hostnm\n\n! *****************************************************************************\n  SUBROUTINE m_getcwd(curdir)\n     CHARACTER(len=*), INTENT(OUT)            :: curdir\n     TYPE(C_PTR)                              :: stat\n     INTEGER                                  :: i\n     CHARACTER(len=default_path_length), TARGET  :: tmp\n\n     INTERFACE\n        FUNCTION getcwd(buf, buflen) BIND(C, name=\"getcwd\") RESULT(stat)\n           IMPORT\n           CHARACTER(KIND=C_CHAR), DIMENSION(*)     :: buf\n           INTEGER(KIND=C_INT), VALUE               :: buflen\n           TYPE(C_PTR)                              :: stat\n        END FUNCTION\n     END INTERFACE\n\n     stat = getcwd(tmp, LEN(tmp))\n     IF (.NOT. C_ASSOCIATED(stat)) THEN\n        WRITE (*, *) \"m_getcwd failed\"\n        CALL m_abort()\n     END IF\n     i = INDEX(tmp, c_null_char) - 1\n     curdir = tmp(1:i)\n  END SUBROUTINE m_getcwd\n\n! *****************************************************************************\n  SUBROUTINE m_chdir(dir, ierror)\n     CHARACTER(len=*), INTENT(IN)             :: dir\n     INTEGER, INTENT(OUT)                     :: ierror\n\n     INTERFACE\n        FUNCTION chdir(path) BIND(C, name=\"chdir\") RESULT(errno)\n           IMPORT\n           CHARACTER(KIND=C_CHAR), DIMENSION(*)     :: path\n           INTEGER(KIND=C_INT)                      :: errno\n        END FUNCTION\n     END INTERFACE\n\n     ierror = chdir(TRIM(dir)//c_null_char)\n  END SUBROUTINE m_chdir\n\n! *****************************************************************************\n  SUBROUTINE m_getlog(user)\n     CHARACTER(len=*), INTENT(OUT)            :: user\n     INTEGER :: status\n\n     ! on a posix system LOGNAME should be defined\n     CALL get_environment_variable(\"LOGNAME\", value=user, status=status)\n     ! nope, check alternative\n     IF (status /= 0) &\n        CALL get_environment_variable(\"USER\", value=user, status=status)\n     ! fall back\n     IF (status /= 0) &\n        user = \"root ;-)\"\n\n  END SUBROUTINE m_getlog\n\n! *****************************************************************************\n  SUBROUTINE m_getpid(pid)\n     INTEGER, INTENT(OUT)                     :: pid\n\n     INTERFACE\n        FUNCTION getpid() BIND(C, name=\"getpid\") RESULT(pid)\n           IMPORT\n           INTEGER(KIND=C_INT)              :: pid\n        END FUNCTION\n     END INTERFACE\n\n     pid = getpid()\n  END SUBROUTINE m_getpid\n\n! *****************************************************************************\n  SUBROUTINE m_getarg(i, arg)\n     INTEGER, INTENT(IN)                      :: i\n     CHARACTER(len=*), INTENT(OUT)            :: arg\n     CHARACTER(len=1024)                      :: tmp\n     INTEGER                                  :: istat\n\n     CALL GET_COMMAND_ARGUMENT(i, tmp, status=istat)\n     IF (istat /= 0) THEN\n        WRITE (*, *) \"m_getarg failed\"\n        CALL m_abort()\n     END IF\n     arg = TRIM(tmp)\n  END SUBROUTINE m_getarg\n\n"
  },
  {
    "path": "src/block/PACKAGE",
    "content": "{\n\"description\": \"DBCSR block level routines\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../acc\", \"../core\", \"../utils\", \"../data\", \"../dist\",\n             \"../base\", \"../mpi\", \"../work\"],\n}\n"
  },
  {
    "path": "src/block/dbcsr_block_access.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_block_access\n   !! DBCSR block access\n   USE dbcsr_array_types, ONLY: array_data\n   USE dbcsr_btree, ONLY: btree_add, &\n                          btree_data_cp2d, &\n                          btree_data_dp2d, &\n                          btree_data_sp2d, &\n                          btree_data_zp2d, &\n                          btree_find\n   USE dbcsr_block_operations, ONLY: dbcsr_data_clear, &\n                                     dbcsr_data_set\n   USE dbcsr_config, ONLY: default_resize_factor\n   USE dbcsr_data_methods, ONLY: dbcsr_data_clear_pointer, &\n                                 dbcsr_data_ensure_size, &\n                                 dbcsr_data_get_size_referenced, &\n                                 dbcsr_data_set_pointer, &\n                                 dbcsr_get_data, &\n                                 dbcsr_get_data_p, &\n                                 dbcsr_get_data_p_s, &\n                                 dbcsr_get_data_p_d, &\n                                 dbcsr_get_data_p_c\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_local_cols, &\n                                 dbcsr_distribution_local_rows, &\n                                 dbcsr_distribution_mp\n   USE dbcsr_dist_operations, ONLY: dbcsr_get_block_index, &\n                                    dbcsr_get_stored_block_info, &\n                                    dbcsr_get_stored_coordinates\n   USE dbcsr_index_operations, ONLY: dbcsr_addto_index_array, &\n                                     dbcsr_clearfrom_index_array, &\n                                     dbcsr_expand_row_index, &\n                                     dbcsr_make_dbcsr_index, &\n                                     dbcsr_sort_indices, &\n                                     merge_index_arrays\n   USE dbcsr_methods, ONLY: &\n      dbcsr_blk_column_size, dbcsr_blk_row_size, dbcsr_distribution, dbcsr_get_data_type, &\n      dbcsr_get_num_blocks, dbcsr_mutable_instantiated, dbcsr_mutable_new, dbcsr_nblkrows_total, &\n      dbcsr_use_mutable, dbcsr_wm_use_mutable\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_mynode\n   USE dbcsr_ptr_util, ONLY: pointer_rank_remap2, &\n                             pointer_view\n   USE dbcsr_toollib, ONLY: make_coordinate_tuple, &\n                            swap\n   USE dbcsr_types, ONLY: &\n      dbcsr_data_obj, dbcsr_scalar_type, dbcsr_slot_blk_p, dbcsr_slot_col_i, dbcsr_slot_nblks, &\n      dbcsr_slot_nze, dbcsr_type, dbcsr_type_complex_4, dbcsr_type_complex_4_2d, &\n      dbcsr_type_complex_8, dbcsr_type_complex_8_2d, dbcsr_type_real_4, dbcsr_type_real_4_2d, &\n      dbcsr_type_real_8, dbcsr_type_real_8_2d\n   USE dbcsr_work_operations, ONLY: add_work_coordinate, &\n                                    dbcsr_work_create\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_8, &\n                          real_4, &\n                          real_8\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_block_access'\n\n   PUBLIC :: dbcsr_get_block_p, &\n             dbcsr_put_block, dbcsr_remove_block\n\n   PUBLIC :: dbcsr_reserve_block2d, &\n             dbcsr_reserve_blocks, dbcsr_reserve_all_blocks, dbcsr_reserve_diag_blocks\n\n   INTERFACE dbcsr_get_block_p\n      MODULE PROCEDURE dbcsr_get_block_p_d, dbcsr_get_block_p_s, &\n         dbcsr_get_block_p_z, dbcsr_get_block_p_c\n      MODULE PROCEDURE dbcsr_get_2d_block_p_d, dbcsr_get_2d_block_p_s, &\n         dbcsr_get_2d_block_p_z, dbcsr_get_2d_block_p_c\n      MODULE PROCEDURE dbcsr_get_block_p_area\n   END INTERFACE\n\n   INTERFACE dbcsr_put_block\n      MODULE PROCEDURE dbcsr_put_block_area\n      MODULE PROCEDURE dbcsr_put_block_d, dbcsr_put_block_s, &\n         dbcsr_put_block_z, dbcsr_put_block_c\n      MODULE PROCEDURE dbcsr_put_block2d_d, dbcsr_put_block2d_s, &\n         dbcsr_put_block2d_z, dbcsr_put_block2d_c\n   END INTERFACE\n\n   INTERFACE dbcsr_reserve_block2d\n      MODULE PROCEDURE dbcsr_reserve_block2d_s, dbcsr_reserve_block2d_d, &\n         dbcsr_reserve_block2d_c, dbcsr_reserve_block2d_z\n   END INTERFACE\n\n   INTERFACE dbcsr_set_block_pointer\n      MODULE PROCEDURE dbcsr_set_block_pointer_any\n      MODULE PROCEDURE dbcsr_set_block_pointer_2d_s, &\n         dbcsr_set_block_pointer_2d_d, &\n         dbcsr_set_block_pointer_2d_c, &\n         dbcsr_set_block_pointer_2d_z\n   END INTERFACE\n\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n\n   INTEGER, PARAMETER, PRIVATE :: rpslot_owner = 1\n   INTEGER, PARAMETER, PRIVATE :: rpslot_addblks = 2\n   INTEGER, PARAMETER, PRIVATE :: rpslot_addoffset = 3\n   INTEGER, PARAMETER, PRIVATE :: rpslot_oldblks = 4\n   INTEGER, PARAMETER, PRIVATE :: rpslot_oldoffset = 5\n   INTEGER, PARAMETER, PRIVATE :: rpslot_totaloffset = 6\n   INTEGER, PARAMETER, PRIVATE :: rpnslots = 6\n\n   LOGICAL, PARAMETER, PRIVATE :: detailed_timing = .FALSE.\n\n   TYPE block_parameters\n      LOGICAL :: tr = .FALSE.\n      INTEGER :: logical_rows = -1, logical_cols = -1\n      INTEGER :: offset = -1, nze = -1\n   END TYPE block_parameters\n\n   TYPE dgemm_join\n      INTEGER :: p_a = -1, p_b = -1, p_c = -1\n      INTEGER :: last_k = -1, last_n = -1\n      TYPE(dbcsr_scalar_type) :: alpha = dbcsr_scalar_type(), beta = dbcsr_scalar_type()\n   END TYPE dgemm_join\n\nCONTAINS\n\n   SUBROUTINE dbcsr_remove_block(matrix, row, col, block_nze, block_number)\n      !! Marks a block for removal from a DBCSR matrix. Handles\n      !! symmetric matrices.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! DBCSR matrix\n      INTEGER, INTENT(IN)                                :: row, col, block_nze\n         !! row of block to remove\n         !! column of block to remove\n      INTEGER, INTENT(IN), OPTIONAL                      :: block_number\n         !! the block number, if it is known\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_remove_block'\n\n      INTEGER                                            :: b, c, error_handle, r\n      LOGICAL                                            :: found, tr\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n      IF (PRESENT(block_number)) THEN\n         b = block_number\n         IF (block_number .GT. matrix%nblks) &\n            DBCSR_ABORT(\"Block number too big.\")\n         found = .TRUE.\n      ELSE\n         CALL dbcsr_get_block_index(matrix, row, col, r, c, tr, found, b)\n      END IF\n      b = ABS(b)\n      IF (found .AND. b .GT. 0) THEN\n         ! Mark the block for deletion.\n         matrix%blk_p(b) = 0\n         matrix%valid = .FALSE.\n         ! update nze accordingly\n         matrix%nze = matrix%nze - block_nze\n         IF (debug_mod) THEN\n            IF (matrix%nze < 0) DBCSR_ABORT(\"nze < 0!\")\n         END IF\n      ELSE\n         IF (debug_mod) THEN\n            IF (b .EQ. 0) &\n               DBCSR_WARN(\"Block does not exist or is already deleted.\")\n         END IF\n      END IF\n      IF (careful_mod) CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_remove_block\n\n   SUBROUTINE dbcsr_get_block_p_area(matrix, row, col, block, tr, found, &\n                                     row_size, col_size)\n      !! Gets a block from a dbcsr matrix as a data area\n      !!\n      !! Data area\n      !! The pointer encapsulated in the data area points to data stored in the\n      !! matrix. It must be 2-dimensional.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! DBCSR matrix\n      INTEGER, INTENT(IN)                                :: row, col\n         !! the row\n         !! the column\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: block\n         !! the block to get\n      LOGICAL, INTENT(OUT)                               :: tr, found\n         !! whether the data is transposed\n         !! whether the block exists in the matrix\n      INTEGER, INTENT(OUT), OPTIONAL                     :: row_size, col_size\n         !! logical row size of block\n         !! logical column size of block\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_block_p_area'\n\n      INTEGER                                            :: blk, csize, error_handle, iw, offset, &\n                                                            rsize, stored_col, stored_row\n      LOGICAL                                            :: stored_tr\n      TYPE(btree_data_cp2d)                              :: data_block_c\n      TYPE(btree_data_dp2d)                              :: data_block_d\n      TYPE(btree_data_sp2d)                              :: data_block_s\n      TYPE(btree_data_zp2d)                              :: data_block_z\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n      CALL dbcsr_get_block_index(matrix, row, col, stored_row, stored_col, &\n                                 stored_tr, found, blk, offset)\n\n      tr = stored_tr\n\n      rsize = dbcsr_blk_row_size(matrix, stored_row)\n      csize = dbcsr_blk_column_size(matrix, stored_col)\n      IF (PRESENT(row_size)) row_size = rsize\n      IF (PRESENT(col_size)) col_size = csize\n\n      CALL dbcsr_data_clear_pointer(block)\n      IF (found) THEN\n         CALL dbcsr_set_block_pointer(matrix, block, rsize, csize, stored_tr, offset)\n      ELSEIF (ASSOCIATED(matrix%wms)) THEN\n         iw = 1\n!$       iw = omp_get_thread_num() + 1\n         IF (.NOT. dbcsr_use_mutable(matrix)) &\n            DBCSR_ABORT(\"Can not retrieve blocks from non-mutable work matrices.\")\n         IF (dbcsr_mutable_instantiated(matrix%wms(iw)%mutable)) THEN\n            SELECT CASE (block%d%data_type)\n            CASE (dbcsr_type_real_4_2d)\n               CALL btree_find( &\n                  matrix%wms(iw)%mutable%m%btree_s, &\n                  make_coordinate_tuple(stored_row, stored_col), &\n                  data_block_s, found)\n               IF (found) THEN\n                  CALL dbcsr_data_set_pointer(block, data_block_s%p)\n               END IF\n            CASE (dbcsr_type_real_8_2d)\n               CALL btree_find( &\n                  matrix%wms(iw)%mutable%m%btree_d, &\n                  make_coordinate_tuple(stored_row, stored_col), &\n                  data_block_d, found)\n               IF (found) THEN\n                  CALL dbcsr_data_set_pointer(block, data_block_d%p)\n               END IF\n            CASE (dbcsr_type_complex_4_2d)\n               CALL btree_find( &\n                  matrix%wms(iw)%mutable%m%btree_c, &\n                  make_coordinate_tuple(stored_row, stored_col), &\n                  data_block_c, found)\n               IF (found) THEN\n                  CALL dbcsr_data_set_pointer(block, data_block_c%p)\n               END IF\n            CASE (dbcsr_type_complex_8_2d)\n               CALL btree_find( &\n                  matrix%wms(iw)%mutable%m%btree_z, &\n                  make_coordinate_tuple(stored_row, stored_col), &\n                  data_block_z, found)\n               IF (found) THEN\n                  CALL dbcsr_data_set_pointer(block, data_block_z%p)\n               END IF\n            CASE default\n               DBCSR_ABORT(\"Only 2-D data for block pointers!\")\n            END SELECT\n         END IF\n      END IF\n      IF (careful_mod) CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_get_block_p_area\n\n   SUBROUTINE dbcsr_put_block_area(matrix, row, col, block, lb_row_col, transposed, &\n                                   summation, flop, scale)\n      !! We allow :\n      !! matrix(dp) [+]= [scale(dp)] * block(dp)\n      !! matrix(dp) [+]= [scale(dp)] * block(sp)\n      !! matrix(sp) [+]= [scale(dp)] * block(sp)\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      INTEGER, INTENT(IN)                                :: row, col\n      TYPE(dbcsr_data_obj)                               :: block\n      INTEGER, DIMENSION(2), INTENT(INOUT), OPTIONAL     :: lb_row_col\n      LOGICAL, INTENT(IN), OPTIONAL                      :: transposed, summation\n      INTEGER(KIND=int_8), INTENT(INOUT), OPTIONAL       :: flop\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: scale\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_put_block_area'\n\n      INTEGER                                            :: data_type_m, error_handle\n      LOGICAL                                            :: do_scale\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n      data_type_m = dbcsr_get_data_type(matrix)\n      do_scale = PRESENT(scale)\n      IF (do_scale) THEN\n         !IF(data_type_m /= scale%data_type) &\n         !   DBCSR_ABORT(\"Incompatible data types matrix=\"//data_type_m//\" scale=\"//scale%data_type)\n      END IF\n      IF (.NOT. ASSOCIATED(block%d)) &\n         DBCSR_ABORT(\"Can only add valid data block!\")\n      SELECT CASE (block%d%data_type)\n      CASE (dbcsr_type_real_4)\n         IF (do_scale) THEN\n            IF (data_type_m .EQ. dbcsr_type_real_4) THEN\n               CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_s(block), lb_row_col, transposed, &\n                                    summation, flop, scale=scale%r_sp)\n            ELSEIF (data_type_m .EQ. dbcsr_type_real_8) THEN\n               CALL dbcsr_put_block(matrix, row, col, &\n                                    REAL(dbcsr_get_data_p_s(block), real_8), lb_row_col, transposed, &\n                                    summation, flop, scale=REAL(scale%r_sp, real_8))\n            END IF\n         ELSE\n            IF (data_type_m .EQ. dbcsr_type_real_4) THEN\n               CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_s(block), lb_row_col, transposed, &\n                                    summation, flop)\n            ELSEIF (data_type_m .EQ. dbcsr_type_real_8) THEN\n               CALL dbcsr_put_block(matrix, row, col, &\n                                    REAL(dbcsr_get_data_p_s(block), real_8), lb_row_col, transposed, &\n                                    summation, flop)\n            END IF\n         END IF\n      CASE (dbcsr_type_real_8)\n         IF (do_scale) THEN\n            CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_d(block), lb_row_col, transposed, &\n                                 summation, flop, scale=scale%r_dp)\n         ELSE\n            CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_d(block), lb_row_col, transposed, &\n                                 summation, flop)\n         END IF\n      CASE (dbcsr_type_complex_4)\n         IF (do_scale) THEN\n            CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_c(block), lb_row_col, transposed, &\n                                 summation, flop, scale=scale%c_sp)\n         ELSE\n            CALL dbcsr_put_block(matrix, row, col, dbcsr_get_data_p_c(block), lb_row_col, transposed, &\n                                 summation, flop)\n         END IF\n      CASE (dbcsr_type_complex_8)\n         IF (do_scale) THEN\n            CALL dbcsr_put_block(matrix, row, col, block%d%c_dp, lb_row_col, transposed, &\n                                 summation, flop, scale=scale%c_dp)\n         ELSE\n            CALL dbcsr_put_block(matrix, row, col, block%d%c_dp, lb_row_col, transposed, &\n                                 summation, flop)\n         END IF\n      CASE (dbcsr_type_real_4_2d)\n         IF (do_scale) THEN\n            CALL dbcsr_put_block(matrix, row, col, block%d%r2_sp, lb_row_col, transposed, &\n                                 summation, flop, scale=scale%r_sp)\n         ELSE\n            CALL dbcsr_put_block(matrix, row, col, block%d%r2_sp, lb_row_col, transposed, &\n                                 summation, flop)\n         END IF\n      CASE (dbcsr_type_real_8_2d)\n         IF (do_scale) THEN\n            CALL dbcsr_put_block(matrix, row, col, block%d%r2_dp, lb_row_col, transposed, &\n                                 summation, flop, scale=scale%r_dp)\n         ELSE\n            CALL dbcsr_put_block(matrix, row, col, block%d%r2_dp, lb_row_col, transposed, &\n                                 summation, flop)\n         END IF\n      CASE (dbcsr_type_complex_4_2d)\n         IF (do_scale) THEN\n            CALL dbcsr_put_block(matrix, row, col, block%d%c2_sp, lb_row_col, transposed, &\n                                 summation, flop, scale=scale%c_sp)\n         ELSE\n            CALL dbcsr_put_block(matrix, row, col, block%d%c2_sp, lb_row_col, transposed, &\n                                 summation, flop)\n         END IF\n      CASE (dbcsr_type_complex_8_2d)\n         IF (do_scale) THEN\n            CALL dbcsr_put_block(matrix, row, col, block%d%c2_dp, lb_row_col, transposed, &\n                                 summation, flop, scale=scale%c_dp)\n         ELSE\n            CALL dbcsr_put_block(matrix, row, col, block%d%c2_dp, lb_row_col, transposed, &\n                                 summation, flop)\n         END IF\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n      IF (careful_mod) CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_put_block_area\n\n   SUBROUTINE dbcsr_reserve_all_blocks(matrix)\n      !! Inserts all blocks of a dbcsr matrix to make it a full matrix.\n      !! Thus obviously not linear scaling.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! Matrix into which blocks should be added.\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_reserve_all_blocks'\n\n      INTEGER                                            :: blk_count, col, col_local, col_s, &\n                                                            error_handle, myrank, rank, row, &\n                                                            row_local, row_s\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: columns, rows\n      INTEGER, DIMENSION(:), POINTER                     :: local_cols, local_rows\n      LOGICAL                                            :: tr\n\n      CALL timeset(routineN, error_handle)\n\n      myrank = dbcsr_mp_mynode(dbcsr_distribution_mp(dbcsr_distribution(matrix)))\n      local_rows => dbcsr_distribution_local_rows(dbcsr_distribution(matrix))\n      local_cols => dbcsr_distribution_local_cols(dbcsr_distribution(matrix))\n\n      blk_count = 0\n      ! should be possible to loop only over the local blockrows/blockcols\n      DO row_local = 1, SIZE(local_rows)\n         DO col_local = 1, SIZE(local_cols)\n            tr = .FALSE.\n            row = local_rows(row_local)\n            col = local_cols(col_local)\n            row_s = row; col_s = col\n            CALL dbcsr_get_stored_coordinates(matrix, row_s, col_s, rank)\n            ! is that the correct condition for symmetric matrices ?\n            IF (rank .EQ. myrank .AND. row_s .EQ. row .AND. col_s .EQ. col) blk_count = blk_count + 1\n         END DO\n      END DO\n\n      ALLOCATE (rows(blk_count), columns(blk_count))\n\n      blk_count = 0\n      DO row_local = 1, SIZE(local_rows)\n         DO col_local = 1, SIZE(local_cols)\n            tr = .FALSE.\n            row = local_rows(row_local)\n            col = local_cols(col_local)\n            row_s = row; col_s = col\n            CALL dbcsr_get_stored_coordinates(matrix, row_s, col_s, rank)\n            IF (rank .EQ. myrank .AND. row_s .EQ. row .AND. col_s .EQ. col) THEN\n               blk_count = blk_count + 1\n               rows(blk_count) = row\n               columns(blk_count) = col\n            END IF\n         END DO\n      END DO\n\n      CALL dbcsr_reserve_blocks(matrix, rows, columns)\n\n      CALL timestop(error_handle)\n\n   END SUBROUTINE dbcsr_reserve_all_blocks\n\n   SUBROUTINE dbcsr_reserve_diag_blocks(matrix)\n      !! Inserts diagonal blocks of a dbcsr matrix to make it a matrix with at least all diagonal blocks present\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! Matrix into which blocks should be added.\n\n      INTEGER                                            :: blk_count, col, col_s, myrank, rank, &\n                                                            row, row_s\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: columns, rows\n      LOGICAL                                            :: tr\n\n      myrank = dbcsr_mp_mynode(dbcsr_distribution_mp(dbcsr_distribution(matrix)))\n\n      blk_count = 0\n      ! should be possible to loop only over the local blockrows/blockcols\n      DO row = 1, dbcsr_nblkrows_total(matrix)\n         col = row\n         tr = .FALSE.\n         row_s = row; col_s = col\n         CALL dbcsr_get_stored_coordinates(matrix, row_s, col_s, rank)\n         IF (rank .EQ. myrank .AND. row_s .EQ. row .AND. col_s .EQ. col) blk_count = blk_count + 1\n      END DO\n\n      ALLOCATE (rows(blk_count), columns(blk_count))\n\n      blk_count = 0\n      DO row = 1, dbcsr_nblkrows_total(matrix)\n         col = row\n         tr = .FALSE.\n         row_s = row; col_s = col\n         CALL dbcsr_get_stored_coordinates(matrix, row_s, col_s, rank)\n         IF (rank .EQ. myrank .AND. row_s .EQ. row .AND. col_s .EQ. col) THEN\n            blk_count = blk_count + 1\n            rows(blk_count) = row\n            columns(blk_count) = col\n         END IF\n      END DO\n\n      CALL dbcsr_reserve_blocks(matrix, rows, columns)\n\n   END SUBROUTINE dbcsr_reserve_diag_blocks\n\n   SUBROUTINE dbcsr_reserve_blocks(matrix, rows, columns, blk_pointers)\n      !! Inserts block reservations into a matrix, avoiding the work matrix.\n      !!\n      !! Data\n      !! No data can be specified; instead, space is reserved and zeroed. To\n      !! add data, call dbcsr_put_block afterwards.\n      !!\n      !! Reserving existing blocks\n      !! Duplicates are not added, but allocations may be greater than\n      !! the minimum necessary.\n      !!\n      !! blk_pointers\n      !! When blk_pointers is passed, the newly added blocks use these pointers.\n      !! No data is cleared in this case\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! Matrix into which blocks should be added.\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: rows, columns\n         !! Rows of the blocks to add\n         !! Columns of the blocks to add\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: blk_pointers\n         !! block pointers to use for new blocks\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_reserve_blocks'\n\n      INTEGER :: blk, blk_p, data_size_new, data_size_old, handle, nblkrows, nblks_actual_added, &\n                 nblks_added, nblks_new, nblks_old, new_data_sizes, nze\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: add_blkp, add_cols, add_rows, &\n                                                            added_sizes, new_blk_p, new_col_i, &\n                                                            new_row_i, old_row_i\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: added_blk_info\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (SIZE(rows) /= SIZE(columns)) &\n         DBCSR_ABORT(\"Size of rows and columns array must match.\")\n      IF (PRESENT(blk_pointers)) THEN\n         IF (SIZE(rows) /= SIZE(blk_pointers)) &\n            DBCSR_ABORT(\"Size of rows and block pointecs arrays must match.\")\n         data_size_old = 0\n      ELSE\n         ! Get current data size\n         data_size_old = dbcsr_data_get_size_referenced(matrix%data_area)\n      END IF\n      ! Ensures that the rows and columns are sorted.\n      nblks_added = SIZE(rows)\n      ALLOCATE (add_rows(nblks_added))\n      add_rows(:) = rows(:)\n      ALLOCATE (add_cols(nblks_added))\n      add_cols(:) = columns(:)\n      IF (PRESENT(blk_pointers)) THEN\n         ALLOCATE (add_blkp(nblks_added))\n         add_blkp(:) = blk_pointers(:)\n         CALL dbcsr_sort_indices(nblks_added, add_rows, add_cols, &\n                                 blk_p=add_blkp)\n      ELSE\n         CALL dbcsr_sort_indices(nblks_added, add_rows, add_cols)\n      END IF\n      nblks_old = dbcsr_get_num_blocks(matrix)\n      nblkrows = dbcsr_nblkrows_total(matrix)\n      IF (SIZE(rows) .GT. 0 .AND. nblkrows .LE. 0) &\n         DBCSR_ABORT(\"Can not add blocks to matrix with no rows.\")\n      ! Adjust the index.\n      ! Get the old row indices\n      ALLOCATE (old_row_i(nblks_old))\n      CALL dbcsr_expand_row_index(matrix%row_p, old_row_i, &\n                                  nblkrows, nblks_old)\n      ! Calculate new block pointers. Possibly high estimates.\n      new_data_sizes = 0\n      blk_p = data_size_old + 1 ! New blocks start at the end of the old\n      ALLOCATE (added_blk_info(3, nblks_added))\n      ALLOCATE (added_sizes(nblks_added))\n      DO blk = 1, nblks_added\n         IF (PRESENT(blk_pointers)) THEN\n            blk_p = add_blkp(blk)\n         END IF\n         added_blk_info(1:3, blk) = (/add_rows(blk), add_cols(blk), blk_p/)\n         nze = dbcsr_blk_row_size(matrix, add_rows(blk)) &\n               *dbcsr_blk_column_size(matrix, add_cols(blk))\n         added_sizes(blk) = nze\n         blk_p = blk_p + nze\n      END DO\n      DEALLOCATE (add_rows)\n      DEALLOCATE (add_cols)\n      IF (PRESENT(blk_pointers)) DEALLOCATE (add_blkp)\n      !\n      nblks_new = nblks_old + nblks_added ! Possibly high estimate\n      ALLOCATE (new_row_i(nblks_new))\n      ALLOCATE (new_col_i(nblks_new))\n      ALLOCATE (new_blk_p(nblks_new))\n      ! Merge the two indices\n      IF (PRESENT(blk_pointers)) THEN\n         CALL merge_index_arrays(new_row_i, new_col_i, new_blk_p, nblks_new, &\n                                 old_row_i, matrix%col_i, matrix%blk_p, nblks_old, &\n                                 added_blk_info, nblks_added, added_nblks=nblks_actual_added)\n         data_size_new = 0\n      ELSE\n         CALL merge_index_arrays(new_row_i, new_col_i, new_blk_p, nblks_new, &\n                                 old_row_i, matrix%col_i, matrix%blk_p, nblks_old, &\n                                 added_blk_info, nblks_added, added_nblks=nblks_actual_added, &\n                                 added_sizes=added_sizes, added_size_offset=data_size_old + 1, &\n                                 added_size=data_size_new)\n      END IF\n      nblks_new = nblks_actual_added + nblks_old\n      ! Free some memory\n      DEALLOCATE (added_blk_info)\n      DEALLOCATE (added_sizes)\n      DEALLOCATE (old_row_i)\n      ! We can skip this if no block was actually added.\n      IF (nblks_actual_added .GT. 0) THEN\n         ! Write the new index\n         matrix%nblks = nblks_new\n         matrix%nze = matrix%nze + data_size_new\n         matrix%index(dbcsr_slot_nblks) = matrix%nblks\n         matrix%index(dbcsr_slot_nze) = matrix%index(dbcsr_slot_nze)\n         CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i)\n         CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p)\n         CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, &\n                                      new_col_i(1:nblks_new), &\n                                      extra=nblks_new)\n         CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, &\n                                      new_blk_p(1:nblks_new))\n         CALL dbcsr_make_dbcsr_index(matrix%row_p, new_row_i(1:nblks_new), &\n                                     nblkrows, nblks_new)\n         IF (.NOT. PRESENT(blk_pointers)) THEN\n            ! Resize data area to fit the new blocks.\n            CALL dbcsr_data_ensure_size(matrix%data_area, &\n                                        data_size=matrix%nze)\n            ! Zero the new data blocks.\n            CALL dbcsr_data_clear(matrix%data_area, &\n                                  lb=data_size_old + 1, ub=matrix%nze)\n         END IF\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_reserve_blocks\n\n   SUBROUTINE dbcsr_set_block_pointer_any(matrix, pointer_any, &\n                                          rsize, csize, main_tr, base_offset)\n      !! Sets a pointer, possibly using the buffers.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! Matrix to use\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: pointer_any\n         !! The pointer to set\n      INTEGER, INTENT(IN)                                :: rsize, csize\n         !! Row sizes of block to point to\n         !! Column sizes of block to point to\n      LOGICAL, INTENT(IN)                                :: main_tr\n         !! Whether block is transposed in the matrix\n      INTEGER, INTENT(IN)                                :: base_offset\n         !! The block pointer\n\n!   ---------------------------------------------------------------------------\n\n      IF (main_tr) THEN\n         CALL dbcsr_data_set_pointer(pointer_any, csize, rsize, &\n                                     matrix%data_area, source_lb=base_offset)\n      ELSE\n         CALL dbcsr_data_set_pointer(pointer_any, rsize, csize, &\n                                     matrix%data_area, source_lb=base_offset)\n      END IF\n   END SUBROUTINE dbcsr_set_block_pointer_any\n\n   #:include '../data/dbcsr.fypp'\n\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float\n      SUBROUTINE dbcsr_get_2d_block_p_${nametype1}$ (matrix, row, col, block, tr, found, &\n                                                     row_size, col_size)\n     !! Gets a 2-d block from a dbcsr matrix\n\n         TYPE(dbcsr_type), INTENT(INOUT)           :: matrix\n        !! DBCSR matrix\n         INTEGER, INTENT(IN)                      :: row, col\n        !! the row\n        !! the column\n         ${type1}$, DIMENSION(:, :), POINTER         :: block\n        !! the block to get (rank-2 array)\n         LOGICAL, INTENT(OUT)                     :: tr\n        !! whether the data is transposed\n         LOGICAL, INTENT(OUT)                     :: found\n        !! whether the block exists in the matrix\n         INTEGER, INTENT(OUT), OPTIONAL           :: row_size, col_size\n        !! logical row size of block\n        !! logical column size of block\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_2d_block_p_${nametype1}$'\n\n         ${type1}$, DIMENSION(:), POINTER         :: block_1d\n         INTEGER                                  :: rsize, csize, &\n                                                     blk, nze, offset, &\n                                                     stored_row, &\n                                                     stored_col, iw, nwms\n         INTEGER                                  :: error_handle\n         TYPE(btree_data_${nametype1}$p2d)          :: data_block\n         LOGICAL                                  :: stored_tr\n         ${type1}$, DIMENSION(1, 1), TARGET, SAVE    :: block0\n!   ---------------------------------------------------------------------------\n         IF (careful_mod) CALL timeset(routineN, error_handle)\n         IF (debug_mod) THEN\n            IF (matrix%data_type /= ${dkind1}$) &\n               DBCSR_ABORT(\"Data type mismatch for requested block.\")\n         END IF\n\n         CALL dbcsr_get_block_index(matrix, row, col, stored_row, stored_col, &\n                                    stored_tr, found, blk, offset)\n         tr = stored_tr\n\n         rsize = dbcsr_blk_row_size(matrix, stored_row)\n         csize = dbcsr_blk_column_size(matrix, stored_col)\n         IF (PRESENT(row_size)) row_size = rsize\n         IF (PRESENT(col_size)) col_size = csize\n\n         NULLIFY (block)\n         IF (found) THEN\n            nze = rsize*csize\n            IF (nze .eq. 0) THEN\n               found = .TRUE.\n               block => block0(1:0, 1:0)\n            ELSE\n               block_1d => pointer_view(dbcsr_get_data_p( &\n                                        matrix%data_area, ${zero1[n]}$), offset, offset + nze - 1)\n               CALL dbcsr_set_block_pointer(matrix, block, rsize, csize, offset)\n            END IF\n         ELSEIF (ASSOCIATED(matrix%wms)) THEN\n            nwms = SIZE(matrix%wms)\n            iw = 1\n!$          IF (nwms < omp_get_num_threads()) &\n!$             DBCSR_ABORT(\"Number of work matrices not equal to number of threads\")\n!$          iw = omp_get_thread_num() + 1\n            IF (.NOT. dbcsr_use_mutable(matrix)) &\n               DBCSR_ABORT(\"Can not retrieve blocks from non-mutable work matrices.\")\n            IF (dbcsr_use_mutable(matrix)) THEN\n               IF (.NOT. dbcsr_mutable_instantiated(matrix%wms(iw)%mutable)) THEN\n                  CALL dbcsr_mutable_new(matrix%wms(iw)%mutable, &\n                                         dbcsr_get_data_type(matrix))\n               END IF\n               CALL btree_find( &\n                  matrix%wms(iw)%mutable%m%btree_${nametype1}$, &\n                  make_coordinate_tuple(stored_row, stored_col), &\n                  data_block, found)\n               IF (found) THEN\n                  block => data_block%p\n               END IF\n            END IF\n         END IF\n         IF (careful_mod) CALL timestop(error_handle)\n      END SUBROUTINE dbcsr_get_2d_block_p_${nametype1}$\n\n      SUBROUTINE dbcsr_get_block_p_${nametype1}$ (matrix, row, col, block, tr, found, &\n                                                  row_size, col_size)\n     !! Gets a 1-d block from a dbcsr matrix\n\n         TYPE(dbcsr_type), INTENT(IN)              :: matrix\n        !! DBCSR matrix\n         INTEGER, INTENT(IN)                      :: row, col\n        !! the row\n        !! the column\n         ${type1}$, DIMENSION(:), POINTER           :: block\n        !! the block to get (rank-1 array)\n         LOGICAL, INTENT(OUT)                     :: tr\n        !! whether the data is transposed\n         LOGICAL, INTENT(OUT)                     :: found\n        !! whether the block exists in the matrix\n         INTEGER, INTENT(OUT), OPTIONAL           :: row_size, col_size\n        !! logical row size of block\n        !! logical column size of block\n\n         INTEGER                                  :: blk, csize, &\n                                                     nze, offset, &\n                                                     rsize, stored_row, &\n                                                     stored_col\n         LOGICAL                                  :: stored_tr\n\n!   ---------------------------------------------------------------------------\n\n         IF (debug_mod) THEN\n            IF (matrix%data_type /= ${dkind1}$) &\n               DBCSR_ABORT(\"Data type mismatch for requested block.\")\n         END IF\n\n         CALL dbcsr_get_block_index(matrix, row, col, stored_row, stored_col, &\n                                    stored_tr, found, blk, offset)\n         tr = stored_tr\n\n         rsize = dbcsr_blk_row_size(matrix, stored_row)\n         csize = dbcsr_blk_column_size(matrix, stored_col)\n         IF (PRESENT(row_size)) row_size = rsize\n         IF (PRESENT(col_size)) col_size = csize\n\n         NULLIFY (block)\n         IF (found) THEN\n            nze = rsize*csize\n            !\n            block => pointer_view( &\n                     dbcsr_get_data_p(matrix%data_area, ${zero1[n]}$), offset, offset + nze - 1 &\n                     )\n         ELSEIF (ASSOCIATED(matrix%wms)) THEN\n            IF (.NOT. dbcsr_use_mutable(matrix)) &\n               DBCSR_ABORT(\"Can not retrieve blocks from non-mutable work matrices.\")\n            IF (dbcsr_use_mutable(matrix)) &\n               DBCSR_ABORT(\"Can not retrieve rank-1 block pointers from mutable work matrices.\")\n         END IF\n      END SUBROUTINE dbcsr_get_block_p_${nametype1}$\n\n      SUBROUTINE dbcsr_reserve_block2d_${nametype1}$ (matrix, row, col, block, &\n                                                      transposed, existed)\n     !! Put a 2-D block in a DBCSR matrix using the btree\n\n         TYPE(dbcsr_type), INTENT(INOUT)           :: matrix\n        !! DBCSR matrix\n         INTEGER, INTENT(IN)                      :: row, col\n        !! the row\n        !! the column\n         ${type1}$, DIMENSION(:, :), POINTER         :: block\n        !! the block to reserve; added if not NULL\n         LOGICAL, INTENT(IN), OPTIONAL            :: transposed\n        !! the block holds transposed data\n         LOGICAL, INTENT(OUT), OPTIONAL           :: existed\n        !! block already existed\n\n         TYPE(btree_data_${nametype1}$p2d)          :: data_block, data_block2\n         INTEGER                                  :: col_size, row_size, &\n                                                     stored_row, stored_col, &\n                                                     iw, nwms\n         INTEGER, DIMENSION(:), POINTER           :: col_blk_size, row_blk_size\n         LOGICAL                                  :: found, gift, tr, sym_tr\n         ${type1}$, DIMENSION(:, :), POINTER         :: original_block\n\n!   ---------------------------------------------------------------------------\n\n         gift = ASSOCIATED(block)\n         IF (gift) THEN\n            original_block => block\n         ELSE\n            NULLIFY (original_block)\n         END IF\n         row_blk_size => array_data(matrix%row_blk_size)\n         col_blk_size => array_data(matrix%col_blk_size)\n         row_size = row_blk_size(row)\n         col_size = col_blk_size(col)\n\n         stored_row = row; stored_col = col\n         IF (PRESENT(transposed)) THEN\n            tr = transposed\n         ELSE\n            tr = .FALSE.\n         END IF\n         sym_tr = .FALSE.\n         CALL dbcsr_get_stored_coordinates(matrix, stored_row, stored_col)\n         IF (.NOT. ASSOCIATED(matrix%wms)) THEN\n            CALL dbcsr_work_create(matrix, work_mutable=.TRUE.)\n!$OMP        MASTER\n            matrix%valid = .FALSE.\n!$OMP        END MASTER\n!$OMP        BARRIER\n         END IF\n\n         NULLIFY (data_block%p)\n         IF (.NOT. gift) THEN\n            ALLOCATE (data_block%p(row_size, col_size))\n            block => data_block%p\n         ELSE\n            data_block%p => block\n         END IF\n         data_block%tr = tr\n\n         nwms = SIZE(matrix%wms)\n         iw = 1\n!$       IF (nwms < omp_get_num_threads()) &\n!$          DBCSR_ABORT(\"Number of work matrices not equal to number of threads\")\n!$       iw = omp_get_thread_num() + 1\n         CALL btree_add(matrix%wms(iw)%mutable%m%btree_${nametype1}$, &\n                        make_coordinate_tuple(stored_row, stored_col), &\n                        data_block, found, data_block2)\n\n         IF (.NOT. found) THEN\n#if defined(_OPENMP) && (200711 <= _OPENMP)\n!$OMP ATOMIC WRITE\n            matrix%valid = .FALSE.\n#else\n!$OMP CRITICAL (critical_reserve_block2d)\n            matrix%valid = .FALSE.\n!$OMP END CRITICAL (critical_reserve_block2d)\n#endif\n            matrix%wms(iw)%lastblk = matrix%wms(iw)%lastblk + 1\n            matrix%wms(iw)%datasize = matrix%wms(iw)%datasize + row_size*col_size\n         ELSE\n            IF (.NOT. gift) THEN\n               DEALLOCATE (data_block%p)\n            ELSE\n               DEALLOCATE (original_block)\n            END IF\n            block => data_block2%p\n         END IF\n         IF (PRESENT(existed)) existed = found\n      END SUBROUTINE dbcsr_reserve_block2d_${nametype1}$\n\n      SUBROUTINE dbcsr_put_block2d_${nametype1}$ (matrix, row, col, block, lb_row_col, transposed, &\n                                                  summation, flop, scale)\n     !! Put a 2-D block in a DBCSR matrix\n\n         TYPE(dbcsr_type), INTENT(INOUT)           :: matrix\n        !! DBCSR matrix\n         INTEGER, INTENT(IN)                      :: row, col\n        !! the row\n        !! the column\n         ${type1}$, DIMENSION(:, :), INTENT(IN), &\n            CONTIGUOUS, TARGET                    :: block\n        !! the block to put\n         INTEGER, DIMENSION(2), OPTIONAL, INTENT(INOUT) :: lb_row_col\n         LOGICAL, INTENT(IN), OPTIONAL            :: transposed, summation\n        !! the block is transposed\n        !! if block exists, then sum the new block to the old one instead of replacing it\n         INTEGER(KIND=int_8), INTENT(INOUT), OPTIONAL :: flop\n         ${type1}$, INTENT(IN), OPTIONAL            :: scale\n        !! scale the block being added\n\n         ${type1}$, DIMENSION(:), POINTER           :: block_1d\n\n         NULLIFY (block_1d)\n\n         block_1d(1:SIZE(block)) => block\n\n         CALL dbcsr_put_block(matrix, row, col, block_1d, lb_row_col, transposed, summation, flop, scale)\n      END SUBROUTINE dbcsr_put_block2d_${nametype1}$\n\n      SUBROUTINE dbcsr_put_block_${nametype1}$ (matrix, row, col, block, lb_row_col, transposed, &\n                                                summation, flop, scale)\n     !! Inserts a block in a dbcsr matrix.\n     !! If the block exists, the current data is overwritten.\n\n         TYPE(dbcsr_type), INTENT(INOUT)           :: matrix\n        !! DBCSR matrix\n         INTEGER, INTENT(IN)                      :: row, col\n        !! the logical row\n        !! the logical column\n         ${type1}$, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: block\n        !! the block to put\n         INTEGER, DIMENSION(2), OPTIONAL, INTENT(INOUT) :: lb_row_col\n         LOGICAL, INTENT(IN), OPTIONAL            :: transposed, summation\n        !! the block is transposed\n        !! if block exists, then sum the new block to the old one instead of replacing it\n         INTEGER(KIND=int_8), INTENT(INOUT), OPTIONAL :: flop\n         ${type1}$, INTENT(IN), OPTIONAL            :: scale\n        !! scale the OBblock being added\n\n         TYPE(btree_data_${nametype1}$p2d)          :: data_block, data_block2\n         INTEGER                                  :: blk, col_size, &\n                                                     nze, offset, &\n                                                     row_size, blk_p, &\n                                                     stored_row, stored_col, &\n                                                     iw, nwms\n         LOGICAL                                  :: found, tr, do_sum, tr_diff\n         ${type1}$, DIMENSION(:), POINTER         :: block_1d\n         INTEGER(KIND=int_8)                      :: my_flop\n\n!   ---------------------------------------------------------------------------\n         IF (PRESENT(transposed)) THEN\n            tr = transposed\n         ELSE\n            tr = .FALSE.\n         END IF\n         IF (PRESENT(summation)) THEN\n            do_sum = summation\n         ELSE\n            do_sum = .FALSE.\n         END IF\n         my_flop = 0\n         row_size = dbcsr_blk_row_size(matrix, row)\n         col_size = dbcsr_blk_column_size(matrix, col)\n         IF (tr) CALL swap(row_size, col_size)\n\n         stored_row = row; stored_col = col\n         nze = row_size*col_size\n         !\n         IF (debug_mod .AND. SIZE(block) < nze) &\n            DBCSR_ABORT(\"Invalid block dimensions\")\n         CALL dbcsr_get_stored_block_info(matrix, stored_row, stored_col, &\n                                          found, blk, lb_row_col, offset)\n         IF (found) THEN\n            ! let's copy the block\n            offset = ABS(offset)\n            ! Fix the index if the new block's transpose flag is different\n            ! from the old one.\n            tr_diff = .FALSE.\n            IF (matrix%blk_p(blk) .LT. 0 .NEQV. tr) THEN\n               tr_diff = .TRUE.\n               matrix%blk_p(blk) = -matrix%blk_p(blk)\n            END IF\n            block_1d => pointer_view(dbcsr_get_data_p( &\n                                     matrix%data_area, ${zero1[n]}$), offset, offset + nze - 1)\n            IF (nze .GT. 0) THEN\n               IF (do_sum) THEN\n                  IF (tr_diff) &\n                     block_1d = RESHAPE(TRANSPOSE(RESHAPE(block_1d, (/col_size, row_size/))), (/nze/))\n                  IF (PRESENT(scale)) THEN\n                     CALL ${nametype1}$axpy(nze, scale, block(1:nze), 1, &\n                                            block_1d, 1)\n                  ELSE\n                     CALL ${nametype1}$axpy(nze, ${one1[n]}$, block(1:nze), 1, &\n                                            block_1d, 1)\n                  END IF\n                  my_flop = my_flop + nze*2\n               ELSE\n                  IF (PRESENT(scale)) THEN\n                     CALL ${nametype1}$copy(nze, scale*block(1:nze), 1, &\n                                            block_1d, 1)\n                  ELSE\n                     CALL ${nametype1}$copy(nze, block(1:nze), 1, &\n                                            block_1d, 1)\n                  END IF\n               END IF\n            END IF\n         ELSE\n        !!@@@\n            !call dbcsr_assert (associated (matrix%wms), dbcsr_fatal_level,&\n            !     dbcsr_caller_error, routineN, \"Work matrices not prepared\")\n            IF (.NOT. ASSOCIATED(matrix%wms)) THEN\n               CALL dbcsr_work_create(matrix, nblks_guess=1, &\n                                      sizedata_guess=nze)\n            END IF\n            nwms = SIZE(matrix%wms)\n            iw = 1\n!$          IF (debug_mod .AND. nwms < omp_get_num_threads()) &\n!$             DBCSR_ABORT(\"Number of work matrices not equal to number of threads\")\n!$          iw = omp_get_thread_num() + 1\n            blk_p = matrix%wms(iw)%datasize + 1\n            IF (.NOT. dbcsr_wm_use_mutable(matrix%wms(iw))) THEN\n               IF (tr) blk_p = -blk_p\n               CALL add_work_coordinate(matrix%wms(iw), row, col, blk_p)\n               CALL dbcsr_data_ensure_size(matrix%wms(iw)%data_area, &\n                                           matrix%wms(iw)%datasize + nze, &\n                                           factor=default_resize_factor)\n               IF (PRESENT(scale)) THEN\n                  CALL dbcsr_data_set(matrix%wms(iw)%data_area, ABS(blk_p), &\n                                      data_size=nze, src=scale*block, source_lb=1)\n               ELSE\n                  CALL dbcsr_data_set(matrix%wms(iw)%data_area, ABS(blk_p), &\n                                      data_size=nze, src=block, source_lb=1)\n               END IF\n            ELSE\n               ALLOCATE (data_block%p(row_size, col_size))\n               IF (PRESENT(scale)) THEN\n                  data_block%p(:, :) = scale*RESHAPE(block, (/row_size, col_size/))\n               ELSE\n                  data_block%p(:, :) = RESHAPE(block, (/row_size, col_size/))\n               END IF\n               data_block%tr = tr\n               IF (.NOT. dbcsr_mutable_instantiated(matrix%wms(iw)%mutable)) THEN\n                  CALL dbcsr_mutable_new(matrix%wms(iw)%mutable, &\n                                         dbcsr_get_data_type(matrix))\n               END IF\n               IF (.NOT. do_sum) THEN\n                  CALL btree_add( &\n                     matrix%wms(iw)%mutable%m%btree_${nametype1}$, &\n                     make_coordinate_tuple(stored_row, stored_col), &\n                     data_block, found, data_block2, replace=.TRUE.)\n                  IF (found) THEN\n                     IF (.NOT. ASSOCIATED(data_block2%p)) &\n                        DBCSR_WARN(\"Data was not present in block\")\n                     IF (ASSOCIATED(data_block2%p)) DEALLOCATE (data_block2%p)\n                  END IF\n               ELSE\n                  CALL btree_add( &\n                     matrix%wms(iw)%mutable%m%btree_${nametype1}$, &\n                     make_coordinate_tuple(stored_row, stored_col), &\n                     data_block, found, data_block2, replace=.FALSE.)\n                  IF (found) THEN\n                     IF (nze > 0) &\n                        CALL ${nametype1}$axpy(nze, ${one1[n]}$, block, 1, &\n                                               data_block2%p, 1)\n                     IF (.NOT. ASSOCIATED(data_block%p)) &\n                        DBCSR_WARN(\"Data was not present in block\")\n                     IF (ASSOCIATED(data_block%p)) DEALLOCATE (data_block%p)\n                  END IF\n               END IF\n               IF (.NOT. found) THEN\n                  matrix%wms(iw)%lastblk = matrix%wms(iw)%lastblk + 1\n               END IF\n            END IF\n            IF (.NOT. found) THEN\n               matrix%wms(iw)%datasize = matrix%wms(iw)%datasize + nze\n            END IF\n!$OMP ATOMIC WRITE\n            matrix%valid = .FALSE.\n         END IF\n         IF (PRESENT(flop)) flop = flop + my_flop\n      END SUBROUTINE dbcsr_put_block_${nametype1}$\n\n      SUBROUTINE dbcsr_set_block_pointer_2d_${nametype1}$ ( &\n         matrix, pointer_any, rsize, csize, base_offset)\n     !! Sets a pointer, possibly using the buffers.\n\n         TYPE(dbcsr_type), INTENT(IN)              :: matrix\n        !! Matrix to use\n         ${type1}$, DIMENSION(:, :), POINTER         :: pointer_any\n        !! The pointer to set\n         INTEGER, INTENT(IN)                      :: rsize, csize\n        !! Row size of block to point to\n        !! Column size of block to point to\n         INTEGER, INTENT(IN)                      :: base_offset\n        !! The block pointer\n\n         CHARACTER(len=*), PARAMETER :: &\n            routineN = 'dbcsr_set_block_pointer_2d_${nametype1}$'\n\n         INTEGER                                  :: error_handler\n         ${type1}$, DIMENSION(:), POINTER           :: lin_blk_p\n\n!   ---------------------------------------------------------------------------\n\n         IF (careful_mod) CALL timeset(routineN, error_handler)\n         CALL dbcsr_get_data(matrix%data_area, lin_blk_p, &\n                             lb=base_offset, ub=base_offset + rsize*csize - 1)\n         CALL pointer_rank_remap2(pointer_any, rsize, csize, &\n                                  lin_blk_p)\n         IF (careful_mod) CALL timestop(error_handler)\n      END SUBROUTINE dbcsr_set_block_pointer_2d_${nametype1}$\n   #:endfor\n\nEND MODULE dbcsr_block_access\n"
  },
  {
    "path": "src/block/dbcsr_block_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_block_operations\n   !! Routines for basic block transformations.\n\n   USE dbcsr_acc_devmem, ONLY: acc_devmem_allocated, &\n                               acc_devmem_setzero_bytes\n   USE dbcsr_data_methods_low, ONLY: dbcsr_data_exists, &\n                                     dbcsr_data_get_size, &\n                                     dbcsr_data_get_size_referenced, &\n                                     dbcsr_data_get_type, &\n                                     dbcsr_data_verify_bounds, &\n                                     dbcsr_type_2d_to_1d, &\n                                     dbcsr_type_is_2d\n   USE dbcsr_ptr_util, ONLY: memory_copy\n   USE dbcsr_types, ONLY: &\n      dbcsr_data_obj, dbcsr_datatype_sizeof, dbcsr_scalar_type, dbcsr_type_complex_4, &\n      dbcsr_type_complex_4_2d, dbcsr_type_complex_8, dbcsr_type_complex_8_2d, dbcsr_type_real_4, &\n      dbcsr_type_real_4_2d, dbcsr_type_real_8, dbcsr_type_real_8_2d\n   USE dbcsr_kinds, ONLY: dp, &\n                          real_4, &\n                          real_8, &\n                          sp\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n#if defined(__LIBXSMM) && TO_VERSION(1, 10) < TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n#  define __LIBXSMM_BLOCKOPS\n#endif\n#if defined(__LIBXSMM) && TO_VERSION(1, 10) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n#  define __LIBXSMM_TRANS\n#endif\n#if defined(__MKL) || defined(__LIBXSMM_TRANS) || defined(__LIBXSMM_BLOCKOPS) || !defined(NDEBUG)\n!  MKL: mkl_trans.fi header is obsolescent (use implicit \"interface\")\n#  define PURE_BLOCKOPS\n#else\n!  MKL: routines are impure, LIBXSMM: C_LOC is impure (F-standard mistake)\n#  define PURE_BLOCKOPS PURE\n#endif\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_block_operations'\n\n   PUBLIC :: dbcsr_block_transpose, dbcsr_block_transpose_aa, dbcsr_data_set\n   PUBLIC :: dbcsr_block_copy_aa, dbcsr_block_partial_copy\n   PUBLIC :: dbcsr_data_clear\n   PUBLIC :: dbcsr_block_scale, dbcsr_block_conjg, dbcsr_block_real_neg\n\n   PUBLIC :: dbcsr_data_copy\n\n   PUBLIC :: block_add\n\n   ! For quick access\n   PUBLIC :: block_copy_s, block_copy_d, &\n             block_copy_c, block_copy_z\n\n   INTERFACE dbcsr_block_transpose\n      MODULE PROCEDURE block_transpose_inplace_s, block_transpose_inplace_d, &\n         block_transpose_inplace_c, block_transpose_inplace_z\n      MODULE PROCEDURE block_transpose_copy_d, block_transpose_copy_s, &\n         block_transpose_copy_z, block_transpose_copy_c\n      MODULE PROCEDURE block_transpose_copy_2d1d_d, &\n         block_transpose_copy_2d1d_s, &\n         block_transpose_copy_2d1d_z, &\n         block_transpose_copy_2d1d_c\n      MODULE PROCEDURE block_transpose_copy_1d2d_d, &\n         block_transpose_copy_1d2d_s, &\n         block_transpose_copy_1d2d_z, &\n         block_transpose_copy_1d2d_c\n      MODULE PROCEDURE dbcsr_block_transpose_aa, dbcsr_block_transpose_a\n   END INTERFACE\n\n   INTERFACE dbcsr_block_copy\n      MODULE PROCEDURE block_copy_2d1d_s, block_copy_2d1d_d, &\n         block_copy_2d1d_c, block_copy_2d1d_z\n      MODULE PROCEDURE block_copy_1d2d_s, block_copy_1d2d_d, &\n         block_copy_1d2d_c, block_copy_1d2d_z\n      MODULE PROCEDURE block_copy_1d1d_s, block_copy_1d1d_d, &\n         block_copy_1d1d_c, block_copy_1d1d_z\n      MODULE PROCEDURE block_copy_2d2d_s, block_copy_2d2d_d, &\n         block_copy_2d2d_c, block_copy_2d2d_z\n   END INTERFACE\n\n   INTERFACE dbcsr_data_clear\n      MODULE PROCEDURE dbcsr_data_clear_nt\n      MODULE PROCEDURE dbcsr_data_clear0\n   END INTERFACE\n\n   ! Supports copy between two data areas, or to a data area from a\n   ! given explicit array.\n   INTERFACE dbcsr_data_set\n      MODULE PROCEDURE dbcsr_data_copy_aa, dbcsr_data_set_as, &\n         dbcsr_data_set_ad, dbcsr_data_set_ac, dbcsr_data_set_az\n   END INTERFACE\n\n   INTERFACE dbcsr_data_copy\n      MODULE PROCEDURE dbcsr_data_copy_aa2, dbcsr_data_set_as, &\n         dbcsr_data_set_ad, dbcsr_data_set_ac, dbcsr_data_set_az\n   END INTERFACE\n\n   INTERFACE block_add\n      MODULE PROCEDURE block_add_anytype\n      MODULE PROCEDURE block_add_anytype_bounds\n      MODULE PROCEDURE block_add_s, block_add_d, block_add_c, block_add_z\n   END INTERFACE block_add\n\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\nCONTAINS\n\n   SUBROUTINE dbcsr_block_transpose_aa(dst, src, &\n                                       row_size, col_size, lb, source_lb, scale, lb2, source_lb2)\n      !! Copy data from one data area to another.\n      !! There are no checks done for correctness!\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dst\n         !! destination data area\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: src\n         !! source data area\n      INTEGER, INTENT(IN)                                :: row_size, col_size\n         !! row size of existing block\n         !! column size of existing block\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb, source_lb\n         !! lower bound for destination (and source if not given explicitly)\n         !! lower bound of source\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: scale\n         !! scale data\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb2, source_lb2\n         !! lower bound of 2nd dimension for target\n         !! lower bound of 2nd dimension for source\n\n      INTEGER                                            :: data_size, lb2_s, lb2_t, lb_s, lb_t, &\n                                                            ub_s, ub_t\n!     ---------------------------------------------------------------------------\n      IF (debug_mod) THEN\n         IF (.NOT. ASSOCIATED(dst%d) .OR. .NOT. ASSOCIATED(src%d)) &\n            DBCSR_ABORT(\"Data areas must be setup.\")\n         IF (dst%d%data_type /= src%d%data_type) &\n            DBCSR_ABORT(\"Data type must be the same.\")\n         IF (dst%d%data_type .NE. dbcsr_type_real_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_4 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_4 &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_8_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_4_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_8_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_4_2d) &\n            DBCSR_WARN(\"Incorrect data type.\")\n         IF (PRESENT(scale)) THEN\n            IF (dbcsr_type_is_2d(src%d%data_type)) THEN\n               IF (scale%data_type /= dbcsr_type_2d_to_1d(src%d%data_type)) &\n                  DBCSR_ABORT(\"Incompatible data types\")\n            ELSE\n               IF (scale%data_type /= src%d%data_type) &\n                  DBCSR_ABORT(\"Incompatible data types\")\n            END IF\n         END IF\n      END IF\n      data_size = row_size*col_size\n      lb_t = 1\n      IF (PRESENT(lb)) lb_t = lb\n      ub_t = lb_t + data_size - 1\n      IF (PRESENT(source_lb)) THEN\n         lb_s = source_lb\n         ub_s = source_lb + data_size - 1\n      ELSE\n         lb_s = lb_t\n         ub_s = ub_t\n      END IF\n      lb2_t = 1\n      IF (PRESENT(lb2)) lb2_t = lb2\n      IF (PRESENT(source_lb2)) THEN\n         lb2_s = source_lb2\n      ELSE\n         lb2_s = lb2_t\n      END IF\n      SELECT CASE (src%d%data_type)\n      CASE (dbcsr_type_real_8)\n         IF (PRESENT(scale)) THEN\n            CALL dbcsr_block_transpose(dst%d%r_dp(lb_t:ub_t), &\n                                       src%d%r_dp(lb_s:ub_s)*scale%r_dp, &\n                                       row_size, col_size)\n         ELSE\n            CALL dbcsr_block_transpose(dst%d%r_dp(lb_t:ub_t), &\n                                       src%d%r_dp(lb_s:ub_s), &\n                                       row_size, col_size)\n         END IF\n      CASE (dbcsr_type_real_4)\n         IF (PRESENT(scale)) THEN\n            CALL dbcsr_block_transpose(dst%d%r_sp(lb_t:ub_t), &\n                                       src%d%r_sp(lb_s:ub_s)*scale%r_sp, &\n                                       row_size, col_size)\n         ELSE\n            CALL dbcsr_block_transpose(dst%d%r_sp(lb_t:ub_t), &\n                                       src%d%r_sp(lb_s:ub_s), &\n                                       row_size, col_size)\n         END IF\n      CASE (dbcsr_type_complex_8)\n         IF (PRESENT(scale)) THEN\n            CALL dbcsr_block_transpose(dst%d%c_dp(lb_t:ub_t), &\n                                       src%d%c_dp(lb_s:ub_s)*scale%c_dp, &\n                                       row_size, col_size)\n         ELSE\n            CALL dbcsr_block_transpose(dst%d%c_dp(lb_t:ub_t), &\n                                       src%d%c_dp(lb_s:ub_s), &\n                                       row_size, col_size)\n         END IF\n      CASE (dbcsr_type_complex_4)\n         IF (PRESENT(scale)) THEN\n            CALL dbcsr_block_transpose(dst%d%c_sp(lb_t:ub_t), &\n                                       src%d%c_sp(lb_s:ub_s)*scale%c_sp, &\n                                       row_size, col_size)\n         ELSE\n            CALL dbcsr_block_transpose(dst%d%c_sp(lb_t:ub_t), &\n                                       src%d%c_sp(lb_s:ub_s), &\n                                       row_size, col_size)\n         END IF\n      CASE (dbcsr_type_real_8_2d)\n         IF (PRESENT(scale)) THEN\n            dst%d%r2_dp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = &\n               TRANSPOSE( &\n               src%d%r2_dp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1) &\n               *scale%r_dp)\n         ELSE\n            dst%d%r2_dp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = &\n               TRANSPOSE( &\n               src%d%r2_dp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1))\n         END IF\n      CASE (dbcsr_type_real_4_2d)\n         IF (PRESENT(scale)) THEN\n            dst%d%r2_sp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = &\n               TRANSPOSE( &\n               src%d%r2_sp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1) &\n               *scale%r_sp)\n         ELSE\n            dst%d%r2_sp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = &\n               TRANSPOSE( &\n               src%d%r2_sp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1))\n         END IF\n      CASE (dbcsr_type_complex_8_2d)\n         IF (PRESENT(scale)) THEN\n            dst%d%c2_dp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = &\n               TRANSPOSE( &\n               src%d%c2_dp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1) &\n               *scale%c_dp)\n         ELSE\n            dst%d%c2_dp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = &\n               TRANSPOSE( &\n               src%d%c2_dp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1))\n         END IF\n      CASE (dbcsr_type_complex_4_2d)\n         IF (PRESENT(scale)) THEN\n            dst%d%c2_sp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = &\n               TRANSPOSE( &\n               src%d%c2_sp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1) &\n               *scale%c_sp)\n         ELSE\n            dst%d%c2_sp(lb_t:lb_t + col_size - 1, lb2_t:lb2_t + row_size - 1) = &\n               TRANSPOSE( &\n               src%d%c2_sp(lb_s:lb_s + row_size - 1, lb2_s:lb2_s + col_size - 1))\n         END IF\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type.\")\n      END SELECT\n   END SUBROUTINE dbcsr_block_transpose_aa\n\n   SUBROUTINE dbcsr_block_copy_aa(dst, src, &\n                                  row_size, col_size, lb, source_lb, scale)\n      !! Copy data from one data area to another.\n      !! There are no checks done for correctness!\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dst\n         !! destination data area\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: src\n         !! source data area\n      INTEGER, INTENT(IN)                                :: row_size, col_size\n         !! row size of existing block\n         !! column size of existing block\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb, source_lb\n         !! lower bound for destination (and source if not given explicitly)\n         !! lower bound of source\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: scale\n         !! scale data\n\n      INTEGER                                            :: data_size, lb_s, lb_t, ub_s, ub_t\n\n!     ---------------------------------------------------------------------------\n      IF (debug_mod) THEN\n         IF (.NOT. ASSOCIATED(dst%d) .OR. .NOT. ASSOCIATED(src%d)) &\n            DBCSR_ABORT(\"Data areas must be setup.\")\n         IF (dst%d%data_type /= src%d%data_type) &\n            DBCSR_ABORT(\"Data type must be the same.\")\n         IF (dst%d%data_type .NE. dbcsr_type_real_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_4 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_4) &\n            DBCSR_WARN(\"Incorrect data type.\")\n         IF (PRESENT(scale)) THEN\n            IF (dbcsr_type_is_2d(src%d%data_type)) THEN\n               IF (scale%data_type /= dbcsr_type_2d_to_1d(src%d%data_type)) &\n                  DBCSR_ABORT(\"Incompatible data types\")\n            ELSE\n               IF (scale%data_type /= src%d%data_type) &\n                  DBCSR_ABORT(\"Incompatible data types\")\n            END IF\n         END IF\n      END IF\n      data_size = row_size*col_size\n      lb_t = 1\n      IF (PRESENT(lb)) lb_t = lb\n      ub_t = lb_t + data_size - 1\n      IF (PRESENT(source_lb)) THEN\n         lb_s = source_lb\n         ub_s = source_lb + data_size - 1\n      ELSE\n         lb_s = lb_t\n         ub_s = ub_t\n      END IF\n      SELECT CASE (src%d%data_type)\n      CASE (dbcsr_type_real_8)\n         IF (PRESENT(scale)) THEN\n            CALL dbcsr_block_copy(dst%d%r_dp(lb_t:ub_t), &\n                                  src%d%r_dp(lb_s:ub_s)*scale%r_dp, &\n                                  row_size, col_size)\n         ELSE\n            CALL dbcsr_block_copy(dst%d%r_dp(lb_t:ub_t), &\n                                  src%d%r_dp(lb_s:ub_s), &\n                                  row_size, col_size)\n         END IF\n      CASE (dbcsr_type_real_4)\n         IF (PRESENT(scale)) THEN\n            CALL dbcsr_block_copy(dst%d%r_sp(lb_t:ub_t), &\n                                  src%d%r_sp(lb_s:ub_s)*scale%r_sp, &\n                                  row_size, col_size)\n         ELSE\n            CALL dbcsr_block_copy(dst%d%r_sp(lb_t:ub_t), &\n                                  src%d%r_sp(lb_s:ub_s), &\n                                  row_size, col_size)\n         END IF\n      CASE (dbcsr_type_complex_8)\n         IF (PRESENT(scale)) THEN\n            CALL dbcsr_block_copy(dst%d%c_dp(lb_t:ub_t), &\n                                  src%d%c_dp(lb_s:ub_s)*scale%c_dp, &\n                                  row_size, col_size)\n         ELSE\n            CALL dbcsr_block_copy(dst%d%c_dp(lb_t:ub_t), &\n                                  src%d%c_dp(lb_s:ub_s), &\n                                  row_size, col_size)\n         END IF\n      CASE (dbcsr_type_complex_4)\n         IF (PRESENT(scale)) THEN\n            CALL dbcsr_block_copy(dst%d%c_sp(lb_t:ub_t), &\n                                  src%d%c_sp(lb_s:ub_s)*scale%c_sp, &\n                                  row_size, col_size)\n         ELSE\n            CALL dbcsr_block_copy(dst%d%c_sp(lb_t:ub_t), &\n                                  src%d%c_sp(lb_s:ub_s), &\n                                  row_size, col_size)\n         END IF\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type.\")\n      END SELECT\n   END SUBROUTINE dbcsr_block_copy_aa\n\n   SUBROUTINE dbcsr_block_scale(dst, scale, &\n                                row_size, col_size, lb, lb2)\n      !! Scale a data area.\n      !! There are no checks done for correctness!\n      !!\n      !! History\n      !! - 2010-09 [??] Copied from block_transpose?\n      !! - 2010-09-20 [UB] Swaps/corrects row/column definitions for 2-D bounds\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dst\n      TYPE(dbcsr_scalar_type), INTENT(IN)                :: scale\n         !! scale data\n      INTEGER, INTENT(IN)                                :: row_size, col_size\n         !! row size of existing block\n         !! column size of existing block\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb, lb2\n         !! lower bound for destination (and source if not given explicitly)\n         !! lower bound of 2nd dimension for target\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_block_scale'\n\n      INTEGER                                            :: data_size, handle, lb2_t, lb_t, ub_t\n!     ---------------------------------------------------------------------------\n      IF (careful_mod) CALL timeset(routineN, handle)\n      IF (debug_mod) THEN\n         IF (.NOT. ASSOCIATED(dst%d)) &\n            DBCSR_ABORT(\"Data area must be setup.\")\n         IF (dst%d%data_type .NE. dbcsr_type_real_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_4 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_4 &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_8_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_4_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_8_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_4_2d) &\n            DBCSR_WARN(\"Incorrect data type.\")\n      END IF\n      IF (scale%data_type /= dbcsr_type_2d_to_1d(dst%d%data_type)) &\n         DBCSR_ABORT(\"Incompatible data types\")\n\n      data_size = row_size*col_size\n      lb_t = 1\n      IF (PRESENT(lb)) lb_t = lb\n      ub_t = lb_t + data_size - 1\n      lb2_t = 1\n      IF (PRESENT(lb2)) lb2_t = lb2\n      SELECT CASE (dst%d%data_type)\n      CASE (dbcsr_type_real_8)\n         dst%d%r_dp(lb_t:ub_t) = dst%d%r_dp(lb_t:ub_t)*scale%r_dp\n      CASE (dbcsr_type_real_4)\n         dst%d%r_sp(lb_t:ub_t) = dst%d%r_sp(lb_t:ub_t)*scale%r_sp\n      CASE (dbcsr_type_complex_8)\n         dst%d%c_dp(lb_t:ub_t) = dst%d%c_dp(lb_t:ub_t)*scale%c_dp\n      CASE (dbcsr_type_complex_4)\n         dst%d%c_sp(lb_t:ub_t) = dst%d%c_sp(lb_t:ub_t)*scale%c_sp\n      CASE (dbcsr_type_real_8_2d)\n         dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)*scale%r_dp\n      CASE (dbcsr_type_real_4_2d)\n         dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)*scale%r_sp\n      CASE (dbcsr_type_complex_8_2d)\n         dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)*scale%c_dp\n      CASE (dbcsr_type_complex_4_2d)\n         dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)*scale%c_sp\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type.\")\n      END SELECT\n      IF (careful_mod) CALL timestop(handle)\n   END SUBROUTINE dbcsr_block_scale\n\n   SUBROUTINE dbcsr_block_real_neg(dst, &\n                                   row_size, col_size, lb, lb2)\n      !! Negates the real part of a block\n      !! There are no checks done for correctness!\n      !!\n      !! History\n      !! - 2010-09 [??] Copied from block_transpose?\n      !! - 2010-09-20 [UB] Swaps/corrects row/column definitions for 2-D bounds\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dst\n      INTEGER, INTENT(IN)                                :: row_size, col_size\n         !! row size of existing block\n         !! column size of existing block\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb, lb2\n         !! lower bound for destination (and source if not given explicitly)\n         !! lower bound of 2nd dimension for target\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_block_real_neg'\n\n      INTEGER                                            :: data_size, handle, lb2_t, lb_t, ub_t\n!     ---------------------------------------------------------------------------\n      IF (careful_mod) CALL timeset(routineN, handle)\n      IF (debug_mod) THEN\n         IF (.NOT. ASSOCIATED(dst%d)) &\n            DBCSR_ABORT(\"Data area must be setup.\")\n         IF (dst%d%data_type .NE. dbcsr_type_real_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_4 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_4 &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_8_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_4_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_8_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_4_2d) &\n            DBCSR_WARN(\"Incorrect data type.\")\n      END IF\n\n      data_size = row_size*col_size\n      lb_t = 1\n      IF (PRESENT(lb)) lb_t = lb\n      ub_t = lb_t + data_size - 1\n      lb2_t = 1\n      IF (PRESENT(lb2)) lb2_t = lb2\n      SELECT CASE (dst%d%data_type)\n      CASE (dbcsr_type_real_8)\n         dst%d%r_dp(lb_t:ub_t) = -dst%d%r_dp(lb_t:ub_t)\n      CASE (dbcsr_type_real_4)\n         dst%d%r_sp(lb_t:ub_t) = -dst%d%r_sp(lb_t:ub_t)\n      CASE (dbcsr_type_complex_8)\n         dst%d%c_dp(lb_t:ub_t) = CMPLX( &\n                                 -REAL(dst%d%c_dp(lb_t:ub_t), KIND=real_8), &\n                                 AIMAG(dst%d%c_dp(lb_t:ub_t)), &\n                                 KIND=real_8)\n      CASE (dbcsr_type_complex_4)\n         dst%d%c_sp(lb_t:ub_t) = CMPLX( &\n                                 -REAL(dst%d%c_sp(lb_t:ub_t), KIND=real_4), &\n                                 AIMAG(dst%d%c_sp(lb_t:ub_t)), &\n                                 KIND=real_4)\n      CASE (dbcsr_type_real_8_2d)\n         dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            -dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)\n      CASE (dbcsr_type_real_4_2d)\n         dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            -dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)\n      CASE (dbcsr_type_complex_8_2d)\n         dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            CMPLX( &\n            -REAL(dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1), KIND=real_8), &\n            AIMAG(dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)), &\n            KIND=real_8)\n      CASE (dbcsr_type_complex_4_2d)\n         dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            CMPLX( &\n            -REAL(dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1), KIND=real_4), &\n            AIMAG(dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)), &\n            KIND=real_4)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type.\")\n      END SELECT\n      IF (careful_mod) CALL timestop(handle)\n   END SUBROUTINE dbcsr_block_real_neg\n\n   SUBROUTINE dbcsr_block_conjg(dst, &\n                                row_size, col_size, lb, lb2)\n      !! Conjugate a data area.\n      !! There are no checks done for correctness!\n      !!\n      !! History\n      !! - 2010-09 [??] Copied from block_transpose?\n      !! - 2010-09-20 [UB] Swaps/corrects row/column definitions for 2-D bounds\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dst\n      INTEGER, INTENT(IN)                                :: row_size, col_size\n         !! row size of existing block\n         !! column size of existing block\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb, lb2\n         !! lower bound for destination (and source if not given explicitly)\n         !! lower bound of 2nd dimension for target\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_block_conjg'\n\n      INTEGER                                            :: data_size, handle, lb2_t, lb_t, ub_t\n!     ---------------------------------------------------------------------------\n      IF (careful_mod) CALL timeset(routineN, handle)\n      IF (debug_mod) THEN\n         IF (.NOT. ASSOCIATED(dst%d)) &\n            DBCSR_ABORT(\"Data area must be setup.\")\n         IF (dst%d%data_type .NE. dbcsr_type_real_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_4 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_8 &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_4 &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_8_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_real_4_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_8_2d &\n             .AND. dst%d%data_type .NE. dbcsr_type_complex_4_2d) &\n            DBCSR_WARN(\"Incorrect data type.\")\n      END IF\n\n      data_size = row_size*col_size\n      lb_t = 1\n      IF (PRESENT(lb)) lb_t = lb\n      ub_t = lb_t + data_size - 1\n      lb2_t = 1\n      IF (PRESENT(lb2)) lb2_t = lb2\n      SELECT CASE (dst%d%data_type)\n      CASE (dbcsr_type_real_8)\n         dst%d%r_dp(lb_t:ub_t) = dst%d%r_dp(lb_t:ub_t)\n      CASE (dbcsr_type_real_4)\n         dst%d%r_sp(lb_t:ub_t) = dst%d%r_sp(lb_t:ub_t)\n      CASE (dbcsr_type_complex_8)\n         dst%d%c_dp(lb_t:ub_t) = CONJG(dst%d%c_dp(lb_t:ub_t))\n      CASE (dbcsr_type_complex_4)\n         dst%d%c_sp(lb_t:ub_t) = CONJG(dst%d%c_sp(lb_t:ub_t))\n      CASE (dbcsr_type_real_8_2d)\n         dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            dst%d%r2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)\n      CASE (dbcsr_type_real_4_2d)\n         dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            dst%d%r2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1)\n      CASE (dbcsr_type_complex_8_2d)\n         dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            CONJG(dst%d%c2_dp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1))\n      CASE (dbcsr_type_complex_4_2d)\n         dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1) = &\n            CONJG(dst%d%c2_sp(lb_t:lb_t + row_size - 1, lb2_t:lb2_t + col_size - 1))\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type.\")\n      END SELECT\n      IF (careful_mod) CALL timestop(handle)\n   END SUBROUTINE dbcsr_block_conjg\n\n   SUBROUTINE dbcsr_block_transpose_a(area, row_size, col_size)\n      !! In-place transpose of encapsulated data\n      !! There are no checks done for correctness!\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! encapsulated data area\n      INTEGER, INTENT(IN)                                :: row_size, col_size\n         !! number of rows in existing block\n         !! number of columns in existing block\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_block_transpose_a'\n\n      INTEGER                                            :: handle\n!     ---------------------------------------------------------------------------\n      IF (careful_mod) &\n         CALL timeset(routineN, handle)\n      SELECT CASE (area%d%data_type)\n      CASE (dbcsr_type_real_8)\n         CALL dbcsr_block_transpose(area%d%r_dp, &\n                                    row_size, col_size)\n      CASE (dbcsr_type_real_4)\n         CALL dbcsr_block_transpose(area%d%r_sp, &\n                                    row_size, col_size)\n      CASE (dbcsr_type_complex_8)\n         CALL dbcsr_block_transpose(area%d%c_dp, &\n                                    row_size, col_size)\n      CASE (dbcsr_type_complex_4)\n         CALL dbcsr_block_transpose(area%d%c_sp, &\n                                    row_size, col_size)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n      IF (careful_mod) &\n         CALL timestop(handle)\n   END SUBROUTINE dbcsr_block_transpose_a\n\n   SUBROUTINE dbcsr_data_copy_aa(dst, lb, data_size, src, source_lb, scale, &\n                                 lb2, data_size2, source_lb2)\n      !! Copy data from one data area to another.\n      !! There are no checks done for correctness!\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dst\n         !! destination data area\n      INTEGER, INTENT(IN)                                :: lb, data_size\n         !! lower bound for destination (and source if not given explicitly)\n         !! number of elements to copy\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: src\n         !! source data area\n      INTEGER, INTENT(IN), OPTIONAL                      :: source_lb\n         !! lower bound of source\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: scale\n         !! scale by this factor\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb2, data_size2, source_lb2\n         !! 2nd dimension lower bound\n         !! 2nd dimension data size\n         !! 2nd dimension lower bound for source\n\n      INTEGER                                            :: lb2_s, lb_s, ub, ub2, ub2_s, ub_s\n!     ---------------------------------------------------------------------------\n\n      lb2_s = 0\n      ub2_s = 0\n      IF (debug_mod) THEN\n         IF (.NOT. ASSOCIATED(dst%d) .OR. .NOT. ASSOCIATED(src%d)) &\n            DBCSR_ABORT(\"Data areas must be setup.\")\n         IF (dst%d%data_type .NE. src%d%data_type) &\n            DBCSR_ABORT(\"Data type must be the same.\")\n      END IF\n      IF (PRESENT(scale) .AND. careful_mod) THEN\n         IF (dbcsr_type_is_2d(src%d%data_type)) THEN\n            IF (scale%data_type .NE. dbcsr_type_2d_to_1d(src%d%data_type)) &\n               DBCSR_ABORT(\"Incomptable data types\")\n         ELSE\n            IF (scale%data_type .NE. src%d%data_type) &\n               DBCSR_ABORT(\"Incomptable data types\")\n         END IF\n      END IF\n      ub = lb + data_size - 1\n      IF (PRESENT(source_lb)) THEN\n         lb_s = source_lb\n         ub_s = source_lb + data_size - 1\n      ELSE\n         lb_s = lb\n         ub_s = ub\n      END IF\n      IF (careful_mod) THEN\n         IF (dbcsr_type_is_2d(src%d%data_type) .AND. .NOT. PRESENT(lb2)) &\n            DBCSR_ABORT(\"Must specify lb2 for 2-D data area\")\n         IF (dbcsr_type_is_2d(src%d%data_type) .AND. .NOT. PRESENT(data_size2)) &\n            DBCSR_ABORT(\"Must specify data_size2 for 2-D data area\")\n      END IF\n      IF (PRESENT(lb2)) THEN\n         IF (careful_mod) THEN\n            IF (.NOT. dbcsr_type_is_2d(src%d%data_type)) &\n               DBCSR_WARN(\"Should not specify lb2 for 1-D data\")\n         END IF\n         ub2 = lb2 + data_size2 - 1\n         IF (PRESENT(source_lb2)) THEN\n            lb2_s = source_lb2\n            ub2_s = source_lb2 + data_size2 - 1\n         ELSE\n            lb2_s = lb2\n            ub2_s = ub2\n         END IF\n      END IF\n      SELECT CASE (src%d%data_type)\n      CASE (dbcsr_type_real_4)\n         IF (debug_mod) THEN\n            IF (.NOT. ASSOCIATED(dst%d%r_sp)) &\n               DBCSR_ABORT(\"associated(dst%d%r_sp)\")\n            IF (.NOT. ASSOCIATED(src%d%r_sp)) &\n               DBCSR_ABORT(\"associated(src%d%r_sp)\")\n            IF (lb < LBOUND(dst%d%r_sp, 1)) &\n               DBCSR_ABORT(\"lb dst%d%r_sp\")\n            IF (ub > UBOUND(dst%d%r_sp, 1)) &\n               DBCSR_ABORT(\"ub dst%d%r_sp\")\n            IF (lb_s < LBOUND(src%d%r_sp, 1)) &\n               DBCSR_ABORT(\"lb src%d%r_sp\")\n            IF (ub_s > UBOUND(src%d%r_sp, 1)) &\n               DBCSR_ABORT(\"ub src%d%r_sp\")\n         END IF\n         IF (PRESENT(scale)) THEN\n            dst%d%r_sp(lb:ub) = scale%r_sp*src%d%r_sp(lb_s:ub_s)\n         ELSE\n            dst%d%r_sp(lb:ub) = src%d%r_sp(lb_s:ub_s)\n         END IF\n      CASE (dbcsr_type_real_8)\n         IF (debug_mod) THEN\n            IF (.NOT. ASSOCIATED(dst%d%r_dp)) &\n               DBCSR_ABORT(\"associated(dst%d%r_dp)\")\n            IF (.NOT. ASSOCIATED(src%d%r_dp)) &\n               DBCSR_ABORT(\"associated(src%d%r_dp)\")\n            IF (lb < LBOUND(dst%d%r_dp, 1)) &\n               DBCSR_ABORT(\"lb dst%d%r_dp\")\n            IF (ub > UBOUND(dst%d%r_dp, 1)) &\n               DBCSR_ABORT(\"ub dst%d%r_dp\")\n            IF (lb_s < LBOUND(src%d%r_dp, 1)) &\n               DBCSR_ABORT(\"lb src%d%r_dp\")\n            IF (ub_s > UBOUND(src%d%r_dp, 1)) &\n               DBCSR_ABORT(\"ub src%d%r_dp\")\n         END IF\n         IF (PRESENT(scale)) THEN\n            dst%d%r_dp(lb:ub) = scale%r_dp*src%d%r_dp(lb_s:ub_s)\n         ELSE\n            dst%d%r_dp(lb:ub) = src%d%r_dp(lb_s:ub_s)\n         END IF\n      CASE (dbcsr_type_complex_4)\n         IF (debug_mod) THEN\n            IF (.NOT. ASSOCIATED(dst%d%c_sp)) &\n               DBCSR_ABORT(\"associated(dst%d%c_sp)\")\n            IF (.NOT. ASSOCIATED(src%d%c_sp)) &\n               DBCSR_ABORT(\"associated(src%d%c_sp)\")\n            IF (lb < LBOUND(dst%d%c_sp, 1)) &\n               DBCSR_ABORT(\"lb dst%d%c_sp\")\n            IF (ub > UBOUND(dst%d%c_sp, 1)) &\n               DBCSR_ABORT(\"ub dst%d%c_sp\")\n            IF (lb_s < LBOUND(src%d%c_sp, 1)) &\n               DBCSR_ABORT(\"lb src%d%c_sp\")\n            IF (ub_s > UBOUND(src%d%c_sp, 1)) &\n               DBCSR_ABORT(\"ub src%d%c_sp\")\n         END IF\n         IF (PRESENT(scale)) THEN\n            dst%d%c_sp(lb:ub) = scale%c_sp*src%d%c_sp(lb_s:ub_s)\n         ELSE\n            dst%d%c_sp(lb:ub) = src%d%c_sp(lb_s:ub_s)\n         END IF\n      CASE (dbcsr_type_complex_8)\n         IF (debug_mod) THEN\n            IF (.NOT. ASSOCIATED(dst%d%c_dp)) &\n               DBCSR_ABORT(\"associated(dst%d%c_dp)\")\n            IF (.NOT. ASSOCIATED(src%d%c_dp)) &\n               DBCSR_ABORT(\"associated(src%d%c_dp)\")\n            IF (lb < LBOUND(dst%d%c_dp, 1)) &\n               DBCSR_ABORT(\"lb dst%d%c_dp\")\n            IF (ub > UBOUND(dst%d%c_dp, 1)) &\n               DBCSR_ABORT(\"ub dst%d%c_dp\")\n            IF (lb_s < LBOUND(src%d%c_dp, 1)) &\n               DBCSR_ABORT(\"lb src%d%c_dp\")\n            IF (ub_s > UBOUND(src%d%c_dp, 1)) &\n               DBCSR_ABORT(\"ub src%d%c_dp\")\n         END IF\n         IF (PRESENT(scale)) THEN\n            dst%d%c_dp(lb:ub) = scale%c_dp*src%d%c_dp(lb_s:ub_s)\n         ELSE\n            dst%d%c_dp(lb:ub) = src%d%c_dp(lb_s:ub_s)\n         END IF\n      CASE (dbcsr_type_real_4_2d)\n         IF (PRESENT(scale)) THEN\n            dst%d%r2_sp(lb:ub, lb2:ub2) = &\n               scale%r_sp*src%d%r2_sp(lb_s:ub_s, lb2_s:ub2_s)\n         ELSE\n            dst%d%r2_sp(lb:ub, lb2:ub2) = src%d%r2_sp(lb_s:ub_s, lb2_s:ub2_s)\n         END IF\n      CASE (dbcsr_type_real_8_2d)\n         IF (PRESENT(scale)) THEN\n            dst%d%r2_dp(lb:ub, lb2:ub2) = &\n               scale%r_dp*src%d%r2_dp(lb_s:ub_s, lb2_s:ub2_s)\n         ELSE\n            dst%d%r2_dp(lb:ub, lb2:ub2) = src%d%r2_dp(lb_s:ub_s, lb2_s:ub2_s)\n         END IF\n      CASE (dbcsr_type_complex_4_2d)\n         IF (PRESENT(scale)) THEN\n            dst%d%c2_sp(lb:ub, lb2:ub2) = &\n               scale%c_sp*src%d%c2_sp(lb_s:ub_s, lb2_s:ub2_s)\n         ELSE\n            dst%d%c2_sp(lb:ub, lb2:ub2) = src%d%c2_sp(lb_s:ub_s, lb2_s:ub2_s)\n         END IF\n      CASE (dbcsr_type_complex_8_2d)\n         IF (PRESENT(scale)) THEN\n            dst%d%c2_dp(lb:ub, lb2:ub2) = &\n               scale%c_dp*src%d%c2_dp(lb_s:ub_s, lb2_s:ub2_s)\n         ELSE\n            dst%d%c2_dp(lb:ub, lb2:ub2) = src%d%c2_dp(lb_s:ub_s, lb2_s:ub2_s)\n         END IF\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_data_copy_aa\n\n   SUBROUTINE dbcsr_data_copy_aa2(dst, dst_lb, dst_sizes, &\n                                  src, src_lb, src_sizes)\n      !! Copy data from one data area to another, the most basic form.\n      !! There are no checks done for correctness!\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dst\n         !! destination data area\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: dst_lb, dst_sizes\n         !! lower bounds for destination\n         !! sizes for destination\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: src\n         !! source data area\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: src_lb, src_sizes\n         !! lower bounds for source\n         !! sizes for source\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_copy_aa2'\n\n      INTEGER                                            :: dst_d, dst_dt, handle, src_d, src_dt\n      INTEGER, DIMENSION(2)                              :: dst_ub, src_ub\n!     ---------------------------------------------------------------------------\n      CALL timeset(routineN, handle)\n      !\n      src_dt = dbcsr_data_get_type(src)\n      dst_dt = dbcsr_data_get_type(dst)\n      IF (dbcsr_type_is_2d(src_dt)) THEN\n         src_d = 2\n      ELSE\n         src_d = 1\n      END IF\n      IF (dbcsr_type_is_2d(dst_dt)) THEN\n         dst_d = 2\n      ELSE\n         dst_d = 1\n      END IF\n      src_ub(1:src_d) = src_lb(1:src_d) + src_sizes(1:src_d) - 1\n      dst_ub(1:dst_d) = dst_lb(1:dst_d) + dst_sizes(1:dst_d) - 1\n      IF (careful_mod) THEN\n         IF (.NOT. dbcsr_data_exists(dst)) &\n            DBCSR_ABORT(\"Invalid target data area\")\n         IF (.NOT. dbcsr_data_exists(src)) &\n            DBCSR_ABORT(\"Invalid source data area\")\n         IF (dbcsr_type_2d_to_1d(src_dt) /= dbcsr_type_2d_to_1d(dst_dt)) &\n            DBCSR_ABORT(\"Data types must be comptable: \")\n         IF (dbcsr_type_is_2d(dst_dt)) THEN\n            IF (SIZE(dst_lb) /= 2) &\n               DBCSR_ABORT(\"size must be 2 for 2-d dst_lb\")\n            IF (SIZE(dst_sizes) /= 2) &\n               DBCSR_ABORT(\"size must be 2 for 2-d dst_sizes\")\n         ELSE\n            IF (SIZE(dst_lb) /= 1) &\n               DBCSR_ABORT(\"size must be 1 for 1-d dst_lb\")\n            IF (SIZE(dst_sizes) /= 1) &\n               DBCSR_ABORT(\"size must be 1 for 1-d dst_sizes\")\n         END IF\n         IF (dbcsr_type_is_2d(src_dt)) THEN\n            IF (SIZE(src_lb) /= 2) &\n               DBCSR_ABORT(\"size must be 2 for 2-d src_lb\")\n            IF (SIZE(src_sizes) /= 2) &\n               DBCSR_ABORT(\"size must be 2 for 2-d src_sizes\")\n         ELSE\n            IF (SIZE(src_lb) /= 1) &\n               DBCSR_ABORT(\"size must be 1 for 1-d src_lb\")\n            IF (SIZE(src_sizes) /= 1) &\n               DBCSR_ABORT(\"size must be 1 for 1-d src_sizes\")\n         END IF\n         IF (debug_mod) THEN\n            CALL dbcsr_data_verify_bounds(dst, dst_lb(1:dst_d), dst_ub(1:dst_d))\n            CALL dbcsr_data_verify_bounds(src, src_lb(1:src_d), src_ub(1:src_d))\n         END IF\n      END IF\n      !\n      SELECT CASE (src_dt)\n      CASE (dbcsr_type_real_4)\n         IF (dbcsr_type_is_2d(dst_dt)) THEN\n            CALL dbcsr_block_copy(dst%d%r2_sp(dst_lb(1):dst_ub(1), &\n                                              dst_lb(2):dst_ub(2)), &\n                                  src%d%r_sp(src_lb(1):src_ub(1)), &\n                                  src_sizes(1), 1)\n         ELSE\n            CALL dbcsr_block_copy(dst%d%r_sp(dst_lb(1):dst_ub(1)), &\n                                  src%d%r_sp(src_lb(1):src_ub(1)), &\n                                  src_sizes(1), 1)\n         END IF\n      CASE (dbcsr_type_real_8)\n         IF (dbcsr_type_is_2d(dst_dt)) THEN\n            CALL dbcsr_block_copy(dst%d%r2_dp(dst_lb(1):dst_ub(1), &\n                                              dst_lb(2):dst_ub(2)), &\n                                  src%d%r_dp(src_lb(1):src_ub(1)), &\n                                  src_sizes(1), 1)\n         ELSE\n            CALL dbcsr_block_copy(dst%d%r_dp(dst_lb(1):dst_ub(1)), &\n                                  src%d%r_dp(src_lb(1):src_ub(1)), &\n                                  src_sizes(1), 1)\n         END IF\n      CASE (dbcsr_type_complex_4)\n         IF (dbcsr_type_is_2d(dst_dt)) THEN\n            CALL dbcsr_block_copy(dst%d%c2_sp(dst_lb(1):dst_ub(1), &\n                                              dst_lb(2):dst_ub(2)), &\n                                  src%d%c_sp(src_lb(1):src_ub(1)), &\n                                  src_sizes(1), 1)\n         ELSE\n            CALL dbcsr_block_copy(dst%d%c_sp(dst_lb(1):dst_ub(1)), &\n                                  src%d%c_sp(src_lb(1):src_ub(1)), &\n                                  src_sizes(1), 1)\n         END IF\n      CASE (dbcsr_type_complex_8)\n         IF (dbcsr_type_is_2d(dst_dt)) THEN\n            CALL dbcsr_block_copy(dst%d%c2_dp(dst_lb(1):dst_ub(1), &\n                                              dst_lb(2):dst_ub(2)), &\n                                  src%d%c_dp(src_lb(1):src_ub(1)), &\n                                  src_sizes(1), 1)\n         ELSE\n            CALL dbcsr_block_copy(dst%d%c_dp(dst_lb(1):dst_ub(1)), &\n                                  src%d%c_dp(src_lb(1):src_ub(1)), &\n                                  src_sizes(1), 1)\n         END IF\n      CASE (dbcsr_type_real_4_2d)\n         IF (dbcsr_type_is_2d(dst_dt)) THEN\n            CALL dbcsr_block_copy(dst%d%r2_sp(dst_lb(1):dst_ub(1), &\n                                              dst_lb(2):dst_ub(2)), &\n                                  src%d%r2_sp(src_lb(1):src_ub(1), &\n                                              src_lb(2):src_ub(2)), &\n                                  dst_sizes(1), dst_sizes(2))\n         ELSE\n            CALL dbcsr_block_copy(dst%d%r_sp(dst_lb(1):dst_ub(1)), &\n                                  src%d%r2_sp(src_lb(1):src_ub(1), &\n                                              src_lb(2):src_ub(2)), &\n                                  dst_sizes(1), dst_sizes(2))\n         END IF\n      CASE (dbcsr_type_real_8_2d)\n         IF (dbcsr_type_is_2d(dst_dt)) THEN\n            CALL dbcsr_block_copy(dst%d%r2_dp(dst_lb(1):dst_ub(1), &\n                                              dst_lb(2):dst_ub(2)), &\n                                  src%d%r2_dp(src_lb(1):src_ub(1), &\n                                              src_lb(2):src_ub(2)), &\n                                  dst_sizes(1), dst_sizes(2))\n         ELSE\n            CALL dbcsr_block_copy(dst%d%r_dp(dst_lb(1):dst_ub(1)), &\n                                  src%d%r2_dp(src_lb(1):src_ub(1), &\n                                              src_lb(2):src_ub(2)), &\n                                  dst_sizes(1), dst_sizes(2))\n         END IF\n      CASE (dbcsr_type_complex_4_2d)\n         IF (dbcsr_type_is_2d(dst_dt)) THEN\n            CALL dbcsr_block_copy(dst%d%c2_sp(dst_lb(1):dst_ub(1), &\n                                              dst_lb(2):dst_ub(2)), &\n                                  src%d%c2_sp(src_lb(1):src_ub(1), &\n                                              src_lb(2):src_ub(2)), &\n                                  dst_sizes(1), dst_sizes(2))\n         ELSE\n            CALL dbcsr_block_copy(dst%d%c_sp(dst_lb(1):dst_ub(1)), &\n                                  src%d%c2_sp(src_lb(1):src_ub(1), &\n                                              src_lb(2):src_ub(2)), &\n                                  dst_sizes(1), dst_sizes(2))\n         END IF\n      CASE (dbcsr_type_complex_8_2d)\n         IF (dbcsr_type_is_2d(dst_dt)) THEN\n            CALL dbcsr_block_copy(dst%d%c2_dp(dst_lb(1):dst_ub(1), &\n                                              dst_lb(2):dst_ub(2)), &\n                                  src%d%c2_dp(src_lb(1):src_ub(1), &\n                                              src_lb(2):src_ub(2)), &\n                                  dst_sizes(1), dst_sizes(2))\n         ELSE\n            CALL dbcsr_block_copy(dst%d%c_dp(dst_lb(1):dst_ub(1)), &\n                                  src%d%c2_dp(src_lb(1):src_ub(1), &\n                                              src_lb(2):src_ub(2)), &\n                                  dst_sizes(1), dst_sizes(2))\n         END IF\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_data_copy_aa2\n\n   SUBROUTINE dbcsr_data_clear_nt(area, lb, ub, value, lb2, ub2, tr)\n      !! Clears a data area, possibly transposed.\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb, ub\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: value\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb2, ub2\n      LOGICAL, INTENT(in)                                :: tr\n\n!     ---------------------------------------------------------------------------\n      IF (tr) THEN\n         CALL dbcsr_data_clear0(area, lb=lb2, ub=ub2, value=value, lb2=lb, ub2=ub)\n      ELSE\n         CALL dbcsr_data_clear0(area, lb=lb, ub=ub, value=value, lb2=lb2, ub2=ub2)\n      END IF\n   END SUBROUTINE dbcsr_data_clear_nt\n\n   SUBROUTINE dbcsr_data_clear0(area, lb, ub, value, lb2, ub2)\n      !! Clears a data area\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! area with encapsulated data\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb, ub\n         !! lower bound for clearing\n         !! lower bound for clearing\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: value\n         !! value to use for clearing\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb2, ub2\n         !! upper bound for clearing\n         !! upper bound for clearing\n\n      INTEGER                                            :: l, l2, s, u, u2\n!     ---------------------------------------------------------------------------\n      IF (.NOT. ASSOCIATED(area%d)) &\n         DBCSR_ABORT(\"Data area must be setup.\")\n      IF (PRESENT(value)) THEN\n         IF (area%d%data_type .NE. value%data_type) &\n            DBCSR_ABORT(\"Incompatible data types\")\n      END IF\n\n      l = 0\n      u = 0\n      SELECT CASE (area%d%data_type)\n      CASE (dbcsr_type_real_4)\n         l = LBOUND(area%d%r_sp, 1)\n         u = UBOUND(area%d%r_sp, 1)\n         IF (PRESENT(lb)) THEN\n            IF (lb < l) DBCSR_ABORT(\"lower bound too low\")\n            l = lb\n         END IF\n         IF (PRESENT(ub)) THEN\n            IF (ub > u) DBCSR_ABORT(\"upper bound too high\")\n            u = ub\n         END IF\n         IF (PRESENT(value)) THEN\n            area%d%r_sp(l:u) = value%r_sp\n         ELSE\n            area%d%r_sp(l:u) = 0.0_real_4\n         END IF\n      CASE (dbcsr_type_real_8)\n         l = LBOUND(area%d%r_dp, 1)\n         u = UBOUND(area%d%r_dp, 1)\n         IF (PRESENT(lb)) THEN\n            IF (lb < l) DBCSR_ABORT(\"lower bound too low\")\n            l = lb\n         END IF\n         IF (PRESENT(ub)) THEN\n            IF (ub > u) DBCSR_ABORT(\"upper bound too high\")\n            u = ub\n         END IF\n         IF (PRESENT(value)) THEN\n            area%d%r_dp(l:u) = value%r_dp\n         ELSE\n            area%d%r_dp(l:u) = 0.0_real_8\n         END IF\n      CASE (dbcsr_type_complex_4)\n         l = LBOUND(area%d%c_sp, 1)\n         u = UBOUND(area%d%c_sp, 1)\n         IF (PRESENT(lb)) THEN\n            IF (lb < l) DBCSR_ABORT(\"lower bound too low\")\n            l = lb\n         END IF\n         IF (PRESENT(ub)) THEN\n            IF (ub > u) DBCSR_ABORT(\"upper bound too high\")\n            u = ub\n         END IF\n         IF (PRESENT(value)) THEN\n            area%d%c_sp(l:u) = value%c_sp\n         ELSE\n            area%d%c_sp(l:u) = CMPLX(0.0, 0.0, real_4)\n         END IF\n      CASE (dbcsr_type_complex_8)\n         l = LBOUND(area%d%c_dp, 1)\n         u = UBOUND(area%d%c_dp, 1)\n         IF (PRESENT(lb)) THEN\n            IF (lb < l) DBCSR_ABORT(\"lower bound too low\")\n            l = lb\n         END IF\n         IF (PRESENT(ub)) THEN\n            IF (ub > u) DBCSR_ABORT(\"upper bound too high\")\n            u = ub\n         END IF\n         IF (PRESENT(value)) THEN\n            area%d%c_dp(l:u) = value%c_dp\n         ELSE\n            area%d%c_dp(l:u) = CMPLX(0.0, 0.0, real_8)\n         END IF\n      CASE (dbcsr_type_real_4_2d)\n         l = LBOUND(area%d%r2_sp, 1)\n         u = UBOUND(area%d%r2_sp, 1)\n         l2 = LBOUND(area%d%r2_sp, 2)\n         u2 = UBOUND(area%d%r2_sp, 2)\n         IF (PRESENT(lb)) THEN\n            IF (lb < l) DBCSR_ABORT(\"lower bound too low\")\n            l = lb\n         END IF\n         IF (PRESENT(ub)) THEN\n            IF (ub > u) DBCSR_ABORT(\"upper bound too high\")\n            u = ub\n         END IF\n         IF (PRESENT(lb2)) THEN\n            IF (lb2 < l2) DBCSR_ABORT(\"lower2 bound too low\")\n            l2 = lb2\n         END IF\n         IF (PRESENT(ub2)) THEN\n            IF (ub2 > u2) DBCSR_ABORT(\"upper2 bound too high\")\n            u2 = ub2\n         END IF\n         IF (PRESENT(value)) THEN\n            area%d%r2_sp(l:u, l2:u2) = value%r_sp\n         ELSE\n            area%d%r2_sp(l:u, l2:u2) = 0.0_real_4\n         END IF\n      CASE (dbcsr_type_real_8_2d)\n         l = LBOUND(area%d%r2_dp, 1)\n         u = UBOUND(area%d%r2_dp, 1)\n         l2 = LBOUND(area%d%r2_dp, 2)\n         u2 = UBOUND(area%d%r2_dp, 2)\n         IF (PRESENT(lb)) THEN\n            IF (lb < l) DBCSR_ABORT(\"lower bound too low\")\n            l = lb\n         END IF\n         IF (PRESENT(ub)) THEN\n            IF (ub > u) DBCSR_ABORT(\"upper bound too high\")\n            u = ub\n         END IF\n         IF (PRESENT(lb2)) THEN\n            IF (lb2 < l2) DBCSR_ABORT(\"lower2 bound too low\")\n            l2 = lb2\n         END IF\n         IF (PRESENT(ub2)) THEN\n            IF (ub2 > u2) DBCSR_ABORT(\"upper2 bound too high\")\n            u2 = ub2\n         END IF\n         IF (PRESENT(value)) THEN\n            area%d%r2_dp(l:u, l2:u2) = value%r_dp\n         ELSE\n            area%d%r2_dp(l:u, l2:u2) = 0.0_real_8\n         END IF\n      CASE (dbcsr_type_complex_4_2d)\n         l = LBOUND(area%d%c2_sp, 1)\n         u = UBOUND(area%d%c2_sp, 1)\n         l2 = LBOUND(area%d%c2_sp, 2)\n         u2 = UBOUND(area%d%c2_sp, 2)\n         IF (PRESENT(lb)) THEN\n            IF (lb < l) DBCSR_ABORT(\"lower bound too low\")\n            l = lb\n         END IF\n         IF (PRESENT(ub)) THEN\n            IF (ub > u) DBCSR_ABORT(\"upper bound too high\")\n            u = ub\n         END IF\n         IF (PRESENT(lb2)) THEN\n            IF (lb2 < l2) DBCSR_ABORT(\"lower2 bound too low\")\n            l2 = lb2\n         END IF\n         IF (PRESENT(ub2)) THEN\n            IF (ub2 > u2) DBCSR_ABORT(\"upper2 bound too high\")\n            u2 = ub2\n         END IF\n         IF (PRESENT(value)) THEN\n            area%d%c2_sp(l:u, l2:u2) = value%c_sp\n         ELSE\n            area%d%c2_sp(l:u, l2:u2) = CMPLX(0.0, 0.0, real_4)\n         END IF\n      CASE (dbcsr_type_complex_8_2d)\n         l = LBOUND(area%d%c2_dp, 1)\n         u = UBOUND(area%d%c2_dp, 1)\n         l2 = LBOUND(area%d%c2_dp, 2)\n         u2 = UBOUND(area%d%c2_dp, 2)\n         IF (PRESENT(lb)) THEN\n            IF (lb < l) DBCSR_ABORT(\"lower bound too low\")\n            l = lb\n         END IF\n         IF (PRESENT(ub)) THEN\n            IF (ub > u) DBCSR_ABORT(\"upper bound too high\")\n            u = ub\n         END IF\n         IF (PRESENT(lb2)) THEN\n            IF (lb2 < l2) DBCSR_ABORT(\"lower2 bound too low\")\n            l2 = lb2\n         END IF\n         IF (PRESENT(ub2)) THEN\n            IF (ub2 > u2) DBCSR_ABORT(\"upper2 bound too high\")\n            u2 = ub2\n         END IF\n         IF (PRESENT(value)) THEN\n            area%d%c2_dp(l:u, l2:u2) = value%c_dp\n         ELSE\n            area%d%c2_dp(l:u, l2:u2) = CMPLX(0.0, 0.0, real_8)\n         END IF\n      CASE default\n         DBCSR_ABORT(\"Invalid or unsupported data type.\")\n      END SELECT\n\n      IF (acc_devmem_allocated(area%d%acc_devmem)) THEN\n         IF (PRESENT(value)) &\n            DBCSR_ABORT(\"dbcsr_data_clear0 with value not implemented for acc_devmem\")\n         s = dbcsr_datatype_sizeof(area%d%data_type)\n         CALL acc_devmem_setzero_bytes(area%d%acc_devmem, s*l, s*u, area%d%memory_type%acc_stream)\n      END IF\n\n      ! CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_data_clear0\n\n   SUBROUTINE dbcsr_block_partial_copy(dst, dst_rs, dst_cs, dst_tr, &\n                                       src, src_rs, src_cs, src_tr, &\n                                       dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                       dst_offset, src_offset)\n      !! Copies a block subset\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dst\n         !! target data area\n      INTEGER, INTENT(IN)                                :: dst_rs, dst_cs\n         !! target block row size (logical)\n         !! target block column size (logical)\n      LOGICAL                                            :: dst_tr\n         !! whether target block is transposed\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: src\n         !! source data area\n      INTEGER, INTENT(IN)                                :: src_rs, src_cs\n         !! source block row size (logical)\n         !! source block column size (logical)\n      LOGICAL                                            :: src_tr\n         !! whether source block is transposed\n      INTEGER, INTENT(IN)                                :: dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, &\n                                                            nrow, ncol\n         !! first row in target\n         !! first column in target\n         !! first_row in source\n         !! first column in target\n         !! number of rows to copy\n         !! number of columns to copy\n      INTEGER, INTENT(IN), OPTIONAL                      :: dst_offset, src_offset\n         !! offset in target\n         !! offset in source\n\n      LOGICAL, PARAMETER                                 :: verification = careful_mod\n\n      INTEGER                                            :: dst_o, src_o\n      LOGICAL                                            :: src_is_2d\n!     ---------------------------------------------------------------------------\n      IF (careful_mod) THEN\n         IF (dbcsr_type_2d_to_1d(dbcsr_data_get_type(dst)) /= dbcsr_type_2d_to_1d(dbcsr_data_get_type(src))) &\n            DBCSR_ABORT(\"Incompatible data types.\")\n      END IF\n      dst_o = 0; src_o = 0\n      IF (PRESENT(dst_offset)) dst_o = dst_offset\n      IF (PRESENT(src_offset)) src_o = src_offset\n      IF (verification) THEN\n         IF (dst_r_lb + nrow - 1 > dst_rs) &\n            DBCSR_ABORT(\"Incompatible dst row sizes\")\n         IF (dst_c_lb + ncol - 1 > dst_cs) &\n            DBCSR_ABORT(\"Incompatible dst col sizes\")\n         IF (src_r_lb + nrow - 1 > src_rs) &\n            DBCSR_ABORT(\"Incompatible src row sizes\")\n         IF (src_c_lb + ncol - 1 > src_cs) &\n            DBCSR_ABORT(\"Incompatible src col sizes\")\n      END IF\n      !\n      src_is_2d = dbcsr_type_is_2d(dbcsr_data_get_type(src))\n      SELECT CASE (dbcsr_data_get_type(dst))\n      CASE (dbcsr_type_real_4)\n         IF (src_is_2d) THEN\n            CALL block_partial_copy_1d2d_s(dst%d%r_sp, dst_rs, dst_cs, dst_tr, &\n                                           src%d%r2_sp, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                           dst_offset=dst_o)\n         ELSE\n            CALL block_partial_copy_s(dst%d%r_sp, dst_rs, dst_cs, dst_tr, &\n                                      src%d%r_sp, src_rs, src_cs, src_tr, &\n                                      dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                      dst_offset=dst_o, src_offset=src_o)\n         END IF\n      CASE (dbcsr_type_real_8)\n         IF (src_is_2d) THEN\n            CALL block_partial_copy_1d2d_d(dst%d%r_dp, dst_rs, dst_cs, dst_tr, &\n                                           src%d%r2_dp, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                           dst_offset=dst_o)\n         ELSE\n            CALL block_partial_copy_d(dst%d%r_dp, dst_rs, dst_cs, dst_tr, &\n                                      src%d%r_dp, src_rs, src_cs, src_tr, &\n                                      dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                      dst_offset=dst_o, src_offset=src_o)\n         END IF\n      CASE (dbcsr_type_complex_4)\n         IF (src_is_2d) THEN\n            CALL block_partial_copy_1d2d_c(dst%d%c_sp, dst_rs, dst_cs, dst_tr, &\n                                           src%d%c2_sp, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                           dst_offset=dst_o)\n         ELSE\n            CALL block_partial_copy_c(dst%d%c_sp, dst_rs, dst_cs, dst_tr, &\n                                      src%d%c_sp, src_rs, src_cs, src_tr, &\n                                      dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                      dst_offset=dst_o, src_offset=src_o)\n         END IF\n      CASE (dbcsr_type_complex_8)\n         IF (src_is_2d) THEN\n            CALL block_partial_copy_1d2d_z(dst%d%c_dp, dst_rs, dst_cs, dst_tr, &\n                                           src%d%c2_dp, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                           dst_offset=dst_o)\n         ELSE\n            CALL block_partial_copy_z(dst%d%c_dp, dst_rs, dst_cs, dst_tr, &\n                                      src%d%c_dp, src_rs, src_cs, src_tr, &\n                                      dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                      dst_offset=dst_o, src_offset=src_o)\n         END IF\n      CASE (dbcsr_type_real_4_2d)\n         IF (src_is_2d) THEN\n            CALL block_partial_copy_2d2d_s(dst%d%r2_sp, dst_tr, &\n                                           src%d%r2_sp, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol)\n         ELSE\n            CALL block_partial_copy_2d1d_s(dst%d%r2_sp, dst_tr, &\n                                           src%d%r_sp, src_rs, src_cs, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                           src_offset=src_o)\n         END IF\n      CASE (dbcsr_type_real_8_2d)\n         IF (src_is_2d) THEN\n            CALL block_partial_copy_2d2d_d(dst%d%r2_dp, dst_tr, &\n                                           src%d%r2_dp, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol)\n         ELSE\n            CALL block_partial_copy_2d1d_d(dst%d%r2_dp, dst_tr, &\n                                           src%d%r_dp, src_rs, src_cs, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                           src_offset=src_o)\n         END IF\n      CASE (dbcsr_type_complex_4_2d)\n         IF (src_is_2d) THEN\n            CALL block_partial_copy_2d2d_c(dst%d%c2_sp, dst_tr, &\n                                           src%d%c2_sp, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol)\n         ELSE\n            CALL block_partial_copy_2d1d_c(dst%d%c2_sp, dst_tr, &\n                                           src%d%c_sp, src_rs, src_cs, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                           src_offset=src_o)\n         END IF\n      CASE (dbcsr_type_complex_8_2d)\n         IF (src_is_2d) THEN\n            CALL block_partial_copy_2d2d_z(dst%d%c2_dp, dst_tr, &\n                                           src%d%c2_dp, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol)\n         ELSE\n            CALL block_partial_copy_2d1d_z(dst%d%c2_dp, dst_tr, &\n                                           src%d%c_dp, src_rs, src_cs, src_tr, &\n                                           dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                           src_offset=src_o)\n         END IF\n      CASE default\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n   END SUBROUTINE dbcsr_block_partial_copy\n\n   SUBROUTINE block_add_anytype(block_a, block_b, len)\n      !! Adds two blocks\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: block_a\n         !! Block to add to\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: block_b\n         !! Block to add to block_a\n      INTEGER, INTENT(IN), OPTIONAL                      :: len\n\n      INTEGER                                            :: n\n!     ---------------------------------------------------------------------------\n      IF (careful_mod) THEN\n         IF (dbcsr_data_get_type(block_a) /= dbcsr_data_get_type(block_a)) &\n            DBCSR_ABORT(\"Mismatched data types.\")\n      END IF\n      IF (PRESENT(len)) THEN\n         n = len\n         IF (dbcsr_data_get_size(block_b) < n) &\n            DBCSR_ABORT(\"Block B too small.\")\n      ELSE\n         n = dbcsr_data_get_size_referenced(block_b)\n      END IF\n      IF (dbcsr_data_get_size(block_a) < n) &\n         DBCSR_ABORT(\"Block A too small.\")\n      SELECT CASE (dbcsr_data_get_type(block_a))\n      CASE (dbcsr_type_real_4)\n         CALL block_add_s(block_a%d%r_sp, block_b%d%r_sp, n)\n      CASE (dbcsr_type_real_8)\n         CALL block_add_d(block_a%d%r_dp, block_b%d%r_dp, n)\n      CASE (dbcsr_type_complex_4)\n         CALL block_add_c(block_a%d%c_sp, block_b%d%c_sp, n)\n      CASE (dbcsr_type_complex_8)\n         CALL block_add_z(block_a%d%c_dp, block_b%d%c_dp, n)\n      CASE (dbcsr_type_real_4_2d)\n         CALL block_add_s(block_a%d%r2_sp, block_b%d%r2_sp, n)\n      CASE (dbcsr_type_real_8_2d)\n         CALL block_add_d(block_a%d%r2_dp, block_b%d%r2_dp, n)\n      CASE (dbcsr_type_complex_4_2d)\n         CALL block_add_c(block_a%d%c2_sp, block_b%d%c2_sp, n)\n      CASE (dbcsr_type_complex_8_2d)\n         CALL block_add_z(block_a%d%c2_dp, block_b%d%c2_dp, n)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type!\")\n      END SELECT\n   END SUBROUTINE block_add_anytype\n\n   SUBROUTINE block_add_anytype_bounds(block_a, block_b, lb_a, lb_b, len)\n      !! Adds two blocks\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: block_a\n         !! Block to add to\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: block_b\n         !! Block to add to block_a\n      INTEGER, INTENT(IN)                                :: lb_a, lb_b, len\n\n!     ---------------------------------------------------------------------------\n      IF (careful_mod) THEN\n         IF (dbcsr_data_get_type(block_a) /= dbcsr_data_get_type(block_a)) &\n            DBCSR_ABORT(\"Mismatched data types.\")\n      END IF\n      IF (dbcsr_data_get_size(block_b) < lb_b + len - 1) &\n         DBCSR_ABORT(\"Block B too small.\")\n      IF (dbcsr_data_get_size(block_a) < lb_a + len - 1) &\n         DBCSR_ABORT(\"Block A too small.\")\n      SELECT CASE (dbcsr_data_get_type(block_a))\n      CASE (dbcsr_type_real_4)\n         CALL block_add_s(block_a%d%r_sp(lb_a:), block_b%d%r_sp(lb_b:), len)\n      CASE (dbcsr_type_real_8)\n         CALL block_add_d(block_a%d%r_dp(lb_a:), block_b%d%r_dp(lb_b:), len)\n      CASE (dbcsr_type_complex_4)\n         CALL block_add_c(block_a%d%c_sp(lb_a:), block_b%d%c_sp(lb_b:), len)\n      CASE (dbcsr_type_complex_8)\n         CALL block_add_z(block_a%d%c_dp(lb_a:), block_b%d%c_dp(lb_b:), len)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type!\")\n      END SELECT\n   END SUBROUTINE block_add_anytype_bounds\n\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float\n      PURE_BLOCKOPS SUBROUTINE block_partial_copy_${nametype1}$ (dst, dst_rs, dst_cs, dst_tr, &\n                                                                 src, src_rs, src_cs, src_tr, &\n                                                                 dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                                                 dst_offset, src_offset)\n     !! Copies a block subset\n     !! @note\n     !! see block_partial_copy_a\n     !! @endnote\n\n#if defined(__LIBXSMM_BLOCKOPS)\n         USE libxsmm, ONLY: libxsmm_matcopy, libxsmm_otrans, libxsmm_ptr0\n#endif\n         ${type1}$, DIMENSION(:), &\n            INTENT(INOUT)                         :: dst\n         INTEGER, INTENT(IN)                      :: dst_rs, dst_cs\n         INTEGER, INTENT(IN)                      :: src_offset, dst_offset\n         LOGICAL, INTENT(IN)                      :: dst_tr\n         ${type1}$, DIMENSION(:), &\n            INTENT(IN)                            :: src\n         INTEGER, INTENT(IN)                      :: src_rs, src_cs\n         LOGICAL, INTENT(IN)                      :: src_tr\n         INTEGER, INTENT(IN)                      :: dst_r_lb, dst_c_lb, src_r_lb, &\n                                                     src_c_lb, nrow, ncol\n\n         INTEGER                                  :: col, row\n!    ---------------------------------------------------------------------------\n!    Factors out the 4 combinations to remove branches from the inner loop.\n!    rs is the logical row size so it always remains the leading dimension.\n         IF (.NOT. dst_tr .AND. .NOT. src_tr) THEN\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_offset + dst_r_lb + (dst_c_lb - 1)*dst_rs)), &\n                                    libxsmm_ptr0(src(src_offset + src_r_lb + (src_c_lb - 1)*src_rs)), &\n                                    ${typesize1[n]}$, nrow, ncol, src_rs, dst_rs)\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_offset + dst_r_lb + row + (dst_c_lb + col - 1)*dst_rs) &\n                     = src(src_offset + src_r_lb + row + (src_c_lb + col - 1)*src_rs)\n               END DO\n            END DO\n#endif\n         ELSEIF (dst_tr .AND. .NOT. src_tr) THEN\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_offset + dst_c_lb + col + (dst_r_lb + row - 1)*dst_cs) &\n                     = src(src_offset + src_r_lb + row + (src_c_lb + col - 1)*src_rs)\n               END DO\n            END DO\n         ELSEIF (.NOT. dst_tr .AND. src_tr) THEN\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_offset + dst_r_lb + row + (dst_c_lb + col - 1)*dst_rs) &\n                     = src(src_offset + src_c_lb + col + (src_r_lb + row - 1)*src_cs)\n               END DO\n            END DO\n         ELSE\n            DBCSR_ASSERT(dst_tr .AND. src_tr)\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_offset + dst_c_lb + (dst_r_lb - 1)*dst_cs)), &\n                                    libxsmm_ptr0(src(src_offset + src_c_lb + (src_r_lb - 1)*src_cs)), &\n                                    ${typesize1[n]}$, nrow, ncol, src_cs, dst_cs)\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_offset + dst_c_lb + col + (dst_r_lb + row - 1)*dst_cs) &\n                     = src(src_offset + src_c_lb + col + (src_r_lb + row - 1)*src_cs)\n               END DO\n            END DO\n#endif\n         END IF\n      END SUBROUTINE block_partial_copy_${nametype1}$\n\n      PURE_BLOCKOPS SUBROUTINE block_partial_copy_1d2d_${nametype1}$ (dst, dst_rs, dst_cs, dst_tr, &\n                                                                      src, src_tr, &\n                                                                      dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                                                      dst_offset)\n     !! Copies a block subset\n     !! @note\n     !! see block_partial_copy_a\n     !! @endnote\n\n#if defined(__LIBXSMM_BLOCKOPS)\n         USE libxsmm, ONLY: libxsmm_matcopy, libxsmm_otrans, libxsmm_ptr0\n#else\n         INTEGER                                  :: col, row\n#endif\n         ${type1}$, DIMENSION(:), &\n            INTENT(INOUT)                         :: dst\n         INTEGER, INTENT(IN)                      :: dst_rs, dst_cs\n         INTEGER, INTENT(IN)                      :: dst_offset\n         LOGICAL, INTENT(IN)                      :: dst_tr\n         ${type1}$, DIMENSION(:, :), &\n            INTENT(IN)                            :: src\n         LOGICAL, INTENT(IN)                      :: src_tr\n         INTEGER, INTENT(IN)                      :: dst_r_lb, dst_c_lb, src_r_lb, &\n                                                     src_c_lb, nrow, ncol\n\n!    ---------------------------------------------------------------------------\n!    Factors out the 4 combinations to remove branches from the inner loop.\n!    rs is the logical row size so it always remains the leading dimension.\n         IF (.NOT. dst_tr .AND. .NOT. src_tr) THEN\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_offset + dst_r_lb + (dst_c_lb - 1)*dst_rs)), &\n                                    libxsmm_ptr0(src(src_r_lb, src_c_lb)), &\n                                    ${typesize1[n]}$, nrow, ncol, SIZE(src, 1), dst_rs)\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_offset + dst_r_lb + row + (dst_c_lb + col - 1)*dst_rs) &\n                     = src(src_r_lb + row, src_c_lb + col)\n               END DO\n            END DO\n#endif\n         ELSEIF (dst_tr .AND. .NOT. src_tr) THEN\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_otrans(libxsmm_ptr0(dst(dst_offset + dst_c_lb + (dst_r_lb - 1)*dst_cs)), &\n                                   libxsmm_ptr0(src(src_r_lb, src_c_lb)), &\n                                   ${typesize1[n]}$, nrow, ncol, SIZE(src, 1), dst_cs)\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_offset + dst_c_lb + col + (dst_r_lb + row - 1)*dst_cs) &\n                     = src(src_r_lb + row, src_c_lb + col)\n               END DO\n            END DO\n#endif\n         ELSEIF (.NOT. dst_tr .AND. src_tr) THEN\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_otrans(libxsmm_ptr0(dst(dst_offset + dst_r_lb + (dst_c_lb - 1)*dst_rs)), &\n                                   libxsmm_ptr0(src(src_c_lb, src_r_lb)), &\n                                   ${typesize1[n]}$, nrow, ncol, SIZE(src, 2), dst_rs)\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_offset + dst_r_lb + row + (dst_c_lb + col - 1)*dst_rs) &\n                     = src(src_c_lb + col, src_r_lb + row)\n               END DO\n            END DO\n#endif\n         ELSE\n            DBCSR_ASSERT(dst_tr .AND. src_tr)\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_offset + dst_c_lb + (dst_r_lb - 1)*dst_cs)), &\n                                    libxsmm_ptr0(src(src_c_lb, src_r_lb)), &\n                                    ${typesize1[n]}$, nrow, ncol, SIZE(src, 2), dst_cs)\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_offset + dst_c_lb + col + (dst_r_lb + row - 1)*dst_cs) &\n                     = src(src_c_lb + col, src_r_lb + row)\n               END DO\n            END DO\n#endif\n         END IF\n      END SUBROUTINE block_partial_copy_1d2d_${nametype1}$\n\n      PURE_BLOCKOPS SUBROUTINE block_partial_copy_2d1d_${nametype1}$ (dst, dst_tr, &\n                                                                      src, src_rs, src_cs, src_tr, &\n                                                                      dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol, &\n                                                                      src_offset)\n     !! Copies a block subset\n     !! @note\n     !! see block_partial_copy_a\n     !! @endnote\n\n#if defined(__LIBXSMM_BLOCKOPS)\n         USE libxsmm, ONLY: libxsmm_matcopy, libxsmm_otrans, libxsmm_ptr0\n#endif\n         ${type1}$, DIMENSION(:, :), &\n            INTENT(INOUT)                         :: dst\n         INTEGER, INTENT(IN)                      :: src_offset\n         LOGICAL, INTENT(IN)                      :: dst_tr\n         ${type1}$, DIMENSION(:), &\n            INTENT(IN)                            :: src\n         INTEGER, INTENT(IN)                      :: src_rs, src_cs\n         LOGICAL, INTENT(IN)                      :: src_tr\n         INTEGER, INTENT(IN)                      :: dst_r_lb, dst_c_lb, src_r_lb, &\n                                                     src_c_lb, nrow, ncol\n\n         INTEGER                                  :: col, row\n!    ---------------------------------------------------------------------------\n!    Factors out the 4 combinations to remove branches from the inner loop.\n!    rs is the logical row size so it always remains the leading dimension.\n         IF (.NOT. dst_tr .AND. .NOT. src_tr) THEN\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_r_lb + row, dst_c_lb + col) &\n                     = src(src_offset + src_r_lb + row + (src_c_lb + col - 1)*src_rs)\n               END DO\n            END DO\n         ELSEIF (dst_tr .AND. .NOT. src_tr) THEN\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_c_lb + col, dst_r_lb + row) &\n                     = src(src_offset + src_r_lb + row + (src_c_lb + col - 1)*src_rs)\n               END DO\n            END DO\n         ELSEIF (.NOT. dst_tr .AND. src_tr) THEN\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_r_lb + row, dst_c_lb + col) &\n                     = src(src_offset + src_c_lb + col + (src_r_lb + row - 1)*src_cs)\n               END DO\n            END DO\n         ELSE\n            DBCSR_ASSERT(dst_tr .AND. src_tr)\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_c_lb + col, dst_r_lb + row) &\n                     = src(src_offset + src_c_lb + col + (src_r_lb + row - 1)*src_cs)\n               END DO\n            END DO\n         END IF\n      END SUBROUTINE block_partial_copy_2d1d_${nametype1}$\n\n      PURE_BLOCKOPS SUBROUTINE block_partial_copy_2d2d_${nametype1}$ (dst, dst_tr, &\n                                                                      src, src_tr, &\n                                                                      dst_r_lb, dst_c_lb, src_r_lb, src_c_lb, nrow, ncol)\n     !! Copies a block subset\n     !! @note\n     !! see block_partial_copy_a\n     !! @endnote\n\n#if defined(__LIBXSMM_BLOCKOPS)\n         USE libxsmm, ONLY: libxsmm_matcopy, libxsmm_otrans, libxsmm_ptr0\n#else\n         INTEGER                                  :: col, row\n#endif\n         ${type1}$, DIMENSION(:, :), &\n            INTENT(INOUT)                         :: dst\n         LOGICAL, INTENT(IN)                      :: dst_tr\n         ${type1}$, DIMENSION(:, :), &\n            INTENT(IN)                            :: src\n         LOGICAL, INTENT(IN)                      :: src_tr\n         INTEGER, INTENT(IN)                      :: dst_r_lb, dst_c_lb, src_r_lb, &\n                                                     src_c_lb, nrow, ncol\n\n!    ---------------------------------------------------------------------------\n!    Factors out the 4 combinations to remove branches from the inner loop.\n!    rs is the logical row size so it always remains the leading dimension.\n         IF (.NOT. dst_tr .AND. .NOT. src_tr) THEN\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_r_lb, dst_c_lb)), &\n                                    libxsmm_ptr0(src(src_r_lb, src_c_lb)), &\n                                    ${typesize1[n]}$, nrow, ncol, &\n                                    SIZE(src, 1), SIZE(dst, 1))\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_r_lb + row, dst_c_lb + col) &\n                     = src(src_r_lb + row, src_c_lb + col)\n               END DO\n            END DO\n#endif\n         ELSEIF (dst_tr .AND. .NOT. src_tr) THEN\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_otrans(libxsmm_ptr0(dst(dst_c_lb, dst_r_lb)), &\n                                   libxsmm_ptr0(src(src_r_lb, src_c_lb)), &\n                                   ${typesize1[n]}$, nrow, ncol, &\n                                   SIZE(src, 1), SIZE(dst, 2))\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_c_lb + col, dst_r_lb + row) &\n                     = src(src_r_lb + row, src_c_lb + col)\n               END DO\n            END DO\n#endif\n         ELSEIF (.NOT. dst_tr .AND. src_tr) THEN\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_otrans(libxsmm_ptr0(dst(dst_r_lb, dst_c_lb)), &\n                                   libxsmm_ptr0(src(src_c_lb, src_r_lb)), &\n                                   ${typesize1[n]}$, nrow, ncol, &\n                                   SIZE(src, 2), SIZE(dst, 1))\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_r_lb + row, dst_c_lb + col) &\n                     = src(src_c_lb + col, src_r_lb + row)\n               END DO\n            END DO\n#endif\n         ELSE\n            DBCSR_ASSERT(dst_tr .AND. src_tr)\n#if defined(__LIBXSMM_BLOCKOPS)\n            IF ((0 .LT. ncol) .AND. (0 .LT. nrow)) THEN\n               CALL libxsmm_matcopy(libxsmm_ptr0(dst(dst_c_lb, dst_r_lb)), &\n                                    libxsmm_ptr0(src(src_c_lb, src_r_lb)), &\n                                    ${typesize1[n]}$, nrow, ncol, &\n                                    SIZE(src, 2), SIZE(dst, 2))\n            END IF\n#else\n            DO col = 0, ncol - 1\n               DO row = 0, nrow - 1\n                  dst(dst_c_lb + col, dst_r_lb + row) &\n                     = src(src_c_lb + col, src_r_lb + row)\n               END DO\n            END DO\n#endif\n         END IF\n      END SUBROUTINE block_partial_copy_2d2d_${nametype1}$\n\n      PURE SUBROUTINE block_copy_${nametype1}$ (extent_out, extent_in, n, out_fe, in_fe)\n     !! Copy a block\n\n         INTEGER, INTENT(IN) :: n, out_fe, in_fe\n        !! number of elements to copy\n        !! first element of output\n        !! first element of input\n         ${type1}$, DIMENSION(*), INTENT(OUT) :: extent_out\n        !! output data\n         ${type1}$, DIMENSION(*), INTENT(IN)  :: extent_in\n        !! input data\n\n!    ---------------------------------------------------------------------------\n         extent_out(out_fe:out_fe + n - 1) = extent_in(in_fe:in_fe + n - 1)\n      END SUBROUTINE block_copy_${nametype1}$\n\n      PURE_BLOCKOPS SUBROUTINE block_transpose_copy_${nametype1}$ (extent_out, extent_in, &\n                                                                   rows, columns)\n     !! Copy and transpose block.\n\n#if defined(__LIBXSMM_TRANS)\n         USE libxsmm, ONLY: libxsmm_otrans, libxsmm_ptr1\n#endif\n         ${type1}$, DIMENSION(:), INTENT(OUT), TARGET :: extent_out\n        !! output matrix in the form of a 1-d array\n         ${type1}$, DIMENSION(:), INTENT(IN)          :: extent_in\n        !! input matrix in the form of a 1-d array\n         INTEGER, INTENT(IN) :: rows, columns\n        !! input matrix size\n        !! input matrix size\n\n!    ---------------------------------------------------------------------------\n#if defined(__LIBXSMM_TRANS)\n         CALL libxsmm_otrans(libxsmm_ptr1(extent_out), libxsmm_ptr1(extent_in), &\n                             ${typesize1[n]}$, rows, columns, rows, columns)\n#elif defined(__MKL)\n         CALL mkl_${nametype1}$omatcopy('C', 'T', rows, columns, ${one1[n]}$, extent_in, rows, extent_out, columns)\n#else\n         extent_out(1:rows*columns) = RESHAPE(TRANSPOSE( &\n                                              RESHAPE(extent_in(1:rows*columns), (/rows, columns/))), (/rows*columns/))\n#endif\n      END SUBROUTINE block_transpose_copy_${nametype1}$\n\n      PURE SUBROUTINE block_copy_2d1d_${nametype1}$ (extent_out, extent_in, &\n                                                     rows, columns)\n     !! Copy a block\n\n         INTEGER, INTENT(IN) :: rows, columns\n        !! input matrix size\n        !! input matrix size\n         ${type1}$, DIMENSION(rows, columns), INTENT(OUT) :: extent_out\n        !! output matrix in the form of a 2-d array\n         ${type1}$, DIMENSION(:), INTENT(IN)             :: extent_in\n        !! input matrix in the form of a 1-d array\n\n!    ---------------------------------------------------------------------------\n         extent_out = RESHAPE(extent_in, (/rows, columns/))\n      END SUBROUTINE block_copy_2d1d_${nametype1}$\n\n      PURE SUBROUTINE block_copy_1d1d_${nametype1}$ (extent_out, extent_in, &\n                                                     rows, columns)\n     !! Copy a block\n\n         INTEGER, INTENT(IN) :: rows, columns\n        !! input matrix size\n        !! input matrix size\n         ${type1}$, DIMENSION(rows*columns), INTENT(OUT) :: extent_out\n        !! output matrix in the form of a 1-d array\n         ${type1}$, DIMENSION(rows*columns), INTENT(IN)  :: extent_in\n        !! input matrix in the form of a 1-d array\n\n!    ---------------------------------------------------------------------------\n         extent_out(:) = extent_in(:)\n      END SUBROUTINE block_copy_1d1d_${nametype1}$\n\n      PURE SUBROUTINE block_copy_2d2d_${nametype1}$ (extent_out, extent_in, &\n                                                     rows, columns)\n     !! Copy a block\n\n         INTEGER, INTENT(IN) :: rows, columns\n        !! input matrix size\n        !! input matrix size\n         ${type1}$, DIMENSION(rows, columns), INTENT(OUT) :: extent_out\n        !! output matrix in the form of a 2-d array\n         ${type1}$, DIMENSION(rows, columns), INTENT(IN)  :: extent_in\n        !! input matrix in the form of a 2-d array\n\n!    ---------------------------------------------------------------------------\n         extent_out(:, :) = extent_in(:, :)\n      END SUBROUTINE block_copy_2d2d_${nametype1}$\n\n      PURE_BLOCKOPS SUBROUTINE block_transpose_copy_2d1d_${nametype1}$ (extent_out, extent_in, &\n                                                                        rows, columns)\n     !! Copy and transpose block.\n\n#if defined(__LIBXSMM_TRANS)\n         USE libxsmm, ONLY: libxsmm_otrans, libxsmm_ptr1, libxsmm_ptr2\n#endif\n         INTEGER, INTENT(IN) :: rows, columns\n        !! input matrix size\n        !! input matrix size\n         ${type1}$, DIMENSION(columns, rows), INTENT(OUT), TARGET :: extent_out\n        !! output matrix in the form of a 2-d array\n         ${type1}$, DIMENSION(:), INTENT(IN)                      :: extent_in\n        !! input matrix in the form of a 1-d array\n\n!    ---------------------------------------------------------------------------\n#if defined(__LIBXSMM_TRANS)\n         CALL libxsmm_otrans(libxsmm_ptr2(extent_out), libxsmm_ptr1(extent_in), &\n                             ${typesize1[n]}$, rows, columns, rows, columns)\n#elif defined(__MKL)\n         CALL mkl_${nametype1}$omatcopy('C', 'T', rows, columns, ${one1[n]}$, extent_in, rows, extent_out, columns)\n#else\n         extent_out = TRANSPOSE(RESHAPE(extent_in, (/rows, columns/)))\n#endif\n      END SUBROUTINE block_transpose_copy_2d1d_${nametype1}$\n\n      PURE SUBROUTINE block_copy_1d2d_${nametype1}$ (extent_out, extent_in, &\n                                                     rows, columns)\n     !! Copy and transpose block.\n\n         INTEGER, INTENT(IN) :: rows, columns\n        !! input matrix size\n        !! input matrix size\n         ${type1}$, DIMENSION(:), INTENT(OUT)            :: extent_out\n        !! output matrix in the form of a 1-d array\n         ${type1}$, DIMENSION(rows, columns), INTENT(IN) :: extent_in\n        !! input matrix in the form of a 2-d array\n\n!    ---------------------------------------------------------------------------\n         extent_out = RESHAPE(extent_in, (/rows*columns/))\n      END SUBROUTINE block_copy_1d2d_${nametype1}$\n\n      PURE_BLOCKOPS SUBROUTINE block_transpose_copy_1d2d_${nametype1}$ (extent_out, extent_in, &\n                                                                        rows, columns)\n     !! Copy and transpose block.\n\n#if defined(__LIBXSMM_TRANS)\n         USE libxsmm, ONLY: libxsmm_otrans, libxsmm_ptr1, libxsmm_ptr2\n#endif\n         INTEGER, INTENT(IN) :: rows, columns\n        !! input matrix size\n        !! input matrix size\n         ${type1}$, DIMENSION(:), INTENT(OUT), TARGET    :: extent_out\n        !! output matrix in the form of a 1-d array\n         ${type1}$, DIMENSION(rows, columns), INTENT(IN) :: extent_in\n        !! input matrix in the form of a 2-d array\n\n!    ---------------------------------------------------------------------------\n#if defined(__LIBXSMM_TRANS)\n         CALL libxsmm_otrans(libxsmm_ptr1(extent_out), libxsmm_ptr2(extent_in), &\n                             ${typesize1[n]}$, rows, columns, rows, columns)\n#elif defined(__MKL)\n         CALL mkl_${nametype1}$omatcopy('C', 'T', rows, columns, ${one1[n]}$, extent_in, rows, extent_out, columns)\n#else\n         extent_out = RESHAPE(TRANSPOSE(extent_in), (/rows*columns/))\n#endif\n      END SUBROUTINE block_transpose_copy_1d2d_${nametype1}$\n\n      PURE_BLOCKOPS SUBROUTINE block_transpose_inplace_${nametype1}$ (extent, rows, columns)\n     !! In-place block transpose.\n\n#if defined(__LIBXSMM_TRANS) && 0\n         USE libxsmm, ONLY: libxsmm_itrans, libxsmm_ptr1\n#endif\n         INTEGER, INTENT(IN) :: rows, columns\n        !! input matrix size\n        !! input matrix size\n         ${type1}$, DIMENSION(rows*columns), INTENT(INOUT) :: extent\n        !! Matrix in the form of a 1-d array\n\n!    ---------------------------------------------------------------------------\n#if defined(__LIBXSMM_TRANS) && 0\n         CALL libxsmm_itrans(libxsmm_ptr1(extent), ${typesize1[n]}$, rows, columns, rows)\n#elif defined(__MKL)\n         CALL mkl_${nametype1}$imatcopy('C', 'T', rows, columns, ${one1[n]}$, extent, rows, columns)\n#else\n         ${type1}$, DIMENSION(rows*columns) :: extent_tr\n         INTEGER :: r, c\n         DO r = 1, columns\n            DO c = 1, rows\n               extent_tr(r + (c - 1)*columns) = extent(c + (r - 1)*rows)\n            END DO\n         END DO\n         DO r = 1, columns\n            DO c = 1, rows\n               extent(r + (c - 1)*columns) = extent_tr(r + (c - 1)*columns)\n            END DO\n         END DO\n#endif\n      END SUBROUTINE block_transpose_inplace_${nametype1}$\n\n      SUBROUTINE dbcsr_data_set_a${nametype1}$ (dst, lb, data_size, src, source_lb)\n     !! Copy data from a double real array to a data area\n     !! There are no checks done for correctness!\n\n         TYPE(dbcsr_data_obj), INTENT(INOUT)      :: dst\n        !! destination data area\n         INTEGER, INTENT(IN)                      :: lb, data_size\n        !! lower bound for destination (and source if not given explicitly)\n        !! number of elements to copy\n         ${type1}$, DIMENSION(:), INTENT(IN), CONTIGUOUS :: src\n        !! source data array\n         INTEGER, INTENT(IN), OPTIONAL            :: source_lb\n        !! lower bound of source\n         INTEGER                                  :: lb_s, ub, ub_s\n\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: cont_data\n\n!    ---------------------------------------------------------------------------\n         IF (debug_mod) THEN\n            IF (.NOT. ASSOCIATED(dst%d)) &\n               DBCSR_ABORT(\"Target data area must be setup.\")\n            IF (SIZE(src) .LT. data_size) &\n               DBCSR_ABORT(\"Not enough source data.\")\n            IF (dst%d%data_type .NE. ${dkind1}$) &\n               DBCSR_ABORT(\"Data type mismatch.\")\n         END IF\n         ub = lb + data_size - 1\n         IF (PRESENT(source_lb)) THEN\n            lb_s = source_lb\n            ub_s = source_lb + data_size - 1\n         ELSE\n            lb_s = lb\n            ub_s = ub\n         END IF\n         cont_data => dst%d%${base1}$_${prec1}$ (lb:ub)\n         CALL memory_copy(cont_data, src(lb_s:ub_s), data_size)\n      END SUBROUTINE dbcsr_data_set_a${nametype1}$\n\n      PURE SUBROUTINE block_add_${nametype1}$ (block_a, block_b, len)\n         INTEGER, INTENT(IN) :: len\n         ${type1}$, DIMENSION(len), INTENT(INOUT) :: block_a\n         ${type1}$, DIMENSION(len), INTENT(IN)    :: block_b\n         block_a(1:len) = block_a(1:len) + block_b(1:len)\n      END SUBROUTINE block_add_${nametype1}$\n   #:endfor\n\nEND MODULE dbcsr_block_operations\n"
  },
  {
    "path": "src/block/dbcsr_index_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_index_operations\n   !! Operations on the DBCSR index\n\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_size\n   USE dbcsr_config, ONLY: default_resize_factor\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_local_cols, &\n                                 dbcsr_distribution_local_rows, &\n                                 dbcsr_distribution_ncols, &\n                                 dbcsr_distribution_nlocal_cols, &\n                                 dbcsr_distribution_nlocal_rows, &\n                                 dbcsr_distribution_nrows, &\n                                 dbcsr_distribution_thread_dist\n   USE dbcsr_dist_operations, ONLY: get_stored_canonical\n   USE dbcsr_kinds, ONLY: int_4, &\n                          int_8\n   USE dbcsr_methods, ONLY: dbcsr_distribution, &\n                            dbcsr_get_index_memory_type\n   USE dbcsr_ptr_util, ONLY: ensure_array_size, &\n                             memory_allocate, &\n                             memory_deallocate\n   USE dbcsr_toollib, ONLY: joaat_hash, &\n                            sort, &\n                            swap\n   USE dbcsr_types, ONLY: &\n      dbcsr_distribution_obj, dbcsr_meta_size, dbcsr_num_slots, dbcsr_slot_blk_p, &\n      dbcsr_slot_col_i, dbcsr_slot_coo_l, dbcsr_slot_home_prow, dbcsr_slot_home_vprow, &\n      dbcsr_slot_nblkcols_local, dbcsr_slot_nblkcols_total, dbcsr_slot_nblkrows_local, &\n      dbcsr_slot_nblkrows_total, dbcsr_slot_nblks, dbcsr_slot_nfullcols_local, dbcsr_slot_nze, &\n      dbcsr_slot_row_p, dbcsr_slot_size, dbcsr_slot_thr_c, dbcsr_type\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_index_operations'\n\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n\n   ! Index transformations\n   PUBLIC :: dbcsr_make_index_canonical, &\n             transpose_index_local\n   PUBLIC :: dbcsr_make_index_local_row, dbcsr_has_local_row_index\n   PUBLIC :: dbcsr_make_index_list\n   ! Dense/Sparse\n   PUBLIC :: make_dense_index, make_undense_index\n   ! Working with DBCSR and linear indices\n   PUBLIC :: dbcsr_make_dbcsr_index, dbcsr_sort_indices, &\n             merge_index_arrays, &\n             dbcsr_expand_row_index, &\n             dbcsr_count_row_index, dbcsr_build_row_index, &\n             dbcsr_index_prune_deleted, &\n             dbcsr_index_compact\n   PUBLIC :: dbcsr_index_checksum\n   ! Index array manipulation\n   PUBLIC :: dbcsr_addto_index_array, dbcsr_clearfrom_index_array, &\n             dbcsr_repoint_index, dbcsr_make_index_exist\n\n   INTERFACE dbcsr_count_row_index\n      MODULE PROCEDURE dbcsr_count_row_index_copy, &\n         dbcsr_count_row_index_inplace\n   END INTERFACE\n\n   INTERFACE dbcsr_build_row_index\n      MODULE PROCEDURE dbcsr_build_row_index_copy, &\n         dbcsr_build_row_index_inplace\n   END INTERFACE\n\nCONTAINS\n\n   SUBROUTINE make_index_canonical(new_row_p, new_col_i, new_blk_p, &\n                                   old_row_p, old_col_i, old_blk_p, matrix)\n      !! Makes a canonical index given the index arrays\n      !!\n      !! Description of canonical ordering\n      !! A non-(anti)symmetric matrix is left as is. Otherwise, the row and column\n      !! are stored in the position prescribed by the distribution.\n      !! @note\n      !! This routine uses hard-coded logic as to what constitutes a\n      !! canonical ordering\n      !! @endnote\n\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: new_row_p, new_col_i, new_blk_p\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: old_row_p, old_col_i, old_blk_p\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'make_index_canonical'\n\n      INTEGER                                            :: blk, col, nblks, row, stored_col, &\n                                                            stored_row\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: row_i\n      LOGICAL                                            :: tr\n\n!   ---------------------------------------------------------------------------\n\n      nblks = SIZE(old_blk_p)\n      ALLOCATE (row_i(nblks))\n      IF (debug_mod) THEN\n         WRITE (*, *) \"old row_p\", old_row_p\n         WRITE (*, *) \"old col_i\", old_col_i\n         WRITE (*, *) \"old blk_p\", old_blk_p\n      END IF\n      DO row = 1, SIZE(old_row_p) - 1\n         DO blk = old_row_p(row) + 1, old_row_p(row + 1)\n            col = old_col_i(blk)\n            stored_row = row\n            stored_col = col\n            tr = .FALSE.\n            CALL get_stored_canonical(matrix, stored_row, stored_col, tr)\n            IF (debug_mod) &\n               WRITE (*, '(A,2(1X,I5),A,2(1X,I5),\";\",I7,1X,L1)') &\n               routineN//\" X->\", row, col, \"->\", &\n               stored_row, stored_col, blk, tr\n            row_i(blk) = stored_row\n            new_col_i(blk) = stored_col\n            IF (.NOT. tr) THEN\n               new_blk_p(blk) = old_blk_p(blk)\n            ELSE\n               new_blk_p(blk) = -old_blk_p(blk)\n            END IF\n         END DO\n      END DO\n      CALL dbcsr_sort_indices(nblks, row_i, new_col_i, blk_p=new_blk_p)\n      ! Re-create the index\n      CALL dbcsr_make_dbcsr_index(new_row_p, row_i, SIZE(new_row_p) - 1, nblks)\n      IF (debug_mod) THEN\n         WRITE (*, *) \"new row_p\", new_row_p\n         WRITE (*, *) \"new row_i\", row_i\n         WRITE (*, *) \"new col_i\", new_col_i\n         WRITE (*, *) \"new blk_p\", new_blk_p\n      END IF\n   END SUBROUTINE make_index_canonical\n\n   SUBROUTINE make_index_triangular(new_row_p, new_col_i, new_blk_p, &\n                                    old_row_p, old_col_i, old_blk_p, matrix)\n      !! Makes a CP2K triangular index given the index arrays\n      !!\n      !! Description of canonical ordering\n      !! A non-(anti)symmetric matrix is left as is. Otherwise, the row and column\n      !! are stored in the position prescribed by the distribution.\n      !! @note\n      !! This routine uses hard-coded logic as to what constitutes a\n      !! canonical ordering\n      !! @endnote\n\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: new_row_p, new_col_i, new_blk_p\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: old_row_p, old_col_i, old_blk_p\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'make_index_triangular'\n\n      INTEGER                                            :: blk, col, nblks, row, stored_col, &\n                                                            stored_row\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: row_i\n      LOGICAL                                            :: tr\n\n!   ---------------------------------------------------------------------------\n\n      nblks = SIZE(old_blk_p)\n      ALLOCATE (row_i(nblks))\n      IF (debug_mod) THEN\n         WRITE (*, *) \"old row_p\", old_row_p\n         WRITE (*, *) \"old col_i\", old_col_i\n         WRITE (*, *) \"old blk_p\", old_blk_p\n      END IF\n      DO row = 1, SIZE(old_row_p) - 1\n         DO blk = old_row_p(row) + 1, old_row_p(row + 1)\n            col = old_col_i(blk)\n            stored_row = row\n            stored_col = col\n            tr = .FALSE.\n            CALL get_stored_canonical(matrix, stored_row, stored_col, tr)\n            IF (stored_row .GT. stored_col) THEN\n               CALL swap(stored_row, stored_col)\n               tr = .NOT. tr\n            END IF\n            IF (debug_mod) &\n               WRITE (*, '(A,2(1X,I5),A,2(1X,I5),\";\",I7,1X,L1)') &\n               routineN//\" X->\", row, col, \"->\", &\n               stored_row, stored_col, blk, tr\n            row_i(blk) = stored_row\n            new_col_i(blk) = stored_col\n            IF (.NOT. tr) THEN\n               new_blk_p(blk) = old_blk_p(blk)\n            ELSE\n               new_blk_p(blk) = -old_blk_p(blk)\n            END IF\n         END DO\n      END DO\n      CALL dbcsr_sort_indices(nblks, row_i, new_col_i, blk_p=new_blk_p)\n      ! Re-create the index\n      CALL dbcsr_make_dbcsr_index(new_row_p, row_i, SIZE(new_row_p) - 1, nblks)\n      IF (debug_mod) THEN\n         WRITE (*, *) \"new row_p\", new_row_p\n         WRITE (*, *) \"new row_i\", row_i\n         WRITE (*, *) \"new col_i\", new_col_i\n         WRITE (*, *) \"new blk_p\", new_blk_p\n      END IF\n   END SUBROUTINE make_index_triangular\n\n   SUBROUTINE dbcsr_make_dbcsr_index(row_p, row_i, nrows, nblks)\n      !! Collapses a row_p index\n      INTEGER, INTENT(in)                                :: nrows, nblks\n      INTEGER, DIMENSION(1:nrows + 1), INTENT(out)       :: row_p\n      INTEGER, DIMENSION(1:nblks), INTENT(in)            :: row_i\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_dbcsr_index'\n\n      INTEGER                                            :: blk, error_handle, row\n\n      CALL timeset(routineN, error_handle)\n\n      row_p(1) = 0\n      row_p(nrows + 1) = nblks\n      row = 1\n      blk = 1\n      DO WHILE (row .LE. nrows)\n         IF (blk .LE. nblks) THEN\n            DO WHILE (row_i(blk) .EQ. row)\n               blk = blk + 1\n               IF (blk .GT. nblks) THEN\n                  row_p(row + 1) = nblks - 1\n                  EXIT\n               END IF\n            END DO\n         END IF\n         row_p(row + 1) = blk - 1\n         row = row + 1\n      END DO\n\n      CALL timestop(error_handle)\n\n   END SUBROUTINE dbcsr_make_dbcsr_index\n\n   PURE SUBROUTINE dbcsr_expand_row_index(row_p, row_i, nrows, nblks)\n      !! Expands a row_p index\n      INTEGER, INTENT(IN)                                   :: nrows, nblks\n      INTEGER, DIMENSION(1:nrows + 1), INTENT(IN)           :: row_p\n      INTEGER, DIMENSION(1:nblks), INTENT(OUT)              :: row_i\n\n      INTEGER                                               :: row\n\n      DO row = 1, nrows\n         row_i(row_p(row) + 1:row_p(row + 1)) = row\n      END DO\n   END SUBROUTINE dbcsr_expand_row_index\n\n   PURE SUBROUTINE dbcsr_expand_row_index_2d(row_p, row_i, nrows, dst_i)\n      !! Expands a row_p index\n      INTEGER, INTENT(IN)                                   :: nrows, dst_i\n      INTEGER, DIMENSION(1:nrows + 1), INTENT(IN)           :: row_p\n      INTEGER, DIMENSION(:, :), INTENT(OUT)                 :: row_i\n\n      INTEGER                                               :: row\n\n      DO row = 1, nrows\n         row_i(dst_i, row_p(row) + 1:row_p(row + 1)) = row\n      END DO\n   END SUBROUTINE dbcsr_expand_row_index_2d\n\n   PURE SUBROUTINE dbcsr_count_row_index_inplace(rows, nrows)\n      !! Counts columns-per-row count from row index array, in-place.\n\n      INTEGER, INTENT(IN)                                :: nrows\n         !! number of rows\n      INTEGER, DIMENSION(1:nrows + 1), INTENT(INOUT)     :: rows\n         !! the row_p index (input); the count of the number of columns per row (output)\n\n      INTEGER                                            :: row\n\n      DO row = 1, nrows\n         rows(row) = rows(row + 1) - rows(row)\n      END DO\n      rows(nrows + 1) = 0\n   END SUBROUTINE dbcsr_count_row_index_inplace\n\n   PURE SUBROUTINE dbcsr_count_row_index_copy(rows, counts, nrows)\n      !! Counts columns-per-row count from row index array.\n\n      INTEGER, INTENT(IN)                                :: nrows\n         !! number of rows\n      INTEGER, DIMENSION(1:nrows), INTENT(OUT)           :: counts\n         !! the count of the number of columns per row\n      INTEGER, DIMENSION(1:nrows + 1), INTENT(IN)        :: rows\n         !! the row_p index (input)\n\n      INTEGER                                            :: row\n\n      DO row = 1, nrows\n         counts(row) = rows(row + 1) - rows(row)\n      END DO\n   END SUBROUTINE dbcsr_count_row_index_copy\n\n   PURE SUBROUTINE dbcsr_build_row_index_inplace(rows, nrows)\n      !! Builds row index array from a columns-per-row count, in-place.\n\n      INTEGER, INTENT(IN)                                :: nrows\n         !! number of rows\n      INTEGER, DIMENSION(1:nrows + 1), INTENT(INOUT)     :: rows\n         !! count of the number of columns per row (input); the row_p index (output)\n\n      INTEGER                                            :: o, old_count, row\n\n      old_count = rows(1)\n      rows(1) = 0\n      IF (nrows .GE. 1) THEN\n         DO row = 2, nrows + 1\n            o = rows(row)\n            rows(row) = rows(row - 1) + old_count\n            old_count = o\n         END DO\n      END IF\n   END SUBROUTINE dbcsr_build_row_index_inplace\n\n   PURE SUBROUTINE dbcsr_build_row_index_copy(counts, rows, nrows)\n      !! Builds row index array from a columns-per-row count.\n\n      INTEGER, INTENT(IN)                                :: nrows\n         !! number of rows\n      INTEGER, DIMENSION(1:nrows + 1), INTENT(OUT)       :: rows\n         !! count of the number of columns per row (input); the row_p index (output)\n      INTEGER, DIMENSION(1:nrows), INTENT(IN)            :: counts\n         !! count of the number of columns per row\n\n!WTF?!rows(1) = 0\n!WTF?!IF (nrows .GE. 1) THEN\n!WTF?!   DO row = 2, nrows+1\n!WTF?!      rows(row) = rows(row-1) + counts(rows-1)\n!WTF?!   ENDDO\n!WTF?!ENDIF\n\n      rows(1:nrows) = counts(1:nrows)\n      CALL dbcsr_build_row_index_inplace(rows, nrows)\n   END SUBROUTINE dbcsr_build_row_index_copy\n\n   SUBROUTINE dbcsr_addto_index_array(matrix, slot, DATA, reservation, extra)\n      !! Adds data to the index. Increases the index size when necessary.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! bcsr matrix\n      INTEGER, INTENT(IN)                                :: slot\n         !! which index array to add (e.g., dbcsr_slot_row_blk_sizes)\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: DATA\n         !! array holding the index data to add to the index array\n      INTEGER, INTENT(IN), OPTIONAL                      :: reservation, extra\n         !! only reserve space for subsequent array\n         !! reserve extra space for later additions\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_addto_index_array', &\n                                     routineP = moduleN//':'//routineN\n\n      INTEGER                                            :: deplus, space, ub, ub_new\n\n!   ---------------------------------------------------------------------------\n\n      IF (debug_mod) THEN\n         IF (.NOT. ASSOCIATED(matrix%index)) &\n            DBCSR_ABORT(\"Index must be preallocated.\")\n         IF (UBOUND(matrix%index, 1) < dbcsr_num_slots) &\n            DBCSR_ABORT(\"Actual index size less than declared size\")\n         IF (.NOT. PRESENT(DATA) .AND. .NOT. PRESENT(reservation)) &\n            DBCSR_ABORT('Either an array or its size must be specified.')\n         WRITE (*, *) routineP//' index', matrix%index(:dbcsr_num_slots)\n      END IF\n      IF (PRESENT(reservation)) THEN\n         space = reservation\n      ELSE\n         space = SIZE(DATA)\n      END IF\n      IF (PRESENT(extra)) THEN\n         deplus = extra\n      ELSE\n         deplus = 0\n      END IF\n      ub = UBOUND(matrix%index, 1)\n      ! The data area was not defined or the new area is greater than the old:\n      IF (matrix%index(slot) .EQ. 0 .OR. &\n          space .GT. matrix%index(slot + 1) - matrix%index(slot) + 1) THEN\n         IF (debug_mod) WRITE (*, *) routineP//' Slot', slot, 'not filled, adding at', &\n            matrix%index(dbcsr_slot_size) + 1, 'sized', space\n         matrix%index(slot) = matrix%index(dbcsr_slot_size) + 1\n         matrix%index(slot + 1) = matrix%index(slot) + space - 1\n         matrix%index(dbcsr_slot_size) = matrix%index(slot + 1)\n      END IF\n      ! Shorten an index entry.\n      IF (space .LT. matrix%index(slot + 1) - matrix%index(slot) + 1) THEN\n         IF (debug_mod) WRITE (*, *) routineP//' Shortening index'\n         matrix%index(slot + 1) = matrix%index(slot) + space - 1\n         CALL dbcsr_repoint_index(matrix, slot)\n      END IF\n      ub_new = matrix%index(slot + 1) + deplus\n      IF (debug_mod) WRITE (*, *) routineP//' need', space, 'at', matrix%index(slot), &\n         'to', matrix%index(slot + 1), '(', ub_new, ')', 'have', ub\n      IF (ub_new .GT. ub) THEN\n         IF (debug_mod) WRITE (*, *) routineP//' Reallocating index to ubound', ub_new\n         !CALL reallocate(matrix%index, 1, ub_new)\n         CALL ensure_array_size(matrix%index, lb=1, ub=ub_new, &\n                                factor=default_resize_factor, &\n                                nocopy=.FALSE., &\n                                memory_type=matrix%index_memory_type)\n         CALL dbcsr_repoint_index(matrix)\n      END IF\n      IF (debug_mod) WRITE (*, *) routineP//' Adding slot', slot, 'at', &\n         matrix%index(slot), 'sized', space\n      CALL dbcsr_repoint_index(matrix, slot)\n      IF (PRESENT(DATA)) &\n         matrix%index(matrix%index(slot):matrix%index(slot + 1)) = DATA(:)\n   END SUBROUTINE dbcsr_addto_index_array\n\n   SUBROUTINE dbcsr_clearfrom_index_array(matrix, slot)\n      !! Removes data from the index.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! bcsr matrix\n      INTEGER, INTENT(IN)                                :: slot\n         !! which index array to remove (e.g., dbcsr_slot_row_blk_sizes)\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_clearfrom_index_array', &\n                                     routineP = moduleN//':'//routineN\n\n      INTEGER                                            :: space\n      INTEGER, DIMENSION(5)                              :: max_extents\n\n!   ---------------------------------------------------------------------------\n\n      IF (.NOT. ASSOCIATED(matrix%index)) &\n         DBCSR_ABORT(\"Index must be preallocated.\")\n      IF (UBOUND(matrix%index, 1) < dbcsr_num_slots) &\n         DBCSR_ABORT(\"Actual index size less than declared size\")\n      IF (debug_mod) WRITE (*, *) routineP//' index', &\n         matrix%index(:dbcsr_num_slots)\n      ! Clear index entry pointer\n      matrix%index(slot) = 1\n      matrix%index(slot + 1) = 0\n      CALL dbcsr_repoint_index(matrix, slot)\n      ! Update the declared index size\n      max_extents = (/ &\n                    matrix%index(dbcsr_slot_row_p + 1), &\n                    matrix%index(dbcsr_slot_col_i + 1), &\n                    matrix%index(dbcsr_slot_blk_p + 1), &\n                    matrix%index(dbcsr_slot_thr_c + 1), &\n                    matrix%index(dbcsr_slot_coo_l + 1)/)\n      space = MAX(MAXVAL(max_extents), dbcsr_num_slots)\n      matrix%index(dbcsr_slot_size) = space\n   END SUBROUTINE dbcsr_clearfrom_index_array\n\n   SUBROUTINE dbcsr_repoint_index(m, slot)\n      !! Updates the index pointers of a bcsr matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: m\n         !! matrix for which index pointers are updated\n      INTEGER, INTENT(IN), OPTIONAL                      :: slot\n         !! only repoint this index\n\n      INTEGER                                            :: s\n      LOGICAL                                            :: all\n\n!   ---------------------------------------------------------------------------\n\n      IF (m%nblks .NE. m%index(dbcsr_slot_nblks)) THEN\n         m%nblks = m%index(dbcsr_slot_nblks)\n         m%nze = m%index(dbcsr_slot_nze)\n      END IF\n      all = .TRUE.\n      IF (PRESENT(slot)) THEN\n         all = .FALSE.\n         s = slot\n      ELSE\n         s = 0\n      END IF\n\n      IF (m%index(dbcsr_slot_row_p) .GT. 0 .AND. all .OR. &\n          s .EQ. dbcsr_slot_row_p) THEN\n         IF (m%index(dbcsr_slot_row_p) .GT. 0) THEN\n            m%row_p => m%index(m%index(dbcsr_slot_row_p): &\n                               m%index(dbcsr_slot_row_p + 1))\n         ELSE\n            NULLIFY (m%row_p)\n         END IF\n      END IF\n      IF (m%index(dbcsr_slot_col_i) .GT. 0 .AND. all .OR. &\n          s .EQ. dbcsr_slot_col_i) THEN\n         IF (m%index(dbcsr_slot_col_i) .GT. 0) THEN\n            m%col_i => m%index(m%index(dbcsr_slot_col_i): &\n                               m%index(dbcsr_slot_col_i + 1))\n         ELSE\n            NULLIFY (m%col_i)\n         END IF\n      END IF\n      IF (m%index(dbcsr_slot_blk_p) .GT. 0 .AND. all .OR. &\n          s .EQ. dbcsr_slot_blk_p) THEN\n         IF (m%index(dbcsr_slot_blk_p) .GT. 0) THEN\n            m%blk_p => m%index(m%index(dbcsr_slot_blk_p): &\n                               m%index(dbcsr_slot_blk_p + 1))\n         ELSE\n            NULLIFY (m%blk_p)\n         END IF\n      END IF\n      IF (m%index(dbcsr_slot_thr_c) .GT. 0 .AND. all .OR. &\n          s .EQ. dbcsr_slot_thr_c) THEN\n         IF (m%index(dbcsr_slot_thr_c) .GT. 0) THEN\n            m%thr_c => m%index(m%index(dbcsr_slot_thr_c): &\n                               m%index(dbcsr_slot_thr_c + 1))\n         ELSE\n            NULLIFY (m%thr_c)\n         END IF\n      END IF\n      IF (m%index(dbcsr_slot_coo_l) .GT. 0 .AND. all .OR. &\n          s .EQ. dbcsr_slot_coo_l) THEN\n         IF (m%index(dbcsr_slot_coo_l) .GT. 0) THEN\n            m%coo_l => m%index(m%index(dbcsr_slot_coo_l): &\n                               m%index(dbcsr_slot_coo_l + 1))\n         ELSE\n            NULLIFY (m%coo_l)\n         END IF\n      END IF\n      IF (all) THEN\n         m%index(dbcsr_slot_nblks) = m%nblks\n         m%index(dbcsr_slot_nze) = m%nze\n      END IF\n   END SUBROUTINE dbcsr_repoint_index\n\n   SUBROUTINE dbcsr_make_index_exist(m)\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: m\n         !! Create index for this matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_index_exist'\n\n      INTEGER                                            :: error_handle\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      IF (.NOT. ASSOCIATED(m%index)) &\n         DBCSR_ABORT(\"Index array does not yet exist.\")\n      IF (.NOT. ASSOCIATED(m%row_p)) THEN\n         CALL dbcsr_addto_index_array(m, dbcsr_slot_row_p, &\n                                      reservation=m%nblkrows_total + 1)\n         m%row_p(:) = 0\n      END IF\n      IF (.NOT. ASSOCIATED(m%col_i)) THEN\n         CALL dbcsr_addto_index_array(m, dbcsr_slot_col_i, &\n                                      reservation=0)\n      END IF\n      IF (.NOT. ASSOCIATED(m%blk_p)) THEN\n         CALL dbcsr_addto_index_array(m, dbcsr_slot_blk_p, &\n                                      reservation=0)\n      END IF\n      CALL dbcsr_repoint_index(m)\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_make_index_exist\n\n   SUBROUTINE dbcsr_sort_indices(n, row_i, col_i, blk_p, blk_d)\n      !! Sorts the rows & columns of a work matrix\n      !!\n      !! Description\n      !! Sorts the row and column indices so that the rows monotonically\n      !! increase and the columns monotonically increase within each row.\n      !! Passing the blk_p array rearranges the block pointers accordingly.\n      !! This must be done if they are pointing to valid data, otherwise\n      !! they become invalid.\n\n      INTEGER, INTENT(IN)                                :: n\n         !! number of blocks (elements) to sort\n      INTEGER, DIMENSION(1:), INTENT(INOUT)              :: row_i, col_i\n         !! row indices\n         !! column indices\n      INTEGER, DIMENSION(1:), INTENT(INOUT), OPTIONAL    :: blk_p, blk_d\n         !! block pointers\n         !! data storage\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_sort_indices', &\n                                     routineP = moduleN//':'//routineN\n      INTEGER(KIND=int_8), PARAMETER                     :: lmask8 = 4294967295_int_8\n\n      INTEGER                                            :: error_handle, i\n      INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:)     :: sort_keys\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: buf, buf_d\n\n!   ---------------------------------------------------------------------------\n\n      IF (n .LE. 0) RETURN\n      IF (SIZE(row_i) .EQ. 0) RETURN\n\n      CALL timeset(routineN, error_handle)\n\n      IF (SIZE(row_i) < n) DBCSR_ABORT('row_i too small')\n      IF (SIZE(col_i) < n) DBCSR_ABORT('col_i too small')\n      IF (PRESENT(blk_p)) THEN\n         IF (SIZE(blk_p) < n) DBCSR_ABORT('blk_p too small')\n         ALLOCATE (buf(n))\n         buf(1:n) = blk_p(1:n)\n      END IF\n      IF (PRESENT(blk_d)) THEN\n         ALLOCATE (buf_d(n))\n         buf_d(1:n) = blk_d(1:n)\n      END IF\n      ! Create an ordering for both rows and columns. If the blk_p must\n      ! be rearranged, then the col_i array will be used as a\n      ! permutation vector.\n      ALLOCATE (sort_keys(n))\n      sort_keys(:) = IOR(ISHFT(INT(row_i(1:n), int_8), 32), INT(col_i(1:n), int_8))\n      IF (PRESENT(blk_p)) col_i(1:n) = (/(i, i=1, n)/)\n      ! Now do a nice quicksort.\n      CALL sort(sort_keys, n, col_i)\n      ! Since blk_d is usually not present we can have two loops that\n      ! are essentially the same.\n      IF (PRESENT(blk_p)) THEN\n         DO i = 1, n\n            blk_p(i) = buf(col_i(i))\n         END DO\n         DEALLOCATE (buf)\n      END IF\n      IF (PRESENT(blk_d)) THEN\n         DO i = 1, n\n            blk_d(i) = buf_d(col_i(i))\n         END DO\n         DEALLOCATE (buf_d)\n      END IF\n      DO i = 1, n\n         col_i(i) = INT(IAND(sort_keys(i), lmask8), int_4)\n         row_i(i) = INT(ISHFT(sort_keys(i), -32), int_4)\n      END DO\n      DEALLOCATE (sort_keys)\n      IF (debug_mod .AND. PRESENT(blk_p)) &\n         WRITE (*, *) routineP//' sort, blk_p =', blk_p\n      CALL timestop(error_handle)\n\n   END SUBROUTINE dbcsr_sort_indices\n\n   SUBROUTINE dbcsr_index_prune_deleted(matrix)\n      !! Removes the deleted blocks from the index.\n      !!\n      !! Description\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! Prune the index of this matrix.\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_index_prune_deleted'\n\n      INTEGER                                            :: error_handle, nblks_max, new_blk, nrows, &\n                                                            old_blk, row\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: new_blk_p, new_col_i, new_row_count\n      INTEGER, DIMENSION(:), POINTER                     :: old_blk_p, old_col_i, old_row_p\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      !\n      old_row_p => matrix%row_p\n      old_col_i => matrix%col_i\n      old_blk_p => matrix%blk_p\n      !\n      nrows = matrix%nblkrows_total\n      nblks_max = old_row_p(nrows + 1)\n      ALLOCATE (new_row_count(nrows))\n      ALLOCATE (new_col_i(nblks_max))\n      ALLOCATE (new_blk_p(nblks_max))\n      !\n      ! Build up the new index from all non-deleted blocks in the\n      ! existing index.\n      new_blk = 0\n      DO row = 1, nrows\n         new_row_count(row) = 0\n         DO old_blk = old_row_p(row) + 1, old_row_p(row + 1)\n            IF (old_blk_p(old_blk) .GT. 0) THEN\n               new_blk = new_blk + 1\n               new_row_count(row) = new_row_count(row) + 1\n               new_col_i(new_blk) = old_col_i(old_blk)\n               new_blk_p(new_blk) = old_blk_p(old_blk)\n            END IF\n         END DO\n      END DO\n      !\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p)\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, &\n                                   reservation=nrows + 1, extra=2*new_blk)\n      old_row_p => matrix%row_p\n      CALL dbcsr_build_row_index(counts=new_row_count, rows=old_row_p, &\n                                 nrows=nrows)\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, DATA=new_col_i(1:new_blk))\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, DATA=new_blk_p(1:new_blk))\n      matrix%nblks = new_blk\n      matrix%index(dbcsr_slot_nblks) = new_blk\n      !\n      DEALLOCATE (new_col_i, new_blk_p, new_row_count)\n      !\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_index_prune_deleted\n\n   SUBROUTINE transpose_index_local(new_col_p, new_row_i, old_row_p, &\n                                    old_col_i, new_blk_p, old_blk_p)\n      !! Re-indexes row_p and blk_i according to columns.\n      !!\n      !! The re-indexing is equivalent to a local-only transpose.\n\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: new_col_p, new_row_i\n         !! new column pointer\n         !! new row index\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: old_row_p, old_col_i\n         !! old row pointer\n         !! old column index\n      INTEGER, DIMENSION(:), INTENT(OUT), OPTIONAL       :: new_blk_p\n         !! new block pointer\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: old_blk_p\n         !! old block pointer\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'transpose_index_local'\n\n      INTEGER                                            :: error_handle, nblks, ncols_new, nrows_old\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: new_col_i\n      LOGICAL                                            :: blks\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      blks = PRESENT(new_blk_p) .AND. PRESENT(old_blk_p)\n      nblks = SIZE(old_col_i)\n      nrows_old = SIZE(old_row_p) - 1\n      ncols_new = SIZE(new_col_p) - 1\n      IF (blks) new_blk_p(:) = old_blk_p(:)\n      ALLOCATE (new_col_i(nblks))\n      CALL dbcsr_expand_row_index(old_row_p, new_row_i, nrows_old, nblks)\n      new_col_i(:) = old_col_i(:)\n      CALL dbcsr_sort_indices(nblks, new_col_i, new_row_i, new_blk_p)\n      CALL dbcsr_make_dbcsr_index(new_col_p, new_col_i, ncols_new, nblks)\n      DEALLOCATE (new_col_i)\n      CALL timestop(error_handle)\n   END SUBROUTINE transpose_index_local\n\n   SUBROUTINE dbcsr_make_index_canonical(matrix, cp2k)\n      !! Makes a canonical index to the distribution.\n      !!\n      !! Canonical means that it respects the distribution.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix for which to make canonical index\n      LOGICAL, INTENT(IN), OPTIONAL                      :: cp2k\n         !! make CP2K triangular index from canonical; default is false\n\n      INTEGER                                            :: nb, nc, nr\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: new_blk_p, new_col_i, new_row_p\n      LOGICAL                                            :: rev\n\n!   ---------------------------------------------------------------------------\n\n      rev = .FALSE.\n      IF (PRESENT(cp2k)) rev = cp2k\n      nr = SIZE(matrix%row_p)\n      ALLOCATE (new_row_p(nr))\n      nc = SIZE(matrix%col_i)\n      ALLOCATE (new_col_i(nc))\n      nb = SIZE(matrix%blk_p)\n      ALLOCATE (new_blk_p(nb))\n      IF (rev) THEN\n         CALL make_index_triangular(new_row_p, new_col_i, new_blk_p, &\n                                    matrix%row_p, matrix%col_i, matrix%blk_p, matrix)\n      ELSE\n         CALL make_index_canonical(new_row_p, new_col_i, new_blk_p, &\n                                   matrix%row_p, matrix%col_i, matrix%blk_p, matrix)\n      END IF\n      matrix%row_p(:) = new_row_p\n      matrix%col_i(:) = new_col_i\n      matrix%blk_p(:) = new_blk_p\n   END SUBROUTINE dbcsr_make_index_canonical\n\n   SUBROUTINE make_dense_index(row_p, col_i, blk_p, &\n                               nblkrows_total, nblkcols_total, myblkrows, myblkcols, &\n                               row_blk_offsets, col_blk_offsets, meta, make_tr)\n      !! Makes the index for a dense matrix\n      !! @note\n      !! Used for making matrices dense/undense\n      !! @endnote\n\n      !INTEGER, DIMENSION(:), INTENT(OUT)       :: row_p, col_i, blk_p\n      INTEGER, INTENT(IN)                                :: nblkrows_total\n         !! Total blocked rows\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: blk_p, col_i\n         !! Storage for new index\n         !! Storage for new index\n      INTEGER, DIMENSION(1:nblkrows_total + 1), &\n         INTENT(OUT)                                     :: row_p\n         !! Storage for new index\n      INTEGER, INTENT(IN)                                :: nblkcols_total\n         !! Total blocked columns\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: myblkrows, myblkcols, row_blk_offsets, &\n                                                            col_blk_offsets\n         !! List of blocked rows in my process row\n         !! List of blocked columns in my process column\n      INTEGER, DIMENSION(dbcsr_meta_size), INTENT(INOUT) :: meta\n         !! Metadata updates for new index\n      LOGICAL, INTENT(IN), OPTIONAL                      :: make_tr\n         !! Dense blocks are transposed\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'make_dense_index'\n\n      INTEGER                                            :: blk, c, col_l, mynblkcols, mynblkrows, &\n                                                            nblks, nze, prev_row, row, row_l, &\n                                                            sign_carrier, sz\n\n!   ---------------------------------------------------------------------------\n\n      sign_carrier = 1\n      IF (PRESENT(make_tr)) THEN\n         IF (make_tr) sign_carrier = -1\n      END IF\n      mynblkrows = SIZE(myblkrows)\n      mynblkcols = SIZE(myblkcols)\n      meta(dbcsr_slot_nblkrows_local) = mynblkrows\n      meta(dbcsr_slot_nblkcols_local) = mynblkcols\n      nblks = mynblkrows*mynblkcols\n      nze = 1\n      IF (nblks .EQ. 0) THEN\n         row_p(1:) = 0\n      ELSE\n         row_p(1) = 0\n         !row_p(nrows+1) = nblks\n         prev_row = 1\n         blk = 0\n         DO row_l = 1, mynblkrows\n            row = myblkrows(row_l)\n            row_p(prev_row + 1:row) = blk\n            DO col_l = 1, mynblkcols\n               c = myblkcols(col_l)\n               col_i(blk + col_l) = c\n               sz = (row_blk_offsets(row + 1) - row_blk_offsets(row))* &\n                    (col_blk_offsets(c + 1) - col_blk_offsets(c))\n               IF (sz .GT. 0) THEN\n                  blk_p(blk + col_l) = SIGN(nze, sign_carrier)\n                  nze = nze + sz\n               ELSE\n                  blk_p(blk + col_l) = 0\n               END IF\n            END DO\n            prev_row = row\n            blk = blk + mynblkcols\n         END DO\n         IF (blk /= nblks) DBCSR_ABORT(\"Block mismatch\")\n         row_p(prev_row + 1:nblkrows_total + 1) = nblks\n      END IF\n      IF (debug_mod) THEN\n         WRITE (*, *) routineN//\" new index\"\n         WRITE (*, *) \"row_p=\", row_p\n         WRITE (*, *) \"col_i=\", col_i\n         WRITE (*, *) \"blk_p=\", blk_p\n      END IF\n      meta(dbcsr_slot_nblkrows_total) = nblkrows_total\n      meta(dbcsr_slot_nblkcols_total) = nblkcols_total\n   END SUBROUTINE make_dense_index\n\n   SUBROUTINE make_undense_index( &\n      row_p, col_i, blk_p, &\n      distribution, local_row_offsets, local_col_offsets, &\n      meta)\n      !! Makes a blocked index from a dense matrix\n      !! @note\n      !! Used for making matrices dense/undense\n      !! @endnote\n\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: row_p, col_i, blk_p\n         !! Storage for new index\n         !! Storage for new index\n         !! Storage for new index\n      TYPE(dbcsr_distribution_obj)                       :: distribution\n         !! Blocked distribution\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: local_row_offsets, local_col_offsets\n      INTEGER, DIMENSION(dbcsr_meta_size), INTENT(INOUT) :: meta\n         !! Metadata updates for new index\n\n      INTEGER                                            :: col, lr, lrow, nblkcols_local, &\n                                                            nblkrows_local, nblkrows_total, &\n                                                            nfullcols_local, prev_row, row\n      INTEGER, DIMENSION(:), POINTER                     :: local_cols, local_rows\n\n!   ---------------------------------------------------------------------------\n\n      local_cols => dbcsr_distribution_local_cols(distribution)\n      local_rows => dbcsr_distribution_local_rows(distribution)\n      meta(dbcsr_slot_nblkrows_total) = dbcsr_distribution_nrows(distribution)\n      meta(dbcsr_slot_nblkcols_total) = dbcsr_distribution_ncols(distribution)\n      meta(dbcsr_slot_nblkrows_local) = dbcsr_distribution_nlocal_rows(distribution)\n      meta(dbcsr_slot_nblkcols_local) = dbcsr_distribution_nlocal_cols(distribution)\n      nblkrows_total = meta(dbcsr_slot_nblkrows_total)\n      nblkcols_local = meta(dbcsr_slot_nblkcols_local)\n      nblkrows_local = meta(dbcsr_slot_nblkrows_local)\n      nfullcols_local = meta(dbcsr_slot_nfullcols_local)\n      ! Fill the row_p array.\n      lr = 0\n      row_p(1) = 0\n      prev_row = 1\n      DO lrow = 1, nblkrows_local\n         row = local_rows(lrow)\n         row_p(prev_row + 1:row) = lr\n         lr = lr + nblkcols_local\n         row_p(row + 1) = lr\n         prev_row = row\n      END DO\n      row_p(prev_row + 1:nblkrows_total + 1) = lr\n      !\n      DO row = 1, nblkrows_local\n         DO col = 1, nblkcols_local\n            col_i(nblkcols_local*(row - 1) + col) = local_cols(col)\n            blk_p(nblkcols_local*(row - 1) + col) = 1 + &\n                                                    (local_row_offsets(row) - 1)*nfullcols_local &\n                                                    + (local_col_offsets(col) - 1)* &\n                                                    (local_row_offsets(row + 1) - local_row_offsets(row))\n         END DO\n      END DO\n   END SUBROUTINE make_undense_index\n\n   SUBROUTINE merge_index_arrays(new_row_i, new_col_i, new_blk_p, new_size, &\n                                 old_row_i, old_col_i, old_blk_p, old_size, &\n                                 add_ip, add_size, new_blk_d, old_blk_d, &\n                                 added_size_offset, added_sizes, added_size, added_nblks)\n      !! Merges two indices\n      !!\n      !! Added sizes\n      !! added_size_offset and added_sizes can be optionally\n      !! specified. This is meant for cases where the added blocks may\n      !! be duplicates of existing blocks. In this way it is possible\n      !! to recalculate new block pointers to avoid wasted space.\n      !! @note\n      !! Used in local multiply\n      !! Assumes they are both pre-sorted\n      !! @endnote\n\n      INTEGER, INTENT(IN)                                :: new_size\n         !! size of merged index\n      INTEGER, DIMENSION(new_size), INTENT(OUT)          :: new_blk_p, new_col_i, new_row_i\n         !! merged result\n         !! merged result\n         !! merged result\n      INTEGER, INTENT(IN)                                :: old_size\n         !! size of current index\n      INTEGER, DIMENSION(old_size), INTENT(IN)           :: old_blk_p, old_col_i, old_row_i\n         !! current index\n         !! current index\n         !! current index\n      INTEGER, INTENT(IN)                                :: add_size\n         !! size of index to add into the current index\n      INTEGER, DIMENSION(3, add_size), INTENT(IN)        :: add_ip\n         !! index to add into the current index\n      INTEGER, DIMENSION(new_size), INTENT(OUT), &\n         OPTIONAL                                        :: new_blk_d\n      INTEGER, DIMENSION(old_size), INTENT(IN), OPTIONAL :: old_blk_d\n      INTEGER, INTENT(IN), OPTIONAL                      :: added_size_offset\n         !! specify base of added sizes\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: added_sizes\n         !! specify sizes of added blocks\n      INTEGER, INTENT(OUT), OPTIONAL                     :: added_size, added_nblks\n         !! counts number of sizes of added blocks\n         !! actual number of new elements\n\n      INTEGER                                            :: add_blk, bp, i, merge_from_whom, &\n                                                            new_blk, old_blk\n      LOGICAL                                            :: multidata\n\n!   ---------------------------------------------------------------------------\n\n      bp = 0\n      multidata = PRESENT(old_blk_d) .AND. PRESENT(new_blk_d)\n      IF (old_size + add_size .NE. new_size) &\n         DBCSR_WARN(\"Mismatch of new and old size\")\n      IF (PRESENT(added_size_offset) .NEQV. PRESENT(added_sizes)) &\n         DBCSR_ABORT(\"Must specify a set of arguments\")\n      IF (PRESENT(added_sizes) .NEQV. PRESENT(added_size)) &\n         DBCSR_ABORT(\"Must specify a set of arguments\")\n      IF (debug_mod) THEN\n         WRITE (*, *) \" Old array\", old_size\n         DO i = 1, old_size\n            WRITE (*, '(I7,2X,I7,2X,I7)') old_row_i(i), old_col_i(i), old_blk_p(i)\n         END DO\n         WRITE (*, *) \" Add array\", add_size\n         DO i = 1, add_size\n            WRITE (*, '(I7,2X,I7,2X,I7)') add_ip(1:3, i)\n         END DO\n      END IF\n      IF (PRESENT(added_nblks)) added_nblks = 0\n      IF (PRESENT(added_size)) THEN\n         added_size = 0\n         bp = added_size_offset\n      END IF\n      IF (add_size .GT. 0) THEN\n         old_blk = 1\n         add_blk = 1\n         new_blk = 1\n         IF (old_size .EQ. 0) THEN\n            new_row_i(1:add_size) = add_ip(1, 1:add_size)\n            new_col_i(1:add_size) = add_ip(2, 1:add_size)\n            new_blk_p(1:add_size) = add_ip(3, 1:add_size)\n            !IF (multidata) new_blk_d(1:add_size) = add_ip(4, 1:add_size)\n            IF (PRESENT(added_nblks)) added_nblks = add_size\n            IF (PRESENT(added_size)) added_size = SUM(added_sizes)\n         ELSE\n            DO WHILE (new_blk .LE. new_size)\n               merge_from_whom = 0\n               IF (old_blk .LE. old_size .AND. add_blk .LE. add_size) THEN\n                  IF (add_ip(1, add_blk) .EQ. old_row_i(old_blk) &\n                      .AND. add_ip(2, add_blk) .EQ. old_col_i(old_blk)) THEN\n                     IF (debug_mod) THEN\n                        WRITE (*, *) \"Duplicate block! addblk\", &\n                           add_blk, \"oldblk\", old_blk\n                     END IF\n                  END IF\n                  ! Rows come first\n                  IF (add_ip(1, add_blk) .LT. old_row_i(old_blk)) THEN\n                     merge_from_whom = 2\n                  ELSEIF (add_ip(1, add_blk) .GT. old_row_i(old_blk)) THEN\n                     merge_from_whom = 1\n                  ELSE ! Same rows, so now come the columns\n                     IF (add_ip(2, add_blk) .LT. old_col_i(old_blk)) THEN\n                        ! Merges from the add array\n                        merge_from_whom = 2\n                     ELSEIF (add_ip(2, add_blk) .GT. old_col_i(old_blk)) THEN\n                        ! Merges from the old array\n                        merge_from_whom = 1\n                     ELSE\n                        ! Merge from old array and skip one in the new array\n                        IF (debug_mod) THEN\n                           WRITE (*, *) \"Duplicate, keeping old\", &\n                              add_ip(1, add_blk), add_ip(2, add_blk)\n                        END IF\n                        merge_from_whom = 1\n                        add_blk = add_blk + 1\n                     END IF\n                  END IF\n               ELSE\n                  IF (add_blk .LE. add_size) THEN\n                     ! Merges from the add array\n                     merge_from_whom = 2\n                  ELSEIF (old_blk .LE. old_size) THEN\n                     ! Merges from the old array\n                     merge_from_whom = 1\n                  ELSE\n                     ! Hmmm, nothing to merge...\n                     merge_from_whom = 0\n                     !WRITE(*,*)\"Ran out of data to merge\"\n                  END IF\n               END IF\n               SELECT CASE (merge_from_whom)\n               CASE (2)\n                  ! Merges from the add array\n                  new_row_i(new_blk) = add_ip(1, add_blk)\n                  new_col_i(new_blk) = add_ip(2, add_blk)\n                  new_blk_p(new_blk) = add_ip(3, add_blk)\n                  !IF (multidata) new_blk_d(new_blk) = add_ip(4, add_blk)\n                  IF (PRESENT(added_nblks)) added_nblks = added_nblks + 1\n                  IF (PRESENT(added_sizes)) THEN\n                     new_blk_p(new_blk) = bp\n                     bp = bp + added_sizes(add_blk)\n                     added_size = added_size + added_sizes(add_blk)\n                  END IF\n                  add_blk = add_blk + 1\n               CASE (1)\n                  ! Merges from the old array\n                  new_row_i(new_blk) = old_row_i(old_blk)\n                  new_col_i(new_blk) = old_col_i(old_blk)\n                  new_blk_p(new_blk) = old_blk_p(old_blk)\n                  IF (multidata) new_blk_p(new_blk) = old_blk_d(old_blk)\n                  old_blk = old_blk + 1\n               CASE DEFAULT\n                  !WRITE(*,*)\"Nothing to merge\"\n               END SELECT\n               new_blk = new_blk + 1\n            END DO\n         END IF\n      ELSE\n         new_row_i(1:old_size) = old_row_i(1:old_size)\n         new_col_i(1:old_size) = old_col_i(1:old_size)\n         new_blk_p(1:old_size) = old_blk_p(1:old_size)\n         IF (multidata) new_blk_d(1:old_size) = old_blk_d(1:old_size)\n      END IF\n      IF (debug_mod) THEN\n         WRITE (*, *) \" New array\"\n         DO i = 1, new_size\n            WRITE (*, '(4(2X,I7))') new_row_i(i), new_col_i(i), new_blk_p(i)\n         END DO\n      END IF\n   END SUBROUTINE merge_index_arrays\n\n   SUBROUTINE dbcsr_make_index_local_row(matrix)\n      !! Converts BCSR global row index to local row index.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix for which to make canonical index\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_index_local_row'\n\n      INTEGER                                            :: error_handle, lrow, nlocal_rows, &\n                                                            ntotal_rows, prow\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: local_row_p\n      INTEGER, DIMENSION(:), POINTER                     :: local_rows\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      IF (.NOT. ASSOCIATED(matrix%row_p)) &\n         DBCSR_ABORT(\"The row index must be initialized.\")\n      IF (matrix%bcsc) &\n         DBCSR_ABORT(\"Not support for BCSC yet.\")\n      !\n      prow = matrix%index(dbcsr_slot_home_vprow)\n      IF (prow .LT. 0) THEN\n         prow = matrix%index(dbcsr_slot_home_prow)\n      END IF\n      nlocal_rows = matrix%nblkrows_local\n      ALLOCATE (local_row_p(nlocal_rows + 1))\n      ! The existing row_p is converted from an indexing array into a\n      ! counting array.  Because it is later discarded, the counting is\n      ! done in-place.\n      ntotal_rows = matrix%nblkrows_total\n      CALL dbcsr_count_row_index(matrix%row_p, ntotal_rows)\n      ! We first have to find the local rows for the given prow.\n      local_rows => array_data(matrix%local_rows)\n      IF (SIZE(local_rows) /= nlocal_rows) &\n         DBCSR_ABORT(\"Mismatch in the number of local rows.\")\n      ! The counts are mapped to local rows,\n      DO lrow = 1, nlocal_rows\n         local_row_p(lrow) = matrix%row_p(local_rows(lrow))\n      END DO\n      IF (SUM(matrix%row_p(1:ntotal_rows)) /= SUM(local_row_p(1:nlocal_rows))) &\n         DBCSR_ABORT(\"Inconsistent row counts. Perhaps non-local rows contain data?.\")\n      ! then converted into an index.\n      CALL dbcsr_build_row_index(local_row_p, nlocal_rows)\n      ! The local row index replaces the global one.\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p)\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, DATA=local_row_p)\n      ! Finally the matrix is designated as having a local-based index.\n      matrix%local_indexing = .TRUE.\n      IF (careful_mod) THEN\n         IF (array_size(matrix%local_rows) /= nlocal_rows) &\n            DBCSR_ABORT(\"Inconsistent local row counts.\")\n         IF (array_size(matrix%global_rows) /= ntotal_rows) &\n            DBCSR_ABORT(\"Inconsistent global row counts.\")\n         IF (array_size(matrix%global_rows) .EQ. 0) THEN\n            IF (nlocal_rows /= 0) &\n               DBCSR_ABORT(\"Invalid number of local or global rows.\")\n         END IF\n      END IF\n      DEALLOCATE (local_row_p)\n      !\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_make_index_local_row\n\n   SUBROUTINE dbcsr_make_index_list(matrix, thread_redist)\n      !! Converts BCSR index into list indices (similar to work matrices)\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix for which to make canonical index\n      LOGICAL, INTENT(IN)                                :: thread_redist\n         !! make a thread subdistribution\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_index_list'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: blk, error_handle, ithread, my_cnt, &\n                                                            nblks, nrows, nthreads\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: blki\n      INTEGER, DIMENSION(0)                              :: zero_len_array\n      INTEGER, DIMENSION(:), POINTER                     :: global_cols, local_rows, td, thr_c\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      IF (.NOT. ASSOCIATED(matrix%row_p)) &\n         DBCSR_ABORT(\"The row index must be initialized.\")\n      IF (matrix%list_indexing) &\n         DBCSR_ABORT(\"List index already exists?\")\n      IF (matrix%bcsc) &\n         DBCSR_ABORT(\"Not support for BCSC yet.\")\n      IF (matrix%nblks /= SIZE(matrix%col_i)) &\n         DBCSR_ABORT(\"Block count mismatch.\")\n      IF (matrix%nblks /= SIZE(matrix%blk_p)) &\n         DBCSR_ABORT(\"Block count mismatch\")\n      !\n      IF (matrix%local_indexing) THEN\n         IF (SIZE(matrix%row_p) - 1 /= matrix%nblkrows_local) &\n            DBCSR_ABORT(\"Local row index incorrectly sized.\")\n      ELSE\n         IF (SIZE(matrix%row_p) - 1 /= matrix%nblkrows_total) &\n            DBCSR_ABORT(\"Global row index incorrectly sized\")\n      END IF\n      !\n      matrix%list_indexing = .TRUE.\n      !\n      IF (matrix%local_indexing) THEN\n         nrows = matrix%nblkrows_local\n      ELSE\n         nrows = matrix%nblkrows_total\n      END IF\n      !\n      nblks = matrix%nblks\n      ALLOCATE (blki(3, nblks))\n      CALL dbcsr_expand_row_index_2d(matrix%row_p, blki, nrows, 1)\n      IF (matrix%local_indexing) THEN\n         global_cols => array_data(matrix%global_cols)\n         ! If local indexing is enabled, then the rows but not the\n         ! columns are already localized\n         IF (dbg) THEN\n            WRITE (*, *) routineN//\" Making local columns\"\n            WRITE (*, '(10(1X,i7))') global_cols\n            WRITE (*, *) 'local'\n            WRITE (*, '(10(1X,i7))') array_data(matrix%local_cols)\n         END IF\n         DO blk = 1, nblks\n            blki(2, blk) = global_cols(matrix%col_i(blk))\n            blki(3, blk) = matrix%blk_p(blk)\n         END DO\n      ELSE\n         IF (dbg) WRITE (*, *) routineN//\" Not making local columns\"\n         DO blk = 1, nblks\n            blki(2, blk) = matrix%col_i(blk)\n            blki(3, blk) = matrix%blk_p(blk)\n         END DO\n      END IF\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p)\n      nthreads = 0\n!$    nthreads = OMP_GET_MAX_THREADS()\n      !\n      ! Reshuffle according to threads\n      IF (nthreads .GT. 0 .AND. thread_redist) THEN\n         td => array_data(dbcsr_distribution_thread_dist(dbcsr_distribution(matrix)))\n         IF (matrix%local_indexing) THEN\n            local_rows => array_data(matrix%local_rows)\n         END IF\n!$OMP        PARALLEL DEFAULT (NONE) &\n!$OMP        PRIVATE (my_cnt, ithread, blk) &\n!$OMP        SHARED (td, blki, nthreads, thr_c, nblks, matrix,local_rows)\n         !\n         ithread = 0\n!$       ithread = OMP_GET_THREAD_NUM()\n!$OMP        MASTER\n!$       nthreads = OMP_GET_NUM_THREADS()\n         CALL dbcsr_addto_index_array(matrix, dbcsr_slot_thr_c, &\n                                      reservation=nthreads + 1, extra=3*nblks)\n         thr_c => matrix%thr_c\n         CALL dbcsr_addto_index_array(matrix, dbcsr_slot_coo_l, &\n                                      reservation=3*nblks)\n!$OMP        END MASTER\n!$OMP        BARRIER\n         my_cnt = 0\n         IF (matrix%local_indexing) THEN\n            my_cnt = COUNT(td(local_rows(blki(1, :))) .EQ. ithread)\n         ELSE\n            my_cnt = COUNT(td(blki(1, :)) .EQ. ithread)\n         END IF\n         !DO blk = 1, nblks\n         !   IF (td(blki(1, blk)) .EQ. ithread) my_cnt = my_cnt+1\n         !ENDDO\n         thr_c(ithread + 1) = my_cnt\n!$OMP        BARRIER\n!$OMP        MASTER\n         CALL dbcsr_build_row_index_inplace(thr_c, nthreads)\n!$OMP        END MASTER\n!$OMP        BARRIER\n         my_cnt = (thr_c(ithread + 1) + 1)*3 - 2\n         IF (matrix%local_indexing) THEN\n            DO blk = 1, nblks\n               IF (td(local_rows(blki(1, blk))) .EQ. ithread) THEN\n                  matrix%coo_l(my_cnt:my_cnt + 2) = blki(1:3, blk)\n                  my_cnt = my_cnt + 3\n               END IF\n            END DO\n         ELSE\n            DO blk = 1, nblks\n               IF (td(blki(1, blk)) .EQ. ithread) THEN\n                  matrix%coo_l(my_cnt:my_cnt + 2) = blki(1:3, blk)\n                  my_cnt = my_cnt + 3\n               END IF\n            END DO\n         END IF\n!$OMP        END PARALLEL\n      ELSE\n         ! Small price to pay for avoiding infinite recursions.\n         DO blk = 2, nblks\n            IF (blki(1, blk) .EQ. blki(1, blk - 1) .AND. blki(2, blk) .EQ. blki(2, blk - 1)) THEN\n               ! Weird assertion to give some idea of the two blocks.\n               IF (-blki(1, blk) /= blki(2, blk)) &\n                  CALL dbcsr_abort(__LOCATION__, &\n                                   \"Should not have duplicate matrix blocks. (-row, col) is duplicated.\")\n            END IF\n         END DO\n         !\n         IF (nblks > 0) THEN\n            CALL dbcsr_addto_index_array(matrix, dbcsr_slot_coo_l, &\n                                         DATA=RESHAPE(blki, (/3*nblks/)))\n         ELSE\n            CALL dbcsr_addto_index_array(matrix, dbcsr_slot_coo_l, &\n                                         DATA=zero_len_array)\n         END IF\n      END IF\n\n      DEALLOCATE (blki)\n      !\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_make_index_list\n\n   SUBROUTINE dbcsr_index_compact(matrix)\n      !! Compacts an index.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix for which to make canonical index\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_index_compact'\n\n      INTEGER                                            :: error_handle, new_size, size_blk_p, &\n                                                            size_col_i, size_coo_l, size_row_p, &\n                                                            size_thr_c\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: blk_p, col_i, coo_l, meta, row_p, thr_c\n      LOGICAL                                            :: compact, has_blk_p, has_col_i, &\n                                                            has_coo_l, has_row_p, has_thr_c\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      ! Ensures the index pointers are set.\n      CALL dbcsr_repoint_index(matrix)\n      ! Check that compaction is even needed.\n      has_row_p = ASSOCIATED(matrix%row_p)\n      IF (has_row_p) THEN\n         size_row_p = SIZE(matrix%row_p)\n      ELSE\n         size_row_p = 0\n      END IF\n      has_col_i = ASSOCIATED(matrix%col_i)\n      IF (has_col_i) THEN\n         size_col_i = SIZE(matrix%col_i)\n      ELSE\n         size_col_i = 0\n      END IF\n      has_blk_p = ASSOCIATED(matrix%blk_p)\n      IF (has_blk_p) THEN\n         size_blk_p = SIZE(matrix%blk_p)\n      ELSE\n         size_blk_p = 0\n      END IF\n      has_thr_c = ASSOCIATED(matrix%thr_c)\n      IF (has_thr_c) THEN\n         size_thr_c = SIZE(matrix%thr_c)\n      ELSE\n         size_thr_c = 0\n      END IF\n      has_coo_l = ASSOCIATED(matrix%coo_l)\n      IF (has_coo_l) THEN\n         size_coo_l = SIZE(matrix%coo_l)\n      ELSE\n         size_coo_l = 0\n      END IF\n      !\n      new_size = dbcsr_num_slots + &\n                 size_row_p + size_col_i + size_blk_p + size_thr_c + size_coo_l\n      compact = new_size .LT. SIZE(matrix%index)\n      IF (compact) THEN\n         ! Store old index arrays.\n         IF (has_row_p) THEN\n            ALLOCATE (row_p(size_row_p))\n            row_p(:) = matrix%row_p(:)\n         END IF\n         IF (has_col_i) THEN\n            ALLOCATE (col_i(size_col_i))\n            col_i(:) = matrix%col_i(:)\n         END IF\n         IF (has_blk_p) THEN\n            ALLOCATE (blk_p(size_blk_p))\n            blk_p(:) = matrix%blk_p(:)\n         END IF\n         IF (has_thr_c) THEN\n            ALLOCATE (thr_c(size_thr_c))\n            thr_c(:) = matrix%thr_c(:)\n         END IF\n         IF (has_coo_l) THEN\n            ALLOCATE (coo_l(size_coo_l))\n            coo_l(:) = matrix%coo_l(:)\n         END IF\n         ALLOCATE (meta(dbcsr_num_slots))\n         meta(:) = matrix%index(1:dbcsr_num_slots)\n         ! Clear the index.\n         CALL memory_deallocate(matrix%index, &\n                                dbcsr_get_index_memory_type(matrix))\n         NULLIFY (matrix%index)\n         CALL memory_allocate(matrix%index, new_size, &\n                              dbcsr_get_index_memory_type(matrix))\n         !\n         ! Now copy the old index arrays into the index. We must not\n         ! copy the positions of the old pointers.\n         matrix%index(1:dbcsr_meta_size) = meta(1:dbcsr_meta_size)\n         matrix%index(dbcsr_meta_size + 1:) = 0\n         matrix%index(dbcsr_slot_size) = dbcsr_num_slots\n         IF (has_thr_c) THEN\n            CALL dbcsr_addto_index_array(matrix, dbcsr_slot_thr_c, thr_c)\n            DEALLOCATE (thr_c)\n         END IF\n         IF (has_row_p) THEN\n            CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, row_p)\n            DEALLOCATE (row_p)\n         END IF\n         IF (has_col_i) THEN\n            CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, col_i)\n            DEALLOCATE (col_i)\n         END IF\n         IF (has_blk_p) THEN\n            CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, blk_p)\n            DEALLOCATE (blk_p)\n         END IF\n         IF (has_coo_l) THEN\n            CALL dbcsr_addto_index_array(matrix, dbcsr_slot_coo_l, coo_l)\n            DEALLOCATE (coo_l)\n         END IF\n         DEALLOCATE (meta)\n         IF (careful_mod) THEN\n            ! This is pretty strong but it should be true.\n            IF (matrix%index(dbcsr_slot_size) /= new_size) &\n               DBCSR_ABORT(\"Unexpected index size.\")\n            IF (SIZE(matrix%index) /= new_size) &\n               DBCSR_ABORT(\"Unexpected index size.\")\n         END IF\n         CALL dbcsr_repoint_index(matrix)\n      END IF\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_index_compact\n\n   SUBROUTINE dbcsr_index_checksum(matrix, checksum)\n      !! Calculates the checksum of an index.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix for which to make canonical index\n      INTEGER, INTENT(OUT)                               :: checksum\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_index_checksum'\n\n      INTEGER                                            :: error_handle\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      !\n      checksum = joaat_hash((/joaat_hash(matrix%row_p), &\n                              joaat_hash(matrix%col_i), &\n                              joaat_hash(matrix%blk_p)/))\n      !\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_index_checksum\n\n   FUNCTION dbcsr_has_local_row_index(matrix) RESULT(local_indexing)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      LOGICAL                                            :: local_indexing\n\n      local_indexing = matrix%local_indexing\n   END FUNCTION dbcsr_has_local_row_index\n\nEND MODULE dbcsr_index_operations\n"
  },
  {
    "path": "src/block/dbcsr_iterator_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_iterator_operations\n   !! DBCSR iterator operations\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_exists\n   USE dbcsr_data_methods, ONLY: dbcsr_data_hold, &\n                                 dbcsr_data_release, &\n                                 dbcsr_data_set_pointer, &\n                                 dbcsr_get_data\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_has_threads, &\n                                 dbcsr_distribution_num_threads, &\n                                 dbcsr_distribution_thread_dist\n   USE dbcsr_methods, ONLY: dbcsr_distribution\n   USE dbcsr_ptr_util, ONLY: pointer_rank_remap2\n   USE dbcsr_string_utilities, ONLY: stringify\n   USE dbcsr_toollib, ONLY: swap\n   USE dbcsr_types, ONLY: dbcsr_data_obj, &\n                          dbcsr_distribution_obj, &\n                          dbcsr_iterator, &\n                          dbcsr_scalar_type, &\n                          dbcsr_type\n   USE dbcsr_kinds, ONLY: real_4, &\n                          real_8\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads, omp_in_parallel\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_iterator_operations'\n\n   INTEGER, PRIVATE, POINTER, SAVE      :: common_int_pointer\n\n   PUBLIC :: dbcsr_iterator_start, dbcsr_iterator_stop\n\n   PUBLIC :: dbcsr_iterator_blocks_left, dbcsr_iterator_next_block\n\n   INTERFACE dbcsr_iterator_next_block\n      MODULE PROCEDURE iterator_next_block_index, &\n         iterator_next_area_block\n      MODULE PROCEDURE iterator_next_2d_block_d, &\n         iterator_next_2d_block_s, &\n         iterator_next_2d_block_c, &\n         iterator_next_2d_block_z, &\n         iterator_next_1d_block_d, &\n         iterator_next_1d_block_s, &\n         iterator_next_1d_block_c, &\n         iterator_next_1d_block_z\n   END INTERFACE\n\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   INTEGER, PARAMETER, PRIVATE :: rpslot_owner = 1\n   INTEGER, PARAMETER, PRIVATE :: rpslot_addblks = 2\n   INTEGER, PARAMETER, PRIVATE :: rpslot_addoffset = 3\n   INTEGER, PARAMETER, PRIVATE :: rpslot_oldblks = 4\n   INTEGER, PARAMETER, PRIVATE :: rpslot_oldoffset = 5\n   INTEGER, PARAMETER, PRIVATE :: rpslot_totaloffset = 6\n   INTEGER, PARAMETER, PRIVATE :: rpnslots = 6\n\n   LOGICAL, PARAMETER, PRIVATE :: detailed_timing = .FALSE.\n\n   TYPE block_parameters\n      LOGICAL :: tr = .FALSE.\n      INTEGER :: logical_rows = -1, logical_cols = -1\n      INTEGER :: offset = -1, nze = -1\n   END TYPE block_parameters\n\n   TYPE dgemm_join\n      INTEGER :: p_a = -1, p_b = -1, p_c = -1\n      INTEGER :: last_k = -1, last_n = -1\n      TYPE(dbcsr_scalar_type) :: alpha = dbcsr_scalar_type(), beta = dbcsr_scalar_type()\n   END TYPE dgemm_join\n\nCONTAINS\n\n! **************************************************************************************************\n! Iterator functions\n! **************************************************************************************************\n\n   SUBROUTINE dbcsr_iterator_start(iterator, matrix, shared, dynamic, &\n                                   dynamic_byrows, contiguous_pointers, read_only)\n      !! Sets up an iterator\n      !!\n      !! Contiguous pointers\n      !! Contiguous pointers may incur reallocation penalties but enable quick\n      !! passing of arrays to routines with unspecified interfaces (i.e., direct\n      !! calls to BLACS or MPI).\n      !!\n      !! Threading\n      !! The TYPE(dbcsr_iterator) variable should be thread-private.\n      !!\n      !! The iterator has several modes of operation when used with\n      !! OpenMP. Two options can be set to influence the behavior.\n      !!\n      !! Threading: shared vs. non-shared\n      !! The \"shared\" flag specifies that several threads will be\n      !! iterating through the same matrix.\n      !! - Sharing is the default when called from an active parallel\n      !! region. In the shared mode no two threads will receive the\n      !! same block; i.e., the work is split among the threads.\n      !! - If each (or one) thread needs to iterator through all blocks\n      !! then shared should be set to .FALSE.. (E.g., when called\n      !! from an enclosing MASTER region or when each thread has its\n      !! own matrix.)\n      !! - It is safe to use an iterator in non-shared mode with only\n      !! one thread.  No thread synchronization constructs are used\n      !! in this case)\n      !!\n      !! Threading in shared mode\n      !! When in shared mode there are three possibilities to select\n      !! how the blocks are distributed to the threads.\n      !! <DL>\n      !! <DT>Thread distribution</DT>\n      !! <DD>The default is to use the thread distribution. The thread\n      !! distribution statically maps rows to threads and should be\n      !! used whenever retaining a consistent mapping among\n      !! subsequent iterations is important.</DD>\n      !! <DT>Dynamic scheduling</DT>\n      !! <DD>If the dynamic flag is .TRUE., then blocks are given to\n      !! threads dynamically. By default the assignment is grouped\n      !! by rows (to minimize synchronization); however, if the\n      !! dynamic_byrows flag is .FALSE. then every block is\n      !! assigned dynamically.</DD></DL>\n\n      TYPE(dbcsr_iterator), INTENT(OUT)                  :: iterator\n         !! the iterator\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! DBCSR matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: shared, dynamic, dynamic_byrows, &\n                                                            contiguous_pointers, read_only\n         !! The matrix is shared between several iterators. Default is .TRUE.\n         !! Threads are given blocks regardless of the thread distribution; default is .FALSE.\n         !! Threads are given blocks regardless of the thread distribution, but still grouped by rows; default is .FALSE.\n         !! Whether returned pointers need to be contiguous; default is FALSE.\n         !! User promises not to change returned data; default is FALSE\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iterator_start'\n\n      INTEGER                                            :: error_handle\n      TYPE(dbcsr_distribution_obj)                       :: dist\n\n!   ---------------------------------------------------------------------------\n\n      MARK_USED(dynamic) ! only used with OMP\n\n      CALL timeset(routineN, error_handle)\n      iterator%shared = .TRUE.\n!$    iterator%shared = omp_in_parallel()\n      IF (PRESENT(shared)) iterator%shared = shared\n      iterator%dynamic = .TRUE.\n!$    iterator%dynamic = .FALSE.\n!$    IF (PRESENT(dynamic)) iterator%dynamic = dynamic\n      IF (PRESENT(dynamic_byrows)) THEN\n         iterator%dynamic_byrows = dynamic_byrows\n         IF (iterator%dynamic_byrows) iterator%dynamic = .TRUE.\n      ELSE\n         iterator%dynamic_byrows = iterator%dynamic\n!$       iterator%dynamic_byrows = iterator%dynamic\n      END IF\n!$    IF (.NOT. iterator%shared) THEN\n!$       iterator%dynamic = .FALSE.\n!$    END IF\n      dist = dbcsr_distribution(matrix)\n!$    IF (.NOT. dbcsr_distribution_has_threads(dist)) &\n!$       DBCSR_WARN(\"Thread distribution should be defined for OpenMP.\")\n      IF (.NOT. iterator%dynamic .AND. .NOT. dbcsr_distribution_has_threads(dist)) &\n         DBCSR_ABORT(\"Thread distribution must be defined for non-dynamic iterator.\")\n!$    IF (omp_in_parallel() .AND. omp_get_num_threads() /= dbcsr_distribution_num_threads(dist)) &\n!$       CALL dbcsr_abort(__LOCATION__, &\n!$                        \"Number of threads has changed from \"// &\n!$                        stringify(dbcsr_distribution_num_threads(dist))// &\n!$                        \" to \"//stringify(omp_get_num_threads())//\"!\")\n      !Synchronize the positions\n      NULLIFY (iterator%common_pos)\n      IF (iterator%dynamic) THEN\n         ! All threads point into the master thread's data space\n         ! (temporarily using the common_int_pointer variable). This is\n         ! not the nicest OpenMP way of doing this but it is also not\n         ! explicitly forbidden.\n         !\n!$OMP        BARRIER\n!$OMP        MASTER\n         ALLOCATE (iterator%common_pos)\n         common_int_pointer => iterator%common_pos\n         common_int_pointer = 0\n!$OMP        FLUSH (common_int_pointer)\n!$OMP        END MASTER\n!$OMP        BARRIER\n         IF (.NOT. ASSOCIATED(iterator%common_pos)) THEN\n            iterator%common_pos => common_int_pointer\n         END IF\n!$OMP        BARRIER\n      END IF\n      !\n      IF (PRESENT(contiguous_pointers)) THEN\n         iterator%contiguous_pointers = contiguous_pointers\n      ELSE\n         iterator%contiguous_pointers = .TRUE.\n      END IF\n      IF (PRESENT(read_only)) THEN\n         iterator%read_only = read_only\n      ELSE\n         iterator%read_only = .FALSE.\n      END IF\n      iterator%row = 0\n      iterator%pos = 0\n      iterator%rbs => array_data(matrix%row_blk_size)\n      iterator%cbs => array_data(matrix%col_blk_size)\n      iterator%roff => array_data(matrix%row_blk_offset)\n      iterator%coff => array_data(matrix%col_blk_offset)\n\n      iterator%local_indexing = matrix%local_indexing\n      !IF(iterator%local_indexing .AND. .NOT. iterator%dynamic) &\n      !   DBCSR_ABORT(\"Locally-indexed matrices can only have a dynamic iterator.\")\n      IF (iterator%local_indexing .AND. .NOT. array_exists(matrix%local_rows)) &\n         CALL dbcsr_abort(__LOCATION__, &\n                          \"Local rows mapping array should exist when local indexing is used.\")\n      IF (iterator%local_indexing .AND. .NOT. array_exists(matrix%global_rows)) &\n         CALL dbcsr_abort(__LOCATION__, &\n                          \"Global rows mapping array should exist when local indexing is used.\")\n      iterator%global_rows => array_data(matrix%global_rows)\n      iterator%local_rows => array_data(matrix%local_rows)\n\n      iterator%transpose = .FALSE. !matrix%transpose\n      iterator%nblks = matrix%nblks\n      IF (iterator%transpose) THEN\n         iterator%nblkrows_total = matrix%nblkcols_total\n      ELSE\n         iterator%nblkrows_total = matrix%nblkrows_total\n      END IF\n\n      iterator%row_p => matrix%row_p\n      iterator%col_i => matrix%col_i\n      iterator%blk_p => matrix%blk_p\n!$OMP     CRITICAL (crit_data)\n      iterator%data_area = matrix%data_area\n      CALL dbcsr_data_hold(iterator%data_area)\n!$OMP     END CRITICAL (crit_data)\n      iterator%row_size = 0\n      IF (.NOT. iterator%dynamic) THEN\n         iterator%tdist => array_data(dbcsr_distribution_thread_dist(dist))\n      ELSE\n         NULLIFY (iterator%tdist)\n      END IF\n!$    IF (iterator%dynamic) THEN\n!$OMP           SINGLE\n!$       IF (iterator%dynamic_byrows) THEN\n!$          iterator%common_pos = omp_get_num_threads()\n!$       END IF\n!$OMP           END SINGLE\n!$       CALL dbcsr_iterator_seek(iterator, omp_get_thread_num() + 1)\n!$    ELSE\n         CALL dbcsr_iterator_seek(iterator, 1)\n!$    END IF\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_iterator_start\n\n   SUBROUTINE dbcsr_iterator_stop(iterator)\n      !! Stops up an iterator\n\n      TYPE(dbcsr_iterator), INTENT(INOUT)                :: iterator\n         !! the iterator\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iterator_stop'\n\n      INTEGER                                            :: error_handle\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      iterator%row = 0\n      iterator%pos = 0\n\n      NULLIFY (iterator%tdist)\n!$OMP     CRITICAL (crit_data)\n      CALL dbcsr_data_release(iterator%data_area)\n!$OMP     END CRITICAL (crit_data)\n      IF (iterator%dynamic) THEN\n!$OMP        BARRIER\n!$OMP        MASTER\n         common_int_pointer => iterator%common_pos\n         DEALLOCATE (common_int_pointer)\n!$OMP        FLUSH (common_int_pointer)\n!$OMP        END MASTER\n         NULLIFY (iterator%common_pos)\n!$OMP        BARRIER\n      END IF\n      IF (iterator%local_indexing) THEN\n         NULLIFY (iterator%local_rows)\n         NULLIFY (iterator%global_rows)\n      END IF\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_iterator_stop\n\n   PURE SUBROUTINE find_first_valid_block(pos, maxpos, blk_p)\n      !! Finds the first valid block, inclusive from the current position.\n      !! If there is no valid block, pos is set to 0\n\n      INTEGER, INTENT(INOUT)                             :: pos\n         !! input: current position; output: next valid position or 0\n      INTEGER, INTENT(IN)                                :: maxpos\n         !! maximal allowed position\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: blk_p\n         !! block pointers, used to check validity\n\n!   ---------------------------------------------------------------------------\n!IF (pos .LT. 1) pos = 1\n\n      DO WHILE (pos .LE. maxpos)\n         IF (blk_p(pos) .EQ. 0) THEN\n            pos = pos + 1\n         ELSE\n            EXIT\n         END IF\n      END DO\n      IF (pos .GT. maxpos) pos = 0\n   END SUBROUTINE find_first_valid_block\n\n   PURE SUBROUTINE find_proper_row(pos, row, maxrows, row_p)\n      !! Finds the row to which the current block belongs\n      !! If there is no valid block, pos is set to 0\n\n      INTEGER, INTENT(IN)                                :: pos\n         !! current position\n      INTEGER, INTENT(INOUT)                             :: row\n         !! input: current row; output: the row corresponding to the position\n      INTEGER, INTENT(IN)                                :: maxrows\n         !! maxmimum row\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: row_p\n         !! row pointers\n\n!   ---------------------------------------------------------------------------\n\n      IF (pos .GT. 0) THEN\n         IF (row .LT. 1) THEN\n            row = 1\n         ELSEIF (row .GT. maxrows) THEN\n            row = maxrows\n         END IF\n         DO WHILE (row_p(row + 1) .LT. pos)\n            row = row + 1\n            IF (row .GT. maxrows) THEN\n               row = 0\n               EXIT\n            END IF\n         END DO\n      ELSE\n         row = 0\n      END IF\n   END SUBROUTINE find_proper_row\n\n   PURE SUBROUTINE find_proper_position(pos, row, maxpos, maxrows, &\n                                        blk_p, row_p, tdist, tid, local2global)\n      !! Finds the next proper position accounting for threads\n      !! First time: pos and row are set to 0.\n      !! If there is no valid block, pos is set to 0\n\n      INTEGER, INTENT(INOUT)                             :: pos, row\n         !! current position and updated position\n         !! input: current row; output: the row corresponding to the next proper position\n      INTEGER, INTENT(IN)                                :: maxpos, maxrows\n         !! maximum allowable position\n         !! maxmimum row\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: blk_p, row_p\n         !! block pointercs\n         !! row pointers\n      INTEGER, DIMENSION(1:maxrows), INTENT(IN), &\n         OPTIONAL                                        :: tdist\n         !! thread distribution\n      INTEGER, INTENT(IN), OPTIONAL                      :: tid\n         !! my thread number\n      INTEGER, DIMENSION(1:*), INTENT(IN), OPTIONAL      :: local2global\n\n      LOGICAL                                            :: local, row_inrange, row_ok\n\n!   ---------------------------------------------------------------------------\n\n      MARK_USED(tdist) ! only used with OMP\n      MARK_USED(tid) ! only used with OMP\n\n      local = PRESENT(local2global)\n      IF (maxpos .GE. 1) THEN\n         !IF (pos.EQ.0) pos = 1\n         CALL find_first_valid_block(pos, maxpos, blk_p)\n         CALL find_proper_row(pos, row, maxrows, row_p)\n         row_inrange = row .NE. 0 .AND. row .LE. maxrows\n         row_ok = row_inrange\n!$       IF (present(tdist) .AND. PRESENT(tid) .AND. row_inrange) THEN\n!$          IF (.NOT. local) THEN\n!$             row_ok = tdist(row) .EQ. tid\n!$          ELSE\n!$             row_ok = tdist(local2global(row)) .EQ. tid\n!$          END IF\n!$       END IF\n         DO WHILE (row_inrange .AND. .NOT. row_ok)\n            row = row + 1\n            pos = row_p(row) + 1\n            IF (row .GT. maxrows) THEN\n               row = 0\n               EXIT\n            END IF\n            CALL find_first_valid_block(pos, maxpos, blk_p)\n            CALL find_proper_row(pos, row, maxrows, row_p)\n            row_inrange = row .NE. 0\n            row_ok = row_inrange\n!$          IF (present(tdist) .AND. PRESENT(tid) .AND. row_inrange) THEN\n!$             IF (.NOT. local) THEN\n!$                row_ok = tdist(row) .EQ. tid\n!$             ELSE\n!$                row_ok = tdist(local2global(row)) .EQ. tid\n!$             END IF\n!$          END IF\n         END DO\n         IF (row .EQ. 0) pos = 0\n      ELSE\n         pos = 0\n         row = 0\n      END IF\n   END SUBROUTINE find_proper_position\n\n   SUBROUTINE iterator_advance(iterator)\n      !! Advances to the next block\n\n      TYPE(dbcsr_iterator), INTENT(INOUT)                :: iterator\n         !! the iterator\n\n      INTEGER                                            :: ithread, my_old_row, p\n      LOGICAL                                            :: advance, jumped_row\n\n!   ---------------------------------------------------------------------------\n\n      ithread = 0\n!$    ithread = omp_get_thread_num()\n      IF (iterator%dynamic .AND. iterator%shared) THEN\n         IF (iterator%dynamic_byrows) THEN\n            ! In this case common_row holds the last assigned row.\n            !\n            ! The idea is to advance in this thread's row. If it gets bumped\n            ! into the next row, then we have to find the correct one.\n            advance = .TRUE.\n            DO WHILE (advance)\n               iterator%pos = iterator%pos + 1\n               my_old_row = iterator%row\n               CALL find_proper_position_caller(iterator)\n               jumped_row = iterator%row .GT. my_old_row\n               advance = jumped_row\n               IF (jumped_row) THEN\n!$OMP                 CRITICAL (crit_common_pos)\n                  ! Set the common_pos to the next available row.\n                  iterator%common_pos = MAX(iterator%row, iterator%common_pos + 1)\n                  iterator%row = iterator%common_pos\n!$OMP                 END CRITICAL (crit_common_pos)\n                  IF (iterator%row .GT. iterator%nblkrows_total) THEN\n                     iterator%pos = 0\n                     iterator%row = 0\n                     advance = .FALSE.\n                  ELSE\n                     ! To be incremented in the next loop.\n                     IF (.NOT. iterator%local_indexing) THEN\n                        iterator%pos = iterator%row_p(iterator%row)\n                     ELSE\n                        iterator%pos = iterator%row_p(iterator%global_rows(iterator%row))\n                     END IF\n                  END IF\n               END IF\n            END DO\n         ELSE\n            ! In this case common_pos holds the last-assigned block.\n            !\n!$OMP           CRITICAL (crit_common_pos)\n            iterator%common_pos = iterator%common_pos + 1\n            iterator%pos = iterator%common_pos\n            CALL find_proper_position_caller(iterator)\n            p = iterator%pos\n            iterator%common_pos = MAX(iterator%common_pos, p)\n!$OMP           END CRITICAL (crit_common_pos)\n         END IF\n      ELSEIF (iterator%shared) THEN\n         iterator%pos = iterator%pos + 1\n         ithread = 0\n!$       ithread = OMP_GET_THREAD_NUM()\n         CALL find_proper_position_caller(iterator, use_ithread=ithread)\n      ELSE\n         iterator%pos = iterator%pos + 1\n         CALL find_proper_position_caller(iterator)\n      END IF\n   END SUBROUTINE iterator_advance\n\n   SUBROUTINE find_proper_position_caller(iterator, use_ithread)\n      TYPE(dbcsr_iterator), INTENT(INOUT)                :: iterator\n      INTEGER, INTENT(in), OPTIONAL                      :: use_ithread\n\n      INTEGER                                            :: post_pos, post_row, pre_pos, pre_row, r\n\n      pre_row = iterator%row\n      pre_pos = iterator%pos\n      IF (.NOT. iterator%local_indexing) THEN\n         IF (PRESENT(use_ithread)) THEN\n            CALL find_proper_position(iterator%pos, &\n                                      iterator%row, iterator%nblks, iterator%nblkrows_total, &\n                                      iterator%blk_p, iterator%row_p, &\n                                      tdist=iterator%tdist, tid=use_ithread)\n         ELSE\n            CALL find_proper_position(iterator%pos, &\n                                      iterator%row, iterator%nblks, iterator%nblkrows_total, &\n                                      iterator%blk_p, iterator%row_p)\n         END IF\n      ELSE\n         IF (iterator%row .GT. 0) THEN\n            r = iterator%global_rows(iterator%row)\n         ELSE\n            r = 0\n         END IF\n         IF (PRESENT(use_ithread)) THEN\n            CALL find_proper_position(iterator%pos, &\n                                      r, iterator%nblks, SIZE(iterator%local_rows), &\n                                      iterator%blk_p, iterator%row_p, &\n                                      local2global=iterator%local_rows, &\n                                      tdist=iterator%tdist, tid=use_ithread)\n         ELSE\n            CALL find_proper_position(iterator%pos, &\n                                      r, iterator%nblks, SIZE(iterator%local_rows), &\n                                      iterator%blk_p, iterator%row_p, &\n                                      local2global=iterator%local_rows)\n         END IF\n         IF (r .GT. 0) THEN\n            iterator%row = iterator%local_rows(r)\n         ELSE\n            iterator%row = 0\n         END IF\n      END IF\n      post_row = iterator%row\n      post_pos = iterator%pos\n   END SUBROUTINE find_proper_position_caller\n\n   PURE SUBROUTINE update_row_info(iterator)\n      !! Updates the row info stored in the iterator\n      !! @note\n      !! Added to handle the complexity introduced with the transpose\n      !! @endnote\n\n      TYPE(dbcsr_iterator), INTENT(INOUT)                :: iterator\n         !! the iterator\n\n      IF (iterator%row .GT. 0) THEN\n         IF (iterator%transpose) THEN\n            iterator%row_size = iterator%cbs(iterator%row)\n            iterator%row_offset = iterator%coff(iterator%row)\n         ELSE\n            iterator%row_size = iterator%rbs(iterator%row)\n            iterator%row_offset = iterator%roff(iterator%row)\n         END IF\n      END IF\n   END SUBROUTINE update_row_info\n\n   SUBROUTINE dbcsr_iterator_seek(iterator, row)\n      !! Places the iterator to the desired row.\n\n      TYPE(dbcsr_iterator), INTENT(INOUT)                :: iterator\n         !! the iterator\n      INTEGER, INTENT(in)                                :: row\n         !! seek to this row\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iterator_seek'\n\n      INTEGER                                            :: error_handle\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      IF (iterator%nblks .GT. 0 .AND. row .LE. iterator%nblkrows_total) THEN\n         iterator%row = row\n         ! This line is replaced because iterator_advance increments the block\n         ! number\n         !iterator%pos = iterator%row_p(row)+1\n         iterator%pos = iterator%row_p(row) ! +1-1\n         CALL iterator_advance(iterator)\n         CALL update_row_info(iterator)\n      ELSE\n         iterator%row = 0\n         iterator%pos = 0\n      END IF\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_iterator_seek\n\n   SUBROUTINE iterator_next_block_index(iterator, row, column, blk, &\n                                        transposed, blk_p, row_size, col_size, row_offset, col_offset)\n      !! Gets the index information of the next block, no data.\n\n      TYPE(dbcsr_iterator), INTENT(INOUT)                :: iterator\n         !! the iterator\n      INTEGER, INTENT(OUT)                               :: row, column, blk\n         !! row of the data block\n         !! column of the data block\n         !! block number\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: transposed\n         !! whether block is transposed\n      INTEGER, INTENT(OUT), OPTIONAL                     :: blk_p, row_size, col_size, row_offset, &\n                                                            col_offset\n         !! index into block data array\n         !! logical row size of block\n         !! logical column size of block\n         !! logical row offset of block\n         !! logical column offset of block\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'iterator_next_block_index'\n\n      INTEGER                                            :: bp, error_handle\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n      IF (iterator%pos .LE. iterator%nblks &\n          .AND. iterator%pos .NE. 0) THEN\n         row = iterator%row\n         column = iterator%col_i(iterator%pos)\n         IF (iterator%transpose) CALL swap(row, column)\n         blk = iterator%pos\n         IF (PRESENT(row_size)) row_size = iterator%row_size\n         IF (PRESENT(col_size)) col_size = iterator%cbs(column)\n         IF (PRESENT(row_offset)) row_offset = iterator%row_offset\n         IF (PRESENT(col_offset)) col_offset = iterator%coff(column)\n         IF (PRESENT(blk_p) .OR. PRESENT(transposed)) THEN\n            bp = iterator%blk_p(iterator%pos)\n            IF (PRESENT(blk_p)) blk_p = bp\n            IF (PRESENT(transposed)) transposed = bp .LT. 0\n         END IF\n         CALL iterator_advance(iterator)\n         CALL update_row_info(iterator)\n      ELSE\n         row = 0\n         column = 0\n      END IF\n      IF (careful_mod) CALL timestop(error_handle)\n   END SUBROUTINE iterator_next_block_index\n\n   SUBROUTINE iterator_next_area_block(iterator, row, column, block, &\n                                       transposed, block_number, row_size, col_size, row_offset, col_offset)\n      !! Gets the next data block encapsulated in an object.\n\n      TYPE(dbcsr_iterator), INTENT(INOUT)                :: iterator\n         !! the iterator\n      INTEGER, INTENT(OUT)                               :: row, column\n         !! row of the data block\n         !! column of the data block\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: block\n         !! encapsulated data\n      LOGICAL, INTENT(OUT)                               :: transposed\n         !! whether the block data is transposed\n      INTEGER, INTENT(OUT), OPTIONAL                     :: block_number, row_size, col_size, &\n                                                            row_offset, col_offset\n         !! block number\n         !! logical row size of block\n         !! logical column size of block\n         !! logical row offset of block\n         !! logical column offset of block\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'iterator_next_area_block'\n\n      INTEGER                                            :: blk_p, block_col_size, block_row_size, &\n                                                            bp, csize, error_handle, nze, rsize\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n\n      IF (iterator%pos .LE. iterator%nblks &\n          .AND. iterator%pos .NE. 0) THEN\n         row = iterator%row\n         column = iterator%col_i(iterator%pos)\n         IF (iterator%transpose) CALL swap(row, column)\n         blk_p = iterator%blk_p(iterator%pos)\n         transposed = blk_p .LT. 0\n         bp = ABS(blk_p)\n         rsize = iterator%row_size\n         csize = iterator%cbs(column)\n         block_row_size = rsize\n         block_col_size = csize\n         nze = rsize*csize\n         IF (PRESENT(row_size)) row_size = rsize\n         IF (PRESENT(col_size)) col_size = csize\n         IF (PRESENT(row_offset)) row_offset = iterator%row_offset\n         IF (PRESENT(col_offset)) col_offset = iterator%coff(column)\n         ! Redirect the encapsulated pointer to the correct pointer here.\n         IF (transposed) CALL swap(rsize, csize)\n         CALL dbcsr_data_set_pointer(block, rsize, csize, iterator%data_area, &\n                                     source_lb=bp)\n         IF (PRESENT(block_number)) block_number = iterator%pos\n         ! Move to the next non-deleted position.\n         CALL iterator_advance(iterator)\n         CALL update_row_info(iterator)\n      ELSE\n         row = 0\n         column = 0\n         IF (PRESENT(block_number)) block_number = 0\n      END IF\n\n      IF (careful_mod) CALL timestop(error_handle)\n\n   END SUBROUTINE iterator_next_area_block\n\n   PURE FUNCTION dbcsr_iterator_blocks_left(iterator) RESULT(blocks_left)\n      !! Returns whether there any blocks left in the iterator.\n\n      TYPE(dbcsr_iterator), INTENT(IN)                   :: iterator\n         !! the iterator\n      LOGICAL                                            :: blocks_left\n\n      blocks_left = iterator%pos .NE. 0\n   END FUNCTION dbcsr_iterator_blocks_left\n\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float\n      SUBROUTINE iterator_next_1d_block_${nametype1}$ (iterator, row, column, block, &\n                                                       transposed, block_number, row_size, col_size, row_offset, col_offset)\n     !! Gets the next data block, single/double precision real/complex\n\n         TYPE(dbcsr_iterator), INTENT(INOUT)      :: iterator\n        !! the iterator\n         INTEGER, INTENT(OUT)                     :: row, column\n        !! row of the data block\n        !! column of the data block\n         ${type1}$, DIMENSION(:), POINTER :: block\n        !! pointer to the data block\n         LOGICAL, INTENT(OUT)                     :: transposed\n        !! whether the block data is transposed\n         INTEGER, INTENT(OUT), OPTIONAL           :: block_number\n        !! block number\n         INTEGER, INTENT(OUT), OPTIONAL           :: row_size, col_size, &\n                                                     row_offset, col_offset\n        !! logical row size of block\n        !! logical column size of block\n\n         INTEGER                                  :: blk_p, bp, csize, nze, rsize\n\n!   ---------------------------------------------------------------------------\n! If we're pointing to a valid block, return that block.\n\n         IF (iterator%pos .LE. iterator%nblks &\n             .AND. iterator%pos .NE. 0) THEN\n            row = iterator%row\n            column = iterator%col_i(iterator%pos)\n            IF (iterator%transpose) CALL swap(row, column)\n            blk_p = iterator%blk_p(iterator%pos)\n            transposed = blk_p .LT. 0\n            bp = ABS(blk_p)\n            rsize = iterator%row_size\n            csize = iterator%cbs(column)\n            nze = rsize*csize\n            IF (PRESENT(row_size)) row_size = rsize\n            IF (PRESENT(col_size)) col_size = csize\n            IF (PRESENT(row_offset)) row_offset = iterator%row_offset\n            IF (PRESENT(col_offset)) col_offset = iterator%coff(column)\n            CALL dbcsr_get_data(iterator%data_area, block, &\n                                lb=bp, ub=bp + nze - 1)\n            IF (PRESENT(block_number)) block_number = iterator%pos\n            ! Move to the next non-deleted position.\n            CALL iterator_advance(iterator)\n            CALL update_row_info(iterator)\n         ELSE\n            row = 0\n            column = 0\n            NULLIFY (block)\n            IF (PRESENT(block_number)) block_number = 0\n         END IF\n      END SUBROUTINE iterator_next_1d_block_${nametype1}$\n\n      SUBROUTINE iterator_next_2d_block_${nametype1}$ (iterator, row, column, &\n                                                       block, transposed, &\n                                                       block_number, row_size, col_size, row_offset, col_offset)\n     !! Gets the next data block, single/double precision real/complex\n\n         TYPE(dbcsr_iterator), INTENT(INOUT)      :: iterator\n        !! the iterator\n         INTEGER, INTENT(OUT)                     :: row, column\n        !! row of the data block\n        !! column of the data block\n         ${type1}$, DIMENSION(:, :), &\n            POINTER                                :: block\n        !! pointer to the data block\n         LOGICAL, INTENT(OUT)                     :: transposed\n        !! whether the block data is transposed\n         INTEGER, INTENT(OUT), OPTIONAL           :: block_number\n        !! block number\n         INTEGER, INTENT(OUT), OPTIONAL           :: row_size, col_size, row_offset, col_offset\n        !! logical row size of block\n        !! logical column size of block\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'iterator_next_2d_block_${nametype1}$'\n\n         INTEGER                                  :: blk_p, bp, csize, nze, rsize, &\n                                                     block_row_size, block_col_size\n         ${type1}$, DIMENSION(:), POINTER           :: lin_blk_p\n         INTEGER                                  :: error_handle\n\n!   ---------------------------------------------------------------------------\n! If we're pointing to a valid block, return that block.\n\n         IF (careful_mod) CALL timeset(routineN, error_handle)\n         IF (iterator%pos .LE. iterator%nblks &\n             .AND. iterator%pos .NE. 0) THEN\n            row = iterator%row\n            column = iterator%col_i(iterator%pos)\n            IF (iterator%transpose) CALL swap(row, column)\n            blk_p = iterator%blk_p(iterator%pos)\n            transposed = blk_p .LT. 0\n            bp = ABS(blk_p)\n            rsize = iterator%row_size\n            csize = iterator%cbs(column)\n            block_row_size = rsize\n            block_col_size = csize\n            IF (PRESENT(row_size)) row_size = rsize\n            IF (PRESENT(col_size)) col_size = csize\n            IF (PRESENT(row_offset)) row_offset = iterator%row_offset\n            IF (PRESENT(col_offset)) col_offset = iterator%coff(column)\n            nze = rsize*csize\n            IF (transposed) CALL swap(rsize, csize)\n            CALL dbcsr_get_data(iterator%data_area, lin_blk_p, &\n                                lb=bp, ub=bp + nze - 1)\n            CALL pointer_rank_remap2(block, rsize, csize, lin_blk_p)\n            IF (PRESENT(block_number)) block_number = iterator%pos\n            ! Move to the next non-deleted position.\n            CALL iterator_advance(iterator)\n            CALL update_row_info(iterator)\n         ELSE\n            row = 0\n            column = 0\n            NULLIFY (block)\n            IF (PRESENT(block_number)) block_number = 0\n         END IF\n         IF (careful_mod) CALL timestop(error_handle)\n      END SUBROUTINE iterator_next_2d_block_${nametype1}$\n   #:endfor\n\nEND MODULE dbcsr_iterator_operations\n"
  },
  {
    "path": "src/cmake/DBCSRConfig.cmake.in",
    "content": "@PACKAGE_INIT@\n\ninclude(CMakeFindDependencyMacro)\n\n# the following should only be needed when building statically\n\nif (@USE_MPI@)\n  set(DBCSR_USE_MPI @USE_MPI@)\n  find_dependency(MPI)\nendif ()\n\nif (@USE_OPENMP@)\n  set(DBCSR_USE_OPENMP @USE_OPENMP@)\n  find_dependency(OpenMP)\nendif ()\n\nif (\"@USE_ACCEL@\" MATCHES \"cuda\")\n  set(DBCSR_USE_ACCEL @USE_ACCEL@)\n  enable_language(CUDA)\n  find_dependency(CUDAToolkit)\nendif ()\n\nif (\"@USE_ACCEL@\" MATCHES \"hip\")\n  set(DBCSR_USE_ACCEL @USE_ACCEL@)\n  enable_language(HIP)\n  find_dependency(hip)\n  find_dependency(hipblas)\n  find_dependency(hiprtc)\nendif ()\n\nif ((\"@USE_SMM@\" MATCHES \"libxsmm\") OR (\"@USE_ACCEL@\" MATCHES \"opencl\"))\n  set(DBCSR_USE_SMM @USE_SMM@)\n  find_package(PkgConfig)\n  pkg_check_modules(LIBXSMM IMPORTED_TARGET GLOBAL libxsmmf)\n  if (@USE_OPENMP@)\n    pkg_check_modules(LIBXSMMEXT IMPORTED_TARGET GLOBAL libxsmmext)\n  endif ()\nendif ()\n\ninclude(\"${CMAKE_CURRENT_LIST_DIR}/DBCSRTargets.cmake\")\n"
  },
  {
    "path": "src/core/PACKAGE",
    "content": "{\n\"description\": \"Core DBCSR matrix datastructure\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../acc\", \"../acc/cuda\", \"../acc/hip\", \"../mpi\", \"../base\", \"../data\", \"../mm\", \"../utils\"],\n}\n"
  },
  {
    "path": "src/core/dbcsr_array_types.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_array_types\n   !! Array objects with reference counting.\n\n#include \"base/dbcsr_base_uses.f90\"\n#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n   USE libxsmm, ONLY: libxsmm_diff\n#  define PURE_ARRAY_EQUALITY\n#else\n#  define PURE_ARRAY_EQUALITY PURE\n#endif\n\n   IMPLICIT NONE\n   PRIVATE\n\n   PUBLIC :: array_i1d_obj\n   PUBLIC :: array_new, &\n             array_hold, &\n             array_release, &\n             array_nullify, &\n             array_exists\n   PUBLIC :: array_data, &\n             array_size, &\n             array_equality\n   PUBLIC :: array_get\n\n   INTERFACE array_new\n      MODULE PROCEDURE array_new_i1d, array_new_i1d_lb\n   END INTERFACE\n   INTERFACE array_hold\n      MODULE PROCEDURE array_hold_i1d\n   END INTERFACE\n   INTERFACE array_release\n      MODULE PROCEDURE array_release_i1d\n   END INTERFACE\n   INTERFACE array_nullify\n      MODULE PROCEDURE array_nullify_i1d\n   END INTERFACE\n   INTERFACE array_exists\n      MODULE PROCEDURE array_exists_i1d\n   END INTERFACE\n   INTERFACE array_data\n      MODULE PROCEDURE array_data_i1d\n   END INTERFACE\n   INTERFACE array_size\n      MODULE PROCEDURE array_size_i1d\n   END INTERFACE\n   INTERFACE array_equality\n      MODULE PROCEDURE array_equality_i1\n      MODULE PROCEDURE array_equality_i1d\n   END INTERFACE\n   INTERFACE array_get\n      MODULE PROCEDURE array_get_i1d\n      MODULE PROCEDURE array_get_i1\n   END INTERFACE\n\n   TYPE array_i1d_type\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: DATA => Null()\n      INTEGER                                    :: refcount = 0\n   END TYPE array_i1d_type\n\n   TYPE array_i1d_obj\n      TYPE(array_i1d_type), POINTER      :: low => Null()\n   END TYPE array_i1d_obj\n\nCONTAINS\n\n   SUBROUTINE array_new_i1d(array, DATA, gift)\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: array\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: DATA\n      LOGICAL, INTENT(IN), OPTIONAL                      :: gift\n\n      INTEGER                                            :: lb, ub\n      LOGICAL                                            :: g\n\n      ALLOCATE (array%low)\n      array%low%refcount = 1\n      g = .FALSE.\n      IF (PRESENT(gift)) g = gift\n      IF (g) THEN\n         array%low%data => DATA\n         NULLIFY (DATA)\n      ELSE\n         lb = LBOUND(DATA, 1)\n         ub = UBOUND(DATA, 1)\n         ALLOCATE (array%low%data(lb:ub))\n         array%low%data(:) = DATA(:)\n      END IF\n   END SUBROUTINE array_new_i1d\n\n   SUBROUTINE array_new_i1d_lb(array, DATA, lb)\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: array\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: DATA\n      INTEGER, INTENT(IN)                                :: lb\n\n      INTEGER                                            :: ub\n\n      ALLOCATE (array%low)\n      array%low%refcount = 1\n      ub = lb + SIZE(DATA) - 1\n      ALLOCATE (array%low%data(lb:ub))\n      array%low%data(:) = DATA(:)\n   END SUBROUTINE array_new_i1d_lb\n\n   SUBROUTINE array_hold_i1d(array)\n      TYPE(array_i1d_obj), INTENT(INOUT)                 :: array\n!$OMP ATOMIC\n      array%low%refcount = array%low%refcount + 1\n   END SUBROUTINE array_hold_i1d\n\n   SUBROUTINE array_release_i1d(array)\n      TYPE(array_i1d_obj), INTENT(INOUT)                 :: array\n\n      IF (ASSOCIATED(array%low)) THEN\n         array%low%refcount = array%low%refcount - 1\n         IF (array%low%refcount .EQ. 0) THEN\n            DEALLOCATE (array%low%data)\n            DEALLOCATE (array%low)\n         END IF\n      END IF\n   END SUBROUTINE array_release_i1d\n\n   PURE SUBROUTINE array_nullify_i1d(array)\n      TYPE(array_i1d_obj), INTENT(INOUT)                 :: array\n\n      NULLIFY (array%low)\n   END SUBROUTINE array_nullify_i1d\n\n   PURE FUNCTION array_exists_i1d(array) RESULT(array_exists)\n      TYPE(array_i1d_obj), INTENT(IN)                    :: array\n      LOGICAL                                            :: array_exists\n\n      array_exists = ASSOCIATED(array%low)\n      IF (array_exists) array_exists = array%low%refcount .GT. 0\n   END FUNCTION array_exists_i1d\n\n   FUNCTION array_data_i1d(array) RESULT(DATA)\n      TYPE(array_i1d_obj), INTENT(IN)                    :: array\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: DATA\n\n      IF (ASSOCIATED(array%low)) THEN\n         DATA => array%low%data\n      ELSE\n         NULLIFY (DATA)\n      END IF\n   END FUNCTION array_data_i1d\n\n   PURE FUNCTION array_size_i1d(array) RESULT(the_size)\n      TYPE(array_i1d_obj), INTENT(IN)                    :: array\n      INTEGER                                            :: the_size\n\n      IF (ASSOCIATED(array%low)) THEN\n         the_size = SIZE(array%low%data)\n      ELSE\n         the_size = 0\n      END IF\n   END FUNCTION array_size_i1d\n\n   PURE_ARRAY_EQUALITY FUNCTION array_equality_i1(array1, array2) RESULT(are_equal)\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: array1, array2\n      LOGICAL                                            :: are_equal\n\n      are_equal = .FALSE.\n      IF (ASSOCIATED(array1) .AND. ASSOCIATED(array2)) THEN\n#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n         are_equal = .NOT. libxsmm_diff(array1, array2)\n#else\n         IF (SIZE(array1) .NE. SIZE(array2)) RETURN\n         are_equal = ALL(array1 .EQ. array2)\n#endif\n      END IF\n   END FUNCTION array_equality_i1\n\n   PURE_ARRAY_EQUALITY FUNCTION array_equality_i1d(array1, array2) RESULT(are_equal)\n      TYPE(array_i1d_obj), INTENT(IN)                    :: array1, array2\n      LOGICAL                                            :: are_equal\n\n      are_equal = .FALSE.\n      IF (ASSOCIATED(array1%low) .AND. ASSOCIATED(array2%low)) THEN\n#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n         are_equal = .NOT. libxsmm_diff(array1%low%data, array2%low%data)\n#else\n         IF (SIZE(array1%low%data) .NE. SIZE(array2%low%data)) RETURN\n         are_equal = ALL(array1%low%data .EQ. array2%low%data)\n#endif\n      END IF\n   END FUNCTION array_equality_i1d\n\n   PURE FUNCTION array_get_i1d(array, index1) RESULT(value)\n      TYPE(array_i1d_obj), INTENT(IN)                    :: array\n      INTEGER, INTENT(IN)                                :: index1\n      INTEGER                                            :: value\n\n      value = array%low%data(index1)\n   END FUNCTION array_get_i1d\n\n   PURE FUNCTION array_get_i1(array, index1) RESULT(value)\n      INTEGER, DIMENSION(:), INTENT(IN), POINTER         :: array\n      INTEGER, INTENT(IN)                                :: index1\n      INTEGER                                            :: value\n\n      value = array(index1)\n   END FUNCTION array_get_i1\nEND MODULE dbcsr_array_types\n"
  },
  {
    "path": "src/core/dbcsr_config.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_config\n   !! Configuration options for DBCSR\n   USE dbcsr_acc_device, ONLY: dbcsr_acc_get_ndevices\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          dp\n   USE dbcsr_kinds, ONLY: real_8\n   USE dbcsr_mpiwrap, ONLY: mp_environ, mp_comm_world\n   USE dbcsr_string_utilities, ONLY: uppercase, str2int\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_num_threads, omp_get_max_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_config'\n\n   REAL(KIND=dp), PARAMETER             :: default_resize_factor = 1.2_dp\n\n   INTEGER, PARAMETER :: max_paramter_name_len = 100\n   INTEGER, PARAMETER :: max_paramter_value_len = 100\n\n   ! Possible drivers to use for matrix multiplications\n   INTEGER, PARAMETER :: mm_driver_auto = 0\n   INTEGER, PARAMETER :: mm_driver_matmul = 1\n   INTEGER, PARAMETER :: mm_driver_blas = 2\n   INTEGER, PARAMETER :: mm_driver_smm = 3\n   INTEGER, PARAMETER :: mm_driver_xsmm = 4\n\n   CHARACTER(len=*), PARAMETER :: mm_name_auto = \"AUTO\", &\n                                  mm_name_blas = \"BLAS\", &\n                                  mm_name_matmul = \"MATMUL\", &\n                                  mm_name_smm = \"SMM\", &\n                                  mm_name_xsmm = \"XSMM\"\n\n#if defined (__HAS_smm_dnn)\n   LOGICAL, PARAMETER :: has_smm = .TRUE.\n#else\n   LOGICAL, PARAMETER :: has_smm = .FALSE.\n#endif\n\n#if defined(__HAS_smm_vec)\n   LOGICAL, PARAMETER :: has_smm_vec = .TRUE.\n#else\n   LOGICAL, PARAMETER :: has_smm_vec = .FALSE.\n#endif\n\n#if defined(__LIBXSMM)\n   LOGICAL, PARAMETER :: has_xsmm = .TRUE.\n#else\n   LOGICAL, PARAMETER :: has_xsmm = .FALSE.\n#endif\n\n#if defined (__DBCSR_ACC)\n   LOGICAL, PARAMETER :: has_acc = .TRUE.\n#else\n   LOGICAL, PARAMETER :: has_acc = .FALSE.\n#endif\n\n#if defined (__parallel)\n   LOGICAL, PARAMETER :: has_MPI = .TRUE.\n#else\n   LOGICAL, PARAMETER :: has_MPI = .FALSE.\n#endif\n\n   INTEGER, PARAMETER :: mm_stack_default_size_cpu = 1000\n   INTEGER, PARAMETER :: mm_stack_default_size_gpu = 30000\n#if defined(__HAS_smm_vec) || defined (__DBCSR_ACC)\n   INTEGER, PARAMETER :: mm_stack_default_size = mm_stack_default_size_gpu\n#else\n   INTEGER, PARAMETER :: mm_stack_default_size = mm_stack_default_size_cpu\n#endif\n\n   LOGICAL, PARAMETER :: mm_dense_default_cpu = .TRUE.\n   LOGICAL, PARAMETER :: mm_dense_default_gpu = .FALSE.\n#if defined (__DBCSR_ACC)\n   LOGICAL, PARAMETER :: mm_dense_default = mm_dense_default_gpu\n#else\n   LOGICAL, PARAMETER :: mm_dense_default = mm_dense_default_cpu\n#endif\n\n#if defined(__LIBXSMM)\n   INTEGER, PARAMETER :: mm_default_driver = mm_driver_xsmm\n#elif defined (__HAS_smm_dnn)\n   INTEGER, PARAMETER :: mm_default_driver = mm_driver_smm\n#else\n   INTEGER, PARAMETER :: mm_default_driver = mm_driver_blas ! always available\n#endif\n\n   TYPE, ABSTRACT :: CONF_PAR\n      CHARACTER :: source = 'D' ! Possible values are: D=Default, E=Environment, U=User code\n      CHARACTER(len=max_paramter_name_len) :: name = \"\"\n\n   CONTAINS\n\n      PROCEDURE, NON_OVERRIDABLE :: env_value => conf_par_env_value\n      PROCEDURE, NON_OVERRIDABLE :: print_source\n\n   END TYPE CONF_PAR\n\n   TYPE, EXTENDS(CONF_PAR) :: CONF_PAR_INT\n      INTEGER :: val = -1, defval = -1\n      LOGICAL :: ensure_positive = .TRUE.\n\n   CONTAINS\n\n      PROCEDURE :: set => set_conf_par_int\n\n   END TYPE CONF_PAR_INT\n\n   TYPE, EXTENDS(CONF_PAR) :: CONF_PAR_MM_DRIVER\n      INTEGER :: val = -1, defval = -1\n\n   CONTAINS\n\n      PROCEDURE :: set => set_conf_par_mm_driver\n\n   END TYPE CONF_PAR_MM_DRIVER\n\n   TYPE, EXTENDS(CONF_PAR) :: CONF_PAR_LOGICAL\n      LOGICAL :: val = .FALSE., defval = .FALSE.\n\n   CONTAINS\n\n      PROCEDURE :: set => set_conf_par_logical\n\n   END TYPE CONF_PAR_LOGICAL\n\n   TYPE, EXTENDS(CONF_PAR) :: CONF_PAR_REAL\n      REAL(KIND=real_8) :: val = -1, defval = -1\n\n   CONTAINS\n\n      PROCEDURE :: set => set_conf_par_real\n\n   END TYPE CONF_PAR_REAL\n\n! Convenient macro to define a configuration parameter\n#define DBCSR_PARAMETER(N, T, V) TYPE(T) :: N = T(name=DBCSR_STRINGIZE(N), val=V, defval=V)\n\n   TYPE dbcsr_config_type\n      TYPE(CONF_PAR_MM_DRIVER) :: MM_DRIVER = &\n                                  CONF_PAR_MM_DRIVER(name=\"MM_DRIVER\", val=mm_default_driver, defval=mm_default_driver)\n      TYPE(CONF_PAR_INT) :: MM_STACK_SIZE = &\n                            CONF_PAR_INT(name=\"MM_STACK_SIZE\", val=mm_stack_default_size, defval=mm_stack_default_size)\n      DBCSR_PARAMETER(AVG_ELEMENTS_IMAGES, CONF_PAR_INT, 0)\n      DBCSR_PARAMETER(NUM_MULT_IMAGES, CONF_PAR_INT, 1)\n      DBCSR_PARAMETER(N_STACKS, CONF_PAR_INT, 3)\n      DBCSR_PARAMETER(USE_MPI_RMA, CONF_PAR_LOGICAL, .FALSE.)\n      DBCSR_PARAMETER(NUM_LAYERS_3D, CONF_PAR_INT, 1)\n      DBCSR_PARAMETER(USE_COMM_THREAD, CONF_PAR_LOGICAL, .TRUE.)\n      DBCSR_PARAMETER(COMM_THREAD_LOAD, CONF_PAR_INT, 100)\n      DBCSR_PARAMETER(MM_DENSE, CONF_PAR_LOGICAL, mm_dense_default)\n      DBCSR_PARAMETER(MULTREC_LIMIT, CONF_PAR_INT, 512)\n      DBCSR_PARAMETER(RUN_ON_GPU, CONF_PAR_LOGICAL, .TRUE.)\n      DBCSR_PARAMETER(ACCDRV_THREAD_BUFFERS, CONF_PAR_INT, 8)\n      TYPE(CONF_PAR_LOGICAL) :: ACCDRV_AVOID_AFTER_BUSY = &\n                                CONF_PAR_LOGICAL(name=\"ACCDRV_AVOID_AFTER_BUSY\", val=.FALSE., defval=.FALSE.)\n      DBCSR_PARAMETER(ACCDRV_MIN_FLOP_PROCESS, CONF_PAR_INT, 0)\n      DBCSR_PARAMETER(ACCDRV_STACK_SORT, CONF_PAR_LOGICAL, .TRUE.)\n      DBCSR_PARAMETER(ACCDRV_MIN_FLOP_SORT, CONF_PAR_INT, 4000)\n      TYPE(CONF_PAR_LOGICAL) :: ACCDRV_DO_INHOMOGENOUS = &\n                                CONF_PAR_LOGICAL(name=\"ACCDRV_DO_INHOMOGENOUS\", val=.TRUE., defval=.TRUE.)\n      DBCSR_PARAMETER(ACCDRV_BINNING_NBINS, CONF_PAR_INT, 4096)\n      DBCSR_PARAMETER(ACCDRV_BINNING_BINSIZE, CONF_PAR_INT, 16)\n      DBCSR_PARAMETER(USE_MEMPOOLS_CPU, CONF_PAR_LOGICAL, .FALSE.)\n      DBCSR_PARAMETER(USE_MPI_ALLOCATOR, CONF_PAR_LOGICAL, .FALSE.)\n      DBCSR_PARAMETER(TAS_SPLIT_FACTOR, CONF_PAR_REAL, 1.0_real_8)\n      DBCSR_PARAMETER(USE_ACC_G2G, CONF_PAR_LOGICAL, .FALSE.)\n   END TYPE dbcsr_config_type\n\n   TYPE(dbcsr_config_type), PROTECTED, SAVE :: dbcsr_cfg = dbcsr_config_type() ! defaults\n\n   ! Max dimension for any block dimension\n   INTEGER, PARAMETER :: max_kernel_dim = 80\n   ! Accelerator active device, default to -1, i.e. no device\n   INTEGER, PARAMETER :: default_accdrv_active_device_id = -1\n   INTEGER :: accdrv_active_device_id = default_accdrv_active_device_id\n\n   PUBLIC :: dbcsr_cfg, has_MPI, has_acc, default_resize_factor\n   PUBLIC :: mm_driver_blas, mm_driver_matmul, mm_driver_smm, mm_driver_xsmm, mm_driver_auto\n   PUBLIC :: dbcsr_set_config, dbcsr_get_default_config, dbcsr_print_config\n   PUBLIC :: max_kernel_dim\n   PUBLIC :: get_accdrv_active_device_id, set_accdrv_active_device_id, reset_accdrv_active_device_id\n   PUBLIC :: use_acc\n\nCONTAINS\n\n   FUNCTION print_source(this)\n      CLASS(CONF_PAR), INTENT(IN) :: this\n      CHARACTER(len=3) :: print_source\n\n      print_source = \"(\"//this%source//\")\"\n   END FUNCTION print_source\n\n   FUNCTION conf_par_env_value(this, env_val) result(status)\n      CLASS(CONF_PAR), INTENT(INOUT) :: this\n      CLASS(*), INTENT(OUT) :: env_val\n      LOGICAL :: status\n\n      CHARACTER(len=max_paramter_name_len) :: string_val\n      INTEGER :: stat\n\n      ! Do nothing is already set via environment variable\n      IF (this%source == 'E') THEN\n         status = .TRUE.\n         RETURN\n      END IF\n\n      ! Check environment variable, only if default is set\n      IF (this%source == 'D') THEN\n         CALL uppercase(this%name)\n         CALL get_environment_variable(\"DBCSR_\"//this%name, string_val, status=stat)\n         IF (stat .NE. 0 .AND. stat .NE. 1) DBCSR_ABORT(\"Invalid environment value\")\n         IF (stat == 0) THEN\n            this%source = 'E'\n\n            SELECT TYPE (env_val)\n            TYPE IS (CHARACTER(len=*))\n               env_val = string_val\n            TYPE IS (INTEGER)\n               call str2int(string_val, env_val, stat)\n               IF (stat .NE. 0) &\n                  DBCSR_ABORT(\"Wrong environment variable reading. Expecting an integer value.\")\n            CLASS DEFAULT\n               DBCSR_ABORT(\"Unrecognized type\")\n            END SELECT\n         END IF\n      END IF\n\n      status = .FALSE.\n\n   END FUNCTION CONF_PAR_ENV_VALUE\n\n   SUBROUTINE set_conf_par_int(this, integer_val)\n      CLASS(CONF_PAR_INT), INTENT(INOUT) :: this\n      INTEGER, INTENT(IN), OPTIONAL :: integer_val\n\n      INTEGER :: my_integer_val\n\n      IF (this%env_value(my_integer_val)) RETURN\n\n      ! Use User-code value\n      IF (PRESENT(integer_val) .AND. this%source .NE. 'E') THEN\n         my_integer_val = integer_val\n         this%source = 'U'\n      END IF\n\n      IF (PRESENT(integer_val) .OR. this%source .EQ. 'E') THEN\n         ! Set default if the number is negative\n         IF (this%ensure_positive .AND. my_integer_val < 0) THEN\n            this%val = this%defval\n            this%source = 'D'\n         ELSE\n            this%val = my_integer_val\n         END IF\n      END IF\n\n   END SUBROUTINE set_conf_par_int\n\n   SUBROUTINE set_conf_par_mm_driver(this, mm_driver)\n      CLASS(CONF_PAR_MM_DRIVER), INTENT(INOUT) :: this\n      CHARACTER(len=*), INTENT(IN), OPTIONAL           :: mm_driver\n\n      CHARACTER(len=max_paramter_value_len) :: my_mm_driver\n\n      IF (this%env_value(my_mm_driver)) RETURN\n\n      ! Use User-code value\n      IF (PRESENT(mm_driver) .AND. this%source .NE. 'E') THEN\n         my_mm_driver = TRIM(mm_driver)\n         this%source = 'U'\n      END IF\n\n      ! Check input value\n      IF (PRESENT(mm_driver) .OR. this%source .EQ. 'E') THEN\n         CALL uppercase(my_mm_driver)\n         IF (my_mm_driver .EQ. mm_name_auto) THEN\n            this%val = this%defval\n         ELSE IF (my_mm_driver .EQ. mm_name_blas) THEN\n            this%val = mm_driver_blas ! always available\n         ELSE IF (my_mm_driver .EQ. mm_name_matmul) THEN\n            this%val = mm_driver_matmul ! always available\n         ELSE IF (my_mm_driver .EQ. mm_name_smm) THEN\n            IF (.NOT. has_smm) DBCSR_ABORT(\"Support for libsmm not compiled in.\")\n            this%val = mm_driver_smm\n         ELSE IF (my_mm_driver .EQ. mm_name_xsmm) THEN\n            IF (.NOT. has_xsmm) DBCSR_ABORT(\"Support for libxsmm not compiled in.\")\n            this%val = mm_driver_xsmm\n         ELSE\n            DBCSR_ABORT(\"Unknown MM driver: \"//TRIM(mm_driver))\n         END IF\n      END IF\n   END SUBROUTINE set_conf_par_mm_driver\n\n   SUBROUTINE set_conf_par_logical(this, logical_val)\n      CLASS(CONF_PAR_LOGICAL), INTENT(INOUT) :: this\n      LOGICAL, INTENT(IN), OPTIONAL :: logical_val\n\n      INTEGER :: my_integer_val\n\n      IF (this%env_value(my_integer_val)) RETURN\n\n      ! Use env value\n      IF (this%source .EQ. 'E') THEN\n         this%val = (my_integer_val .NE. 0)\n         RETURN\n      END IF\n\n      ! Use User-code value\n      IF (PRESENT(logical_val)) THEN\n         this%val = logical_val\n         this%source = 'U'\n      END IF\n\n   END SUBROUTINE set_conf_par_logical\n\n   SUBROUTINE set_conf_par_real(this, real_val)\n      CLASS(CONF_PAR_REAL), INTENT(INOUT) :: this\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL :: real_val\n\n      IF (PRESENT(real_val)) THEN\n         this%val = real_val\n         this%source = 'U'\n      END IF\n\n   END SUBROUTINE set_conf_par_real\n\n   SUBROUTINE dbcsr_set_config( &\n      mm_driver, &\n      use_mpi_allocator, &\n      mm_stack_size, &\n      avg_elements_images, &\n      num_mult_images, &\n      nstacks, &\n      use_mpi_rma, &\n      num_layers_3D, &\n      use_comm_thread, &\n      comm_thread_load, &\n      mm_dense, &\n      multrec_limit, &\n      run_on_gpu, &\n      accdrv_thread_buffers, &\n      accdrv_avoid_after_busy, &\n      accdrv_min_flop_process, &\n      accdrv_stack_sort, &\n      accdrv_min_flop_sort, &\n      accdrv_do_inhomogenous, &\n      accdrv_binning_nbins, &\n      accdrv_binning_binsize, &\n      use_mempools_cpu, &\n      tas_split_factor, &\n      use_acc_g2g)\n\n      CHARACTER(len=*), INTENT(IN), OPTIONAL             :: mm_driver\n      LOGICAL, INTENT(IN), OPTIONAL                      :: use_mpi_allocator\n      INTEGER, INTENT(IN), OPTIONAL                      :: avg_elements_images\n         !! Maximum number of elements for each image\n      INTEGER, INTENT(IN), OPTIONAL                      :: num_mult_images\n         !! Multiplicative factor for number of virtual images\n      INTEGER, INTENT(IN), OPTIONAL                      :: nstacks\n         !! Number of stacks to use\n      INTEGER, INTENT(IN), OPTIONAL                      :: mm_stack_size\n      LOGICAL, INTENT(IN), OPTIONAL                      :: use_mpi_rma\n         !! use_mpi_rma RMA algorithm\n      INTEGER, INTENT(IN), OPTIONAL                      :: num_layers_3D\n         !! num_layers_3D 3D layers\n      LOGICAL, INTENT(IN), OPTIONAL                      :: use_comm_thread\n      INTEGER, INTENT(IN), OPTIONAL                      :: comm_thread_load\n      LOGICAL, INTENT(IN), OPTIONAL                      :: mm_dense\n      LOGICAL, INTENT(IN), OPTIONAL                      :: run_on_gpu\n      INTEGER, INTENT(IN), OPTIONAL                      :: multrec_limit, accdrv_thread_buffers\n      LOGICAL, INTENT(IN), OPTIONAL                      :: accdrv_avoid_after_busy\n      INTEGER, INTENT(IN), OPTIONAL                      :: accdrv_min_flop_process\n      LOGICAL, INTENT(IN), OPTIONAL                      :: accdrv_stack_sort\n      INTEGER, INTENT(IN), OPTIONAL                      :: accdrv_min_flop_sort\n      LOGICAL, INTENT(IN), OPTIONAL                      :: accdrv_do_inhomogenous\n      INTEGER, INTENT(IN), OPTIONAL                      :: accdrv_binning_nbins, &\n                                                            accdrv_binning_binsize\n      LOGICAL, INTENT(IN), OPTIONAL                      :: use_mempools_cpu\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: tas_split_factor\n      LOGICAL, INTENT(IN), OPTIONAL                      :: use_acc_g2g\n\n      INTEGER, SAVE                                      :: nthreads = 0\n\n      CALL dbcsr_cfg%use_mpi_allocator%set(use_mpi_allocator)\n      CALL dbcsr_cfg%avg_elements_images%set(avg_elements_images)\n      CALL dbcsr_cfg%num_mult_images%set(num_mult_images)\n      CALL dbcsr_cfg%use_mpi_rma%set(use_mpi_rma)\n      CALL dbcsr_cfg%num_layers_3D%set(num_layers_3D)\n      CALL dbcsr_cfg%use_comm_thread%set(use_comm_thread)\n      CALL dbcsr_cfg%multrec_limit%set(multrec_limit)\n      CALL dbcsr_cfg%run_on_gpu%set(run_on_gpu)\n      CALL dbcsr_cfg%accdrv_thread_buffers%set(accdrv_thread_buffers)\n      CALL dbcsr_cfg%accdrv_avoid_after_busy%set(accdrv_avoid_after_busy)\n      CALL dbcsr_cfg%accdrv_min_flop_process%set(accdrv_min_flop_process)\n      CALL dbcsr_cfg%accdrv_stack_sort%set(accdrv_stack_sort)\n      CALL dbcsr_cfg%accdrv_min_flop_sort%set(accdrv_min_flop_sort)\n      CALL dbcsr_cfg%accdrv_do_inhomogenous%set(accdrv_do_inhomogenous)\n      CALL dbcsr_cfg%accdrv_binning_nbins%set(accdrv_binning_nbins)\n      CALL dbcsr_cfg%accdrv_binning_binsize%set(accdrv_binning_binsize)\n      CALL dbcsr_cfg%use_mempools_cpu%set(use_mempools_cpu)\n      CALL dbcsr_cfg%tas_split_factor%set(tas_split_factor)\n      CALL dbcsr_cfg%use_acc_g2g%set(use_acc_g2g)\n\n      IF (0 == nthreads) THEN\n         nthreads = 1\n!$       nthreads = OMP_GET_MAX_THREADS()\n      END IF\n      ! Change default values\n      IF (dbcsr_cfg%use_mpi_rma%val) THEN\n         dbcsr_cfg%comm_thread_load%defval = 100\n      ELSE\n         dbcsr_cfg%comm_thread_load%defval = MAX(0, 90 - (30*nthreads)/8)\n      END IF\n      CALL dbcsr_cfg%comm_thread_load%set(comm_thread_load)\n\n      CALL dbcsr_cfg%n_stacks%set(nstacks)\n      CALL dbcsr_cfg%mm_driver%set(mm_driver)\n\n      ! If ACC is turned-off, use the CPU defaults\n      IF (.NOT. PRESENT(mm_stack_size) .AND. .NOT. dbcsr_cfg%run_on_gpu%val) THEN\n         CALL dbcsr_cfg%mm_stack_size%set(mm_stack_default_size_cpu)\n      ELSE\n         CALL dbcsr_cfg%mm_stack_size%set(mm_stack_size)\n      END IF\n\n      IF (.NOT. PRESENT(mm_dense) .AND. .NOT. dbcsr_cfg%run_on_gpu%val) THEN\n         CALL dbcsr_cfg%mm_dense%set(mm_dense_default_cpu)\n      ELSE\n         CALL dbcsr_cfg%mm_dense%set(mm_dense)\n      END IF\n\n   END SUBROUTINE dbcsr_set_config\n\n   SUBROUTINE dbcsr_get_default_config( &\n      use_mpi_allocator, &\n      mm_stack_size, &\n      avg_elements_images, &\n      num_mult_images, &\n      nstacks, &\n      use_mpi_rma, &\n      num_layers_3D, &\n      use_comm_thread, &\n      comm_thread_load, &\n      mm_dense, &\n      run_on_gpu, &\n      multrec_limit, &\n      accdrv_thread_buffers, &\n      accdrv_avoid_after_busy, &\n      accdrv_min_flop_process, &\n      accdrv_stack_sort, &\n      accdrv_min_flop_sort, &\n      accdrv_do_inhomogenous, &\n      accdrv_binning_nbins, &\n      accdrv_binning_binsize, &\n      use_mempools_cpu, &\n      tas_split_factor, &\n      use_acc_g2g)\n!\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: use_mpi_allocator\n      INTEGER, INTENT(OUT), OPTIONAL                     :: mm_stack_size, avg_elements_images, &\n                                                            num_mult_images, nstacks\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: use_mpi_rma\n      INTEGER, INTENT(OUT), OPTIONAL                     :: num_layers_3D\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: use_comm_thread\n      INTEGER, INTENT(OUT), OPTIONAL                     :: comm_thread_load\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: mm_dense, run_on_gpu\n      INTEGER, INTENT(OUT), OPTIONAL                     :: multrec_limit, accdrv_thread_buffers\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: accdrv_avoid_after_busy\n      INTEGER, INTENT(OUT), OPTIONAL                     :: accdrv_min_flop_process\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: accdrv_stack_sort\n      INTEGER, INTENT(OUT), OPTIONAL                     :: accdrv_min_flop_sort\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: accdrv_do_inhomogenous\n      INTEGER, INTENT(OUT), OPTIONAL                     :: accdrv_binning_nbins, &\n                                                            accdrv_binning_binsize\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: use_mempools_cpu\n      REAL(KIND=real_8), INTENT(OUT), OPTIONAL           :: tas_split_factor\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: use_acc_g2g\n\n      IF (PRESENT(use_mpi_allocator)) use_mpi_allocator = dbcsr_cfg%use_mpi_allocator%defval\n      IF (PRESENT(mm_stack_size)) mm_stack_size = dbcsr_cfg%mm_stack_size%defval\n      IF (PRESENT(avg_elements_images)) avg_elements_images = dbcsr_cfg%avg_elements_images%defval\n      IF (PRESENT(num_mult_images)) num_mult_images = dbcsr_cfg%num_mult_images%defval\n      IF (PRESENT(use_mpi_rma)) use_mpi_rma = dbcsr_cfg%use_mpi_rma%defval\n      IF (PRESENT(num_layers_3D)) num_layers_3D = dbcsr_cfg%num_layers_3D%defval\n      IF (PRESENT(use_comm_thread)) use_comm_thread = dbcsr_cfg%use_comm_thread%defval\n      IF (PRESENT(comm_thread_load)) comm_thread_load = dbcsr_cfg%comm_thread_load%defval\n      IF (PRESENT(mm_dense)) mm_dense = dbcsr_cfg%mm_dense%defval\n      IF (PRESENT(multrec_limit)) multrec_limit = dbcsr_cfg%multrec_limit%defval\n      IF (PRESENT(run_on_gpu)) run_on_gpu = dbcsr_cfg%run_on_gpu%defval\n      IF (PRESENT(accdrv_thread_buffers)) accdrv_thread_buffers = dbcsr_cfg%accdrv_thread_buffers%defval\n      IF (PRESENT(accdrv_avoid_after_busy)) accdrv_avoid_after_busy = dbcsr_cfg%accdrv_avoid_after_busy%defval\n      IF (PRESENT(accdrv_min_flop_process)) accdrv_min_flop_process = dbcsr_cfg%accdrv_min_flop_process%defval\n      IF (PRESENT(accdrv_stack_sort)) accdrv_stack_sort = dbcsr_cfg%accdrv_stack_sort%defval\n      IF (PRESENT(accdrv_min_flop_sort)) accdrv_min_flop_sort = dbcsr_cfg%accdrv_min_flop_sort%defval\n      IF (PRESENT(accdrv_do_inhomogenous)) accdrv_do_inhomogenous = dbcsr_cfg%accdrv_do_inhomogenous%defval\n      IF (PRESENT(accdrv_binning_nbins)) accdrv_binning_nbins = dbcsr_cfg%accdrv_binning_nbins%defval\n      IF (PRESENT(accdrv_binning_binsize)) accdrv_binning_binsize = dbcsr_cfg%accdrv_binning_binsize%defval\n      IF (PRESENT(use_mempools_cpu)) use_mempools_cpu = dbcsr_cfg%use_mempools_cpu%defval\n      IF (PRESENT(nstacks)) nstacks = dbcsr_cfg%n_stacks%defval\n      IF (PRESENT(tas_split_factor)) tas_split_factor = dbcsr_cfg%tas_split_factor%defval\n      IF (PRESENT(use_acc_g2g)) use_acc_g2g = dbcsr_cfg%use_acc_g2g%defval\n\n   END SUBROUTINE dbcsr_get_default_config\n\n   SUBROUTINE dbcsr_print_config(unit_nr)\n      !! Prints configuration for DBCSR\n      INTEGER, INTENT(IN)                                :: unit_nr\n\n      CHARACTER(len=default_string_length)               :: mm_name\n\n      IF (unit_nr <= 0) &\n         RETURN\n\n      SELECT CASE (dbcsr_cfg%mm_driver%val)\n      CASE (mm_driver_blas); mm_name = mm_name_blas\n      CASE (mm_driver_matmul); mm_name = mm_name_matmul\n      CASE (mm_driver_smm); mm_name = mm_name_smm\n      CASE (mm_driver_xsmm); mm_name = mm_name_xsmm\n      CASE DEFAULT\n         DBCSR_ABORT(\"Unknown MM driver\")\n      END SELECT\n\n      WRITE (UNIT=unit_nr, FMT='(1X,A,T41,A40,A4)') &\n         \"DBCSR| CPU Multiplication driver\", ADJUSTR(mm_name(1:40)), &\n         dbcsr_cfg%mm_driver%print_source()\n\n      WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n         \"DBCSR| Multrec recursion limit\", dbcsr_cfg%multrec_limit%val, &\n         dbcsr_cfg%multrec_limit%print_source()\n      WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n         \"DBCSR| Multiplication stack size\", dbcsr_cfg%mm_stack_size%val, &\n         dbcsr_cfg%mm_stack_size%print_source()\n\n      IF (dbcsr_cfg%avg_elements_images%val > 0) THEN\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n            \"DBCSR| Average elements for images\", dbcsr_cfg%avg_elements_images%val, &\n            dbcsr_cfg%avg_elements_images%print_source()\n      ELSE\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T72,A,A4)') &\n            \"DBCSR| Maximum elements for images\", \"UNLIMITED\", &\n            dbcsr_cfg%avg_elements_images%print_source()\n      END IF\n      WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n         \"DBCSR| Multiplicative factor virtual images\", dbcsr_cfg%num_mult_images%val, &\n         dbcsr_cfg%num_mult_images%print_source()\n\n      WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &\n         \"DBCSR| Use multiplication densification\", dbcsr_cfg%mm_dense%val, &\n         dbcsr_cfg%mm_dense%print_source()\n\n      WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n         \"DBCSR| Multiplication size stacks\", dbcsr_cfg%n_stacks%val, &\n         dbcsr_cfg%n_stacks%print_source()\n\n      WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &\n         \"DBCSR| Use memory pool for CPU allocation\", dbcsr_cfg%use_mempools_cpu%val, &\n         dbcsr_cfg%use_mempools_cpu%print_source()\n\n      IF (has_mpi) THEN\n         IF (dbcsr_cfg%num_layers_3D%val < 2) THEN\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T75,A,A4)') &\n               \"DBCSR| Number of 3D layers\", \"SINGLE\", &\n               dbcsr_cfg%use_mempools_cpu%print_source()\n         ELSE\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n               \"DBCSR| Number of 3D layers\", dbcsr_cfg%num_layers_3D%val, &\n               dbcsr_cfg%use_mempools_cpu%print_source()\n         END IF\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &\n            \"DBCSR| Use MPI memory allocation\", dbcsr_cfg%use_mpi_allocator%val, &\n            dbcsr_cfg%use_mpi_allocator%print_source()\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &\n            \"DBCSR| Use RMA algorithm\", dbcsr_cfg%use_mpi_rma%val, &\n            dbcsr_cfg%use_mpi_rma%print_source()\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &\n            \"DBCSR| Use Communication thread\", dbcsr_cfg%use_comm_thread%val, &\n            dbcsr_cfg%use_comm_thread%print_source()\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n            \"DBCSR| Communication thread load\", dbcsr_cfg%comm_thread_load%val, &\n            dbcsr_cfg%comm_thread_load%print_source()\n\n         BLOCK\n            INTEGER :: numnodes, mynode\n            CALL mp_environ(numnodes, mynode, mp_comm_world)\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') &\n               \"DBCSR| MPI: My process id\", mynode\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') &\n               \"DBCSR| MPI: Number of processes\", numnodes\n         END BLOCK\n      END IF\n\n      BLOCK\n         INTEGER :: numthreads, numthreads_max\n         numthreads = -1\n         numthreads_max = -1\n!$OMP PARALLEL DEFAULT(NONE) SHARED(numthreads, numthreads_max)\n!$OMP MASTER\n!$       numthreads = omp_get_num_threads()\n!$       numthreads_max = omp_get_max_threads()\n!$OMP END MASTER\n!$OMP END PARALLEL\n         IF (numthreads_max > 0) THEN\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') &\n               \"DBCSR| OMP: Current number of threads\", numthreads\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') &\n               \"DBCSR| OMP: Max number of threads\", numthreads_max\n         ELSE\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,A11)') &\n               \"DBCSR| OMP: Current number of threads\", \"<N/A>\"\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,A11)') &\n               \"DBCSR| OMP: Max number of threads\", \"<N/A>\"\n         END IF\n      END BLOCK\n\n      IF (has_acc) THEN\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11)') &\n            \"DBCSR| ACC: Number of devices/node\", dbcsr_acc_get_ndevices()\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n            \"DBCSR| ACC: Number of stack-buffers per thread\", dbcsr_cfg%accdrv_thread_buffers%val, &\n            dbcsr_cfg%accdrv_thread_buffers%print_source()\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &\n            \"DBCSR| ACC: Avoid driver after busy \", dbcsr_cfg%accdrv_avoid_after_busy%val, &\n            dbcsr_cfg%accdrv_avoid_after_busy%print_source()\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &\n            \"DBCSR| ACC: Process inhomogeneous stacks\", dbcsr_cfg%accdrv_do_inhomogenous%val, &\n            dbcsr_cfg%accdrv_do_inhomogenous%print_source()\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n            \"DBCSR| ACC: Min. flop for processing\", dbcsr_cfg%accdrv_min_flop_process%val, &\n            dbcsr_cfg%accdrv_min_flop_process%print_source()\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &\n            \"DBCSR| ACC: Use G2G algorithm\", dbcsr_cfg%use_acc_g2g%val, &\n            dbcsr_cfg%use_acc_g2g%print_source()\n         IF (dbcsr_cfg%accdrv_stack_sort%val) THEN\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n               \"DBCSR| ACC: Min. flop for sorting\", dbcsr_cfg%accdrv_min_flop_sort%val, &\n               dbcsr_cfg%accdrv_min_flop_sort%print_source()\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n               \"DBCSR| ACC: Number of binning bins\", dbcsr_cfg%accdrv_binning_nbins%val, &\n               dbcsr_cfg%accdrv_binning_nbins%print_source()\n            WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &\n               \"DBCSR| ACC: Size of binning bins\", dbcsr_cfg%accdrv_binning_binsize%val, &\n               dbcsr_cfg%accdrv_binning_binsize%print_source()\n         END IF\n         WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &\n            \"DBCSR| ACC: GPU backend is enabled\", dbcsr_cfg%run_on_gpu%val, dbcsr_cfg%run_on_gpu%print_source()\n      END IF\n\n      WRITE (UNIT=unit_nr, FMT='(1X,A,T74,ES7.1,A4)') &\n         \"DBCSR| Split modifier for TAS multiplication algorithm\", dbcsr_cfg%tas_split_factor%val, &\n         dbcsr_cfg%tas_split_factor%print_source()\n\n   END SUBROUTINE dbcsr_print_config\n\n   FUNCTION get_accdrv_active_device_id()\n      INTEGER :: get_accdrv_active_device_id\n\n      get_accdrv_active_device_id = accdrv_active_device_id\n\n   END FUNCTION get_accdrv_active_device_id\n\n   SUBROUTINE set_accdrv_active_device_id(in_accdrv_active_device_id)\n      INTEGER, INTENT(IN) :: in_accdrv_active_device_id\n\n      ! Abort if device already assigned\n      IF (dbcsr_acc_get_ndevices() .GT. 0) THEN\n         IF (accdrv_active_device_id .GE. 0) &\n            DBCSR_ABORT(\"Accelerator device ID already set\")\n         IF (in_accdrv_active_device_id .LT. 0 .OR. in_accdrv_active_device_id .GE. dbcsr_acc_get_ndevices()) &\n            DBCSR_ABORT(\"Invalid accelerator device ID\")\n         accdrv_active_device_id = in_accdrv_active_device_id\n      END IF\n\n   END SUBROUTINE set_accdrv_active_device_id\n\n   SUBROUTINE reset_accdrv_active_device_id()\n      accdrv_active_device_id = default_accdrv_active_device_id\n   END SUBROUTINE reset_accdrv_active_device_id\n\n   PURE FUNCTION use_acc()\n      LOGICAL :: use_acc\n\n      IF (has_acc .AND. dbcsr_cfg%run_on_gpu%val) THEN\n         use_acc = .TRUE.\n      ELSE\n         use_acc = .FALSE.\n      END IF\n   END FUNCTION use_acc\n\nEND MODULE dbcsr_config\n"
  },
  {
    "path": "src/core/dbcsr_dict.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n#:include 'dbcsr_dict.fypp'\nMODULE dbcsr_dict\n   !! A dictionary (also known as hashtable or hashmap).\n   !! Internally the dictionary uses an array to holds its data.\n   !! If this array reaches a load-factor of 75%, a new array with twice the\n   !! size will be allocated and the items are then copied over.\n   !! This ensures that the dictionary will perform operations in O(1).\n\n   USE dbcsr_kinds, ONLY: ${uselist(usekinds)}$\n   USE dbcsr_timings_base_type, ONLY: ${uselist(usetimings)}$\n#include \"base/dbcsr_base_uses.f90\"\n   IMPLICIT NONE\n\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_dict'\n\n   PUBLIC :: dict_init, dict_items, dict_haskey, &\n             dict_set, dict_get, dict_size, dict_destroy\n\n   #:for keytype, valuetype in keyvalue_list\n      PUBLIC :: dict_${keytype}$_${valuetype}$_type\n      PUBLIC :: dict_${keytype}$_${valuetype}$_item_type\n   #:endfor\n\n   #:for keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal, default_key, default_value in inst_params\n      !this is an internal type\n      !Calculating hashes might be expensive, therefore they are stored\n      !for use during change_capacity().\n      TYPE private_item_type_${keytype}$_${valuetype}$\n         PRIVATE\n         ${keytype_fort}$                            :: key ${key_assign}$${default_key}$\n         ${valuetype_fort}$                          :: value ${value_assign}$${default_value}$\n         INTEGER(KIND=int_8)                         :: hash = -1_int_8\n         TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER          :: next => Null()\n      END TYPE private_item_type_${keytype}$_${valuetype}$\n\n      !this is an internal type\n      TYPE private_item_p_type_${keytype}$_${valuetype}$\n         PRIVATE\n         TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER :: p => Null()\n      END TYPE private_item_p_type_${keytype}$_${valuetype}$\n\n      ! this is the public type, which holds a dictionary-instance\n      TYPE dict_${keytype}$_${valuetype}$_type\n         PRIVATE\n         TYPE(private_item_p_type_${keytype}$_${valuetype}$), DIMENSION(:), POINTER      :: buckets => Null()\n         INTEGER                                               :: size = -1\n      END TYPE dict_${keytype}$_${valuetype}$_type\n\n      ! this is a public type, its returned by dict_items()\n      TYPE dict_${keytype}$_${valuetype}$_item_type\n         ${keytype_fort}$        :: key ${key_assign}$${default_key}$\n         ${valuetype_fort}$      :: value ${value_assign}$${default_value}$\n      END TYPE dict_${keytype}$_${valuetype}$_item_type\n   #:endfor\n\n   INTERFACE dict_init\n      #:for keytype, valuetype in keyvalue_list\n         MODULE PROCEDURE dict_${keytype}$_${valuetype}$_init\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dict_haskey\n      #:for keytype, valuetype in keyvalue_list\n         MODULE PROCEDURE dict_${keytype}$_${valuetype}$_haskey\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dict_set\n      #:for keytype, valuetype in keyvalue_list\n         MODULE PROCEDURE dict_${keytype}$_${valuetype}$_set\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dict_get\n      #:for keytype, valuetype in keyvalue_list\n         MODULE PROCEDURE dict_${keytype}$_${valuetype}$_get\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dict_items\n      #:for keytype, valuetype in keyvalue_list\n         MODULE PROCEDURE dict_${keytype}$_${valuetype}$_items\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dict_size\n      #:for keytype, valuetype in keyvalue_list\n         MODULE PROCEDURE dict_${keytype}$_${valuetype}$_size\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dict_destroy\n      #:for keytype, valuetype in keyvalue_list\n         MODULE PROCEDURE dict_${keytype}$_${valuetype}$_destroy\n      #:endfor\n   END INTERFACE\n\nCONTAINS\n\n   #:for fct in hash_fct\n      $:fct\n   #:endfor\n\n   #:for keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal, default_key, default_value in inst_params\n      SUBROUTINE dict_${keytype}$_${valuetype}$_init(dict, initial_capacity)\n      !! Allocates the internal data-structures of the given dictionary.\n\n         TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout)  :: dict\n         INTEGER, INTENT(in), OPTIONAL                         :: initial_capacity\n         !! The initial size of the internal array (default=11).\n\n         INTEGER :: initial_capacity_\n         initial_capacity_ = 11\n         IF (PRESENT(initial_capacity)) initial_capacity_ = initial_capacity\n\n         IF (initial_capacity_ < 1) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_init: initial_capacity < 1\")\n\n         IF (ASSOCIATED(dict%buckets)) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_init: dictionary is already initialized.\")\n\n         ALLOCATE (dict%buckets(initial_capacity_))\n         dict%size = 0\n\n      END SUBROUTINE dict_${keytype}$_${valuetype}$_init\n\n      SUBROUTINE dict_${keytype}$_${valuetype}$_destroy(dict)\n      !! Deallocated the internal data-structures if the given dictionary.\n      !! Caution: If the stored keys or values are pointers, their targets will\n      !! not get deallocated by this routine.\n\n         TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout)  :: dict\n         TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER  :: item, prev_item\n         INTEGER :: i\n\n         IF (.not. ASSOCIATED(dict%buckets)) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_destroy: dictionary is not initialized.\")\n\n         do i = 1, size(dict%buckets)\n            item => dict%buckets(i)%p\n            do while (ASSOCIATED(item))\n               prev_item => item\n               item => item%next\n               deallocate (prev_item)\n            end do\n         end do\n\n         deallocate (dict%buckets)\n         dict%size = -1\n\n      END SUBROUTINE dict_${keytype}$_${valuetype}$_destroy\n\n      SUBROUTINE dict_${keytype}$_${valuetype}$_set(dict, key, value)\n      !! Stores, and possibly overwrites, a given value under a given key.\n         TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout)  :: dict\n         ${keytype_fort}$, intent(in)                          :: key\n         ${valuetype_fort}$, intent(in)                          :: value\n         INTEGER(KIND=int_8)                                   :: hash\n         IF (.not. ASSOCIATED(dict%buckets)) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_set: dictionary is not initialized.\")\n\n         hash = hash_${keytype}$ (key)\n         call set_hashed_${keytype}$_${valuetype}$ (dict, key, value, hash)\n      END SUBROUTINE dict_${keytype}$_${valuetype}$_set\n\n      RECURSIVE SUBROUTINE set_hashed_${keytype}$_${valuetype}$ (dict, key, value, hash)\n      !! Common code used internally by dict_set() and change_capacity().\n         TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout)  :: dict\n         ${keytype_fort}$, intent(in)                          :: key\n         ${valuetype_fort}$, intent(in)                          :: value\n         INTEGER(KIND=int_8), intent(in)                       :: hash\n         TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER  :: item, new_item\n         INTEGER(KIND=int_8)                                   :: idx\n\n         idx = MOD(hash, INT(size(dict%buckets), KIND=int_8)) + 1\n\n         ! if already in dict just update its value\n         item => dict%buckets(idx)%p\n         do while (ASSOCIATED(item))\n            IF (item%hash == hash) THEN\n               IF (@{isequal(item%key, key)}@) THEN\n                  item%value ${value_assign}$value\n                  return\n               END IF\n            END IF\n            item => item%next\n         end do\n\n         ! check load-factor\n         IF (4*dict%size > 3*size(dict%buckets)) THEN ! load-factor > 75%\n            call change_capacity_${keytype}$_${valuetype}$ (dict, 2*size(dict%buckets)) !double capacity\n            idx = MOD(hash, INT(size(dict%buckets), KIND=int_8)) + 1\n         END IF\n\n         ! create a new item\n         allocate (new_item)\n         new_item%hash = hash\n         new_item%key ${key_assign}$key\n         new_item%value ${value_assign}$value\n         new_item%next => dict%buckets(idx)%p\n         dict%buckets(idx)%p => new_item\n         dict%size = dict%size + 1\n\n      END SUBROUTINE set_hashed_${keytype}$_${valuetype}$\n\n      RECURSIVE SUBROUTINE change_capacity_${keytype}$_${valuetype}$ (dict, new_capacity)\n      !! Internal routine for changing the dictionary's capacity.\n         TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout)  :: dict\n         INTEGER, intent(in) :: new_capacity\n         INTEGER :: i, old_size, new_cap\n         TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER  :: item, prev_item\n         TYPE(private_item_p_type_${keytype}$_${valuetype}$), DIMENSION(:), POINTER  :: old_buckets\n         new_cap = new_capacity\n         ! pre checks\n         IF (new_cap > HUGE(i)) THEN\n            IF (size(dict%buckets) == HUGE(i)) RETURN ! reached maximum - stay there.\n            new_cap = HUGE(i) ! grow as far as possible\n         END IF\n         IF (new_cap < 1) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_change_capacity: new_capacity < 1.\")\n         IF (4*dict%size > 3*new_cap) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_change_capacity: new_capacity too small.\")\n\n         old_size = dict%size\n         old_buckets => dict%buckets\n         ALLOCATE (dict%buckets(new_capacity))\n         dict%size = 0\n         do i = 1, size(old_buckets)\n            item => old_buckets(i)%p\n            do while (ASSOCIATED(item))\n               call set_hashed_${keytype}$_${valuetype}$ (dict, item%key, item%value, item%hash)\n               prev_item => item\n               item => item%next\n               deallocate (prev_item)\n            end do\n         end do\n\n         deallocate (old_buckets)\n\n         IF (old_size /= dict%size) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_change_capacity: assertion failed\")\n      END SUBROUTINE change_capacity_${keytype}$_${valuetype}$\n\n      FUNCTION dict_${keytype}$_${valuetype}$_get(dict, key, default_value) RESULT(value)\n      !! Gets a value for a given key from the dictionary.\n      !! If the key is not found the default_value will be returned.\n      !! If the key is not found and default_value was not provided the program stops.\n         TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout)  :: dict\n         ${keytype_fort}$                                        :: key\n         ${valuetype_fort}$, intent(in), optional                :: default_value\n         ${valuetype_fort}$                                      :: value\n         TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER                      :: item\n         INTEGER(KIND=int_8)                                   :: hash, idx\n\n         #:if valuetype_fort == 'INTEGER(kind=int_4)'\n            value = 0\n         #:elif valuetype_fort == 'TYPE(call_stat_type), POINTER'\n            NULLIFY (value)\n         #:endif\n\n         IF (.not. ASSOCIATED(dict%buckets)) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_get: dictionary is not initialized.\")\n\n         hash = hash_${keytype}$ (key)\n         idx = MOD(hash, INT(size(dict%buckets), KIND=int_8)) + 1\n\n         item => dict%buckets(idx)%p\n         do while (ASSOCIATED(item))\n            IF (item%hash == hash) THEN\n               IF (@{isequal(item%key, key)}@) THEN\n                  value ${value_assign}$item%value\n                  return\n               END IF\n            END IF\n            item => item%next\n         end do\n\n         IF (PRESENT(default_value)) THEN\n            value ${value_assign}$default_value\n            return\n         END IF\n\n         DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_get: Key not found in dictionary.\")\n      END FUNCTION dict_${keytype}$_${valuetype}$_get\n\n      FUNCTION dict_${keytype}$_${valuetype}$_size(dict) RESULT(size)\n      !! Returns the number of key/value-items currently stored in the dictionary.\n         TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout)  :: dict\n         INTEGER :: size\n\n         IF (.not. ASSOCIATED(dict%buckets)) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_size: dictionary is not initialized.\")\n\n         size = dict%size\n      END FUNCTION dict_${keytype}$_${valuetype}$_size\n\n      FUNCTION dict_${keytype}$_${valuetype}$_haskey(dict, key) RESULT(res)\n      !! Checks whether a given key is currently stored in the dictionary.\n         TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout)  :: dict\n         ${keytype_fort}$                                        :: key\n         LOGICAL                                               :: res\n         TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER                      :: item\n         INTEGER(KIND=int_8)                                   :: hash, idx\n\n         IF (.not. ASSOCIATED(dict%buckets)) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_haskey: dictionary is not initialized.\")\n\n         res = .FALSE.\n         IF (dict%size == 0) RETURN\n\n         hash = hash_${keytype}$ (key)\n         idx = MOD(hash, INT(size(dict%buckets), KIND=int_8)) + 1\n\n         item => dict%buckets(idx)%p\n         do while (ASSOCIATED(item))\n            IF (item%hash == hash) THEN\n               IF (@{isequal(item%key, key)}@) THEN\n                  res = .TRUE.\n                  return\n               END IF\n            END IF\n            item => item%next\n         end do\n\n      END FUNCTION dict_${keytype}$_${valuetype}$_haskey\n\n      FUNCTION dict_${keytype}$_${valuetype}$_items(dict) RESULT(items)\n      !! Returns a pointer to an array of all key/value-items stored in the dictionary.\n      !! Caution: The caller is responsible for deallocating targeted array after usage.\n         TYPE(dict_${keytype}$_${valuetype}$_type), intent(inout)  :: dict\n         TYPE(dict_${keytype}$_${valuetype}$_item_type), dimension(:), POINTER :: items\n\n         TYPE(private_item_type_${keytype}$_${valuetype}$), POINTER  :: item\n         INTEGER :: i, j\n\n         IF (.not. ASSOCIATED(dict%buckets)) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_items: dictionary is not initialized.\")\n\n         allocate (items(dict%size))\n         j = 1\n         do i = 1, size(dict%buckets)\n            item => dict%buckets(i)%p\n            do while (ASSOCIATED(item))\n               items(j)%key ${key_assign}$item%key\n               items(j)%value ${value_assign}$item%value\n               j = j + 1\n               item => item%next\n            end do\n         end do\n\n         IF (j /= dict%size + 1) &\n            DBCSR_ABORT(\"dict_${keytype}$_${valuetype}$_items: assertion failed!\")\n      END FUNCTION dict_${keytype}$_${valuetype}$_items\n\n   #:endfor\n\nEND MODULE dbcsr_dict\n"
  },
  {
    "path": "src/core/dbcsr_dict.fypp",
    "content": "#!--------------------------------------------------------------------------------------------------!\n#! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n#! This file is part of the DBCSR library.                                                          !\n#!                                                                                                  !\n#! For information on the license, see the LICENSE file.                                            !\n#! For further information please visit https://dbcsr.cp2k.org                                      !\n#! SPDX-License-Identifier: GPL-2.0+                                                                !\n#!--------------------------------------------------------------------------------------------------!\n\n#:mute\n\n#:set keytype = ['str', 'i4tuple']\n#:set valuetype = ['i4', 'callstat']\n\n#:set keyvalue_list = list(zip(keytype, valuetype))\n\n#:set keytype_fort = ['CHARACTER(LEN=default_string_length)', 'INTEGER(kind=int_4), dimension(2)']\n#:set valuetype_fort = ['INTEGER(kind=int_4)', 'TYPE(call_stat_type), POINTER']\n#:set key_assign = ['=', '=']\n#:set value_assign = ['=', '=>']\n#:set default_key = ['\"\"', '-1_int_4']\n#:set default_value = ['-1_int_4', 'NULL()']\n\n#:def isequal_str(k1, k2)\n${k1}$ == ${k2}$\n#:enddef\n\n#:def isequal_i4tuple(k1, k2)\nALL(${k1}$==${k2}$)\n#:enddef\n\n#:set isequal = [isequal_str, isequal_i4tuple]\n\n#:def hash_str()\nFUNCTION hash_str(key) RESULT(hash)\n   !! This is joaat_hash from string_table.F, generates the hash of a given string\n   !! @note\n   !!       http://en.wikipedia.org/wiki/Hash_table\n   !!       http://www.burtleburtle.net/bob/hash/doobs.html\n\n    CHARACTER(LEN=*), INTENT(IN)             :: key\n       !! key a string of any length\n    INTEGER(KIND=int_8)                      :: hash\n    INTEGER(KIND=int_8), PARAMETER           :: b32 = 2_int_8**32-1_int_8\n    INTEGER                                  :: i\n\n    hash=0_int_8\n    DO i=1,LEN(key)\n       hash=IAND(hash+ICHAR(key(i:i))                ,b32)\n       hash=IAND(     hash+IAND(ISHFT(hash,10),b32)  ,b32)\n       hash=IAND(IEOR(hash,IAND(ISHFT(hash,-6),b32)) ,b32)\n    ENDDO\n    hash=IAND(     hash+IAND(ISHFT(hash,  3),b32)  ,b32)\n    hash=IAND(IEOR(hash,IAND(ISHFT(hash,-11),b32)) ,b32)\n    hash=IAND(     hash+IAND(ISHFT(hash, 15),b32)  ,b32)\nEND FUNCTION hash_str\n#:enddef\n\n#:def hash_i4tuple()\nFUNCTION hash_i4tuple(key) RESULT(hash)\n   INTEGER(kind=int_4), dimension(2), INTENT(IN) :: key\n   INTEGER(kind=int_4)                           :: hash\n   hash = SUM(key)\nEND FUNCTION hash_i4tuple\n#:enddef\n\n#:set hash_fct = [hash_str(), hash_i4tuple()]\n\n#:set usekinds = ['default_string_length', 'int_8', 'int_4']\n#:set usetimings = ['call_stat_type']\n\n\n#:set inst_params = list(zip(keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal, default_key, default_value))\n\n#:def uselist(list_in)\n#!    comma-separated list of unique entries of list_in\n$:    \", \".join(list(set(list_in)))\n#:enddef\n\n#:endmute\n"
  },
  {
    "path": "src/core/dbcsr_error_handling.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_error_handling\n   !! Module that contains the routines for error handling\n   USE dbcsr_base_hooks, ONLY: dbcsr_abort_hook, &\n                               dbcsr_warn_hook\n   USE dbcsr_kinds, ONLY: dp\n   USE dbcsr_log_handling, ONLY: dbcsr_logger_get_default_io_unit\n   USE dbcsr_machine, ONLY: default_output_unit, &\n                            m_flush, &\n                            m_walltime\n   USE dbcsr_mpiwrap, ONLY: mp_abort\n   USE dbcsr_print_messages, ONLY: print_message\n   USE dbcsr_timings, ONLY: print_stack\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_error_handling'\n\n   !API public routines\n   PUBLIC :: dbcsr_error_handling_setup\n\n   !API (via pointer assignment to hook, PR67982, not meant to be called directly)\n   PUBLIC :: dbcsr_abort_handler, dbcsr_warn_handler\n\n   INTEGER, PUBLIC, SAVE :: warning_counter = 0\n\nCONTAINS\n\n   SUBROUTINE dbcsr_error_handling_setup()\n      !! Registers handlers with base_hooks.F\n      dbcsr_abort_hook => dbcsr_abort_handler\n      dbcsr_warn_hook => dbcsr_warn_handler\n   END SUBROUTINE dbcsr_error_handling_setup\n\n   SUBROUTINE dbcsr_abort_handler(location, message)\n      !! Abort program with error message\n      CHARACTER(len=*), INTENT(in)                       :: location, message\n\n      INTEGER                                            :: unit_nr\n\n      CALL delay_non_master() ! cleaner output if all ranks abort simultaneously\n\n      unit_nr = dbcsr_logger_get_default_io_unit()\n      IF (unit_nr <= 0) &\n         unit_nr = default_output_unit ! fall back to stdout\n\n      CALL print_abort_message(message, location, unit_nr)\n      CALL print_stack(unit_nr)\n      CALL m_flush(unit_nr)\n\n      CALL mp_abort()\n   END SUBROUTINE dbcsr_abort_handler\n\n   SUBROUTINE dbcsr_warn_handler(location, message)\n      !! Signal a warning\n      CHARACTER(len=*), INTENT(in)                       :: location, message\n\n      INTEGER                                            :: unit_nr\n\n!$OMP MASTER\n      warning_counter = warning_counter + 1\n!$OMP END MASTER\n\n      unit_nr = dbcsr_logger_get_default_io_unit()\n      IF (unit_nr > 0) THEN\n         CALL print_message(\"WARNING in \"//TRIM(location)//' :: '//TRIM(ADJUSTL(message)), unit_nr, 1, 1, 1)\n         CALL m_flush(unit_nr)\n      END IF\n   END SUBROUTINE dbcsr_warn_handler\n\n   SUBROUTINE delay_non_master()\n      !! Delay non-master ranks/threads, used by dbcsr_abort_handler()\n      INTEGER                                            :: unit_nr\n      REAL(KIND=dp)                                      :: t1, wait_time\n\n      wait_time = 0.0_dp\n\n      ! we (ab)use the logger to determine the first MPI rank\n      unit_nr = dbcsr_logger_get_default_io_unit()\n      IF (unit_nr <= 0) &\n         wait_time = wait_time + 1.0_dp ! rank-0 gets a head start of one second.\n\n!$    IF (omp_get_thread_num() /= 0) &\n!$       wait_time = wait_time + 1.0_dp ! master threads gets another second\n\n      ! sleep\n      IF (wait_time > 0.0_dp) THEN\n         t1 = m_walltime()\n         DO\n            IF (m_walltime() - t1 > wait_time .OR. t1 < 0) EXIT\n         END DO\n      END IF\n\n   END SUBROUTINE delay_non_master\n\n   SUBROUTINE print_abort_message(message, location, output_unit)\n      !! Prints a nicely formatted abort message box\n      CHARACTER(LEN=*), INTENT(IN)                       :: message, location\n      INTEGER, INTENT(IN)                                :: output_unit\n\n      CHARACTER(LEN=*), PARAMETER :: img = \"   ___   \"//\"  /   \\  \"//\" [ABORT] \"//\"  \\___/  \"// &\n                                     \"    |    \"//\"  O/|    \"//\" /| |    \"//\" / \\     \"\n      INTEGER, PARAMETER :: img_height = 8, img_width = 9, screen_width = 80, &\n                            txt_width = screen_width - img_width - 5\n\n      CHARACTER(LEN=screen_width)                        :: msg_line\n      INTEGER                                            :: a, b, c, fill, i, img_start, indent, &\n                                                            msg_height, msg_start\n\n! count message lines\n\n      a = 1; b = -1; msg_height = 0\n      DO WHILE (b < LEN_TRIM(message))\n         b = next_linebreak(message, a, txt_width)\n         a = b + 1\n         msg_height = msg_height + 1\n      END DO\n\n      ! calculate message and image starting lines\n      IF (img_height > msg_height) THEN\n         msg_start = (img_height - msg_height)/2 + 1\n         img_start = 1\n      ELSE\n         msg_start = 1\n         img_start = msg_height - img_height + 2\n      END IF\n\n      ! print empty line\n      WRITE (UNIT=output_unit, FMT=\"(A)\") \"\"\n\n      ! print opening line\n      WRITE (UNIT=output_unit, FMT=\"(T2,A)\") REPEAT(\"*\", screen_width - 1)\n\n      ! print body\n      a = 1; b = -1; c = 1\n      DO i = 1, MAX(img_height - 1, msg_height)\n         WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') \" *\"\n         IF (i < img_start) THEN\n            WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') REPEAT(\" \", img_width)\n         ELSE\n            WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') img(c:c + img_width - 1)\n            c = c + img_width\n         END IF\n         IF (i < msg_start) THEN\n            WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') REPEAT(\" \", txt_width + 2)\n         ELSE\n            b = next_linebreak(message, a, txt_width)\n            msg_line = message(a:b)\n            a = b + 1\n            fill = (txt_width - LEN_TRIM(msg_line))/2 + 1\n            indent = txt_width - LEN_TRIM(msg_line) - fill + 2\n            WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') REPEAT(\" \", indent)\n            WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') TRIM(msg_line)\n            WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') REPEAT(\" \", fill)\n         END IF\n         WRITE (UNIT=output_unit, FMT=\"(A)\", advance='yes') \"*\"\n      END DO\n\n      ! print location line\n      WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') \" *\"\n      WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') img(c:c + img_width - 1)\n      indent = txt_width - LEN_TRIM(location) + 1\n      WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') REPEAT(\" \", indent)\n      WRITE (UNIT=output_unit, FMT=\"(A)\", advance='no') TRIM(location)\n      WRITE (UNIT=output_unit, FMT=\"(A)\", advance='yes') \" *\"\n\n      ! print closing line\n      WRITE (UNIT=output_unit, FMT=\"(T2,A)\") REPEAT(\"*\", screen_width - 1)\n\n      ! print empty line\n      WRITE (UNIT=output_unit, FMT=\"(A)\") \"\"\n\n   END SUBROUTINE print_abort_message\n\n   FUNCTION next_linebreak(message, pos, rowlen) RESULT(ibreak)\n      !! Helper routine for print_abort_message()\n      CHARACTER(LEN=*), INTENT(IN)                       :: message\n      INTEGER, INTENT(IN)                                :: pos, rowlen\n      INTEGER                                            :: ibreak\n\n      INTEGER                                            :: i, n\n\n      n = LEN_TRIM(message)\n      IF (n - pos <= rowlen) THEN\n         ibreak = n ! remaining message shorter than line\n      ELSE\n         i = INDEX(message(pos + 1:pos + 1 + rowlen), \" \", BACK=.TRUE.)\n         IF (i == 0) THEN\n            ibreak = pos + rowlen - 1 ! no space found, break mid-word\n         ELSE\n            ibreak = pos + i ! break at space closest to rowlen\n         END IF\n      END IF\n   END FUNCTION next_linebreak\n\nEND MODULE dbcsr_error_handling\n"
  },
  {
    "path": "src/core/dbcsr_iter_types.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_iter_types\n   !! Collection of routines to handle the iteration info\n   USE dbcsr_kinds, ONLY: default_path_length, &\n                          default_string_length\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   ! iteration_info\n   PUBLIC :: dbcsr_iteration_info_type, &\n             dbcsr_iteration_info_create, &\n             dbcsr_iteration_info_retain, &\n             dbcsr_iteration_info_release\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_iter_types'\n   LOGICAL, PRIVATE, PARAMETER          :: debug_this_module = .FALSE.\n   INTEGER, SAVE, PRIVATE               :: last_it_info_id = 0\n\n   TYPE dbcsr_iteration_info_type\n      !! contains the information about the current state of the program\n      !! to be able to decide if output is necessary\n\n      INTEGER                              :: ref_count = -1, id_nr = -1\n      INTEGER                              :: print_level = -1, n_rlevel = -1\n      INTEGER, DIMENSION(:), POINTER       :: iteration => NULL()\n      LOGICAL, DIMENSION(:), POINTER       :: last_iter => NULL()\n      CHARACTER(len=default_string_length) :: project_name = \"\"\n      CHARACTER(LEN=default_string_length), &\n         DIMENSION(:), POINTER           :: level_name => NULL()\n   END TYPE dbcsr_iteration_info_type\n\nCONTAINS\n\n   SUBROUTINE dbcsr_iteration_info_create(iteration_info, project_name)\n      !! creates an output info object\n\n      TYPE(dbcsr_iteration_info_type), POINTER           :: iteration_info\n         !! the object to create\n      CHARACTER(len=*), INTENT(in)                       :: project_name\n         !! name of the project, used to create the filenames\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iteration_info_create', &\n                                     routineP = moduleN//':'//routineN\n\n      INTEGER                                            :: stat\n\n      ALLOCATE (iteration_info, stat=stat)\n      IF (stat /= 0) &\n         DBCSR_ABORT(routineP//\" could not allocate iteration_info\")\n\n      last_it_info_id = last_it_info_id + 1\n      iteration_info%id_nr = last_it_info_id\n      iteration_info%ref_count = 1\n      iteration_info%print_level = 2\n      iteration_info%n_rlevel = 1\n      iteration_info%project_name = project_name\n      NULLIFY (iteration_info%iteration)\n      NULLIFY (iteration_info%level_name)\n      NULLIFY (iteration_info%last_iter)\n      ALLOCATE (iteration_info%iteration(iteration_info%n_rlevel), stat=stat)\n      IF (stat /= 0) THEN\n         DBCSR_ABORT(routineP//\" iteration_info%iteration allocation\")\n      END IF\n      ALLOCATE (iteration_info%level_name(iteration_info%n_rlevel), stat=stat)\n      IF (stat /= 0) THEN\n         DBCSR_ABORT(routineP//\" iteration_info%level_name allocation\")\n      END IF\n      ALLOCATE (iteration_info%last_iter(iteration_info%n_rlevel), stat=stat)\n      IF (stat /= 0) THEN\n         DBCSR_ABORT(routineP//\" iteration_info%last_iter allocation\")\n      END IF\n      iteration_info%iteration(iteration_info%n_rlevel) = 1\n      iteration_info%level_name(iteration_info%n_rlevel) = \"__ROOT__\"\n      iteration_info%last_iter(iteration_info%n_rlevel) = .FALSE.\n\n   END SUBROUTINE dbcsr_iteration_info_create\n\n   SUBROUTINE dbcsr_iteration_info_retain(iteration_info)\n      !! retains the iteration_info (see doc/ReferenceCounting.html)\n\n      TYPE(dbcsr_iteration_info_type), POINTER           :: iteration_info\n         !! the iteration_info to retain\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iteration_info_retain', &\n                                     routineP = moduleN//':'//routineN\n\n      IF (.NOT. ASSOCIATED(iteration_info)) THEN\n         DBCSR_ABORT(routineP//\" iteration_info not associated\")\n      END IF\n      IF (iteration_info%ref_count <= 0) THEN\n         DBCSR_ABORT(routineP//\" iteration_info%ref_counf<=0\")\n      END IF\n      iteration_info%ref_count = iteration_info%ref_count + 1\n   END SUBROUTINE dbcsr_iteration_info_retain\n\n   SUBROUTINE dbcsr_iteration_info_release(iteration_info)\n      !! releases the iteration_info (see doc/ReferenceCounting.html)\n\n      TYPE(dbcsr_iteration_info_type), POINTER           :: iteration_info\n         !! the iteration_info to release\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_iteration_info_release', &\n                                     routineP = moduleN//':'//routineN\n\n      IF (ASSOCIATED(iteration_info)) THEN\n         IF (iteration_info%ref_count <= 0) THEN\n            DBCSR_ABORT(routineP//\" iteration_info%ref_counf<=0\")\n         END IF\n         iteration_info%ref_count = iteration_info%ref_count - 1\n         IF (iteration_info%ref_count == 0) THEN\n            IF (ASSOCIATED(iteration_info%iteration)) THEN\n               DEALLOCATE (iteration_info%iteration)\n            END IF\n            IF (ASSOCIATED(iteration_info%last_iter)) THEN\n               DEALLOCATE (iteration_info%last_iter)\n            END IF\n            IF (ASSOCIATED(iteration_info%level_name)) THEN\n               DEALLOCATE (iteration_info%level_name)\n            END IF\n            DEALLOCATE (iteration_info)\n         END IF\n      END IF\n   END SUBROUTINE dbcsr_iteration_info_release\n\nEND MODULE dbcsr_iter_types\n"
  },
  {
    "path": "src/core/dbcsr_lib.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_lib\n\n   !! Routines that affect the DBCSR library as a whole\n   USE dbcsr_acc_init, ONLY: acc_finalize, acc_init\n   USE dbcsr_acc_device, ONLY: dbcsr_acc_get_ndevices\n   USE dbcsr_config, ONLY: set_accdrv_active_device_id, &\n                           reset_accdrv_active_device_id, &\n                           dbcsr_set_config, &\n                           use_acc\n   USE dbcsr_kinds, ONLY: int_1_size, &\n                          int_2_size, &\n                          int_4_size, &\n                          int_8_size, dp\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_mpiwrap, ONLY: add_mp_perf_env, &\n                            describe_mp_perf_env, &\n                            has_mp_perf_env, &\n                            mp_environ, mp_cart_rank, &\n                            rm_mp_perf_env, &\n                            mp_comm_free, &\n                            mp_get_comm_count, mp_comm_type, mp_comm_null\n   USE dbcsr_mm, ONLY: dbcsr_multiply_clear_mempools, &\n                       dbcsr_multiply_lib_finalize, &\n                       dbcsr_multiply_lib_init, &\n                       dbcsr_multiply_print_statistics\n   USE dbcsr_timings, ONLY: add_timer_env, &\n                            rm_timer_env, &\n                            timings_register_hooks\n   USE dbcsr_timings_report, ONLY: cost_type_time, &\n                                   timings_report_callgraph, &\n                                   timings_report_print\n   USE dbcsr_log_handling, ONLY: dbcsr_add_default_logger, &\n                                 dbcsr_logger_create, &\n                                 dbcsr_logger_release, &\n                                 dbcsr_logger_type, &\n                                 dbcsr_rm_default_logger\n   USE dbcsr_base_hooks, ONLY: timeset_hook, &\n                               timestop_hook, &\n                               dbcsr_abort_hook, &\n                               dbcsr_warn_hook, &\n                               dbcsr_abort_interface, dbcsr_warn_interface, &\n                               timeset_interface, timestop_interface\n   use dbcsr_types, only: dbcsr_mp_obj\n   use dbcsr_mp_methods, only: dbcsr_mp_new, dbcsr_mp_release, &\n                               dbcsr_mp_make_env\n   use dbcsr_error_handling, only: dbcsr_error_handling_setup\n\n#include \"base/dbcsr_base_uses.f90\"\n\n#if defined (__DBCSR_ACC)\n   USE ISO_C_BINDING, ONLY: C_INT\n#endif\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_lib'\n\n   PUBLIC :: dbcsr_init_lib, dbcsr_finalize_lib, dbcsr_clear_mempools\n   PUBLIC :: dbcsr_print_statistics\n\n   LOGICAL, PRIVATE, SAVE :: is_initialized = .FALSE.\n   LOGICAL, PRIVATE, SAVE :: check_comm_count = .FALSE.\n\n   TYPE(dbcsr_logger_type), POINTER :: logger => Null()\n   TYPE(dbcsr_mp_obj), SAVE         :: mp_env\n   TYPE(mp_comm_type), SAVE         :: default_group = mp_comm_null\n   INTEGER, SAVE                    :: ext_io_unit\n\n   INTERFACE dbcsr_init_lib\n      MODULE PROCEDURE dbcsr_init_lib_def\n      MODULE PROCEDURE dbcsr_init_lib_hooks\n   END INTERFACE\n\n#if defined (__DBCSR_ACC)\n   INTERFACE\n      FUNCTION libsmm_acc_is_thread_safe() &\n         RESULT(thread_safe) &\n         BIND(C, name=\"libsmm_acc_is_thread_safe\")\n         IMPORT\n         INTEGER(KIND=C_INT)        :: thread_safe\n      END FUNCTION libsmm_acc_is_thread_safe\n   END INTERFACE\n\n   INTERFACE\n      FUNCTION libsmm_acc_gpu_warp_size() &\n         RESULT(warp_size) &\n         BIND(C, name=\"libsmm_acc_gpu_warp_size\")\n         IMPORT\n         INTEGER(KIND=C_INT)        :: warp_size\n      END FUNCTION libsmm_acc_gpu_warp_size\n   END INTERFACE\n#endif\n\nCONTAINS\n\n   SUBROUTINE dbcsr_init_lib_def(mp_comm, io_unit, accdrv_active_device_id)\n      !! Initialize the DBCSR library using internal loggers and timer callbacks\n      !! We do not need this routine within the library, so we keep the communicator as a handle\n      !! and convert it here to a communicator type\n      INTEGER, INTENT(IN)  :: mp_comm\n      INTEGER, INTENT(IN), OPTIONAL :: io_unit, accdrv_active_device_id\n\n      TYPE(mp_comm_type) :: my_mp_comm\n\n      IF (is_initialized) THEN\n         ! Update ext_io_unit\n         IF (.NOT. ASSOCIATED(logger) .AND. PRESENT(io_unit)) ext_io_unit = io_unit\n         RETURN\n      END IF\n      CALL my_mp_comm%set_handle(mp_comm)\n      CALL dbcsr_init_lib_pre(my_mp_comm, io_unit, accdrv_active_device_id)\n      !\n      ! Declare loggers\n      CALL dbcsr_logger_create(logger, mp_env=mp_env, &\n                               default_global_unit_nr=ext_io_unit, &\n                               close_global_unit_on_dealloc=.FALSE.)\n      CALL dbcsr_add_default_logger(logger)\n      CALL dbcsr_logger_release(logger)\n      ! abort/warn hooks\n      CALL dbcsr_error_handling_setup()\n      ! timeset/timestop hooks\n      CALL timings_register_hooks()\n      ! timer environment\n      CALL add_mp_perf_env()\n      CALL add_timer_env()\n      !\n      CALL dbcsr_init_lib_low()\n   END SUBROUTINE dbcsr_init_lib_def\n\n   SUBROUTINE dbcsr_init_lib_hooks(mp_comm, &\n                                   in_timeset_hook, in_timestop_hook, &\n                                   in_abort_hook, in_warn_hook, io_unit, &\n                                   accdrv_active_device_id)\n      !! Initialize the DBCSR library using external loggers and timer callbacks\n      !! We do not need this routine within the library, so we keep the communicator as a handle\n      !! and convert it here to a communicator type\n      INTEGER, INTENT(IN)  :: mp_comm\n      PROCEDURE(timeset_interface), INTENT(IN), POINTER :: in_timeset_hook\n      PROCEDURE(timestop_interface), INTENT(IN), POINTER :: in_timestop_hook\n      PROCEDURE(dbcsr_abort_interface), INTENT(IN), POINTER :: in_abort_hook\n      PROCEDURE(dbcsr_warn_interface), INTENT(IN), POINTER :: in_warn_hook\n      INTEGER, INTENT(IN), OPTIONAL :: io_unit, accdrv_active_device_id\n\n      TYPE(mp_comm_type) :: my_mp_comm\n\n      IF (is_initialized) THEN\n         ! Update ext_io_unit\n         IF (.NOT. ASSOCIATED(logger) .AND. PRESENT(io_unit)) ext_io_unit = io_unit\n         RETURN\n      END IF\n      CALL my_mp_comm%set_handle(mp_comm)\n      CALL dbcsr_init_lib_pre(my_mp_comm, io_unit, accdrv_active_device_id)\n      ! abort/warn hooks\n      dbcsr_abort_hook => in_abort_hook\n      dbcsr_warn_hook => in_warn_hook\n      ! timeset/timestop hooks\n      timeset_hook => in_timeset_hook\n      timestop_hook => in_timestop_hook\n      ! timer environment is assumed\n      !\n      CALL dbcsr_init_lib_low()\n   END SUBROUTINE dbcsr_init_lib_hooks\n\n   SUBROUTINE dbcsr_init_lib_pre(mp_comm, io_unit, accdrv_active_device_id)\n      !! Initialize the DBCSR library\n      !! Prepares the DBCSR library for use.\n\n#if defined(__LIBXSMM)\n      USE libxsmm, ONLY: libxsmm_init\n#endif\n      TYPE(mp_comm_type), INTENT(IN)  :: mp_comm\n      INTEGER, INTENT(IN), OPTIONAL :: io_unit, accdrv_active_device_id\n\n      INTEGER :: numnodes, mynode\n\n#if defined(__DBCSR_ACC)\n      INTEGER :: dbcsr_thread_safe, libsmm_acc_thread_safe\n#endif\n\n      ! construct defaults which were unknown at compile-time (dbcsr_config_type)\n      CALL dbcsr_set_config()\n\n      CALL mp_environ(numnodes, mynode, mp_comm)\n\n      IF (PRESENT(io_unit)) THEN\n         ext_io_unit = io_unit\n      ELSE\n         ext_io_unit = 0\n         IF (mynode .EQ. 0) ext_io_unit = default_output_unit\n      END IF\n\n      ! if MPI was not initialized in DBCSR, then need to check for the number of communicators\n      ! when we finalize DBCSR\n      IF (mp_get_comm_count() .EQ. 0) THEN\n         check_comm_count = .TRUE.\n      END IF\n      CALL dbcsr_mp_make_env(mp_env, default_group, mp_comm)\n\n#if defined(__LIBXSMM)\n      CALL libxsmm_init()\n#endif\n\n      ! Initialize Acc and set active device\n      IF (use_acc()) THEN\n         IF (PRESENT(accdrv_active_device_id)) THEN\n            CALL set_accdrv_active_device_id(accdrv_active_device_id)\n         ELSEIF (dbcsr_acc_get_ndevices() > 0) THEN\n            ! Use round-robin assignment per rank\n            CALL set_accdrv_active_device_id(MOD(mynode, dbcsr_acc_get_ndevices()))\n         ELSE\n            DBCSR_ABORT(\"dbcsr_init_lib: No recognized GPU devices\")\n         END IF\n         CALL acc_init()\n      END IF\n\n#if defined(__DBCSR_ACC)\n      ! Checks related to DBCSR's GPU backend: check consistency in threading level\n      libsmm_acc_thread_safe = libsmm_acc_is_thread_safe()  ! 0: not threaded, 1: threaded\n      dbcsr_thread_safe = 0  ! not threaded\n!$    dbcsr_thread_safe = 1  ! if DBCSR is compiled with openmp, set to threaded\n      ! Check whether DBCSR and libsmm_acc (GPU backend) have the same level of threading\n      IF (dbcsr_thread_safe /= libsmm_acc_thread_safe) then\n         IF (dbcsr_thread_safe /= 0) then\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"DBCSR compiled w/ threading support while libsmm_acc compiled w/o threading support.\")\n         ELSE\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"DBCSR compiled w/o threading support while libsmm_acc is compiled w/ threading support.\")\n         END IF\n      END IF\n#endif\n   END SUBROUTINE dbcsr_init_lib_pre\n\n   SUBROUTINE dbcsr_init_lib_low()\n      !! Initialize the DBCSR library\n      !! Prepares the DBCSR library for use.\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_init_lib_low'\n\n      INTEGER                                            :: error_handle\n\n      CALL timeset(routineN, error_handle)\n      !\n      IF (int_1_size /= 1) &\n         DBCSR_ABORT(\"Incorrect assumption of an 8-bit integer size!\")\n      IF (int_2_size /= 2) &\n         DBCSR_ABORT(\"Incorrect assumption of a 16-bit integer size!\")\n      IF (int_4_size /= 4) &\n         DBCSR_ABORT(\"Incorrect assumption of a 32-bit integer size!\")\n      IF (int_8_size /= 8) &\n         DBCSR_ABORT(\"Incorrect assumption of a 64-bit integer size!\")\n\n      IF (.NOT. has_mp_perf_env()) THEN\n         CALL add_mp_perf_env()\n      END IF\n\n!$OMP     PARALLEL DEFAULT(NONE)\n      CALL dbcsr_multiply_lib_init()\n!$OMP     END PARALLEL\n\n      is_initialized = .TRUE.\n\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_init_lib_low\n\n   SUBROUTINE dbcsr_finalize_lib()\n      !! Finalize the DBCSR library\n      !! Cleans up after the DBCSR library.  Used to deallocate persistent objects.\n\n#if defined(__LIBXSMM)\n      USE libxsmm, ONLY: libxsmm_finalize\n#endif\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_finalize_lib'\n\n      INTEGER                                            :: error_handle\n\n      IF (.NOT. is_initialized) RETURN\n      CALL timeset(routineN, error_handle)\n\n!$OMP     PARALLEL DEFAULT(NONE) SHARED(ext_io_unit, default_group)\n      CALL dbcsr_multiply_lib_finalize()\n!$OMP     END PARALLEL\n\n      is_initialized = .FALSE.\n      CALL timestop(error_handle)\n\n      IF (ASSOCIATED(logger)) THEN\n         CALL dbcsr_rm_default_logger()\n         CALL rm_mp_perf_env()\n         CALL rm_timer_env()\n         NULLIFY (logger)\n      END IF\n      NULLIFY (timeset_hook)\n      NULLIFY (timestop_hook)\n      NULLIFY (dbcsr_abort_hook)\n      NULLIFY (dbcsr_warn_hook)\n      CALL dbcsr_mp_release(mp_env)\n      CALL mp_comm_free(default_group)\n#if defined(__LIBXSMM)\n      CALL libxsmm_finalize()\n#endif\n      ! Reset Acc ID\n      CALL reset_accdrv_active_device_id()\n      IF (use_acc()) THEN\n         CALL acc_finalize()\n      END IF\n\n      ! Check the number of communicators\n      IF (check_comm_count .AND. mp_get_comm_count() .NE. 0) THEN\n         DBCSR_ABORT(\"Number of DBCSR sub-communicators is not zero!\")\n      END IF\n   END SUBROUTINE dbcsr_finalize_lib\n\n   SUBROUTINE dbcsr_print_statistics(print_timers, callgraph_filename)\n      !! Show the whole DBCSR statistics\n      !! Prepares the DBCSR library for use.\n\n      LOGICAL, INTENT(IN), OPTIONAL          :: print_timers\n      CHARACTER(len=*), INTENT(IN), OPTIONAL :: callgraph_filename\n\n      LOGICAL :: my_print_timers\n\n      IF (ext_io_unit > 0) THEN\n         WRITE (UNIT=ext_io_unit, FMT=\"(/,T2,A)\") REPEAT(\"-\", 79)\n         WRITE (UNIT=ext_io_unit, FMT=\"(T2,A,T80,A)\") \"-\", \"-\"\n         WRITE (UNIT=ext_io_unit, FMT=\"(T2,A,T35,A,T80,A)\") \"-\", \"DBCSR STATISTICS\", \"-\"\n         WRITE (UNIT=ext_io_unit, FMT=\"(T2,A,T80,A)\") \"-\", \"-\"\n         WRITE (UNIT=ext_io_unit, FMT=\"(T2,A)\") REPEAT(\"-\", 79)\n      END IF\n\n      call dbcsr_multiply_print_statistics(default_group, ext_io_unit)\n\n      IF (ext_io_unit > 0) WRITE (UNIT=ext_io_unit, FMT=\"(T2,A)\") REPEAT(\"-\", 79)\n\n      CALL describe_mp_perf_env(ext_io_unit)\n\n      my_print_timers = .FALSE.\n      IF (PRESENT(print_timers)) my_print_timers = print_timers\n      IF (my_print_timers) CALL dbcsr_print_timers()\n\n      ! Dump callgraph\n      IF (PRESENT(callgraph_filename) .AND. ASSOCIATED(logger)) THEN\n         CALL timings_report_callgraph(callgraph_filename)\n      END IF\n   END SUBROUTINE dbcsr_print_statistics\n\n   SUBROUTINE dbcsr_print_timers()\n      !! Print timers\n      IF (ASSOCIATED(logger)) THEN\n         CALL timings_report_print(ext_io_unit, 0.0_dp, .FALSE., cost_type_time, .TRUE., mp_env)\n      END IF\n   END SUBROUTINE dbcsr_print_timers\n\n   SUBROUTINE dbcsr_clear_mempools()\n      !! Deallocate memory contained in mempools\n\n!$OMP     PARALLEL DEFAULT(NONE)\n      CALL dbcsr_multiply_clear_mempools()\n!$OMP     END PARALLEL\n   END SUBROUTINE dbcsr_clear_mempools\n\nEND MODULE dbcsr_lib\n"
  },
  {
    "path": "src/core/dbcsr_list.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n#:include 'dbcsr_list.fypp'\nMODULE dbcsr_list\n   !! An array-based list which grows on demand.\n   !! When the internal array is full, a new array of twice the size will be\n   !! allocated and the items are copied over.\n   !! This list can also be used as a stack.\n   !! Have look at list_push(), list_pop() and list_peek().\n   !! @note\n   !! it's not possible to put all templates in a single module because this would lead to circular\n   !! dependencies (timer_env_type contains list_routinestat_type and list_callstackentry_type, and\n   !! list_timerenv_type contains timer_env_type)\n   !! @endnote\n\n   USE dbcsr_timings_base_type, ONLY: ${uselist(usetimingsbase)}$\n   USE dbcsr_list_callstackentry, ONLY: @{uselist_listmethods(callstackentry)}@\n   USE dbcsr_list_routinereport, ONLY: @{uselist_listmethods(routinereport)}@\n   USE dbcsr_list_routinestat, ONLY: @{uselist_listmethods(routinestat)}@\n   USE dbcsr_list_timerenv, ONLY: @{uselist_listmethods(timerenv)}@\n\n#include \"base/dbcsr_base_uses.f90\"\n   IMPLICIT NONE\n\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_list'\n\n   PUBLIC :: list_init, list_isready, list_push, list_pop, list_peek, &\n             list_get, list_size, list_destroy\n\n   #:for vtype in valuetype\n      PUBLIC :: list_${vtype}$_type\n   #:endfor\n\n   INTERFACE list_init\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_init\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_isready\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_isready\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_push\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_push\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_pop\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_pop\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_peek\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_peek\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_insert\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_insert\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_set\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_set\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_get\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_get\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_del\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_del\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_clear\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_clear\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_size\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_size\n      #:endfor\n   END INTERFACE\n\n   INTERFACE list_destroy\n      #:for vtype in valuetype\n         MODULE PROCEDURE list_${vtype}$_destroy\n      #:endfor\n   END INTERFACE\n\nEND MODULE dbcsr_list\n"
  },
  {
    "path": "src/core/dbcsr_list.fypp",
    "content": "#!--------------------------------------------------------------------------------------------------!\n#! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n#! This file is part of the DBCSR library.                                                          !\n#!                                                                                                  !\n#! For information on the license, see the LICENSE file.                                            !\n#! For further information please visit https://dbcsr.cp2k.org                                      !\n#! SPDX-License-Identifier: GPL-2.0+                                                                !\n#!--------------------------------------------------------------------------------------------------!\n\n#:mute\n\n#:set valuetype = ['timerenv', 'routinestat', 'routinereport', 'callstackentry']\n#:set usetimings = ['timer_env_type']\n#:set usetimingsbase = ['routine_stat_type', 'routine_report_type', 'callstack_entry_type']\n#:set valuetype_in = ['TYPE(timer_env_type), POINTER', 'TYPE(routine_stat_type), POINTER', 'TYPE(routine_report_type), POINTER', 'TYPE(callstack_entry_type)']\n#:set valuetype_out = valuetype_in\n#:set value_assign = ['=>','=>','=>','=']\n\n#:set inst_params = list(zip(valuetype, valuetype_in, valuetype_out, value_assign))\n\n#:def uselist(list_in)\n#!    comma-separated list of unique entries of list_in\n$:    \", \".join(list(set(list_in)))\n#:enddef\n\n#:def uselist_listmethods(t)\n$:\", \".join(['list_'+t+'_type', 'list_'+t+'_init', 'list_'+t+'_push', 'list_'+t+'_pop', 'list_'+t+'_peek', &\n'list_'+t+'_insert', 'list_'+t+'_set', 'list_'+t+'_get', 'list_'+t+'_del', 'list_'+t+'_clear', &\n'list_'+t+'_size', 'list_'+t+'_destroy', 'list_'+t+'_isready'])\n#:enddef\n\n#:def list_body(valuetype, valuetype_in, valuetype_out, value_assign)\n\n#include \"base/dbcsr_base_uses.f90\"\nIMPLICIT NONE\nPRIVATE\n\nPUBLIC :: ${uselist_listmethods(valuetype)}$\n\n!this is an internal type\nTYPE private_item_type_${valuetype}$\n   PRIVATE\n   ${valuetype_out}$                   :: value\nEND TYPE private_item_type_${valuetype}$\n\n!this is an internal type\nTYPE private_item_p_type_${valuetype}$\n   PRIVATE\n   TYPE(private_item_type_${valuetype}$), POINTER :: p => Null()\nEND TYPE private_item_p_type_${valuetype}$\n\n! this is the public type, which holds a list-instance\nTYPE list_${valuetype}$_type\n   PRIVATE\n   TYPE(private_item_p_type_${valuetype}$), DIMENSION(:), POINTER   :: arr => Null()\n   INTEGER                                       :: size = -1\nEND TYPE list_${valuetype}$_type\n\nCONTAINS\n\nFUNCTION list_${valuetype}$_isready(list) RESULT(res)\n   !! Test if the given list has been initialized.\n    TYPE(list_${valuetype}$_type), intent(in)  :: list\n    LOGICAL                                     :: res\n    res = ASSOCIATED(list%arr)\nEND FUNCTION list_${valuetype}$_isready\n\nSUBROUTINE list_${valuetype}$_init(list, initial_capacity)\n   !! Allocates the internal data-structures of the given list.\n   !! This has to be called before any of the other routines.\n   !! For deallocation call list_[valuetype]_destroy.\n\n    TYPE(list_${valuetype}$_type), intent(inout)  :: list\n    INTEGER, INTENT(in), OPTIONAL               :: initial_capacity\n      !! The initial size of the internal array (default=11).\n    INTEGER                                     :: stat\n    INTEGER                                     :: initial_capacity_\n\n    initial_capacity_ = 11\n    If(PRESENT(initial_capacity)) initial_capacity_ = initial_capacity\n\n    IF(initial_capacity_ < 0) &\n      DBCSR_ABORT(\"list_${valuetype}$_create: initial_capacity < 0\")\n\n    IF(ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_create: list is already initialized.\")\n\n    ALLOCATE(list%arr(initial_capacity_), stat=stat)\n    IF (stat/=0)&\n       DBCSR_ABORT(\"list_${valuetype}$_init: allocation failed\")\n\n    list%size = 0\nEND SUBROUTINE list_${valuetype}$_init\n\nSUBROUTINE list_${valuetype}$_destroy(list)\n   !! Deallocated the internal data-structures of the given list.\n   !! Caution: If the stored values are pointers, their targets will\n   !! not get deallocated by this routine.\n\n    TYPE(list_${valuetype}$_type), intent(inout)  :: list\n    INTEGER :: i\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_destroy: list is not initialized.\")\n\n    do i=1, list%size\n       deallocate(list%arr(i)%p)\n    end do\n    deallocate(list%arr)\n    list%size = -1\nEND SUBROUTINE list_${valuetype}$_destroy\n\n\nSUBROUTINE list_${valuetype}$_set(list, value, pos)\n   !! Assings the given value to the given position in the list.\n   !! Thereby, the former value at that position gets overwritten.\n   !! If the position is out of bounds, the program stops.\n\n    TYPE(list_${valuetype}$_type), intent(inout)  :: list\n    ${valuetype_in}$, intent(in) :: value\n    INTEGER, intent(in) :: pos\n      !! Position in the list - must fulfill 0 < pos < list_size+1.\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_set: list is not initialized.\")\n    IF(pos < 1)&\n       DBCSR_ABORT(\"list_${valuetype}$_set: pos < 1\")\n    IF(pos > list%size)&\n       DBCSR_ABORT(\"list_${valuetype}$_set: pos > size\")\n    list%arr(pos)%p%value ${value_assign}$ value\nEND SUBROUTINE list_${valuetype}$_set\n\n\nSUBROUTINE list_${valuetype}$_push(list, value)\n   !! Appends the given value at the end of the list.\n    TYPE(list_${valuetype}$_type), intent(inout)  :: list\n    ${valuetype_in}$, intent(in)                  :: value\n    INTEGER                                     :: stat\n\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_push: list is not initialized.\")\n    if(list%size == size(list%arr)) &\n       call change_capacity_${valuetype}$(list, 2*size(list%arr)+1)\n\n    list%size = list%size + 1\n    ALLOCATE(list%arr(list%size)%p, stat=stat)\n    IF (stat/=0)&\n       DBCSR_ABORT(\"list_${valuetype}$_push: allocation failed\")\n    list%arr(list%size)%p%value ${value_assign}$ value\nEND SUBROUTINE list_${valuetype}$_push\n\n\nSUBROUTINE list_${valuetype}$_insert(list, value, pos)\n   !! Inserts the given value at the given position within the list.\n   !! Values which lay behind the insertion-position move one position up.\n\n    TYPE(list_${valuetype}$_type), intent(inout)  :: list\n    ${valuetype_in}$, intent(in) :: value\n    INTEGER, intent(in) :: pos\n      !! Position in the list - must fulfill 0 < pos < list_size+2 .\n    INTEGER :: i, stat\n\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_insert: list is not initialized.\")\n    IF(pos < 1)&\n       DBCSR_ABORT(\"list_${valuetype}$_insert: pos < 1\")\n    IF(pos > list%size+1)&\n       DBCSR_ABORT(\"list_${valuetype}$_insert: pos > size+1\")\n\n    if(list%size == size(list%arr)) &\n       call change_capacity_${valuetype}$(list, 2*size(list%arr)+1)\n\n    list%size = list%size + 1\n    do i=list%size, pos+1, -1\n       list%arr(i)%p => list%arr(i-1)%p\n    end do\n\n    ALLOCATE(list%arr(pos)%p, stat=stat)\n     IF (stat/=0)&\n        DBCSR_ABORT(\"list_${valuetype}$_insert: allocation failed.\")\n    list%arr(pos)%p%value ${value_assign}$ value\nEND SUBROUTINE list_${valuetype}$_insert\n\n\nFUNCTION list_${valuetype}$_peek(list) RESULT(value)\n   !! Returns the last element in the list.\n   !! Is equivalent to: list_${valuetype}$_get(list, list_${valuetype}$_size(list))\n\n    TYPE(list_${valuetype}$_type), intent(inout)  :: list\n    ${valuetype_out}$  :: value\n\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_peek: list is not initialized.\")\n    IF(list%size < 1) &\n       DBCSR_ABORT(\"list_${valuetype}$_peek: list is empty.\")\n\n    value ${value_assign}$ list%arr(list%size)%p%value\nEND FUNCTION list_${valuetype}$_peek\n\n\nFUNCTION list_${valuetype}$_pop(list) RESULT(value)\n   !! Returns the last element in the list and removes it.\n   !! Is equivialent to:\n   !! value = list_${valuetype}$_get(list, list_${valuetype}$_size(list))\n   !! call list_${valuetype}$_del(list, list_${valuetype}$_size(list))\n\n    TYPE(list_${valuetype}$_type), intent(inout)  :: list\n    ${valuetype_out}$  :: value\n\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_pop: list is not initialized.\")\n    IF(list%size < 1) &\n       DBCSR_ABORT(\"list_${valuetype}$_pop: list is empty.\")\n\n    value ${value_assign}$ list%arr(list%size)%p%value\n    deallocate(list%arr(list%size)%p)\n    list%size = list%size - 1\nEND FUNCTION list_${valuetype}$_pop\n\n\n\nSUBROUTINE list_${valuetype}$_clear(list)\n   !! Removes all values from the list. The list itself is not deallocated.\n    TYPE(list_${valuetype}$_type), intent(inout)  :: list\n    INTEGER :: i\n\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_clear: list is not initialized.\")\n\n    do i=1, list%size\n       deallocate(list%arr(i)%p)\n    end do\n    list%size = 0\nEND SUBROUTINE list_${valuetype}$_clear\n\n\n!\nFUNCTION list_${valuetype}$_get(list, pos) RESULT(value)\n   !! Returns the value at the given position from the list.\n\n    TYPE(list_${valuetype}$_type), intent(in)  :: list\n    INTEGER, intent(in) :: pos\n      !! Position in the list - must fulfill 0 < pos < list_size+1 .\n    ${valuetype_out}$ :: value\n\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_get: list is not initialized.\")\n    IF(pos < 1)&\n       DBCSR_ABORT(\"list_${valuetype}$_get: pos < 1\")\n    IF(pos > list%size)&\n       DBCSR_ABORT(\"list_${valuetype}$_get: pos > size\")\n\n    value ${value_assign}$ list%arr(pos)%p%value\n\nEND FUNCTION list_${valuetype}$_get\n\n\nSUBROUTINE list_${valuetype}$_del(list, pos)\n   !! Removes the value at the given position from the list.\n\n    TYPE(list_${valuetype}$_type), intent(inout)  :: list\n    INTEGER, intent(in) :: pos\n      !! Position in the list - must fulfill 0 < pos < list_size+1 .\n    INTEGER :: i\n\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_del: list is not initialized.\")\n    IF(pos < 1)&\n       DBCSR_ABORT(\"list_${valuetype}$_det: pos < 1\")\n    IF(pos > list%size)&\n       DBCSR_ABORT(\"list_${valuetype}$_det: pos > size\")\n\n    deallocate(list%arr(pos)%p)\n    do i=pos, list%size-1\n       list%arr(i)%p => list%arr(i+1)%p\n    end do\n\n    list%size = list%size - 1\n\nEND SUBROUTINE list_${valuetype}$_del\n\nFUNCTION list_${valuetype}$_size(list) RESULT(size)\n   !! Returns the current size of the list.\n    TYPE(list_${valuetype}$_type), intent(in)  :: list\n    INTEGER :: size\n\n    IF(.not. ASSOCIATED(list%arr)) &\n       DBCSR_ABORT(\"list_${valuetype}$_size: list is not initialized.\")\n\n    size = list%size\nEND FUNCTION list_${valuetype}$_size\n\n\nSUBROUTINE change_capacity_${valuetype}$(list, new_capacity)\n   !! Internal routine for changing the size of the internal array.\n   TYPE(list_${valuetype}$_type), intent(inout)  :: list\n   INTEGER, intent(in) :: new_capacity\n   INTEGER :: i, new_cap, stat\n   TYPE(private_item_p_type_${valuetype}$), DIMENSION(:), POINTER :: old_arr\n\n   new_cap = new_capacity\n   IF(new_cap < 0) &\n      DBCSR_ABORT(\"list_${valuetype}$_change_capacity: new_capacity < 0\")\n   IF(new_cap < list%size) &\n      DBCSR_ABORT(\"list_${valuetype}$_change_capacity: new_capacity < size\")\n   IF(new_cap > HUGE(i)) THEN\n      IF(size(list%arr) == HUGE(i)) &\n      DBCSR_ABORT(\"list_${valuetype}$_change_capacity: list has reached integer limit.\")\n      new_cap = HUGE(i) ! grow as far as possible\n   END IF\n\n   old_arr => list%arr\n   allocate(list%arr(new_cap), stat=stat)\n   IF (stat/=0)&\n      DBCSR_ABORT(\"list_${valuetype}$_change_capacity: allocation failed\")\n\n   do i=1, list%size\n      allocate(list%arr(i)%p, stat=stat)\n      IF (stat/=0)&\n         DBCSR_ABORT(\"list_${valuetype}$_change_capacity: allocation failed\")\n      list%arr(i)%p%value ${value_assign}$ old_arr(i)%p%value\n      deallocate(old_arr(i)%p)\n   end do\n   deallocate(old_arr)\n\nEND SUBROUTINE change_capacity_${valuetype}$\n#:enddef\n#:endmute\n"
  },
  {
    "path": "src/core/dbcsr_list_callstackentry.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n#:include 'dbcsr_list.fypp'\n#:set n_inst = 3\n   !! An array-based list which grows on demand.\n   !! When the internal array is full, a new array of twice the size will be\n   !! allocated and the items are copied over.\n   !! This list can also be used as a stack.\n   !! Have look at list_push(), list_pop() and list_peek().\n\nMODULE dbcsr_list_callstackentry\n   USE dbcsr_timings_base_type, ONLY: ${uselist(usetimingsbase)}$\n\n   $:list_body(valuetype[n_inst], valuetype_in[n_inst], valuetype_out[n_inst], value_assign[n_inst])\n\nEND MODULE dbcsr_list_callstackentry\n"
  },
  {
    "path": "src/core/dbcsr_list_routinereport.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n#:include 'dbcsr_list.fypp'\n#:set n_inst = 2\n   !! An array-based list which grows on demand.\n   !! When the internal array is full, a new array of twice the size will be\n   !! allocated and the items are copied over.\n   !! This list can also be used as a stack.\n   !! Have look at list_push(), list_pop() and list_peek().\n\nMODULE dbcsr_list_routinereport\n   USE dbcsr_timings_base_type, ONLY: ${uselist(usetimingsbase)}$\n\n   $:list_body(valuetype[n_inst], valuetype_in[n_inst], valuetype_out[n_inst], value_assign[n_inst])\n\nEND MODULE dbcsr_list_routinereport\n"
  },
  {
    "path": "src/core/dbcsr_list_routinestat.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n#:include 'dbcsr_list.fypp'\n#:set n_inst = 1\n   !! An array-based list which grows on demand.\n   !! When the internal array is full, a new array of twice the size will be\n   !! allocated and the items are copied over.\n   !! This list can also be used as a stack.\n   !! Have look at list_push(), list_pop() and list_peek().\n\nMODULE dbcsr_list_routinestat\n   USE dbcsr_timings_base_type, ONLY: ${uselist(usetimingsbase)}$\n\n   $:list_body(valuetype[n_inst], valuetype_in[n_inst], valuetype_out[n_inst], value_assign[n_inst])\n\nEND MODULE dbcsr_list_routinestat\n"
  },
  {
    "path": "src/core/dbcsr_list_timerenv.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n#:include 'dbcsr_list.fypp'\n#:set n_inst = 0\n   !! An array-based list which grows on demand.\n   !! When the internal array is full, a new array of twice the size will be\n   !! allocated and the items are copied over.\n   !! This list can also be used as a stack.\n   !! Have look at list_push(), list_pop() and list_peek().\n\nMODULE dbcsr_list_timerenv\n   USE dbcsr_timings_types, ONLY: ${uselist(usetimings)}$\n\n   $:list_body(valuetype[n_inst], valuetype_in[n_inst], valuetype_out[n_inst], value_assign[n_inst])\n\nEND MODULE dbcsr_list_timerenv\n"
  },
  {
    "path": "src/core/dbcsr_log_handling.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_log_handling\n   !! various routines to log and control the output.\n   !! The idea is that decisions about where to log should not be done in\n   !! the code that generates the log, but should be globally changeable\n   !! a central place.\n   !! So some care has been taken to have enough information about the\n   !! place from where the log comes so that in the future intelligent and\n   !! flexible decisions can be taken by the logger, without having to change\n   !! other code.\n   !! @note\n   !! contains also routines to convert to a string.\n   !! in my idea they should have been with variable length,\n   !! (i.e. they should have returned a trim(adjustl(actual_result)))\n   !! As a logger should be robust, at the moment I have given up.\n   !! At the moment logging and output refer to the same object\n   !! (dbcsr_logger_type)\n   !! as these are actually different it might be better to separate them\n   !! (they have already separate routines in a separate module\n   !! @see dbcsr_output_handling).\n   !! some practices (use of print *, no dbcsr_error_type,\n   !! manual retain release of some objects) are dictated by the need to\n   !! have minimal dependency\n   !! @endnote\n   !!\n   !! @see dbcsr_error_handling\n   !! @version 12.2001\n\n   USE dbcsr_files, ONLY: close_file, &\n                          open_file\n   USE dbcsr_iter_types, ONLY: dbcsr_iteration_info_create, &\n                               dbcsr_iteration_info_release, &\n                               dbcsr_iteration_info_retain, &\n                               dbcsr_iteration_info_type\n   USE dbcsr_kinds, ONLY: default_path_length, &\n                          default_string_length, &\n                          dp\n   USE dbcsr_machine, ONLY: default_output_unit, &\n                            m_getpid, &\n                            m_hostnm\n   USE dbcsr_methods, ONLY: dbcsr_mp_release\n   USE dbcsr_string_utilities, ONLY: compress\n   USE dbcsr_timings, ONLY: print_stack\n   USE dbcsr_types, ONLY: dbcsr_mp_obj\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   !API types\n   PUBLIC :: dbcsr_logger_type, dbcsr_logger_p_type\n   !API parameter vars\n   PUBLIC :: dbcsr_note_level, dbcsr_warning_level, dbcsr_failure_level, dbcsr_fatal_level\n   !API default loggers\n   PUBLIC :: dbcsr_get_default_logger, dbcsr_add_default_logger, dbcsr_rm_default_logger, &\n             dbcsr_default_logger_stack_size\n   !API logger routines\n   PUBLIC :: dbcsr_logger_create, dbcsr_logger_retain, dbcsr_logger_release, &\n             dbcsr_logger_would_log, dbcsr_logger_set, dbcsr_logger_get_default_unit_nr, &\n             dbcsr_logger_get_default_io_unit, dbcsr_logger_get_unit_nr, &\n             dbcsr_logger_set_log_level, dbcsr_logger_generate_filename, &\n             dbcsr_to_string\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_log_handling'\n   LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .FALSE.\n\n   !! level of an error\n   INTEGER, PARAMETER          :: dbcsr_fatal_level = 3\n   !! level of a failure\n   INTEGER, PARAMETER          :: dbcsr_failure_level = 2\n   !! level of a warning\n   INTEGER, PARAMETER          :: dbcsr_warning_level = 1\n   !! level of a note\n   INTEGER, PARAMETER          :: dbcsr_note_level = 0\n\n   !! a generic function to trasform different types to strings\n   INTERFACE dbcsr_to_string\n      MODULE PROCEDURE dbcsr_int_to_string, dbcsr_real_dp_to_string, dbcsr_logical_to_string\n   END INTERFACE\n\n   TYPE dbcsr_logger_type\n      !! type of a logger, at the moment it contains just a print level\n      !! starting at which level it should be logged\n      !! (0 note, 1 warning, 2 failure, 3 fatal)\n      !! it could be expanded with the ability to focus on one or more\n      !! module/object/thread/processor\n      !! @note\n      !! This should be private, but as the output functions have been\n      !! moved to another module and there is no \"friend\" keyword, they\n      !! are public.\n      !! DO NOT USE THE INTERNAL COMPONENTS DIRECTLY!!!\n\n      INTEGER :: id_nr = -1, ref_count = -1\n         !! unique number to identify the logger\n         !! reference count (see cp2k/doc/ReferenceCounting.html)\n      INTEGER :: print_level = -1\n         !! the level starting at which something gets printed\n      INTEGER :: default_local_unit_nr = -1\n         !! default unit for local logging (-1 if not yet initialized). Local logging guarantee to each task its own file.\n      INTEGER :: default_global_unit_nr = -1\n         !! default unit for global logging (-1 if not yet initialized). This unit is valid only on the processor with\n         !! %mp_env%mp%mynode==%mv_env%mp%source.\n      LOGICAL :: close_local_unit_on_dealloc = .FALSE., close_global_unit_on_dealloc = .FALSE.\n         !! if the local unit should be closed when this logger is deallocated\n         !! whether the global unit should be closed when this logger is deallocated\n      CHARACTER(len=default_string_length)  :: suffix = \"\"\n         !! a short string that is used as suffix in all the filenames created by this logger. Can be used to guarantee the\n         !! uniqueness of generated filename\n      CHARACTER(len=default_path_length)    :: local_filename = \"\", global_filename = \"\"\n         !! the root of the name of the file used for local logging (can be different from the name of the file corresponding to\n         !! default_local_unit_nr, only the one used if the unit needs to be opened)\n         !! the root of the name of the file used for global logging (can be different from the name of the file corresponding to\n         !! default_global_unit_nr, only the one used if the unit needs to be opened)\n      TYPE(dbcsr_mp_obj)                    :: mp_env = dbcsr_mp_obj()\n         !! the parallel environment for the output.\n      TYPE(dbcsr_iteration_info_type), POINTER :: iter_info => NULL()\n   END TYPE dbcsr_logger_type\n\n   TYPE dbcsr_logger_p_type\n      TYPE(dbcsr_logger_type), POINTER :: p => Null()\n   END TYPE dbcsr_logger_p_type\n\n! **************************************************************************************************\n   TYPE default_logger_stack_type\n      TYPE(dbcsr_logger_type), POINTER :: dbcsr_default_logger => Null()\n   END TYPE default_logger_stack_type\n\n   INTEGER, PRIVATE            :: stack_pointer = 0\n   INTEGER, PARAMETER, PRIVATE :: max_stack_pointer = 10\n   TYPE(default_logger_stack_type), SAVE, DIMENSION(max_stack_pointer) ::  default_logger_stack\n\n   INTEGER, SAVE, PRIVATE :: last_logger_id_nr = 0\n\nCONTAINS\n\n   FUNCTION dbcsr_default_logger_stack_size() RESULT(res)\n      INTEGER                                            :: res\n\n      res = stack_pointer\n   END FUNCTION dbcsr_default_logger_stack_size\n\n   SUBROUTINE dbcsr_add_default_logger(logger)\n      !! adds a default logger.\n      !! MUST be called before logging occurs\n      !! @note\n      !! increments a stack of default loggers the latest one will be\n      !! available within the program\n\n      TYPE(dbcsr_logger_type), POINTER                   :: logger\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_default_logger', &\n                                     routineP = moduleN//':'//routineN\n\n      IF (stack_pointer + 1 > max_stack_pointer) THEN\n         CALL dbcsr_abort(__LOCATION__, routineP// &\n                          \"too many default loggers, increase max_stack_pointer in \"//moduleN)\n      END IF\n\n      stack_pointer = stack_pointer + 1\n      NULLIFY (default_logger_stack(stack_pointer)%dbcsr_default_logger)\n\n      default_logger_stack(stack_pointer)%dbcsr_default_logger => logger\n      CALL dbcsr_logger_retain(logger)\n\n   END SUBROUTINE dbcsr_add_default_logger\n\n   SUBROUTINE dbcsr_rm_default_logger()\n      !! the cousin of dbcsr_add_default_logger, decrements the stack, so that\n      !! the default logger is what it has\n      !! been\n\n      IF (stack_pointer - 1 < 0) THEN\n         CALL dbcsr_abort(__LOCATION__, moduleN//\":dbcsr_rm_default_logger\"// &\n                          \"can not destroy default logger \"//moduleN)\n      END IF\n\n      CALL dbcsr_logger_release(default_logger_stack(stack_pointer)%dbcsr_default_logger)\n      NULLIFY (default_logger_stack(stack_pointer)%dbcsr_default_logger)\n      stack_pointer = stack_pointer - 1\n\n   END SUBROUTINE dbcsr_rm_default_logger\n\n   FUNCTION dbcsr_get_default_logger() RESULT(res)\n      !! returns the default logger\n      !! @note\n      !! initializes the default loggers if necessary\n\n      TYPE(dbcsr_logger_type), POINTER                   :: res\n\n      IF (.NOT. stack_pointer > 0) THEN\n         CALL dbcsr_abort(__LOCATION__, \"dbcsr_log_handling:dbcsr_get_default_logger\"// &\n                          \"default logger not yet initialized (CALL dbcsr_init_default_logger)\")\n      END IF\n      res => default_logger_stack(stack_pointer)%dbcsr_default_logger\n      IF (.NOT. ASSOCIATED(res)) THEN\n         CALL dbcsr_abort(__LOCATION__, \"dbcsr_log_handling:dbcsr_get_default_logger\"// &\n                          \"default logger is null (released too much ?)\")\n      END IF\n   END FUNCTION dbcsr_get_default_logger\n\n! ================== log ==================\n\n   SUBROUTINE dbcsr_logger_create(logger, mp_env, print_level, &\n                                  default_global_unit_nr, default_local_unit_nr, global_filename, &\n                                  local_filename, close_global_unit_on_dealloc, iter_info, &\n                                  close_local_unit_on_dealloc, suffix, template_logger)\n      !! initializes a logger\n      !! @note\n      !! the handling of *_filename, default_*_unit_nr, close_*_unit_on_dealloc\n      !! tries to take the right decision with different inputs, and thus is a\n      !! little complex.\n\n      TYPE(dbcsr_logger_type), POINTER                   :: logger\n         !! the logger to initialize\n      TYPE(dbcsr_mp_obj), OPTIONAL                       :: mp_env\n         !! the parallel environment (this is most likely the global parallel environment\n      INTEGER, INTENT(in), OPTIONAL                      :: print_level, default_global_unit_nr, &\n                                                            default_local_unit_nr\n         !! the level starting with which something is written (defaults to dbcsr_note_level)\n         !! the default unit_nr for output (if not given, and no file is given defaults to the standard output)\n         !! the default unit number for local (i.e. task) output. If not given defaults to a out.taskid file created upon\n      CHARACTER(len=*), INTENT(in), OPTIONAL             :: global_filename, local_filename\n         !! a new file to open (can be given instead of the global_unit_nr)\n         !! a new file to open (with suffix and mp_env%mp%mynode appended). Can be given instead of the default_local_unit_nr). the\n         !! file is created only upon the first local logging request\n      LOGICAL, INTENT(in), OPTIONAL                      :: close_global_unit_on_dealloc\n         !! if the unit should be closed when the logger is deallocated (defaults to true if a local_filename is given, to false\n         !! otherwise)\n      TYPE(dbcsr_iteration_info_type), OPTIONAL, POINTER :: iter_info\n      LOGICAL, INTENT(in), OPTIONAL                      :: close_local_unit_on_dealloc\n         !! if the unit should be closed when the logger is deallocated (defaults to true)\n      CHARACTER(len=*), INTENT(in), OPTIONAL             :: suffix\n         !! the suffix that should be added to all the generated filenames\n      TYPE(dbcsr_logger_type), OPTIONAL, POINTER         :: template_logger\n         !! a logger from where to take the unspecified things\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_create', &\n                                     routineP = moduleN//':'//routineN\n\n      INTEGER                                            :: stat\n\n      ALLOCATE (logger, stat=stat)\n      IF (stat /= 0) &\n         DBCSR_ABORT(routineP//\" could not ALLOCATE a logger\")\n\n      NULLIFY (logger%iter_info)\n      logger%ref_count = 1\n      last_logger_id_nr = last_logger_id_nr + 1\n      logger%id_nr = last_logger_id_nr\n\n      IF (PRESENT(template_logger)) THEN\n         IF (template_logger%ref_count < 1) &\n            DBCSR_ABORT(routineP//\" template_logger%ref_count<1\")\n         logger%print_level = template_logger%print_level\n         logger%default_global_unit_nr = template_logger%default_global_unit_nr\n         logger%close_local_unit_on_dealloc = template_logger%close_local_unit_on_dealloc\n         IF (logger%close_local_unit_on_dealloc) THEN\n            logger%default_local_unit_nr = -1\n         ELSE\n            logger%default_local_unit_nr = template_logger%default_local_unit_nr\n         END IF\n         logger%close_global_unit_on_dealloc = template_logger%close_global_unit_on_dealloc\n         IF (logger%close_global_unit_on_dealloc) THEN\n            logger%default_global_unit_nr = -1\n         ELSE\n            logger%default_global_unit_nr = template_logger%default_global_unit_nr\n         END IF\n         logger%local_filename = template_logger%local_filename\n         logger%global_filename = template_logger%global_filename\n         logger%mp_env = template_logger%mp_env\n         logger%suffix = template_logger%suffix\n         logger%iter_info => template_logger%iter_info\n      ELSE\n         ! create a file if nothing is specified, one can also get the unit from the default logger\n         ! which should have something reasonable as the argument is required in that case\n         logger%default_global_unit_nr = -1\n         logger%close_global_unit_on_dealloc = .TRUE.\n         logger%local_filename = \"localLog\"\n         logger%global_filename = \"mainLog\"\n         logger%print_level = dbcsr_note_level\n         ! generate a file for default local logger\n         ! except the ionode that should write to the default global logger\n         logger%default_local_unit_nr = -1\n         logger%close_local_unit_on_dealloc = .TRUE.\n         logger%suffix = \"\"\n      END IF\n      IF (PRESENT(mp_env)) logger%mp_env = mp_env\n      IF (.NOT. ASSOCIATED(logger%mp_env%mp)) &\n         DBCSR_ABORT(routineP//\" mp env not associated\")\n\n      IF (logger%mp_env%mp%refcount < 1) &\n         DBCSR_ABORT(routineP//\" mp_env%ref_count<1\")\n      logger%mp_env%mp%refcount = logger%mp_env%mp%refcount + 1\n\n      IF (PRESENT(print_level)) logger%print_level = print_level\n\n      IF (PRESENT(default_global_unit_nr)) &\n         logger%default_global_unit_nr = default_global_unit_nr\n      IF (PRESENT(global_filename)) THEN\n         logger%global_filename = global_filename\n         logger%close_global_unit_on_dealloc = .TRUE.\n         logger%default_global_unit_nr = -1\n      END IF\n      IF (PRESENT(close_global_unit_on_dealloc)) THEN\n         logger%close_global_unit_on_dealloc = close_global_unit_on_dealloc\n         IF (PRESENT(default_global_unit_nr) .AND. PRESENT(global_filename) .AND. &\n             (.NOT. close_global_unit_on_dealloc)) THEN\n            logger%default_global_unit_nr = default_global_unit_nr\n         END IF\n      END IF\n\n      IF (PRESENT(default_local_unit_nr)) &\n         logger%default_local_unit_nr = default_local_unit_nr\n      IF (PRESENT(local_filename)) THEN\n         logger%local_filename = local_filename\n         logger%close_local_unit_on_dealloc = .TRUE.\n         logger%default_local_unit_nr = -1\n      END IF\n      IF (PRESENT(suffix)) logger%suffix = suffix\n\n      IF (PRESENT(close_local_unit_on_dealloc)) THEN\n         logger%close_local_unit_on_dealloc = close_local_unit_on_dealloc\n         IF (PRESENT(default_local_unit_nr) .AND. PRESENT(local_filename) .AND. &\n             (.NOT. close_local_unit_on_dealloc)) THEN\n            logger%default_local_unit_nr = default_local_unit_nr\n         END IF\n      END IF\n\n      IF (logger%default_local_unit_nr == -1) THEN\n         IF (logger%mp_env%mp%mynode == logger%mp_env%mp%source) THEN\n            logger%default_local_unit_nr = logger%default_global_unit_nr\n            logger%close_local_unit_on_dealloc = .FALSE.\n         END IF\n      END IF\n      IF (PRESENT(iter_info)) logger%iter_info => iter_info\n      IF (ASSOCIATED(logger%iter_info)) THEN\n         CALL dbcsr_iteration_info_retain(logger%iter_info)\n      ELSE\n         CALL dbcsr_iteration_info_create(logger%iter_info, \"\")\n      END IF\n   END SUBROUTINE dbcsr_logger_create\n\n   SUBROUTINE dbcsr_logger_retain(logger)\n      !! retains the given logger (to be called to keep a shared copy of\n      !! the logger)\n\n      TYPE(dbcsr_logger_type), POINTER                   :: logger\n         !! the logger to retain\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_retain', &\n                                     routineP = moduleN//':'//routineN\n\n      IF (.NOT. ASSOCIATED(logger)) &\n         DBCSR_ABORT(routineP//\" logger not associated\")\n      IF (logger%ref_count < 1) &\n         DBCSR_ABORT(routineP//\" logger%ref_count<1\")\n      logger%ref_count = logger%ref_count + 1\n   END SUBROUTINE dbcsr_logger_retain\n\n   SUBROUTINE dbcsr_logger_release(logger)\n      !! releases this logger\n\n      TYPE(dbcsr_logger_type), POINTER                   :: logger\n         !! the logger to release\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_release', &\n                                     routineP = moduleN//':'//routineN\n\n      IF (ASSOCIATED(logger)) THEN\n         IF (logger%ref_count < 1) &\n            DBCSR_ABORT(routineP//\" logger%ref_count<1\")\n         logger%ref_count = logger%ref_count - 1\n         IF (logger%ref_count == 0) THEN\n            IF (logger%close_global_unit_on_dealloc .AND. &\n                logger%default_global_unit_nr >= 0) THEN\n               CALL close_file(logger%default_global_unit_nr)\n               logger%close_global_unit_on_dealloc = .FALSE.\n               logger%default_global_unit_nr = -1\n            END IF\n            IF (logger%close_local_unit_on_dealloc .AND. &\n                logger%default_local_unit_nr >= 0) THEN\n               CALL close_file(logger%default_local_unit_nr)\n               logger%close_local_unit_on_dealloc = .FALSE.\n               logger%default_local_unit_nr = -1\n            END IF\n            CALL dbcsr_mp_release(logger%mp_env)\n            CALL dbcsr_iteration_info_release(logger%iter_info)\n            DEALLOCATE (logger)\n         END IF\n      END IF\n   END SUBROUTINE dbcsr_logger_release\n\n   FUNCTION dbcsr_logger_would_log(logger, level) RESULT(res)\n      !! this function can be called to check if the logger would log\n      !! a message with the given level from the given source\n      !! you should use this function if you do direct logging\n      !! (without using dbcsr_logger_log), or if you want to know if the generation\n      !! of some costly log info is necessary\n\n      TYPE(dbcsr_logger_type), POINTER                   :: logger\n         !! the logger you want to log in\n      INTEGER, INTENT(in)                                :: level\n         !! describes the of the message: dbcsr_fatal_level(3), dbcsr_failure_level(2), dbcsr_warning_level(1), dbcsr_note_level(0).\n      LOGICAL                                            :: res\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_would_log', &\n                                     routineP = moduleN//':'//routineN\n\n      TYPE(dbcsr_logger_type), POINTER                   :: lggr\n\n      lggr => logger\n      IF (.NOT. ASSOCIATED(lggr)) lggr => dbcsr_get_default_logger()\n      IF (lggr%ref_count < 1) &\n         DBCSR_ABORT(routineP//\" logger%ref_count<1\")\n\n      res = level >= lggr%print_level\n   END FUNCTION dbcsr_logger_would_log\n\n   FUNCTION dbcsr_logger_get_unit_nr(logger, local) RESULT(res)\n      !! returns the unit nr for the requested kind of log.\n\n      TYPE(dbcsr_logger_type), POINTER                   :: logger\n         !! the logger you want to log in\n      LOGICAL, INTENT(in), OPTIONAL                      :: local\n         !! if true returns a local logger (one per task), otherwise returns a global logger (only the process with\n         !! mp_env%mp%mynode== mp_env%mp%source should write to the global logger). Defaults to false\n      INTEGER                                            :: res\n\n      res = dbcsr_logger_get_default_unit_nr(logger, local=local)\n   END FUNCTION dbcsr_logger_get_unit_nr\n\n   FUNCTION dbcsr_logger_get_default_io_unit(logger) RESULT(res)\n      !! returns the unit nr for the ionode (-1 on all other processors)\n      !! skips as well checks if the procs calling this function is not the ionode\n\n      TYPE(dbcsr_logger_type), OPTIONAL, POINTER         :: logger\n         !! the logger you want to log in\n      INTEGER                                            :: res\n\n      TYPE(dbcsr_logger_type), POINTER                   :: local_logger\n\n      IF (PRESENT(logger)) THEN\n         local_logger => logger\n      ELSE IF (stack_pointer == 0) THEN\n         res = -1 ! edge case: default logger not yet/anymore available\n         RETURN\n      ELSE\n         local_logger => dbcsr_get_default_logger()\n      END IF\n\n      res = dbcsr_logger_get_default_unit_nr(local_logger, local=.FALSE., skip_not_ionode=.TRUE.)\n   END FUNCTION dbcsr_logger_get_default_io_unit\n\n! *************************** dbcsr_logger_type settings ***************************\n\n   SUBROUTINE dbcsr_logger_set_log_level(logger, level)\n      !! changes the logging level. Log messages with a level less than the one\n      !! given wo not be printed.\n\n      TYPE(dbcsr_logger_type), POINTER                   :: logger\n         !! the logger to change\n      INTEGER, INTENT(in)                                :: level\n         !! the new logging level for the logger\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_set_log_level', &\n                                     routineP = moduleN//':'//routineN\n\n      IF (.NOT. ASSOCIATED(logger)) &\n         DBCSR_ABORT(routineP//\" logger not associated\")\n      IF (logger%ref_count < 1) &\n         DBCSR_ABORT(routineP//\" logger%ref_count<1\")\n      logger%print_level = level\n   END SUBROUTINE dbcsr_logger_set_log_level\n\n   RECURSIVE FUNCTION dbcsr_logger_get_default_unit_nr(logger, local, skip_not_ionode) RESULT(res)\n      !! asks the default unit number of the given logger.\n      !! try to use dbcsr_logger_get_unit_nr\n\n      TYPE(dbcsr_logger_type), OPTIONAL, POINTER         :: logger\n         !! the logger you want info from\n      LOGICAL, INTENT(in), OPTIONAL                      :: local, skip_not_ionode\n         !! if you want the local unit nr (defaults to false)\n      INTEGER                                            :: res\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_get_default_unit_nr', &\n                                     routineP = moduleN//':'//routineN\n\n      CHARACTER(len=default_path_length)                 :: filename, host_name\n      INTEGER                                            :: iostat, pid\n      LOGICAL                                            :: loc, skip\n      TYPE(dbcsr_logger_type), POINTER                   :: lggr\n\n      loc = .TRUE.\n      skip = .FALSE.\n      IF (PRESENT(logger)) THEN\n         lggr => logger\n      ELSE\n         NULLIFY (lggr)\n      END IF\n      IF (.NOT. ASSOCIATED(lggr)) lggr => dbcsr_get_default_logger()\n      IF (lggr%ref_count < 1) &\n         DBCSR_ABORT(routineP//\" logger%ref_count<1\")\n\n      IF (PRESENT(local)) loc = local\n      IF (PRESENT(skip_not_ionode)) skip = skip_not_ionode\n      IF (.NOT. loc) THEN\n         IF (lggr%default_global_unit_nr <= 0) THEN\n            IF (lggr%mp_env%mp%mynode == lggr%mp_env%mp%source) THEN\n               CALL dbcsr_logger_generate_filename(lggr, filename, lggr%global_filename, &\n                                                   \".out\", local=.FALSE.)\n               CALL open_file(TRIM(filename), file_status=\"unknown\", &\n                              file_action=\"WRITE\", file_position=\"APPEND\", &\n                              unit_number=lggr%default_global_unit_nr)\n            ELSE IF (.NOT. skip) THEN\n               lggr%default_global_unit_nr = dbcsr_logger_get_default_unit_nr(lggr, .TRUE.)\n               lggr%close_global_unit_on_dealloc = .FALSE.\n            ELSE\n               lggr%default_global_unit_nr = -1\n               lggr%close_global_unit_on_dealloc = .FALSE.\n            END IF\n         END IF\n         IF ((lggr%mp_env%mp%mynode /= lggr%mp_env%mp%source) .AND. (.NOT. skip)) THEN\n            WRITE (UNIT=lggr%default_global_unit_nr, FMT='(/,T2,A)', IOSTAT=iostat) &\n               ' *** WARNING non ionode asked for global logger ***'\n            IF (iostat /= 0) THEN\n               CALL m_getpid(pid)\n               CALL m_hostnm(host_name)\n               PRINT *, \" *** Error trying to WRITE to the local logger ***\"\n               PRINT *, \" *** MPI_id           = \", lggr%mp_env%mp%mynode\n               PRINT *, \" *** MPI_Communicator = \", lggr%mp_env%mp%mp_group%get_handle()\n               PRINT *, \" *** PID              = \", pid\n               PRINT *, \" *** Hostname         = \"//TRIM(host_name)\n               CALL print_stack(default_output_unit)\n            ELSE\n               CALL print_stack(lggr%default_global_unit_nr)\n            END IF\n         END IF\n         res = lggr%default_global_unit_nr\n      ELSE\n         IF (lggr%default_local_unit_nr <= 0) THEN\n            CALL dbcsr_logger_generate_filename(lggr, filename, lggr%local_filename, &\n                                                \".out\", local=.TRUE.)\n            CALL open_file(TRIM(filename), file_status=\"unknown\", &\n                           file_action=\"WRITE\", &\n                           file_position=\"APPEND\", &\n                           unit_number=lggr%default_local_unit_nr)\n            WRITE (UNIT=lggr%default_local_unit_nr, FMT='(/,T2,A,I0,A,I0,A)', IOSTAT=iostat) &\n               '*** Local logger file of MPI task ', lggr%mp_env%mp%mynode, &\n               ' in communicator ', lggr%mp_env%mp%mp_group%get_handle(), ' ***'\n            IF (iostat == 0) THEN\n               CALL m_getpid(pid)\n               CALL m_hostnm(host_name)\n               WRITE (UNIT=lggr%default_local_unit_nr, FMT='(T2,A,I0)', IOSTAT=iostat) &\n                  '*** PID      = ', pid, &\n                  '*** Hostname = '//host_name\n               CALL print_stack(lggr%default_local_unit_nr)\n            END IF\n            IF (iostat /= 0) THEN\n               CALL m_getpid(pid)\n               CALL m_hostnm(host_name)\n               PRINT *, \" *** Error trying to WRITE to the local logger ***\"\n               PRINT *, \" *** MPI_id           = \", lggr%mp_env%mp%mynode\n               PRINT *, \" *** MPI_Communicator = \", lggr%mp_env%mp%mp_group%get_handle()\n               PRINT *, \" *** PID              = \", pid\n               PRINT *, \" *** Hostname         = \"//TRIM(host_name)\n               CALL print_stack(default_output_unit)\n            END IF\n\n         END IF\n         res = lggr%default_local_unit_nr\n      END IF\n   END FUNCTION dbcsr_logger_get_default_unit_nr\n\n   SUBROUTINE dbcsr_logger_generate_filename(logger, res, root, postfix, &\n                                             local)\n      !! generates a unique filename (ie adding eventual suffixes and\n      !! process ids)\n      !! @note\n      !! this should be a function returning a variable length string.\n      !! All spaces are moved to the end of the string.\n      !! Not fully optimized: result must be a little longer than the\n      !! resulting compressed filename\n\n      TYPE(dbcsr_logger_type), POINTER                   :: logger\n      CHARACTER(len=*), INTENT(inout)                    :: res\n         !! the resulting string\n      CHARACTER(len=*), INTENT(in)                       :: root, postfix\n         !! the start of filename\n         !! the end of the name\n      LOGICAL, INTENT(in), OPTIONAL                      :: local\n         !! if the name should be local to this task (defaults to false)\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_generate_filename', &\n                                     routineP = moduleN//':'//routineN\n\n      LOGICAL                                            :: loc\n      TYPE(dbcsr_logger_type), POINTER                   :: lggr\n\n      loc = .FALSE.\n      res = ' '\n      lggr => logger\n\n      IF (.NOT. ASSOCIATED(lggr)) lggr => dbcsr_get_default_logger()\n      IF (lggr%ref_count < 1) &\n         DBCSR_ABORT(routineP//\" logger%ref_count<1\")\n      IF (PRESENT(local)) loc = local\n      IF (loc) THEN\n         res = TRIM(root)//TRIM(lggr%suffix)//'_p'// &\n               dbcsr_to_string(lggr%mp_env%mp%mynode)//postfix\n      ELSE\n         res = TRIM(root)//TRIM(lggr%suffix)//postfix\n      END IF\n      CALL compress(res, full=.TRUE.)\n   END SUBROUTINE dbcsr_logger_generate_filename\n\n   SUBROUTINE dbcsr_logger_set(logger, local_filename, global_filename)\n      !! sets various attributes of the given logger\n\n      TYPE(dbcsr_logger_type), POINTER                   :: logger\n         !! the logger you want to change\n      CHARACTER(len=*), INTENT(in), OPTIONAL             :: local_filename, global_filename\n         !! the root of the name of the file used for local logging\n         !! the root of the name of the file used for global logging\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_logger_set', &\n                                     routineP = moduleN//':'//routineN\n\n      IF (.NOT. ASSOCIATED(logger)) &\n         DBCSR_ABORT(routineP//\" unassociated logger\")\n      IF (PRESENT(local_filename)) logger%local_filename = local_filename\n      IF (PRESENT(global_filename)) logger%global_filename = global_filename\n   END SUBROUTINE dbcsr_logger_set\n\n   FUNCTION dbcsr_int_to_string(i) RESULT(res)\n      !! converts an int to a string\n      !! (should be a variable length string, but that does not work with\n      !! all the compilers)\n\n      INTEGER, INTENT(in)                                :: i\n         !! the integer to convert\n      CHARACTER(len=6)                                   :: res\n\n      CHARACTER(len=6)                                   :: t_res\n      INTEGER                                            :: iostat\n      REAL(KIND=dp)                                      :: tmp_r\n\n      iostat = 0\n      IF (i > 999999 .OR. i < -99999) THEN\n         tmp_r = i\n         WRITE (t_res, fmt='(es6.1)', iostat=iostat) tmp_r\n      ELSE\n         WRITE (t_res, fmt='(i6)', iostat=iostat) i\n      END IF\n      res = t_res\n      IF (iostat /= 0) THEN\n         PRINT *, \"dbcsr_int_to_string ioerror\", iostat\n         CALL print_stack(dbcsr_logger_get_default_unit_nr())\n      END IF\n   END FUNCTION dbcsr_int_to_string\n\n   FUNCTION dbcsr_real_dp_to_string(val) RESULT(res)\n      !! convert a double precision real in a string\n      !! (should be a variable length string, but that does not work with\n      !! all the compilers)\n\n      REAL(KIND=dp), INTENT(in)                          :: val\n         !! the number to convert\n      CHARACTER(len=11)                                  :: res\n\n      WRITE (res, '(es11.4)') val\n   END FUNCTION dbcsr_real_dp_to_string\n\n   FUNCTION dbcsr_logical_to_string(val) RESULT(res)\n      !! convert a logical in a string ('T' or 'F')\n\n      LOGICAL, INTENT(in)                                :: val\n         !! the number to convert\n      CHARACTER(len=1)                                   :: res\n\n      IF (val) THEN\n         res = 'T'\n      ELSE\n         res = 'F'\n      END IF\n   END FUNCTION dbcsr_logical_to_string\n\nEND MODULE dbcsr_log_handling\n"
  },
  {
    "path": "src/core/dbcsr_methods.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_methods\n   !! Base methods on DBCSR data structures\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_release\n   USE dbcsr_btree, ONLY: btree_delete, &\n                          btree_new\n   USE dbcsr_data_methods, ONLY: dbcsr_data_get_size, &\n                                 dbcsr_data_release\n   USE dbcsr_kinds, ONLY: default_string_length\n   USE dbcsr_mpiwrap, ONLY: mp_comm_free\n   USE dbcsr_ptr_util, ONLY: memory_deallocate\n   USE dbcsr_types, ONLY: &\n      dbcsr_1d_array_type, dbcsr_2d_array_type, dbcsr_data_obj, dbcsr_distribution_obj, &\n      dbcsr_imagedistribution_obj, dbcsr_imagedistribution_type, dbcsr_memtype_type, &\n      dbcsr_mp_obj, dbcsr_mutable_obj, dbcsr_type, dbcsr_type_antihermitian, &\n      dbcsr_type_antisymmetric, dbcsr_type_complex_4, dbcsr_type_complex_8, &\n      dbcsr_type_hermitian, dbcsr_type_invalid, dbcsr_type_no_symmetry, dbcsr_type_real_4, &\n      dbcsr_type_real_8, dbcsr_type_symmetric, dbcsr_work_type\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_methods'\n\n   INTEGER, PUBLIC, SAVE :: dbcsr_matrix_counter = 111111\n\n   PUBLIC :: dbcsr_release\n   PUBLIC :: dbcsr_valid_index\n   PUBLIC :: dbcsr_release_locals\n   PUBLIC :: dbcsr_distribution, &\n             dbcsr_get_matrix_type, dbcsr_get_data_type, dbcsr_get_replication_type, &\n             dbcsr_row_block_sizes, dbcsr_col_block_sizes, &\n             dbcsr_nblkrows_total, dbcsr_nblkcols_total, dbcsr_nfullrows_total, &\n             dbcsr_nfullcols_total, dbcsr_nblkcols_local, dbcsr_nblkrows_local, &\n             dbcsr_max_row_size, dbcsr_max_col_size, &\n             dbcsr_get_index_memory_type, dbcsr_get_data_memory_type, &\n             dbcsr_name, dbcsr_setname, dbcsr_get_data_size, &\n             dbcsr_use_mutable, dbcsr_wm_use_mutable, dbcsr_has_symmetry, &\n             dbcsr_get_nze, dbcsr_nfullrows_local, dbcsr_nfullcols_local\n   PUBLIC :: dbcsr_get_data_size_used\n   PUBLIC :: dbcsr_col_block_offsets, dbcsr_row_block_offsets\n   PUBLIC :: dbcsr_data_area\n   PUBLIC :: dbcsr_get_num_blocks\n\n   PUBLIC :: dbcsr_blk_row_size, dbcsr_blk_column_size, &\n             dbcsr_blk_row_offset, dbcsr_blk_col_offset\n\n   PUBLIC :: dbcsr_destroy_array\n   PUBLIC :: dbcsr_image_dist_init, dbcsr_image_dist_hold, dbcsr_image_dist_release\n\n   PUBLIC :: dbcsr_mutable_init, dbcsr_mutable_new, dbcsr_mutable_destroy, &\n             dbcsr_mutable_release, &\n             dbcsr_mutable_instantiated\n\n   PUBLIC :: dbcsr_distribution_release\n   PUBLIC :: dbcsr_mp_release, dbcsr_mp_grid_remove\n\n   ! For the 1-D and 2-D arrays\n\n   INTERFACE dbcsr_destroy_array\n      MODULE PROCEDURE dbcsr_destroy_1d_array, dbcsr_destroy_2d_array\n   END INTERFACE\n\nCONTAINS\n\n   PURE FUNCTION dbcsr_valid_index(matrix) RESULT(valid_index)\n      !! Returns whether the index structure of the matrix is valid.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! verify index validity of this matrix\n      LOGICAL                                            :: valid_index\n         !! index validity\n\n      valid_index = matrix%valid\n   END FUNCTION dbcsr_valid_index\n\n   RECURSIVE SUBROUTINE dbcsr_release(matrix)\n      !! Releases a reference for a DBCSR matrix\n      !! If there are no references left, the matrix is destroyed.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! DBCSR matrix\n\n      matrix%refcount = matrix%refcount - 1\n      IF (matrix%refcount .EQ. 0) THEN\n         CALL dbcsr_destroy(matrix)\n      END IF\n   END SUBROUTINE dbcsr_release\n\n   RECURSIVE SUBROUTINE dbcsr_destroy(matrix, force)\n      !! Deallocates and destroys a matrix.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: force\n         !! force deallocation\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_destroy'\n      INTEGER                                            :: error_handle\n      LOGICAL                                            :: force_all\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      force_all = .FALSE.\n      IF (PRESENT(force)) force_all = force\n      IF (.NOT. force_all .AND. matrix%refcount .NE. 0) &\n         DBCSR_WARN(\"You should not destroy referenced matrix.\")\n      IF (force_all .AND. matrix%refcount .GT. 1) &\n         DBCSR_WARN(\"You should not destroy referenced matrix.\")\n      IF (force_all .OR. matrix%refcount .EQ. 0) THEN\n         IF (ASSOCIATED(matrix%wms)) &\n            DBCSR_WARN(\"Destroying unfinalized matrix\")\n         IF (ASSOCIATED(matrix%index)) THEN\n            CALL memory_deallocate(matrix%index, matrix%index_memory_type)\n         END IF\n         CALL dbcsr_data_release(matrix%data_area)\n         CALL array_release(matrix%row_blk_size)\n         CALL array_release(matrix%col_blk_size)\n         CALL array_release(matrix%row_blk_offset)\n         CALL array_release(matrix%col_blk_offset)\n         CALL dbcsr_distribution_release(matrix%dist)\n         CALL dbcsr_release_locals(matrix)\n         matrix%valid = .FALSE.\n         matrix%refcount = 0\n      END IF\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_destroy\n\n   SUBROUTINE dbcsr_distribution_release(dist)\n      !! Releases and potentially destroys a distribution\n      TYPE(dbcsr_distribution_obj), INTENT(INOUT)        :: dist\n\n!   ---------------------------------------------------------------------------\n\n      IF (ASSOCIATED(dist%d)) THEN\n         dist%d%refcount = dist%d%refcount - 1\n         IF (dist%d%refcount .EQ. 0) THEN\n            CALL array_release(dist%d%row_dist_block)\n            CALL array_release(dist%d%col_dist_block)\n            CALL array_release(dist%d%local_rows)\n            CALL array_release(dist%d%local_cols)\n            CALL dbcsr_mp_release(dist%d%mp_env)\n            IF (dist%d%has_thread_dist) &\n               CALL array_release(dist%d%thread_dist)\n            CALL array_release(dist%d%row_map)\n            CALL array_release(dist%d%col_map)\n            CALL dbcsr_dist_release_locals(dist)\n            DEALLOCATE (dist%d)\n         END IF\n      END IF\n   END SUBROUTINE dbcsr_distribution_release\n\n   SUBROUTINE dbcsr_dist_release_locals(dist)\n      TYPE(dbcsr_distribution_obj), INTENT(INOUT)        :: dist\n\n      INTEGER                                            :: i\n\n      IF (dist%d%has_other_l_rows) THEN\n         DO i = LBOUND(dist%d%other_l_rows, 1), UBOUND(dist%d%other_l_rows, 1)\n            CALL array_release(dist%d%other_l_rows(i))\n         END DO\n         DEALLOCATE (dist%d%other_l_rows)\n      END IF\n      IF (dist%d%has_other_l_cols) THEN\n         DO i = LBOUND(dist%d%other_l_cols, 1), UBOUND(dist%d%other_l_cols, 1)\n            CALL array_release(dist%d%other_l_cols(i))\n         END DO\n         DEALLOCATE (dist%d%other_l_cols)\n      END IF\n      IF (dist%d%has_global_row_map) THEN\n         CALL array_release(dist%d%global_row_map)\n      END IF\n      IF (dist%d%has_global_col_map) THEN\n         CALL array_release(dist%d%global_col_map)\n      END IF\n      dist%d%has_other_l_rows = .FALSE.\n      dist%d%has_other_l_cols = .FALSE.\n      dist%d%has_global_row_map = .FALSE.\n      dist%d%has_global_col_map = .FALSE.\n   END SUBROUTINE dbcsr_dist_release_locals\n\n   SUBROUTINE dbcsr_mp_release(mp_env)\n      !! Releases and potentially destroys an mp_env\n\n      TYPE(dbcsr_mp_obj), INTENT(INOUT)                  :: mp_env\n         !! multiprocessor environment\n\n!   ---------------------------------------------------------------------------\n\n      IF (ASSOCIATED(mp_env%mp)) THEN\n         mp_env%mp%refcount = mp_env%mp%refcount - 1\n         IF (mp_env%mp%refcount .LE. 0) THEN\n            CALL dbcsr_mp_grid_remove(mp_env)\n            DEALLOCATE (mp_env%mp%pgrid)\n            DEALLOCATE (mp_env%mp)\n         END IF\n      END IF\n   END SUBROUTINE dbcsr_mp_release\n\n   SUBROUTINE dbcsr_mp_grid_remove(mp_env)\n      !! Removes an MPI cartesian process grid\n\n      TYPE(dbcsr_mp_obj), INTENT(INOUT)                  :: mp_env\n         !! multiprocessor environment\n\n      IF (mp_env%mp%subgroups_defined) THEN\n         CALL mp_comm_free(mp_env%mp%prow_group)\n         CALL mp_comm_free(mp_env%mp%pcol_group)\n      END IF\n   END SUBROUTINE dbcsr_mp_grid_remove\n\n   SUBROUTINE dbcsr_release_locals(matrix)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n\n      IF (matrix%has_local_rows) &\n         CALL array_release(matrix%local_rows)\n      IF (matrix%has_global_rows) &\n         CALL array_release(matrix%global_rows)\n      IF (matrix%has_local_cols) &\n         CALL array_release(matrix%local_cols)\n      IF (matrix%has_global_cols) &\n         CALL array_release(matrix%global_cols)\n      matrix%has_local_rows = .FALSE.\n      matrix%has_global_rows = .FALSE.\n      matrix%has_local_cols = .FALSE.\n      matrix%has_global_cols = .FALSE.\n   END SUBROUTINE dbcsr_release_locals\n\n!  SUBROUTINE dbcsr_release_vlocals (matrix)\n!    TYPE(dbcsr_type), INTENT(INOUT)           :: matrix\n!\n!    IF (matrix%has_local_vrows) &\n!         CALL array_release (matrix%local_vrows)\n!    IF (matrix%has_global_vrows) &\n!         CALL array_release (matrix%global_vrows)\n!    IF (matrix%has_local_vcols) &\n!         CALL array_release (matrix%local_vcols)\n!    IF (matrix%has_global_vcols) &\n!         CALL array_release (matrix%global_vcols)\n!    matrix%has_local_vrows  = .FALSE.\n!    matrix%has_global_vrows = .FALSE.\n!    matrix%has_local_vcols  = .FALSE.\n!    matrix%has_global_vcols = .FALSE.\n!  END SUBROUTINE dbcsr_release_vlocals\n!\n\n! Pertaining to the dbcsr matrix.\n\n   FUNCTION dbcsr_nblkrows_total(matrix) RESULT(nblkrows_total)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nblkrows_total\n\n      nblkrows_total = matrix%nblkrows_total\n   END FUNCTION dbcsr_nblkrows_total\n\n   FUNCTION dbcsr_nblkcols_total(matrix) RESULT(nblkcols_total)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nblkcols_total\n\n      nblkcols_total = matrix%nblkcols_total\n   END FUNCTION dbcsr_nblkcols_total\n   FUNCTION dbcsr_nfullrows_total(matrix) RESULT(nfullrows_total)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nfullrows_total\n\n      nfullrows_total = matrix%nfullrows_total\n   END FUNCTION dbcsr_nfullrows_total\n   FUNCTION dbcsr_nfullcols_total(matrix) RESULT(nfullcols_total)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nfullcols_total\n\n      nfullcols_total = matrix%nfullcols_total\n   END FUNCTION dbcsr_nfullcols_total\n   FUNCTION dbcsr_nblkrows_local(matrix) RESULT(nblkrows_local)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nblkrows_local\n\n      nblkrows_local = matrix%nblkrows_local\n   END FUNCTION dbcsr_nblkrows_local\n   FUNCTION dbcsr_nblkcols_local(matrix) RESULT(nblkcols_local)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nblkcols_local\n\n      nblkcols_local = matrix%nblkcols_local\n   END FUNCTION dbcsr_nblkcols_local\n   FUNCTION dbcsr_nfullrows_local(matrix) RESULT(nfullrows_local)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nfullrows_local\n\n      nfullrows_local = matrix%nfullrows_local\n   END FUNCTION dbcsr_nfullrows_local\n   FUNCTION dbcsr_nfullcols_local(matrix) RESULT(nfullcols_local)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nfullcols_local\n\n      nfullcols_local = matrix%nfullcols_local\n   END FUNCTION dbcsr_nfullcols_local\n   FUNCTION dbcsr_max_row_size(matrix) RESULT(max_row_size)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: max_row_size\n\n      max_row_size = matrix%max_rbs\n   END FUNCTION dbcsr_max_row_size\n   FUNCTION dbcsr_max_col_size(matrix) RESULT(max_col_size)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: max_col_size\n\n      max_col_size = matrix%max_cbs\n   END FUNCTION dbcsr_max_col_size\n\n   FUNCTION dbcsr_distribution(matrix) RESULT(distribution)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      TYPE(dbcsr_distribution_obj)                       :: distribution\n\n      distribution = matrix%dist\n   END FUNCTION dbcsr_distribution\n\n   FUNCTION dbcsr_name(matrix) RESULT(name)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      CHARACTER(len=default_string_length)               :: name\n\n      name = matrix%name\n   END FUNCTION dbcsr_name\n\n   SUBROUTINE dbcsr_setname(matrix, newname)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      CHARACTER(len=*), INTENT(IN)                       :: newname\n\n      matrix%name = newname\n   END SUBROUTINE dbcsr_setname\n\n   PURE FUNCTION dbcsr_wm_use_mutable(wm) RESULT(use_mutable)\n      !! Returns whether this work matrix uses the mutable type\n\n      TYPE(dbcsr_work_type), INTENT(IN)                  :: wm\n         !! work matrix\n      LOGICAL                                            :: use_mutable\n         !! use the mutable and not append-only working structures\n\n!   ---------------------------------------------------------------------------\n\n      use_mutable = dbcsr_mutable_instantiated(wm%mutable)\n   END FUNCTION dbcsr_wm_use_mutable\n\n   PURE FUNCTION dbcsr_use_mutable(matrix) RESULT(use_mutable)\n      !! Returns whether work matrices should use the mutable data type\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix\n      LOGICAL                                            :: use_mutable\n         !! use the mutable and not append-only working structures\n\n!   ---------------------------------------------------------------------------\n\n      use_mutable = matrix%work_mutable\n   END FUNCTION dbcsr_use_mutable\n\n   FUNCTION dbcsr_row_block_sizes(matrix) RESULT(row_blk_sizes)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: row_blk_sizes\n\n      row_blk_sizes => array_data(matrix%row_blk_size)\n   END FUNCTION dbcsr_row_block_sizes\n\n   FUNCTION dbcsr_col_block_sizes(matrix) RESULT(col_blk_sizes)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_blk_sizes\n\n      col_blk_sizes => array_data(matrix%col_blk_size)\n   END FUNCTION dbcsr_col_block_sizes\n\n   FUNCTION dbcsr_col_block_offsets(matrix) RESULT(col_blk_offsets)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_blk_offsets\n\n      col_blk_offsets => array_data(matrix%col_blk_offset)\n   END FUNCTION dbcsr_col_block_offsets\n\n   FUNCTION dbcsr_row_block_offsets(matrix) RESULT(row_blk_offsets)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: row_blk_offsets\n\n      row_blk_offsets => array_data(matrix%row_blk_offset)\n   END FUNCTION dbcsr_row_block_offsets\n\n   PURE FUNCTION dbcsr_blk_row_size(matrix, row) RESULT(row_size)\n      !! Returns the blocked row size of a row\n      !! This routine is optimized for speed and no checks are performed.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! DBCSR matrix\n      INTEGER, INTENT(IN)                                :: row\n         !! row number\n      INTEGER                                            :: row_size\n         !! blocked row size\n\n      row_size = matrix%row_blk_size%low%data(row)\n   END FUNCTION dbcsr_blk_row_size\n\n   PURE FUNCTION dbcsr_blk_row_offset(matrix, row) RESULT(row_offset)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, INTENT(IN)                                :: row\n      INTEGER                                            :: row_offset\n\n      row_offset = matrix%row_blk_offset%low%data(row)\n   END FUNCTION dbcsr_blk_row_offset\n\n   PURE FUNCTION dbcsr_blk_column_size(matrix, column) RESULT(column_size)\n      !! Returns the blocked column size of a column\n      !! This routine is optimized for speed and no checks are performed.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! DBCSR matrix\n      INTEGER, INTENT(IN)                                :: column\n         !! column number\n      INTEGER                                            :: column_size\n         !! blocked row size\n\n      column_size = matrix%col_blk_size%low%data(column)\n   END FUNCTION dbcsr_blk_column_size\n\n   PURE FUNCTION dbcsr_blk_col_offset(matrix, col) RESULT(col_offset)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, INTENT(IN)                                :: col\n      INTEGER                                            :: col_offset\n\n      col_offset = matrix%col_blk_offset%low%data(col)\n   END FUNCTION dbcsr_blk_col_offset\n\n   FUNCTION dbcsr_data_area(matrix) RESULT(data_area)\n      !! Returns the data area\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix from which to get data\n      TYPE(dbcsr_data_obj)                               :: data_area\n         !! data area\n\n      data_area = matrix%data_area\n   END FUNCTION dbcsr_data_area\n\n   PURE FUNCTION dbcsr_get_matrix_type(matrix) RESULT(matrix_type)\n      !! Returns the matrix type\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! query this matrix\n      CHARACTER                                          :: matrix_type\n         !! matrix_type (see dbcsr_types.F for possible values)\n\n      matrix_type = dbcsr_type_invalid\n      IF (matrix%symmetry) THEN\n         IF ((.NOT. matrix%negate_real) .AND. matrix%negate_imaginary) THEN\n            matrix_type = dbcsr_type_hermitian\n         ELSEIF (matrix%negate_real .AND. (.NOT. matrix%negate_imaginary)) THEN\n            matrix_type = dbcsr_type_antihermitian\n         ELSEIF (matrix%negate_real .AND. matrix%negate_imaginary) THEN\n            matrix_type = dbcsr_type_antisymmetric\n         ELSEIF ((.NOT. matrix%negate_real) .AND. (.NOT. matrix%negate_imaginary)) THEN\n            matrix_type = dbcsr_type_symmetric\n         END IF\n      ELSE\n         matrix_type = dbcsr_type_no_symmetry\n      END IF\n   END FUNCTION dbcsr_get_matrix_type\n\n   PURE FUNCTION dbcsr_has_symmetry(matrix) RESULT(has_symmetry)\n      !! Whether matrix has symmetry\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! query this matrix\n      LOGICAL                                            :: has_symmetry\n         !! matrix has symmetry\n\n      has_symmetry = matrix%symmetry\n   END FUNCTION dbcsr_has_symmetry\n\n   PURE FUNCTION dbcsr_get_replication_type(matrix) RESULT(repl_type)\n      !! Returns the data type stored in the matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! query this matrix\n      CHARACTER                                          :: repl_type\n         !! repl_type (see dbcsr_types.F for possible values)\n\n      repl_type = matrix%replication_type\n   END FUNCTION dbcsr_get_replication_type\n\n   PURE FUNCTION dbcsr_get_data_type(matrix) RESULT(data_type)\n      !! Returns the data type stored in the matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! query this matrix\n      INTEGER                                            :: data_type\n         !! data_type (see dbcsr_types.F for possible values)\n\n      data_type = matrix%data_type\n   END FUNCTION dbcsr_get_data_type\n\n   FUNCTION dbcsr_get_data_memory_type(matrix) &\n      RESULT(memory_type)\n      !! Returns the type of memory used for data in the matrix\n      !! @note\n      !! It returns the declared data type, not the actually used type\n      !! @endnote\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! query this matrix\n      TYPE(dbcsr_memtype_type)                           :: memory_type\n         !! memory type used for data\n\n      memory_type = matrix%data_memory_type\n   END FUNCTION dbcsr_get_data_memory_type\n\n   FUNCTION dbcsr_get_index_memory_type(matrix) RESULT(memory_type)\n      !! Returns the type of memory used for the index in the matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! query this matrix\n      TYPE(dbcsr_memtype_type)                           :: memory_type\n         !! memory type used for the index\n\n      memory_type = matrix%index_memory_type\n   END FUNCTION dbcsr_get_index_memory_type\n\n!  PURE FUNCTION uses_special_memory_matrix (matrix) RESULT (uses_special)\n!   !! Returns whether the matrix uses specially-allocated memory\n!    TYPE(dbcsr_type), INTENT(IN)              :: matrix\n!       !! query this matrix\n!    LOGICAL                                  :: uses_special\n!       !! whether the matrix uses specially allocated memory\n!\n!    uses_special = matrix%data_memory_type .NE. dbcsr_memory_default\n!  END FUNCTION uses_special_memory_matrix\n!\n!\n!  PURE FUNCTION uses_special_memory_area (area) RESULT (uses_special)\n!    !! Returns whether the data area uses special-allocated memory\n!    TYPE(dbcsr_data_obj), INTENT(IN)         :: area\n!       !! query this data area\n!    LOGICAL                                  :: uses_special\n!       !! whether the data area uses specially allocated memory\n!\n!    IF (ASSOCIATED (area%d)) THEN\n!       uses_special = area%d%memory_type .NE. dbcsr_memory_default\n!    ELSE\n!       uses_special = .FALSE.\n!    ENDIF\n!  END FUNCTION uses_special_memory_area\n!\n\n   FUNCTION dbcsr_get_data_size(matrix) RESULT(data_size)\n      !! Returns the allocated data size of a DBCSR matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix\n      INTEGER                                            :: data_size\n         !! size of data\n\n      INTEGER                                            :: data_type\n\n      data_size = 0\n      data_type = dbcsr_get_data_type(matrix)\n      IF (data_type .NE. dbcsr_type_real_8 .AND. &\n          data_type .NE. dbcsr_type_real_4 .AND. &\n          data_type .NE. dbcsr_type_complex_8 .AND. &\n          data_type .NE. dbcsr_type_complex_4) DBCSR_ABORT(\"Incorrect data type\")\n      data_size = dbcsr_data_get_size(matrix%data_area)\n   END FUNCTION dbcsr_get_data_size\n\n   FUNCTION dbcsr_get_data_size_used(matrix) RESULT(data_size)\n      !! Count actual data storage used for matrix data.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! Count data of this matrix\n      INTEGER                                            :: data_size\n         !! Data size used by matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_data_size_used'\n\n      INTEGER                                            :: blk, col, error_handle, nze, row\n      INTEGER, DIMENSION(:), POINTER                     :: col_blk_sizes, row_blk_sizes\n\n!type(dbcsr_iterator_type) :: iter\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      row_blk_sizes => dbcsr_row_block_sizes(matrix)\n      col_blk_sizes => dbcsr_col_block_sizes(matrix)\n      data_size = 0\n!$OMP     DO\n      DO row = 1, matrix%nblkrows_total\n         DO blk = matrix%row_p(row) + 1, matrix%row_p(row + 1)\n            col = matrix%col_i(blk)\n            IF (matrix%blk_p(blk) .NE. 0) THEN\n               nze = row_blk_sizes(row)*col_blk_sizes(col)\n               data_size = data_size + nze\n            END IF\n         END DO\n      END DO\n!$OMP     END DO\n      CALL timestop(error_handle)\n   END FUNCTION dbcsr_get_data_size_used\n\n   PURE FUNCTION dbcsr_get_num_blocks(matrix) RESULT(num_blocks)\n      !! Returns the number of blocks in the matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix from which to get data\n      INTEGER                                            :: num_blocks\n\n      num_blocks = matrix%nblks\n   END FUNCTION dbcsr_get_num_blocks\n\n   PURE FUNCTION dbcsr_get_nze(matrix) RESULT(num_nze)\n      !! Returns the number of non-zero elements in the matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix from which to get data\n      INTEGER                                            :: num_nze\n\n      num_nze = matrix%nze\n   END FUNCTION dbcsr_get_nze\n\n! **************************************************************************************************\n! Arrays\n! **************************************************************************************************\n\n   SUBROUTINE dbcsr_destroy_1d_array(marray)\n      !! Releases all matrices in a 1-d array.\n\n      TYPE(dbcsr_1d_array_type), INTENT(INOUT)           :: marray\n         !! matrix array\n\n      INTEGER                                            :: i\n\n!   ---------------------------------------------------------------------------\n\n      DO i = LBOUND(marray%mats, 1), UBOUND(marray%mats, 1)\n         CALL dbcsr_destroy(marray%mats(i), force=.TRUE.)\n      END DO\n      CALL dbcsr_image_dist_release(marray%image_dist)\n      DEALLOCATE (marray%mats)\n   END SUBROUTINE dbcsr_destroy_1d_array\n\n   SUBROUTINE dbcsr_destroy_2d_array(marray)\n      !! Releases all matrices in 2-d array.\n\n      TYPE(dbcsr_2d_array_type), INTENT(INOUT)           :: marray\n         !! matrix array\n\n      INTEGER                                            :: col, row\n\n!   ---------------------------------------------------------------------------\n\n      DO row = LBOUND(marray%mats, 1), UBOUND(marray%mats, 1)\n         DO col = LBOUND(marray%mats, 2), UBOUND(marray%mats, 2)\n            CALL dbcsr_destroy(marray%mats(row, col), force=.TRUE.)\n         END DO\n      END DO\n      CALL dbcsr_image_dist_release(marray%image_dist)\n      DEALLOCATE (marray%mats)\n   END SUBROUTINE dbcsr_destroy_2d_array\n\n   SUBROUTINE dbcsr_image_dist_release(imgdist)\n      !! Releases a reference to and possible deallocates an image\n      !! distribution\n\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n\n      IF (ASSOCIATED(imgdist%i)) THEN\n         imgdist%i%refcount = imgdist%i%refcount - 1\n         IF (imgdist%i%refcount .EQ. 0) THEN\n            CALL dbcsr_destroy_image_dist(imgdist%i)\n            DEALLOCATE (imgdist%i)\n         END IF\n      END IF\n   END SUBROUTINE dbcsr_image_dist_release\n\n   SUBROUTINE dbcsr_image_dist_hold(imgdist)\n      !! Retains a reference to an image distribution\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n\n      imgdist%i%refcount = imgdist%i%refcount + 1\n   END SUBROUTINE dbcsr_image_dist_hold\n\n   SUBROUTINE dbcsr_image_dist_init(imgdist)\n      !! Initialized an image distribution\n      !!\n      !! Akin to nullify.\n\n      TYPE(dbcsr_imagedistribution_obj), INTENT(OUT)     :: imgdist\n\n      NULLIFY (imgdist%i)\n   END SUBROUTINE dbcsr_image_dist_init\n\n   SUBROUTINE dbcsr_destroy_image_dist(imgdist)\n      !! Destroys a DBCSR distribution for a matrix multiplication based on\n      !! the right matrix\n\n      TYPE(dbcsr_imagedistribution_type), INTENT(INOUT)  :: imgdist\n         !! product distribution repetition\n\n      INTEGER                                            :: i\n\n!   ---------------------------------------------------------------------------\n\n      CALL array_release(imgdist%row_image)\n      CALL array_release(imgdist%col_image)\n      CALL dbcsr_distribution_release(imgdist%main)\n      !\n      CALL array_release(imgdist%vrow_dist)\n      CALL array_release(imgdist%vcol_dist)\n      !\n      IF (imgdist%has_other_vl_rows) THEN\n         DO i = LBOUND(imgdist%other_vl_rows, 1), UBOUND(imgdist%other_vl_rows, 1)\n            CALL array_release(imgdist%other_vl_rows(i))\n         END DO\n         DEALLOCATE (imgdist%other_vl_rows)\n         imgdist%has_other_vl_rows = .FALSE.\n      END IF\n      !\n      IF (imgdist%has_other_vl_cols) THEN\n         DO i = LBOUND(imgdist%other_vl_cols, 1), UBOUND(imgdist%other_vl_cols, 1)\n            CALL array_release(imgdist%other_vl_cols(i))\n         END DO\n         DEALLOCATE (imgdist%other_vl_cols)\n         imgdist%has_other_vl_cols = .FALSE.\n      END IF\n      !\n      IF (imgdist%has_global_vrow_map) THEN\n         CALL array_release(imgdist%global_vrow_map)\n      END IF\n      IF (imgdist%has_global_vcol_map) THEN\n         CALL array_release(imgdist%global_vcol_map)\n      END IF\n   END SUBROUTINE dbcsr_destroy_image_dist\n\n! **************************************************************************************************\n! Mutable data\n! **************************************************************************************************\n\n   SUBROUTINE dbcsr_mutable_init(mutable)\n      !! Initializes a mutable data type\n\n      TYPE(dbcsr_mutable_obj), INTENT(OUT)               :: mutable\n         !! mutable data\n\n      NULLIFY (mutable%m)\n   END SUBROUTINE dbcsr_mutable_init\n\n   SUBROUTINE dbcsr_mutable_destroy(mutable)\n      !! Destroys a mutable data type\n\n      TYPE(dbcsr_mutable_obj), INTENT(INOUT)             :: mutable\n         !! mutable data\n\n!   ---------------------------------------------------------------------------\n\n      IF (ASSOCIATED(mutable%m)) THEN\n         CALL btree_delete(mutable%m%btree_s)\n         CALL btree_delete(mutable%m%btree_d)\n         CALL btree_delete(mutable%m%btree_c)\n         CALL btree_delete(mutable%m%btree_z)\n         DEALLOCATE (mutable%m)\n      END IF\n      NULLIFY (mutable%m)\n   END SUBROUTINE dbcsr_mutable_destroy\n\n   SUBROUTINE dbcsr_mutable_release(mutable)\n      !! Unregisters a reference to the mutable data type\n      !! The object is destroy when there is no reference to it left.\n\n      TYPE(dbcsr_mutable_obj), INTENT(INOUT)             :: mutable\n         !! mutable data\n\n!   ---------------------------------------------------------------------------\n\n      IF (.NOT. ASSOCIATED(mutable%m)) &\n         DBCSR_ABORT(\"Mutable data area not instantiated\")\n      mutable%m%refcount = mutable%m%refcount - 1\n      IF (mutable%m%refcount .EQ. 0) THEN\n         CALL dbcsr_mutable_destroy(mutable)\n      END IF\n   END SUBROUTINE dbcsr_mutable_release\n\n   SUBROUTINE dbcsr_mutable_new(mutable, data_type)\n      !! Creates a new mutable instance.\n\n      TYPE(dbcsr_mutable_obj), INTENT(INOUT)             :: mutable\n         !! mutable data\n      INTEGER, INTENT(IN)                                :: data_type\n         !! data type to be stored here (see dbcsr_types for possibilities)\n\n!   ---------------------------------------------------------------------------\n\n      IF (ASSOCIATED(mutable%m)) &\n         DBCSR_ABORT(\"Mutable data area already instantiated\")\n      IF (data_type .NE. dbcsr_type_real_4 &\n          .AND. data_type .NE. dbcsr_type_real_8 &\n          .AND. data_type .NE. dbcsr_type_complex_4 &\n          .AND. data_type .NE. dbcsr_type_complex_8) &\n         DBCSR_ABORT(\"Invalid data type\")\n      ALLOCATE (mutable%m)\n      mutable%m%refcount = 1\n      mutable%m%data_type = data_type\n      CALL btree_new(mutable%m%btree_s)\n      CALL btree_new(mutable%m%btree_d)\n      CALL btree_new(mutable%m%btree_c)\n      CALL btree_new(mutable%m%btree_z)\n   END SUBROUTINE dbcsr_mutable_new\n\n   PURE FUNCTION dbcsr_mutable_instantiated(mutable) RESULT(instantiated)\n      !! Unregisters a reference to the mutable data type\n      !! The object is destroy when there is no reference to it left.\n\n      TYPE(dbcsr_mutable_obj), INTENT(IN)                :: mutable\n         !! mutable data\n      LOGICAL                                            :: instantiated\n         !! whether the object is instantiated\n\n!   ---------------------------------------------------------------------------\n\n      instantiated = ASSOCIATED(mutable%m)\n   END FUNCTION dbcsr_mutable_instantiated\n\nEND MODULE dbcsr_methods\n"
  },
  {
    "path": "src/core/dbcsr_print_messages.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_print_messages\n   !! Perform an abnormal program termination.\n   !! @note\n   !! These routines are low-level and thus provide also an error recovery\n   !! when dependencies do not allow the use of the error logger. Only\n   !! the master (root) process will dump, if para_env is available and\n   !! properly specified. Otherwise (without any information about the\n   !! parallel environment) most likely more than one process or even all\n   !! processes will send their error dump to the default output unit.\n   !! @endnote\n\n#include \"base/dbcsr_base_uses.f90\"\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_print_messages'\n\n   PUBLIC :: print_message\n\nCONTAINS\n\n   SUBROUTINE print_message(message, output_unit, declev, before, after)\n      !! Perform a basic blocking of the text in message and print it\n      !! optionally decorated with a frame of stars as defined by declev.\n      !! @note\n      !! after      : Number of empty lines after the message.\n      !! before     : Number of empty lines before the message.\n      !! declev     : Decoration level (0,1,2, ... star lines).\n      !! message    : String with the message text.\n      !! output_unit: Logical unit number of output unit.\n      !! @endnote\n\n      CHARACTER(LEN=*), INTENT(IN)                       :: message\n      INTEGER, INTENT(IN)                                :: output_unit\n      INTEGER, INTENT(IN), OPTIONAL                      :: declev, before, after\n\n      INTEGER                                            :: blank_lines_after, blank_lines_before, &\n                                                            decoration_level, i, ibreak, ipos1, &\n                                                            ipos2, maxrowlen, msglen, nrow, rowlen\n\n      IF (PRESENT(after)) THEN\n         blank_lines_after = MAX(after, 0)\n      ELSE\n         blank_lines_after = 1\n      END IF\n\n      IF (PRESENT(before)) THEN\n         blank_lines_before = MAX(before, 0)\n      ELSE\n         blank_lines_before = 1\n      END IF\n\n      IF (PRESENT(declev)) THEN\n         decoration_level = MAX(declev, 0)\n      ELSE\n         decoration_level = 0\n      END IF\n\n      IF (decoration_level == 0) THEN\n         rowlen = 78\n      ELSE\n         rowlen = 70\n      END IF\n\n      msglen = LEN_TRIM(message)\n\n      ! Calculate number of rows\n\n      nrow = msglen/(rowlen + 1) + 1\n\n      ! Calculate appropriate row length\n\n      rowlen = MIN(msglen, rowlen)\n\n      ! Generate the blank lines before the message\n\n      DO i = 1, blank_lines_before\n         WRITE (UNIT=output_unit, FMT=\"(A)\") \"\"\n      END DO\n\n      ! Scan for the longest row\n\n      ipos1 = 1\n      ipos2 = rowlen\n      maxrowlen = 0\n\n      DO\n         IF (ipos2 < msglen) THEN\n            i = INDEX(message(ipos1:ipos2), \" \", BACK=.TRUE.)\n            IF (i == 0) THEN\n               ibreak = ipos2\n            ELSE\n               ibreak = ipos1 + i - 2\n            END IF\n         ELSE\n            ibreak = ipos2\n         END IF\n\n         maxrowlen = MAX(maxrowlen, ibreak - ipos1 + 1)\n\n         ipos1 = ibreak + 2\n         ipos2 = MIN(msglen, ipos1 + rowlen - 1)\n\n         ! When the last row is processed, exit loop\n\n         IF (ipos1 > msglen) EXIT\n\n      END DO\n\n      ! Generate the first set of star rows\n\n      IF (decoration_level > 1) THEN\n         DO i = 1, decoration_level - 1\n            WRITE (UNIT=output_unit, FMT=\"(T2,A)\") REPEAT(\"*\", maxrowlen + 8)\n         END DO\n      END IF\n\n      ! Break long messages\n\n      ipos1 = 1\n      ipos2 = rowlen\n\n      DO\n         IF (ipos2 < msglen) THEN\n            i = INDEX(message(ipos1:ipos2), \" \", BACK=.TRUE.)\n            IF (i == 0) THEN\n               ibreak = ipos2\n            ELSE\n               ibreak = ipos1 + i - 2\n            END IF\n         ELSE\n            ibreak = ipos2\n         END IF\n\n         IF (decoration_level == 0) THEN\n            WRITE (UNIT=output_unit, FMT=\"(T2,A)\") message(ipos1:ibreak)\n         ELSE IF (decoration_level > 0) THEN\n            WRITE (UNIT=output_unit, FMT=\"(T2,A)\") &\n               \"*** \"//message(ipos1:ibreak)//REPEAT(\" \", ipos1 + maxrowlen - ibreak)//\"***\"\n         END IF\n\n         ipos1 = ibreak + 2\n         ipos2 = MIN(msglen, ipos1 + rowlen - 1)\n\n         ! When the last row is processed, exit loop\n\n         IF (ipos1 > msglen) EXIT\n      END DO\n\n      ! Generate the second set star rows\n\n      IF (decoration_level > 1) THEN\n         DO i = 1, decoration_level - 1\n            WRITE (UNIT=output_unit, FMT=\"(T2,A)\") REPEAT(\"*\", maxrowlen + 8)\n         END DO\n      END IF\n\n      ! Generate the blank lines after the message\n\n      DO i = 1, blank_lines_after\n         WRITE (UNIT=output_unit, FMT=\"(A)\") \"\"\n      END DO\n\n   END SUBROUTINE print_message\n\nEND MODULE dbcsr_print_messages\n"
  },
  {
    "path": "src/core/dbcsr_timings.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_timings\n   !! Timing routines for accounting\n   USE dbcsr_base_hooks, ONLY: timeset_hook, &\n                               timestop_hook\n   USE dbcsr_cuda_profiling, ONLY: cuda_nvtx_range_pop, &\n                                   cuda_nvtx_range_push\n   USE dbcsr_acc_devmem, ONLY: acc_devmem_info\n   USE dbcsr_dict, ONLY: dict_destroy, &\n                         dict_get, &\n                         dict_i4tuple_callstat_item_type, &\n                         dict_init, &\n                         dict_items, &\n                         dict_set, &\n                         dict_size\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          dp, &\n                          int_8\n   USE dbcsr_list, ONLY: &\n      list_destroy, list_get, list_init, list_isready, list_peek, list_pop, list_push, &\n      list_size, list_timerenv_type\n   USE dbcsr_machine, ONLY: m_energy, &\n                            m_flush, &\n                            m_memory, &\n                            m_walltime\n   USE dbcsr_timings_base_type, ONLY: call_stat_type, &\n                                      callstack_entry_type, &\n                                      routine_stat_type\n   USE dbcsr_timings_types, ONLY: timer_env_type\n   USE dbcsr_hip_profiling, ONLY: roctxRangePushA, &\n                                  roctxRangePop\n   USE ISO_C_BINDING, ONLY: C_NULL_CHAR\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   PUBLIC :: print_stack, timings_register_hooks\n\n   ! these routines are currently only used by environment.F and f77_interface.F\n   PUBLIC :: add_timer_env, rm_timer_env, get_timer_env\n   PUBLIC :: timer_env_retain, timer_env_release\n   PUBLIC :: timings_setup_tracing\n\n   ! global variables\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_timings'\n   TYPE(list_timerenv_type), SAVE, PRIVATE                  :: timers_stack\n\n   !API (via pointer assignment to hook, PR67982, not meant to be called directly)\n   PUBLIC :: timeset_handler, timestop_handler\n\n   INTEGER, PUBLIC, PARAMETER :: default_timings_level = 1\n   INTEGER, PUBLIC, SAVE :: global_timings_level = default_timings_level\n\nCONTAINS\n\n   SUBROUTINE timings_register_hooks()\n      !! Registers handlers with base_hooks.F\n      timeset_hook => timeset_handler\n      timestop_hook => timestop_handler\n   END SUBROUTINE timings_register_hooks\n\n   SUBROUTINE add_timer_env(timer_env)\n      !! adds the given timer_env to the top of the stack\n      !! @note\n      !! for each init_timer_env there should be the symmetric call to\n      !! rm_timer_env\n\n      TYPE(timer_env_type), OPTIONAL, POINTER            :: timer_env\n\n      TYPE(timer_env_type), POINTER                      :: timer_env_\n\n      IF (PRESENT(timer_env)) timer_env_ => timer_env\n      IF (.NOT. PRESENT(timer_env)) CALL timer_env_create(timer_env_)\n      IF (.NOT. ASSOCIATED(timer_env_)) &\n         DBCSR_ABORT(\"add_timer_env: not associated\")\n\n      CALL timer_env_retain(timer_env_)\n      IF (.NOT. list_isready(timers_stack)) CALL list_init(timers_stack)\n      CALL list_push(timers_stack, timer_env_)\n   END SUBROUTINE add_timer_env\n\n   SUBROUTINE timer_env_create(timer_env)\n      !! creates a new timer env\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n      INTEGER                                            :: stat\n\n      ALLOCATE (timer_env, stat=stat)\n      IF (stat /= 0) &\n         DBCSR_ABORT(\"timer_env_create: allocation failed\")\n      timer_env%ref_count = 0\n      timer_env%trace_max = -1 ! tracing disabled by default\n      timer_env%trace_all = .FALSE.\n      CALL dict_init(timer_env%routine_names)\n      CALL dict_init(timer_env%callgraph)\n      CALL list_init(timer_env%routine_stats)\n      CALL list_init(timer_env%callstack)\n   END SUBROUTINE timer_env_create\n\n   SUBROUTINE rm_timer_env()\n      !! removes the current timer env from the stack\n      !! @note\n      !! for each rm_timer_env there should have been the symmetric call to\n      !! add_timer_env\n\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n      timer_env => list_pop(timers_stack)\n      CALL timer_env_release(timer_env)\n      IF (list_size(timers_stack) == 0) CALL list_destroy(timers_stack)\n   END SUBROUTINE rm_timer_env\n\n   FUNCTION get_timer_env() RESULT(timer_env)\n      !! returns the current timer env from the stack\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n      timer_env => list_peek(timers_stack)\n   END FUNCTION get_timer_env\n\n   SUBROUTINE timer_env_retain(timer_env)\n      !! retains the given timer env\n\n      TYPE(timer_env_type), POINTER                      :: timer_env\n         !! the timer env to retain\n\n      IF (.NOT. ASSOCIATED(timer_env)) &\n         DBCSR_ABORT(\"timer_env_retain: not associated\")\n      IF (timer_env%ref_count < 0) &\n         DBCSR_ABORT(\"timer_env_retain: negative ref_count\")\n      timer_env%ref_count = timer_env%ref_count + 1\n   END SUBROUTINE timer_env_retain\n\n   SUBROUTINE timer_env_release(timer_env)\n      !! releases the given timer env\n\n      TYPE(timer_env_type), POINTER                      :: timer_env\n         !! the timer env to release\n\n      INTEGER                                            :: i\n      TYPE(dict_i4tuple_callstat_item_type), &\n         DIMENSION(:), POINTER                           :: ct_items\n      TYPE(routine_stat_type), POINTER                   :: r_stat\n\n      IF (.NOT. ASSOCIATED(timer_env)) &\n         DBCSR_ABORT(\"timer_env_release: not associated\")\n      IF (timer_env%ref_count < 0) &\n         DBCSR_ABORT(\"timer_env_release: negative ref_count\")\n      timer_env%ref_count = timer_env%ref_count - 1\n      IF (timer_env%ref_count > 0) RETURN\n\n      ! No more references left - let's tear down this timer_env...\n\n      DO i = 1, list_size(timer_env%routine_stats)\n         r_stat => list_get(timer_env%routine_stats, i)\n         DEALLOCATE (r_stat)\n      END DO\n\n      ct_items => dict_items(timer_env%callgraph)\n      DO i = 1, SIZE(ct_items)\n         DEALLOCATE (ct_items(i)%value)\n      END DO\n      DEALLOCATE (ct_items)\n\n      CALL dict_destroy(timer_env%routine_names)\n      CALL dict_destroy(timer_env%callgraph)\n      CALL list_destroy(timer_env%callstack)\n      CALL list_destroy(timer_env%routine_stats)\n      DEALLOCATE (timer_env)\n   END SUBROUTINE timer_env_release\n\n   SUBROUTINE timeset_handler(routineN, handle)\n      !! Start timer\n      CHARACTER(LEN=*), INTENT(IN)                       :: routineN\n      INTEGER, INTENT(OUT)                               :: handle\n\n      CHARACTER(LEN=400)                                 :: line, mystring\n      CHARACTER(LEN=60)                                  :: sformat\n      CHARACTER(LEN=default_string_length)               :: routine_name_dsl\n      INTEGER                                            :: routine_id, stack_size\n#if defined( __HIP_PROFILING )\n      INTEGER                                            :: ret\n#endif\n      INTEGER(KIND=int_8)                                :: cpumem, gpumem_free, gpumem_total\n      TYPE(callstack_entry_type)                         :: cs_entry\n      TYPE(routine_stat_type), POINTER                   :: r_stat\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n!$OMP MASTER\n\n      ! Default value, using a negative value when timing is not taken\n      cs_entry%walltime_start = -HUGE(1.0_dp)\n      cs_entry%energy_start = -HUGE(1.0_dp)\n      !\n      routine_name_dsl = routineN ! converts to default_string_length\n      routine_id = routine_name2id(routine_name_dsl)\n      !\n      ! Take timings when the timings_level is appropriated\n      IF (global_timings_level .NE. 0) THEN\n         cs_entry%walltime_start = m_walltime()\n         cs_entry%energy_start = m_energy()\n      END IF\n      timer_env => list_peek(timers_stack)\n\n      IF (LEN_TRIM(routineN) > default_string_length) THEN\n         DBCSR_ABORT('timings_timeset: routineN too long: \"'//TRIM(routineN)//\"'\")\n      END IF\n\n      ! update routine r_stats\n      r_stat => list_get(timer_env%routine_stats, routine_id)\n      stack_size = list_size(timer_env%callstack)\n      r_stat%total_calls = r_stat%total_calls + 1\n      r_stat%active_calls = r_stat%active_calls + 1\n      r_stat%stackdepth_accu = r_stat%stackdepth_accu + stack_size + 1\n\n      ! add routine to callstack\n      cs_entry%routine_id = routine_id\n      CALL list_push(timer_env%callstack, cs_entry)\n\n      !..if debug mode echo the subroutine name\n      IF ((timer_env%trace_all .OR. r_stat%trace) .AND. &\n          (r_stat%total_calls < timer_env%trace_max)) THEN\n         WRITE (sformat, *) \"(A,A,\", MAX(1, 3*stack_size - 4), \"X,I4,1X,I6,1X,A,A)\"\n         WRITE (mystring, sformat) timer_env%trace_str, \">>\", stack_size + 1, &\n            r_stat%total_calls, TRIM(r_stat%routineN), \"       start\"\n         CALL acc_devmem_info(gpumem_free, gpumem_total)\n         CALL m_memory(cpumem)\n         WRITE (line, '(A,A,I0,A,A,I0,A)') TRIM(mystring), &\n            \" Hostmem: \", (cpumem + 1024**2 - 1)/1024**2, \" MiB\", &\n            \" GPUmem: \", (gpumem_total - gpumem_free)/1024**2, \" MiB\"\n         WRITE (timer_env%trace_unit, *) TRIM(line)\n         CALL m_flush(timer_env%trace_unit)\n      END IF\n\n      handle = routine_id\n\n#if defined( __CUDA_PROFILING )\n      CALL cuda_nvtx_range_push(routineN)\n#endif\n#if defined( __HIP_PROFILING )\n      ret = roctxRangePushA(routineN//C_NULL_CHAR)\n#endif\n\n!$OMP END MASTER\n\n   END SUBROUTINE timeset_handler\n\n   SUBROUTINE timestop_handler(handle)\n      !! End timer\n      INTEGER, INTENT(in)                                :: handle\n\n      CHARACTER(LEN=400)                                 :: line, mystring\n      CHARACTER(LEN=60)                                  :: sformat\n      INTEGER                                            :: routine_id, stack_size\n      INTEGER(KIND=int_8)                                :: cpumem, gpumem_free, gpumem_total\n      INTEGER, DIMENSION(2)                              :: routine_tuple\n      REAL(KIND=dp)                                      :: en_elapsed, en_now, wt_elapsed, wt_now\n      TYPE(call_stat_type), POINTER                      :: c_stat\n      TYPE(callstack_entry_type)                         :: cs_entry, prev_cs_entry\n      TYPE(routine_stat_type), POINTER                   :: prev_stat, r_stat\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n      routine_id = handle\n\n!$OMP MASTER\n\n#if defined( __CUDA_PROFILING )\n      CALL cuda_nvtx_range_pop()\n#endif\n#if defined( __HIP_PROFILING )\n      CALL roctxRangePop()\n#endif\n\n      timer_env => list_peek(timers_stack)\n      cs_entry = list_pop(timer_env%callstack)\n      r_stat => list_get(timer_env%routine_stats, cs_entry%routine_id)\n\n      IF (handle /= cs_entry%routine_id) THEN\n         PRINT *, \"list_size(timer_env%callstack) \", list_size(timer_env%callstack), &\n            \" list_size(timers_stack) \", list_size(timers_stack), &\n            \" got handle \", handle, \" expected routineid \", cs_entry%routine_id\n         DBCSR_ABORT('mismatched timestop '//TRIM(r_stat%routineN)//' in routine timestop')\n      END IF\n\n      wt_elapsed = 0\n      en_elapsed = 0\n      ! Take timings only when the start time is >=0, i.e. the timings_level is appropriated\n      IF (cs_entry%walltime_start .GE. 0) THEN\n         wt_now = m_walltime()\n         en_now = m_energy()\n         ! add the elapsed time for this timeset/timestop to the time accumulator\n         wt_elapsed = wt_now - cs_entry%walltime_start\n         en_elapsed = en_now - cs_entry%energy_start\n      END IF\n      r_stat%active_calls = r_stat%active_calls - 1\n\n      ! if we're the last instance in the stack, we do the accounting of the total time\n      IF (r_stat%active_calls == 0) THEN\n         r_stat%incl_walltime_accu = r_stat%incl_walltime_accu + wt_elapsed\n         r_stat%incl_energy_accu = r_stat%incl_energy_accu + en_elapsed\n      END IF\n\n      ! exclusive time we always sum, since children will correct this time with their total time\n      r_stat%excl_walltime_accu = r_stat%excl_walltime_accu + wt_elapsed\n      r_stat%excl_energy_accu = r_stat%excl_energy_accu + en_elapsed\n\n      stack_size = list_size(timer_env%callstack)\n      IF (stack_size > 0) THEN\n         prev_cs_entry = list_peek(timer_env%callstack)\n         prev_stat => list_get(timer_env%routine_stats, prev_cs_entry%routine_id)\n         ! we fixup the clock of the caller\n         prev_stat%excl_walltime_accu = prev_stat%excl_walltime_accu - wt_elapsed\n         prev_stat%excl_energy_accu = prev_stat%excl_energy_accu - en_elapsed\n\n         !update callgraph\n         routine_tuple = (/prev_cs_entry%routine_id, routine_id/)\n         c_stat => dict_get(timer_env%callgraph, routine_tuple, default_value=Null(c_stat))\n         IF (.NOT. ASSOCIATED(c_stat)) THEN\n            ALLOCATE (c_stat)\n            c_stat%total_calls = 0\n            c_stat%incl_walltime_accu = 0.0_dp\n            c_stat%incl_energy_accu = 0.0_dp\n            CALL dict_set(timer_env%callgraph, routine_tuple, c_stat)\n         END IF\n         c_stat%total_calls = c_stat%total_calls + 1\n         c_stat%incl_walltime_accu = c_stat%incl_walltime_accu + wt_elapsed\n         c_stat%incl_energy_accu = c_stat%incl_energy_accu + en_elapsed\n      END IF\n\n      !..if debug mode echo the subroutine name\n      IF ((timer_env%trace_all .OR. r_stat%trace) .AND. &\n          (r_stat%total_calls < timer_env%trace_max)) THEN\n         WRITE (sformat, *) \"(A,A,\", MAX(1, 3*stack_size - 4), \"X,I4,1X,I6,1X,A,F12.3)\"\n         WRITE (mystring, sformat) timer_env%trace_str, \"<<\", stack_size + 1, &\n            r_stat%total_calls, TRIM(r_stat%routineN), wt_elapsed\n         CALL acc_devmem_info(gpumem_free, gpumem_total)\n         CALL m_memory(cpumem)\n         WRITE (line, '(A,A,I0,A,A,I0,A)') TRIM(mystring), &\n            \" Hostmem: \", (cpumem + 1024*1024 - 1)/(1024*1024), \" MB\", &\n            \" GPUmem: \", (gpumem_total - gpumem_free)/(1024*1024), \" MB\"\n         WRITE (timer_env%trace_unit, *) TRIM(line)\n         CALL m_flush(timer_env%trace_unit)\n      END IF\n\n!$OMP END MASTER\n\n   END SUBROUTINE timestop_handler\n\n   SUBROUTINE timings_setup_tracing(trace_max, unit_nr, trace_str, routine_names)\n      !! Set routine tracer\n\n      INTEGER, INTENT(IN)                                :: trace_max, unit_nr\n         !! maximum number of calls reported per routine. Setting this to zero disables tracing.\n         !! output unit used for printing the trace-messages\n      CHARACTER(len=13), INTENT(IN)                      :: trace_str\n         !! short info-string which is printed along with every message\n      CHARACTER(len=default_string_length), &\n         DIMENSION(:), INTENT(IN), OPTIONAL              :: routine_names\n         !! List of routine-names. If provided only these routines will be traced. If not present all routines will traced.\n\n      INTEGER                                            :: i, routine_id\n      TYPE(routine_stat_type), POINTER                   :: r_stat\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n      timer_env => list_peek(timers_stack)\n      timer_env%trace_max = trace_max\n      timer_env%trace_unit = unit_nr\n      timer_env%trace_str = trace_str\n      timer_env%trace_all = .TRUE.\n      IF (.NOT. PRESENT(routine_names)) RETURN\n\n      ! setup routine-specific tracing\n      timer_env%trace_all = .FALSE.\n      DO i = 1, SIZE(routine_names)\n         routine_id = routine_name2id(routine_names(i))\n         r_stat => list_get(timer_env%routine_stats, routine_id)\n         r_stat%trace = .TRUE.\n      END DO\n\n   END SUBROUTINE timings_setup_tracing\n\n   SUBROUTINE print_stack(unit_nr)\n      !! Print current routine stack\n      INTEGER, INTENT(IN)                                :: unit_nr\n\n      INTEGER                                            :: i\n      TYPE(callstack_entry_type)                         :: cs_entry\n      TYPE(routine_stat_type), POINTER                   :: r_stat\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n      ! catch edge cases where timer_env is not yet/anymore available\n      IF (.NOT. list_isready(timers_stack)) &\n         RETURN\n      IF (list_size(timers_stack) == 0) &\n         RETURN\n\n      timer_env => list_peek(timers_stack)\n      WRITE (unit_nr, '(/,A,/)') \" ===== Routine Calling Stack ===== \"\n      DO i = list_size(timer_env%callstack), 1, -1\n         cs_entry = list_get(timer_env%callstack, i)\n         r_stat => list_get(timer_env%routine_stats, cs_entry%routine_id)\n         WRITE (unit_nr, '(T10,I4,1X,A)') i, TRIM(r_stat%routineN)\n      END DO\n      CALL m_flush(unit_nr)\n\n   END SUBROUTINE print_stack\n\n   FUNCTION routine_name2id(routineN) RESULT(routine_id)\n      !! Internal routine used by timeset_handler and timings_setup_tracing.\n      !! If no routine with given name is found in timer_env%routine_names\n      !! then a new entry is created.\n\n      CHARACTER(LEN=default_string_length), INTENT(IN)   :: routineN\n      INTEGER                                            :: routine_id\n\n      INTEGER                                            :: stat\n      TYPE(routine_stat_type), POINTER                   :: r_stat\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n      timer_env => list_peek(timers_stack)\n      routine_id = dict_get(timer_env%routine_names, routineN, default_value=-1)\n\n      IF (routine_id /= -1) RETURN ! found an id - let's return it\n      ! routine not found - let's create it\n\n      ! enforce space free timer names, to make the output of trace/timings of a fixed number fields\n      IF (INDEX(routineN(1:LEN_TRIM(routineN)), ' ') /= 0) THEN\n         DBCSR_ABORT(\"timings_name2id: routineN contains spaces: \"//routineN)\n      END IF\n\n      ! register routine_name_dsl with new routine_id\n      routine_id = dict_size(timer_env%routine_names) + 1\n      CALL dict_set(timer_env%routine_names, routineN, routine_id)\n\n      ALLOCATE (r_stat, stat=stat)\n      IF (stat /= 0) &\n         DBCSR_ABORT(\"timings_name2id: allocation failed\")\n      r_stat%routine_id = routine_id\n      r_stat%routineN = routineN\n      r_stat%active_calls = 0\n      r_stat%excl_walltime_accu = 0.0_dp\n      r_stat%incl_walltime_accu = 0.0_dp\n      r_stat%excl_energy_accu = 0.0_dp\n      r_stat%incl_energy_accu = 0.0_dp\n      r_stat%total_calls = 0\n      r_stat%stackdepth_accu = 0\n      r_stat%trace = .FALSE.\n      CALL list_push(timer_env%routine_stats, r_stat)\n      IF (list_size(timer_env%routine_stats) /= dict_size(timer_env%routine_names)) &\n         DBCSR_ABORT(\"timings_name2id: assertion failed\")\n   END FUNCTION routine_name2id\n\nEND MODULE dbcsr_timings\n"
  },
  {
    "path": "src/core/dbcsr_timings_base_type.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_timings_base_type\n   !! Types used by timings.F and timings_report.F\n   !! The types in this module are used within dict or list, which are\n   !! in turn used in timer_env_type from timings_type.F\n   !! Due to the fortran restriction on circular module-dependencies these\n   !! \"inner-types\" had to go into a separate module.\n\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          dp, &\n                          int_8\n\n   IMPLICIT NONE\n   PRIVATE\n\n   TYPE routine_stat_type\n      INTEGER       :: routine_id = -1\n      CHARACTER(len=default_string_length) :: routineN = \"\"\n      REAL(kind=dp) :: excl_walltime_accu = -1.0_dp\n      REAL(kind=dp) :: incl_walltime_accu = -1.0_dp\n      REAL(kind=dp) :: excl_energy_accu = -1.0_dp\n      REAL(kind=dp) :: incl_energy_accu = -1.0_dp\n      INTEGER       :: active_calls = -1\n      INTEGER       :: total_calls = -1\n      INTEGER       :: stackdepth_accu = -1\n      LOGICAL       :: trace = .FALSE.\n   END TYPE routine_stat_type\n\n   TYPE call_stat_type\n      INTEGER       :: total_calls = -1\n      REAL(kind=dp) :: incl_walltime_accu = -1.0_dp\n      REAL(kind=dp) :: incl_energy_accu = -1.0_dp\n   END TYPE call_stat_type\n\n   TYPE callstack_entry_type\n      INTEGER       :: routine_id = -1\n      REAL(kind=dp) :: walltime_start = -1.0_dp\n      REAL(kind=dp) :: energy_start = -1.0_dp\n   END TYPE callstack_entry_type\n\n   TYPE routine_report_type\n      CHARACTER(LEN=default_string_length) :: routineN = \"\"\n      REAL(KIND=dp)                        :: max_icost = 0.0_dp\n      REAL(KIND=dp)                        :: sum_icost = 0.0_dp\n      REAL(KIND=dp)                        :: max_ecost = 0.0_dp\n      REAL(KIND=dp)                        :: sum_ecost = 0.0_dp\n      INTEGER                              :: max_irank = 0\n      INTEGER                              :: max_erank = 0\n      INTEGER(kind=int_8)                  :: max_total_calls = 0\n      INTEGER(kind=int_8)                  :: sum_total_calls = 0\n      INTEGER(kind=int_8)                  :: sum_stackdepth = 0\n   END TYPE routine_report_type\n\n   PUBLIC :: routine_stat_type, call_stat_type, callstack_entry_type, routine_report_type\n\nEND MODULE dbcsr_timings_base_type\n\n! **************************************************************************************************\n\n"
  },
  {
    "path": "src/core/dbcsr_timings_report.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_timings_report\n   !! Timing routines for accounting\n   USE dbcsr_dict, ONLY: dict_get, &\n                         dict_haskey, &\n                         dict_i4tuple_callstat_item_type, &\n                         dict_items\n   USE dbcsr_files, ONLY: close_file, &\n                          open_file\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          dp, &\n                          int_8\n   USE dbcsr_list, ONLY: list_destroy, &\n                         list_get, &\n                         list_init, &\n                         list_isready, &\n                         list_pop, &\n                         list_push, &\n                         list_size\n   USE dbcsr_list_routinereport, ONLY: list_routinereport_type\n   USE dbcsr_mpiwrap, ONLY: mp_bcast, &\n                            mp_max, &\n                            mp_maxloc, &\n                            mp_sum\n   USE dbcsr_timings, ONLY: get_timer_env\n   USE dbcsr_timings_base_type, ONLY: call_stat_type, &\n                                      routine_report_type, &\n                                      routine_stat_type\n   USE dbcsr_timings_types, ONLY: timer_env_type\n   USE dbcsr_toollib, ONLY: sort\n   USE dbcsr_types, ONLY: dbcsr_mp_obj\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   INTEGER, PUBLIC, PARAMETER :: cost_type_time = 17, cost_type_energy = 18\n\n   PUBLIC :: timings_report_print, timings_report_callgraph\n\nCONTAINS\n\n   SUBROUTINE timings_report_print(iw, r_timings, sort_by_self_time, cost_type, report_maxloc, mp_env)\n      !! Print accumulated information on timers\n\n      INTEGER, INTENT(IN)                                :: iw\n      REAL(KIND=dp), INTENT(IN)                          :: r_timings\n      LOGICAL, INTENT(IN)                                :: sort_by_self_time\n      INTEGER, INTENT(IN)                                :: cost_type\n      LOGICAL, INTENT(IN)                                :: report_maxloc\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n         !! is needed to collect statistics from other nodes.\n\n      TYPE(list_routinereport_type)                      :: reports\n      TYPE(routine_report_type), POINTER                 :: r_report\n\n      CALL list_init(reports)\n      CALL collect_reports_from_ranks(reports, cost_type, mp_env)\n\n      IF (list_size(reports) > 0 .AND. iw > 0) &\n         CALL print_reports(reports, iw, r_timings, sort_by_self_time, cost_type, report_maxloc, mp_env)\n\n      ! deallocate reports\n      DO WHILE (list_size(reports) > 0)\n         r_report => list_pop(reports)\n         DEALLOCATE (r_report)\n      END DO\n      CALL list_destroy(reports)\n\n   END SUBROUTINE timings_report_print\n\n   SUBROUTINE collect_reports_from_ranks(reports, cost_type, mp_env)\n      !! Collects the timing or energy reports from all MPI ranks.\n      TYPE(list_routinereport_type), INTENT(INOUT)       :: reports\n      INTEGER, INTENT(IN)                                :: cost_type\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n\n      CHARACTER(LEN=default_string_length)               :: routineN\n      INTEGER                                            :: local_routine_id, sending_rank\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: collected\n      REAL(KIND=dp)                                      :: foobar\n      REAL(KIND=dp), DIMENSION(2)                        :: dbuf\n      TYPE(routine_report_type), POINTER                 :: r_report\n      TYPE(routine_stat_type), POINTER                   :: r_stat\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n      NULLIFY (r_stat, r_report, timer_env)\n      IF (.NOT. list_isready(reports)) &\n         DBCSR_ABORT(\"BUG\")\n\n      timer_env => get_timer_env()\n\n      ! make sure all functions have been called so that list_size(timer_env%routine_stats)\n      ! and the actual dictionary are consistent in the loop below, preventing out of bounds.\n      ! this hack makes sure they are called before\n      routineN = \"\"\n      CALL mp_bcast(routineN, 0, mp_env%mp%mp_group)\n      sending_rank = 0\n      CALL mp_max(sending_rank, mp_env%mp%mp_group)\n      CALL mp_sum(sending_rank, mp_env%mp%mp_group)\n      foobar = 0.0_dp\n      CALL mp_max(foobar, mp_env%mp%mp_group)\n      dbuf = 0.0_dp\n      CALL mp_maxloc(dbuf, mp_env%mp%mp_group)\n      CALL mp_sum(foobar, mp_env%mp%mp_group)\n      ! end hack\n\n      ! Array collected is used as a bit field.\n      ! It's of type integer in order to use the convenient MINLOC routine.\n      ALLOCATE (collected(list_size(timer_env%routine_stats)))\n      collected(:) = 0\n\n      DO\n         ! does any rank have uncollected stats?\n         sending_rank = -1\n         IF (.NOT. ALL(collected == 1)) sending_rank = mp_env%mp%mynode\n         CALL mp_max(sending_rank, mp_env%mp%mp_group)\n         IF (sending_rank < 0) EXIT ! every rank got all routines collected\n         IF (sending_rank == mp_env%mp%mynode) THEN\n            local_routine_id = MINLOC(collected, dim=1)\n            r_stat => list_get(timer_env%routine_stats, local_routine_id)\n            routineN = r_stat%routineN\n         END IF\n         CALL mp_bcast(routineN, sending_rank, mp_env%mp%mp_group)\n\n         ! Create new report for routineN\n         ALLOCATE (r_report)\n         CALL list_push(reports, r_report)\n         r_report%routineN = routineN\n\n         ! If routineN was called on local node, add local stats\n         IF (dict_haskey(timer_env%routine_names, routineN)) THEN\n            local_routine_id = dict_get(timer_env%routine_names, routineN)\n            collected(local_routine_id) = 1\n            r_stat => list_get(timer_env%routine_stats, local_routine_id)\n            r_report%max_total_calls = r_stat%total_calls\n            r_report%sum_total_calls = r_stat%total_calls\n            r_report%sum_stackdepth = r_stat%stackdepth_accu\n            SELECT CASE (cost_type)\n            CASE (cost_type_energy)\n               r_report%max_icost = r_stat%incl_energy_accu\n               r_report%sum_icost = r_stat%incl_energy_accu\n               r_report%max_ecost = r_stat%excl_energy_accu\n               r_report%sum_ecost = r_stat%excl_energy_accu\n            CASE (cost_type_time)\n               r_report%max_icost = r_stat%incl_walltime_accu\n               r_report%sum_icost = r_stat%incl_walltime_accu\n               r_report%max_ecost = r_stat%excl_walltime_accu\n               r_report%sum_ecost = r_stat%excl_walltime_accu\n            CASE DEFAULT\n               DBCSR_ABORT(\"BUG\")\n            END SELECT\n         END IF\n\n         ! collect stats of routineN via MPI\n         CALL mp_max(r_report%max_total_calls, mp_env%mp%mp_group)\n         CALL mp_sum(r_report%sum_total_calls, mp_env%mp%mp_group)\n         CALL mp_sum(r_report%sum_stackdepth, mp_env%mp%mp_group)\n\n         ! get value and rank of the maximum inclusive cost\n         dbuf = (/r_report%max_icost, REAL(mp_env%mp%mynode, KIND=dp)/)\n         CALL mp_maxloc(dbuf, mp_env%mp%mp_group)\n         r_report%max_icost = dbuf(1)\n         r_report%max_irank = INT(dbuf(2))\n\n         CALL mp_sum(r_report%sum_icost, mp_env%mp%mp_group)\n\n         ! get value and rank of the maximum exclusive cost\n         dbuf = (/r_report%max_ecost, REAL(mp_env%mp%mynode, KIND=dp)/)\n         CALL mp_maxloc(dbuf, mp_env%mp%mp_group)\n         r_report%max_ecost = dbuf(1)\n         r_report%max_erank = INT(dbuf(2))\n\n         CALL mp_sum(r_report%sum_ecost, mp_env%mp%mp_group)\n      END DO\n\n   END SUBROUTINE collect_reports_from_ranks\n\n   SUBROUTINE print_reports(reports, iw, threshold, sort_by_exclusiv_cost, cost_type, report_maxloc, mp_env)\n      !! Print the collected reports\n      TYPE(list_routinereport_type), INTENT(IN)          :: reports\n      INTEGER, INTENT(IN)                                :: iw\n      REAL(KIND=dp), INTENT(IN)                          :: threshold\n      LOGICAL, INTENT(IN)                                :: sort_by_exclusiv_cost\n      INTEGER, INTENT(IN)                                :: cost_type\n      LOGICAL, INTENT(IN)                                :: report_maxloc\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n\n      CHARACTER(LEN=4)                                   :: label\n      CHARACTER(LEN=default_string_length)               :: fmt, title\n      INTEGER                                            :: decimals, i, j, num_routines\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: indices\n      REAL(KIND=dp)                                      :: asd, maxcost, mincost\n      REAL(KIND=dp), ALLOCATABLE, DIMENSION(:)           :: max_costs\n      TYPE(routine_report_type), POINTER                 :: r_report_i, r_report_j\n\n      NULLIFY (r_report_i, r_report_j)\n      IF (.NOT. list_isready(reports)) &\n         DBCSR_ABORT(\"BUG\")\n\n      ! are we printing timing or energy ?\n      SELECT CASE (cost_type)\n      CASE (cost_type_energy)\n         title = \"E N E R G Y\"\n         label = \"ENER\"\n      CASE (cost_type_time)\n         title = \"T I M I N G\"\n         label = \"TIME\"\n      CASE DEFAULT\n         DBCSR_ABORT(\"BUG\")\n      END SELECT\n\n      ! write banner\n      WRITE (UNIT=iw, FMT=\"(/,T2,A)\") REPEAT(\"-\", 79)\n      WRITE (UNIT=iw, FMT=\"(T2,A,T80,A)\") \"-\", \"-\"\n      WRITE (UNIT=iw, FMT=\"(T2,A,T35,A,T80,A)\") \"-\", TRIM(title), \"-\"\n      WRITE (UNIT=iw, FMT=\"(T2,A,T80,A)\") \"-\", \"-\"\n      WRITE (UNIT=iw, FMT=\"(T2,A)\") REPEAT(\"-\", 79)\n      IF (report_maxloc) THEN\n         WRITE (UNIT=iw, FMT=\"(T2,A,T35,A,T41,A,T45,2A18,A8)\") &\n            \"SUBROUTINE\", \"CALLS\", \" ASD\", \"SELF \"//label, \"TOTAL \"//label, \"MAXRANK\"\n      ELSE\n         WRITE (UNIT=iw, FMT=\"(T2,A,T35,A,T41,A,T45,2A18)\") &\n            \"SUBROUTINE\", \"CALLS\", \" ASD\", \"SELF \"//label, \"TOTAL \"//label\n      END IF\n\n      WRITE (UNIT=iw, FMT=\"(T33,A)\") &\n         \"MAXIMUM       AVERAGE  MAXIMUM  AVERAGE  MAXIMUM\"\n\n      ! sort statistics\n      num_routines = list_size(reports)\n      ALLOCATE (max_costs(num_routines))\n      DO i = 1, num_routines\n         r_report_i => list_get(reports, i)\n         IF (sort_by_exclusiv_cost) THEN\n            max_costs(i) = r_report_i%max_ecost\n         ELSE\n            max_costs(i) = r_report_i%max_icost\n         END IF\n      END DO\n      ALLOCATE (indices(num_routines))\n      CALL sort(max_costs, num_routines, indices)\n\n      maxcost = MAXVAL(max_costs)\n      mincost = maxcost*threshold\n\n      ! adjust fmt dynamically based on the max walltime.\n      ! few clocks have more than 3 digits resolution, so stop there\n      decimals = 3\n      IF (maxcost >= 10000) decimals = 2\n      IF (maxcost >= 100000) decimals = 1\n      IF (maxcost >= 1000000) decimals = 0\n      IF (report_maxloc) THEN\n         WRITE (UNIT=fmt, FMT=\"(A,I0,A)\") &\n            \"(T2,A30,1X,I7,1X,F4.1,4(1X,F8.\", decimals, \"),I8)\"\n      ELSE\n         WRITE (UNIT=fmt, FMT=\"(A,I0,A)\") &\n            \"(T2,A30,1X,I7,1X,F4.1,4(1X,F8.\", decimals, \"))\"\n      END IF\n\n      !write output\n      DO i = num_routines, 1, -1\n         IF (max_costs(i) >= mincost) THEN\n            j = indices(i)\n            r_report_j => list_get(reports, j)\n            ! average stack depth\n            asd = REAL(r_report_j%sum_stackdepth, KIND=dp)/ &\n                  REAL(MAX(1_int_8, r_report_j%sum_total_calls), KIND=dp)\n            IF (report_maxloc) THEN\n               WRITE (UNIT=iw, FMT=fmt) &\n                  ADJUSTL(r_report_j%routineN(1:31)), &\n                  r_report_j%max_total_calls, &\n                  asd, &\n                  r_report_j%sum_ecost/mp_env%mp%numnodes, &\n                  r_report_j%max_ecost, &\n                  r_report_j%sum_icost/mp_env%mp%numnodes, &\n                  r_report_j%max_icost, &\n                  r_report_j%max_erank\n            ELSE\n               WRITE (UNIT=iw, FMT=fmt) &\n                  ADJUSTL(r_report_j%routineN(1:31)), &\n                  r_report_j%max_total_calls, &\n                  asd, &\n                  r_report_j%sum_ecost/mp_env%mp%numnodes, &\n                  r_report_j%max_ecost, &\n                  r_report_j%sum_icost/mp_env%mp%numnodes, &\n                  r_report_j%max_icost\n            END IF\n         END IF\n      END DO\n      WRITE (UNIT=iw, FMT=\"(T2,A,/)\") REPEAT(\"-\", 79)\n\n   END SUBROUTINE print_reports\n\n   SUBROUTINE timings_report_callgraph(filename)\n      !! Write accumulated callgraph information as cachegrind-file.\n      !! http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindCalltreeFormat\n\n      CHARACTER(len=*), INTENT(in)                       :: filename\n\n      INTEGER, PARAMETER                                 :: E = 1000, T = 100000\n\n      INTEGER                                            :: i, unit\n      TYPE(call_stat_type), POINTER                      :: c_stat\n      TYPE(dict_i4tuple_callstat_item_type), &\n         DIMENSION(:), POINTER                           :: ct_items\n      TYPE(routine_stat_type), POINTER                   :: r_stat\n      TYPE(timer_env_type), POINTER                      :: timer_env\n\n      CALL open_file(file_name=filename, file_status=\"REPLACE\", file_action=\"WRITE\", &\n                     file_form=\"FORMATTED\", unit_number=unit)\n      timer_env => get_timer_env()\n\n      ! use outermost routine as total runtime\n      r_stat => list_get(timer_env%routine_stats, 1)\n      WRITE (UNIT=unit, FMT=\"(A)\") \"events: Walltime Energy\"\n      WRITE (UNIT=unit, FMT=\"(A,I0,1X,I0)\") \"summary: \", &\n         INT(T*r_stat%incl_walltime_accu, KIND=int_8), &\n         INT(E*r_stat%incl_energy_accu, KIND=int_8)\n\n      DO i = 1, list_size(timer_env%routine_stats)\n         r_stat => list_get(timer_env%routine_stats, i)\n         WRITE (UNIT=unit, FMT=\"(A,I0,A,A)\") \"fn=(\", r_stat%routine_id, \") \", r_stat%routineN\n         WRITE (UNIT=unit, FMT=\"(A,I0,1X,I0)\") \"1 \", &\n            INT(T*r_stat%excl_walltime_accu, KIND=int_8), &\n            INT(E*r_stat%excl_energy_accu, KIND=int_8)\n      END DO\n\n      ct_items => dict_items(timer_env%callgraph)\n      DO i = 1, SIZE(ct_items)\n         c_stat => ct_items(i)%value\n         WRITE (UNIT=unit, FMT=\"(A,I0,A)\") \"fn=(\", ct_items(i)%key(1), \")\"\n         WRITE (UNIT=unit, FMT=\"(A,I0,A)\") \"cfn=(\", ct_items(i)%key(2), \")\"\n         WRITE (UNIT=unit, FMT=\"(A,I0,A)\") \"calls=\", c_stat%total_calls, \" 1\"\n         WRITE (UNIT=unit, FMT=\"(A,I0,1X,I0)\") \"1 \", &\n            INT(T*c_stat%incl_walltime_accu, KIND=int_8), &\n            INT(E*c_stat%incl_energy_accu, KIND=int_8)\n      END DO\n      DEALLOCATE (ct_items)\n\n      CALL close_file(unit_number=unit, file_status=\"KEEP\")\n\n   END SUBROUTINE timings_report_callgraph\nEND MODULE dbcsr_timings_report\n\n"
  },
  {
    "path": "src/core/dbcsr_timings_types.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_timings_types\n   !! Types used by timings.F and timings_report.F\n   !! Due to the fortran restriction on circular module-dependencies\n   !! the types, which are used through dict or list had to go\n   !! into the separate module timings_base_type.F\n\n   USE dbcsr_dict, ONLY: dict_i4tuple_callstat_type, &\n                         dict_str_i4_type\n   USE dbcsr_list_callstackentry, ONLY: list_callstackentry_type\n   USE dbcsr_list_routinestat, ONLY: list_routinestat_type\n\n   IMPLICIT NONE\n   PRIVATE\n\n   TYPE timer_env_type\n      INTEGER                                          :: ref_count = -1\n      TYPE(dict_str_i4_type)                           :: routine_names = dict_str_i4_type()\n      TYPE(list_routinestat_type)                      :: routine_stats = list_routinestat_type()\n      TYPE(list_callstackentry_type)                   :: callstack = list_callstackentry_type()\n      TYPE(dict_i4tuple_callstat_type)                 :: callgraph = dict_i4tuple_callstat_type()\n      INTEGER                                          :: trace_max = -1\n      INTEGER                                          :: trace_unit = -1\n      CHARACTER(len=13)                                :: trace_str = \"\"\n      LOGICAL                                          :: trace_all = .FALSE.\n   END TYPE timer_env_type\n\n   PUBLIC :: timer_env_type\n\nEND MODULE dbcsr_timings_types\n\n! **************************************************************************************************\n\n"
  },
  {
    "path": "src/core/dbcsr_types.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_types\n   !! DBCSR data types\n   USE dbcsr_array_types, ONLY: array_i1d_obj\n   USE dbcsr_btree, ONLY: btree_i8_cp2d, &\n                          btree_i8_dp2d, &\n                          btree_i8_sp2d, &\n                          btree_i8_zp2d\n   USE dbcsr_data_types, ONLY: &\n      dbcsr_data_area_type, dbcsr_data_obj, dbcsr_datatype_sizeof, dbcsr_memtype_default, &\n      dbcsr_memtype_type, dbcsr_scalar_type, dbcsr_type_complex_4, dbcsr_type_complex_4_2d, &\n      dbcsr_type_complex_8, dbcsr_type_complex_8_2d, dbcsr_type_complex_default, &\n      dbcsr_type_int_4, dbcsr_type_real_4, dbcsr_type_real_4_2d, dbcsr_type_real_8, &\n      dbcsr_type_real_8_2d, dbcsr_type_real_default\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          int_8\n   USE dbcsr_mpiwrap, ONLY: mp_comm_type, mp_comm_null\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_types'\n\n   PUBLIC :: dbcsr_type, &\n             dbcsr_scalar_type, &\n             dbcsr_data_obj, &\n             dbcsr_data_area_type, &\n             dbcsr_work_type, &\n             dbcsr_1d_array_type, &\n             dbcsr_2d_array_type, &\n             dbcsr_mp_obj, &\n             dbcsr_distribution_obj, &\n             dbcsr_imagedistribution_type, &\n             dbcsr_imagedistribution_obj, &\n             dbcsr_iterator, &\n             dbcsr_mutable_obj, &\n             dbcsr_type_p\n   PUBLIC :: dbcsr_meta_size\n   PUBLIC :: dbcsr_slot_size, &\n             dbcsr_slot_row_p, &\n             dbcsr_slot_col_i, &\n             dbcsr_slot_blk_p, &\n             dbcsr_slot_thr_c, &\n             dbcsr_slot_coo_l, &\n             dbcsr_slot_nblks, &\n             dbcsr_slot_nze, &\n             dbcsr_slot_dense, &\n             dbcsr_slot_nblkrows_total, &\n             dbcsr_slot_nblkcols_total, &\n             dbcsr_slot_nfullrows_total, &\n             dbcsr_slot_nfullcols_total, &\n             dbcsr_slot_nblkrows_local, &\n             dbcsr_slot_nblkcols_local, &\n             dbcsr_slot_nfullrows_local, &\n             dbcsr_slot_nfullcols_local, &\n             dbcsr_slot_type, &\n             dbcsr_slot_home_prow, &\n             dbcsr_slot_home_pcol, &\n             dbcsr_slot_home_rowi, &\n             dbcsr_slot_home_coli, &\n             dbcsr_slot_home_vprow, &\n             dbcsr_slot_home_vpcol, &\n             dbcsr_num_slots\n\n   PUBLIC :: dbcsr_mpi_size_limits\n\n   PUBLIC :: dbcsr_type_real_4, dbcsr_type_real_8, &\n             dbcsr_type_complex_4, dbcsr_type_complex_8, &\n             dbcsr_type_real_default, dbcsr_type_complex_default, &\n             dbcsr_type_real_4_2d, dbcsr_type_real_8_2d, &\n             dbcsr_type_complex_4_2d, dbcsr_type_complex_8_2d, &\n             dbcsr_type_int_4\n   PUBLIC :: dbcsr_datatype_sizeof\n   PUBLIC :: dbcsr_memtype_type, &\n             dbcsr_memtype_default\n\n   PUBLIC :: dbcsr_type_invalid, dbcsr_type_no_symmetry, dbcsr_type_symmetric, &\n             dbcsr_type_antisymmetric, dbcsr_type_hermitian, dbcsr_type_antihermitian\n   PUBLIC :: dbcsr_no_transpose, dbcsr_transpose, dbcsr_conjugate_transpose\n   PUBLIC :: dbcsr_repl_none, dbcsr_repl_row, dbcsr_repl_col, dbcsr_repl_full\n\n   PUBLIC :: dbcsr_filter_frobenius\n   PUBLIC :: dbcsr_norm_frobenius, dbcsr_norm_maxabsnorm, &\n             dbcsr_norm_gershgorin, dbcsr_norm_column\n\n   PUBLIC :: dbcsr_func_inverse, dbcsr_func_tanh, dbcsr_func_dtanh, &\n             dbcsr_func_ddtanh, dbcsr_func_artanh, dbcsr_func_inverse_special, &\n             dbcsr_func_spread_from_zero, &\n             dbcsr_func_sin, &\n             dbcsr_func_dsin, &\n             dbcsr_func_ddsin, &\n             dbcsr_func_asin, &\n             dbcsr_func_truncate, &\n             dbcsr_func_cos\n\n   PUBLIC :: dbcsr_2d_array_obj\n\n   PUBLIC :: dbcsr_mpi_statistics_type\n\n   TYPE dbcsr_mp_type\n      !! A processor (process) grid distribution\n\n      INTEGER                            :: mynode = -1\n         !! my processor/node (process) number\n      INTEGER                            :: numnodes = -1\n         !! number of processors/nodes (processes)\n      INTEGER                            :: myprow = -1\n         !! my process grid row\n      INTEGER                            :: mypcol = -1\n         !! my process grid column\n      TYPE(mp_comm_type)                 :: mp_group = mp_comm_null\n         !! message-passing group ID\n      INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS :: pgrid => Null()\n         !! processor grid\n      INTEGER                            :: refcount = 0\n         !! reference counter\n      LOGICAL                            :: subgroups_defined = .FALSE.\n         !! whether the subgroups are defined\n      TYPE(mp_comm_type)                 :: prow_group = mp_comm_null\n         !! per-process-row communicator\n      TYPE(mp_comm_type)                 :: pcol_group = mp_comm_null\n         !! pre-process-column communicator\n      INTEGER                            :: source = -1\n   END TYPE dbcsr_mp_type\n\n   TYPE dbcsr_mp_obj\n      !! Wrapper for the dbcsr_mp_type\n\n      TYPE(dbcsr_mp_type), POINTER :: mp => Null()\n         !! pointer to a dbcsr_mp_type instance\n   END TYPE dbcsr_mp_obj\n\n   TYPE dbcsr_distribution_type\n      !! Matrix distribution on the processor grid\n\n      TYPE(array_i1d_obj)                        :: row_dist_block = array_i1d_obj(), col_dist_block = array_i1d_obj()\n         !! standard row distributions of matrix elements' rows into processor grid rows\n         !! standard column distributions of matrix elements' columns into processor grid columns\n      TYPE(array_i1d_obj)                        :: local_rows = array_i1d_obj(), local_cols = array_i1d_obj()\n         !! list of rows local to the processor grid row\n         !! list of columns local to the processor grid column\n      INTEGER                                    :: max_row_dist = -1, max_col_dist = -1\n      TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_l_rows => Null()\n         !! local rows for each process row\n      TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_l_cols => Null()\n         !! local columns for each process column\n      LOGICAL                                    :: has_other_l_rows = .FALSE.\n         !! other_rows is defined\n      LOGICAL                                    :: has_other_l_cols = .FALSE.\n         !! other_cols is defined\n      TYPE(array_i1d_obj)                        :: global_row_map = array_i1d_obj()\n         !! mapping from rows to sequence in local rows (global to local mapping)\n      TYPE(array_i1d_obj)                        :: global_col_map = array_i1d_obj()\n         !! mapping from rows to sequence in local columns (global to local mapping)\n      LOGICAL                                    :: has_global_row_map = .FALSE.\n         !! whether other_row_map is defined\n      LOGICAL                                    :: has_global_col_map = .FALSE.\n         !! whether other_col_map is defined\n      TYPE(array_i1d_obj)                        :: row_map = array_i1d_obj()\n         !! distribution map for rows\n      TYPE(array_i1d_obj)                        :: col_map = array_i1d_obj()\n         !! distribution map for columns\n      LOGICAL                                    :: has_thread_dist = .FALSE.\n      TYPE(array_i1d_obj)                        :: thread_dist = array_i1d_obj()\n         !! thread distribution (of the rows)\n      INTEGER                                    :: num_threads = -1\n         !! number of threads in the environment\n      TYPE(dbcsr_mp_obj)                         :: mp_env = dbcsr_mp_obj()\n         !! multiprocessor environment on which the distribution is based\n      INTEGER                                    :: refcount = 0\n         !! reference counter\n   END TYPE dbcsr_distribution_type\n\n   TYPE dbcsr_distribution_obj\n      TYPE(dbcsr_distribution_type), POINTER  :: d => Null()\n   END TYPE dbcsr_distribution_obj\n\n   TYPE dbcsr_imagedistribution_type\n      !! Image distributions are used to map incompatible processor row and\n      !! column distributions.\n      !! Used to ease storage or transfer between two different-sizes\n      !! sets. For example, if there are 4 real processor rows that are\n      !! mapped to 8 \"virtual\" processor rows, then there are two images for\n      !! every real processor row.\n\n      TYPE(dbcsr_distribution_obj)               :: main = dbcsr_distribution_obj()\n         !! the main distribution\n      TYPE(array_i1d_obj)                        :: row_image = array_i1d_obj()\n         !! distribution of matrix elements' rows into image  rows\n      TYPE(array_i1d_obj)                        :: col_image = array_i1d_obj()\n         !! distribution of matrix elements' columns into image columns\n      INTEGER                                    :: row_decimation = -1\n         !! Number of imaged rows mapped to a real row\n      INTEGER                                    :: col_decimation = -1\n         !! Number of imaged columns mapped to a real column\n      INTEGER                                    :: row_multiplicity = -1\n         !! Number of real rows mapped to a virtual row\n      INTEGER                                    :: col_multiplicity = -1\n         !! Number of real columns mapped to a virtual column\n      TYPE(array_i1d_obj)                        :: vrow_dist = array_i1d_obj()\n      TYPE(array_i1d_obj)                        :: vcol_dist = array_i1d_obj()\n      TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_vl_rows => Null()\n      TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_vl_cols => Null()\n      TYPE(array_i1d_obj)                        :: global_vrow_map = array_i1d_obj()\n      TYPE(array_i1d_obj)                        :: global_vcol_map = array_i1d_obj()\n      LOGICAL                                    :: has_other_vl_rows = .FALSE.\n      LOGICAL                                    :: has_other_vl_cols = .FALSE.\n      LOGICAL                                    :: has_global_vrow_map = .FALSE.\n      LOGICAL                                    :: has_global_vcol_map = .FALSE.\n      INTEGER                                    :: id = -1\n      INTEGER                                    :: refcount = 0\n         !! count of references\n   END TYPE dbcsr_imagedistribution_type\n\n   TYPE dbcsr_imagedistribution_obj\n      TYPE(dbcsr_imagedistribution_type), POINTER :: i => Null()\n   END TYPE dbcsr_imagedistribution_obj\n\n   ! Different method for dbcsr_filter\n   INTEGER, PARAMETER            :: dbcsr_filter_frobenius = 1\n\n   ! Different norm for dbcsr_norm\n   INTEGER, PARAMETER            :: dbcsr_norm_frobenius = 1\n   INTEGER, PARAMETER            :: dbcsr_norm_maxabsnorm = 2\n   INTEGER, PARAMETER            :: dbcsr_norm_gershgorin = 3\n   INTEGER, PARAMETER            :: dbcsr_norm_column = 4\n\n   TYPE dbcsr_block_buffer_type\n      !! Buffer for blocks\n\n      INTEGER                                     :: refcount = 0\n         !! Reference counter\n      LOGICAL, DIMENSION(:), POINTER              :: dirty => Null()\n         !! Whether any buffers are dirty\n      TYPE(dbcsr_data_obj), DIMENSION(:), POINTER :: buffers => Null()\n         !! Buffers\n      INTEGER, DIMENSION(:, :), POINTER           :: rcb => Null()\n         !! Row and column and offset and dimensions of data in the buffer\n      TYPE(dbcsr_data_obj)                        :: main = dbcsr_data_obj()\n         !! Main memory\n      TYPE(dbcsr_data_obj), DIMENSION(:), POINTER :: backing => Null()\n         !! Backing memory (in lieu of main memory)\n      INTEGER                                     :: data_type = -1\n         !! Data type used for the buffers\n   END TYPE dbcsr_block_buffer_type\n\n   TYPE dbcsr_block_buffer_obj\n      !! Object for the buffer of blocks\n\n      TYPE(dbcsr_block_buffer_type), POINTER :: b => Null()\n         !! Block buffer\n   END TYPE dbcsr_block_buffer_obj\n\n   TYPE dbcsr_iterator\n      !! An iterator over a DBCSR matrix.\n      !! @note\n      !! This is briefly changed to allow being included in the dbcsr_type type\n      !! What is written here is what the structure should be and not what it\n      !! is.\n      !! @endnote\n\n      TYPE(dbcsr_type), POINTER                       :: matrix => Null()\n         !! the matrix\n      TYPE(dbcsr_block_buffer_obj)                   :: buffer_2d = dbcsr_block_buffer_obj()\n         !! Buffers for repointing 2d pointers (1 per thread)\n      INTEGER                                        :: pos = -1\n         !! Current position (per thread)\n      INTEGER                                        :: row = -1\n         !! Current row (per thread)\n      INTEGER                                        :: row_size = -1\n         !! Size of current row\n      INTEGER                                        :: row_offset = -1\n      INTEGER, DIMENSION(:), POINTER                 :: rbs => Null()\n         !! Pointer to row size array\n      INTEGER, DIMENSION(:), POINTER                 :: cbs => Null()\n         !! Pointer to column size array\n      INTEGER, DIMENSION(:), POINTER                 :: roff => Null()\n         !! Pointer to row offset array\n      INTEGER, DIMENSION(:), POINTER                 :: coff => Null()\n         !! Pointer to column offset array\n      LOGICAL                                        :: local_indexing = .FALSE.\n         !! The matrix has local indexing\n      LOGICAL                                        :: contiguous_pointers = .FALSE.\n         !! Whether pointers to data should be contiguous in memory.\n      LOGICAL                                        :: transpose = .FALSE.\n      LOGICAL                                        :: read_only = .FALSE.\n      LOGICAL                                        :: shared = .FALSE.\n         !! Iterators share matrix\n      LOGICAL                                        :: dynamic = .FALSE.\n         !! Ignores the thread distribution (FCFS by block)\n      LOGICAL                                        :: dynamic_byrows = .FALSE.\n         !! Ignores the thread distribution (FCFS by row)\n      INTEGER, POINTER                               :: common_pos => Null()\n         !! Position when in mixed mode (row or block depending in dynamic_byrows\n\n      ! Copies from the matrix.\n      INTEGER                                        :: nblks = -1\n      INTEGER                                        :: nblkrows_total = -1\n      INTEGER, DIMENSION(:), POINTER                 :: row_p => Null()\n      INTEGER, DIMENSION(:), POINTER                 :: col_i => Null()\n      INTEGER, DIMENSION(:), POINTER                 :: blk_p => Null()\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS     :: tdist => Null()\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS     :: local_rows => Null()\n         !! Mapping of local rows to global rows (if local indexing is enabled)\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS     :: global_rows => Null()\n         !! Mapping of global rows to local rows (if local indexing is enabled)\n      TYPE(dbcsr_data_obj)                           :: data_area = dbcsr_data_obj()\n   END TYPE dbcsr_iterator\n\n   TYPE dbcsr_mutable_type\n      !! Data area with random access reads, insertions, and deletions.\n\n      TYPE(btree_i8_sp2d)          :: btree_s = btree_i8_sp2d()\n         !! Data types for the various types\n      TYPE(btree_i8_dp2d)          :: btree_d = btree_i8_dp2d()\n         !! Data types for the various types\n      TYPE(btree_i8_cp2d)          :: btree_c = btree_i8_cp2d()\n         !! Data types for the various types\n      TYPE(btree_i8_zp2d)          :: btree_z = btree_i8_zp2d()\n         !! Data types for the various types\n      INTEGER                   :: refcount = 0\n         !! Reference counter\n      INTEGER                   :: data_type = -1\n         !! The data type that is stored\n   END TYPE dbcsr_mutable_type\n\n   TYPE dbcsr_mutable_obj\n      !! Object for the mutable data type\n      TYPE(dbcsr_mutable_type), POINTER :: m => Null()\n   END TYPE dbcsr_mutable_obj\n\n   TYPE dbcsr_work_type\n      !! Used for assembling a real matrix.\n\n      TYPE(dbcsr_data_obj)                    :: data_area = dbcsr_data_obj()\n         !! holds actual values.\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_i => Null()\n         !! the row index of all of the blocks.\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_i => Null()\n         !! the column index of all of the blocks.\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: blk_p => Null()\n         !! the pointer into the data array of this block.\n      INTEGER                                 :: lastblk = -1\n         !! index of the last block entered into the row_i, col_i, and blk_p data structures\n      INTEGER                                 :: datasize = -1\n         !! the actual size of data present in the data element\n      INTEGER                                 :: datasize_after_filtering = -1\n      !TYPE(btree_i8_dp2d)                       :: tree = btree_i8_dp2d()\n         !! tree used to index data blocks (alternative to the row_i, col_i, and blk_p indices when index is scattered).\n      TYPE(dbcsr_mutable_obj)                 :: mutable = dbcsr_mutable_obj()\n         !! the final bcsr matrix\n   END TYPE dbcsr_work_type\n\n   TYPE dbcsr_type\n      !! The BCSR sparse matrix type.\n      !!\n      !! arrays data and index hold the bulk of the data.\n      !! @note\n      !! the pointers row_p, col_i, blk_p point into the index array.\n      !! @endnote\n\n      INTEGER                                      :: serial_number = -1\n         !! a unique number of each created matrix\n      LOGICAL                                      :: valid = .FALSE.\n         !! whether the matrix is valid (consistent)\n      CHARACTER(LEN=default_string_length)         :: name = \"\"\n         !! name of the matrix\n      TYPE(dbcsr_data_obj)                         :: data_area = dbcsr_data_obj()\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS   :: index => Null()\n         !! agglomeration of the indices and offsets of pointers into this array.\n      INTEGER, DIMENSION(:), POINTER               :: row_p => Null()\n         !! points into the col_i and blk_p arrays, each element (1:nblkrows_total+1) points to the previous row's last element. So\n         !! each rows has elements row_p(row)+1:row_p(row+1).\n      INTEGER, DIMENSION(:), POINTER               :: col_i => Null()\n         !! the global blocked column number of this block.\n      INTEGER, DIMENSION(:), POINTER               :: blk_p => Null()\n         !! the pointer into the data array of this block.\n      INTEGER, DIMENSION(:), POINTER               :: thr_c => Null()\n         !! elements/thread for list index\n      INTEGER, DIMENSION(:), POINTER               :: coo_l => Null()\n         !! coordinate list (used for direct indexing)\n      TYPE(array_i1d_obj)                          :: row_blk_size = array_i1d_obj()\n         !! sizes (rows in a block) of blocked rows\n      TYPE(array_i1d_obj)                          :: col_blk_size = array_i1d_obj()\n         !! sizes (columns in a block) of blocked columns\n      TYPE(array_i1d_obj)                          :: row_blk_offset = array_i1d_obj()\n         !! row offset (size = nrow+1)\n      TYPE(array_i1d_obj)                          :: col_blk_offset = array_i1d_obj()\n         !! col offset (size = ncol+1)\n      TYPE(array_i1d_obj)                          :: local_rows = array_i1d_obj()\n         !! Map of global to local rows when local indexing is enabled\n      TYPE(array_i1d_obj)                          :: global_rows = array_i1d_obj()\n      TYPE(array_i1d_obj)                          :: local_cols = array_i1d_obj()\n      TYPE(array_i1d_obj)                          :: global_cols = array_i1d_obj()\n      LOGICAL                                      :: has_local_rows = .FALSE.\n      LOGICAL                                      :: has_global_rows = .FALSE.\n      LOGICAL                                      :: has_local_cols = .FALSE.\n      LOGICAL                                      :: has_global_cols = .FALSE.\n      INTEGER                                      :: max_rbs = -1\n         !! maximal row sizes\n      INTEGER                                      :: max_cbs = -1\n         !! maximal column sizes\n      INTEGER                                      :: sparsity_id = -1\n      INTEGER                                      :: id_nr = -1 ! use in sm_pool\n      INTEGER                                      :: nblks = -1\n         !! number of blocks locally present\n      INTEGER                                      :: nze = -1\n         !! number of non-zero elements locally present\n      INTEGER                                      :: nblkrows_total = -1\n         !! size of entire matrix in blocked rows\n      INTEGER                                      :: nblkcols_total = -1\n         !! size of entire matrix in blocked columns\n      INTEGER                                      :: nfullrows_total = -1\n         !! size of entire matrix in full rows\n      INTEGER                                      :: nfullcols_total = -1\n         !! size of entire matrix in full columns\n      INTEGER                                      :: nblkrows_local = -1\n         !! size of local part of matrix in blocked rows\n      INTEGER                                      :: nblkcols_local = -1\n         !! size of local part of matrix in blocked columns\n      INTEGER                                      :: nfullrows_local = -1\n         !! size of local part of matrix in full rows\n      INTEGER                                      :: nfullcols_local = -1\n         !! size of local part of matrix in full columns\n      INTEGER                                      :: data_type = -1\n         !! 'r'/'R' for single/double precision real or 'c'/'C' for single/double precision complex data\n      CHARACTER                                    :: replication_type = \"\"\n         !! multi-process replication used in the matrix\n      LOGICAL                                      :: symmetry = .FALSE.\n         !! matrix has symmetry\n      LOGICAL                                      :: negate_real = .FALSE.\n         !! symmetry is realized by negating the real part\n      LOGICAL                                      :: negate_imaginary = .FALSE.\n         !! symmetry is realized by negating complex part (i.e., antisymmetric)\n      LOGICAL                                      :: bcsc = .FALSE.\n         !! BCS Column instead of BCS Row\n      LOGICAL                                      :: local_indexing = .FALSE.\n         !! Local indexing of rows instead of global indexing.\n      LOGICAL                                      :: list_indexing = .FALSE.\n      TYPE(dbcsr_memtype_type)                     :: data_memory_type = dbcsr_memtype_type()\n         !! memory type for data\n      TYPE(dbcsr_memtype_type)                     :: index_memory_type = dbcsr_memtype_type()\n         !! memory type for the index\n      TYPE(dbcsr_block_buffer_obj)                 :: buffers = dbcsr_block_buffer_obj()\n         !! Block buffers\n      TYPE(dbcsr_work_type), DIMENSION(:), POINTER :: wms => Null()\n      TYPE(dbcsr_distribution_obj)                 :: dist = dbcsr_distribution_obj()\n         !! distribution used by this matrix\n      INTEGER                                      :: refcount = 0\n         !! reference count\n      LOGICAL                                      :: work_mutable = .FALSE.\n         !! uses the mutable data for working and not the append-only data\n   END TYPE dbcsr_type\n\n   CHARACTER, PARAMETER        :: dbcsr_type_invalid = '0'\n   CHARACTER, PARAMETER        :: dbcsr_type_no_symmetry = 'N'\n   CHARACTER, PARAMETER        :: dbcsr_type_symmetric = 'S'\n   CHARACTER, PARAMETER        :: dbcsr_type_antisymmetric = 'A'\n   CHARACTER, PARAMETER        :: dbcsr_type_hermitian = 'H'\n   CHARACTER, PARAMETER        :: dbcsr_type_antihermitian = 'K'\n\n   !\n   ! multiply transpositions\n   CHARACTER, PARAMETER        :: dbcsr_no_transpose = 'N'\n   CHARACTER, PARAMETER        :: dbcsr_transpose = 'T'\n   CHARACTER, PARAMETER        :: dbcsr_conjugate_transpose = 'C'\n\n   CHARACTER, PARAMETER        :: dbcsr_repl_none = 'N'\n   CHARACTER, PARAMETER        :: dbcsr_repl_row = 'R'\n   CHARACTER, PARAMETER        :: dbcsr_repl_col = 'C'\n   CHARACTER, PARAMETER        :: dbcsr_repl_full = 'A'\n\n   !\n   ! Function types\n   INTEGER, PARAMETER          :: dbcsr_func_inverse = 0\n   INTEGER, PARAMETER          :: dbcsr_func_tanh = 1\n   INTEGER, PARAMETER          :: dbcsr_func_dtanh = 2\n   INTEGER, PARAMETER          :: dbcsr_func_ddtanh = 3\n   INTEGER, PARAMETER          :: dbcsr_func_artanh = 4\n   INTEGER, PARAMETER          :: dbcsr_func_inverse_special = 5\n   INTEGER, PARAMETER          :: dbcsr_func_spread_from_zero = 6\n   INTEGER, PARAMETER          :: dbcsr_func_sin = 7\n   INTEGER, PARAMETER          :: dbcsr_func_dsin = 8\n   INTEGER, PARAMETER          :: dbcsr_func_ddsin = 9\n   INTEGER, PARAMETER          :: dbcsr_func_asin = 10\n   INTEGER, PARAMETER          :: dbcsr_func_cos = 11\n   INTEGER, PARAMETER          :: dbcsr_func_truncate = 12\n\n   ! These specify which array index in the index array is the start of the\n   ! specified variable. For example, row_p => index(dbcsr_bcsr_slot_row_p)\n   INTEGER, PARAMETER          :: dbcsr_slot_size = 1\n      !! Size of the assigned values in the index array.\n   INTEGER, PARAMETER          :: dbcsr_slot_nblks = 2\n   INTEGER, PARAMETER          :: dbcsr_slot_nze = 3\n   INTEGER, PARAMETER          :: dbcsr_slot_dense = 4\n   INTEGER, PARAMETER          :: dbcsr_slot_nblkrows_total = 5\n   INTEGER, PARAMETER          :: dbcsr_slot_nblkcols_total = 6\n   INTEGER, PARAMETER          :: dbcsr_slot_nfullrows_total = 7\n   INTEGER, PARAMETER          :: dbcsr_slot_nfullcols_total = 8\n   INTEGER, PARAMETER          :: dbcsr_slot_nblkrows_local = 9\n   INTEGER, PARAMETER          :: dbcsr_slot_nblkcols_local = 10\n   INTEGER, PARAMETER          :: dbcsr_slot_nfullrows_local = 11\n   INTEGER, PARAMETER          :: dbcsr_slot_nfullcols_local = 12\n   INTEGER, PARAMETER          :: dbcsr_slot_type = 13\n   INTEGER, PARAMETER          :: dbcsr_slot_home_prow = 14\n   INTEGER, PARAMETER          :: dbcsr_slot_home_pcol = 15\n   INTEGER, PARAMETER          :: dbcsr_slot_home_rowi = 16\n   INTEGER, PARAMETER          :: dbcsr_slot_home_coli = 17\n   INTEGER, PARAMETER          :: dbcsr_slot_home_vprow = 18\n   INTEGER, PARAMETER          :: dbcsr_slot_home_vpcol = 19\n   INTEGER, PARAMETER          :: dbcsr_meta_size = 19\n      !! The number of meta fields.  Its value should be the index of the last slot listed above.\n   INTEGER, PARAMETER          :: dbcsr_slot_row_p = dbcsr_meta_size + 2\n   INTEGER, PARAMETER          :: dbcsr_slot_col_i = dbcsr_meta_size + 4\n   INTEGER, PARAMETER          :: dbcsr_slot_blk_p = dbcsr_meta_size + 6\n   INTEGER, PARAMETER          :: dbcsr_slot_thr_c = dbcsr_meta_size + 8\n   INTEGER, PARAMETER          :: dbcsr_slot_coo_l = dbcsr_meta_size + 10\n   INTEGER, PARAMETER          :: dbcsr_num_slots = dbcsr_meta_size + 11 ! previous + 1\n\n   INTEGER(KIND=int_8), DIMENSION(6), PARAMETER :: dbcsr_mpi_size_limits = &\n                                                   (/2**7, 2**13, 2**15, 2**17, 2**22, 2**24/)\n      !! MPI message size limits (in bytes): 128, 8192, 32KB, 128KB, 4MB, 16MB\n\n   TYPE dbcsr_work_type_p\n      !! Pointer to a work matrix.\n\n      TYPE(dbcsr_work_type), POINTER     :: w => Null()\n         !! the work matrix\n   END TYPE dbcsr_work_type_p\n\n   TYPE dbcsr_type_p\n      !! Pointer to a object.\n\n      TYPE(dbcsr_type), POINTER           :: matrix => Null()\n         !! the dbcsr_typeect\n   END TYPE dbcsr_type_p\n\n   TYPE dbcsr_1d_array_obj\n      !! A 1-D array of DBCSR matrices\n\n      TYPE(dbcsr_type_p), DIMENSION(:), POINTER :: mats => Null()\n         !! the array of matrices\n   END TYPE dbcsr_1d_array_obj\n\n   TYPE dbcsr_2d_array_obj\n      !! A 2-D array of DBCSR matrices\n\n      TYPE(dbcsr_type_p), DIMENSION(:, :), POINTER :: mats => Null()\n         !! the array of matrices\n   END TYPE dbcsr_2d_array_obj\n\n   TYPE dbcsr_1d_array_type\n      !! An array of DBCSR matrices\n\n      TYPE(dbcsr_type), DIMENSION(:), POINTER :: mats => Null()\n         !! the matrices\n      TYPE(dbcsr_imagedistribution_obj)      :: image_dist = dbcsr_imagedistribution_obj()\n         !! image distribution\n   END TYPE dbcsr_1d_array_type\n\n   TYPE dbcsr_2d_array_type\n      !! A 2-d array of DBCSR matrices\n\n      TYPE(dbcsr_type), DIMENSION(:, :), POINTER :: mats => Null()\n         !! the matrices\n      TYPE(dbcsr_imagedistribution_obj)         :: image_dist = dbcsr_imagedistribution_obj()\n         !! image distribution\n   END TYPE dbcsr_2d_array_type\n\n   TYPE dbcsr_mpi_statistics_type\n      !! DBCSR MPI statistics\n      INTEGER                                                             :: last_mpi_ranks_used = -1\n      INTEGER                                                             :: nimages = -1\n      INTEGER                                                             :: nexchanged = -1\n      INTEGER                                                             :: nfiltered = -1\n      ! rank 1: 1=right, 2=left\n      ! rank 2: 1=total, 2=min, 3=max\n      REAL, DIMENSION(2, 3)                                               :: data_size = 0.0\n      ! message size breakdown\n      INTEGER(KIND=int_8), DIMENSION(SIZE(dbcsr_mpi_size_limits) + 1, 2, 2) :: data_size_breakdown = -1\n   END TYPE dbcsr_mpi_statistics_type\n\nEND MODULE dbcsr_types\n"
  },
  {
    "path": "src/data/PACKAGE",
    "content": "{\n\"description\": \"DBCSR data handling\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../acc\", \"../mpi\", \"../base\", \"../core\", \"../dist\", \"../block\"],\n}\n"
  },
  {
    "path": "src/data/dbcsr.fypp",
    "content": "#!--------------------------------------------------------------------------------------------------!\n#! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n#! This file is part of the DBCSR library.                                                          !\n#!                                                                                                  !\n#! For information on the license, see the LICENSE file.                                            !\n#! For further information please visit https://dbcsr.cp2k.org                                      !\n#! SPDX-License-Identifier: GPL-2.0+                                                                !\n#!--------------------------------------------------------------------------------------------------!\n\n#! This file contains ALL fypp definitions for DBCSR\n\n#:mute\n#:set n_inst = [0, 1, 2, 3]\n\n#:set nametype1 = ['d','s','z','c']\n#:set typesize1 = ['8','4','16','8']\n#:set base1 = ['r', 'r', 'c', 'c']\n#:set prec1 = ['dp','sp','dp','sp']\n#:set bits1 = ['64','32','64','32']\n#:set kind1 = ['real_8', 'real_4', 'real_8', 'real_4']\n#:set type1 = ['REAL(kind=real_8)', 'REAL(kind=real_4)', 'COMPLEX(kind=real_8)', 'COMPLEX(kind=real_4)']\n#:set dkind1 = ['dbcsr_type_real_8', 'dbcsr_type_real_4', 'dbcsr_type_complex_8', 'dbcsr_type_complex_4']\n\n#:set gemmname1 = ['DGEMM', 'SGEMM', 'ZGEMM', 'CGEMM']\n#:set normname1 = ['(DDOT', '(SDOT', '(DZNRM2', '(SCNRM2']\n\n#:set one1 = ['1.0_real_8', '1.0_real_4', 'CMPLX(1.0, 0.0, real_8)', 'CMPLX(1.0, 0.0, real_4)']\n#:set zero1 = ['0.0_real_8', '0.0_real_4', 'CMPLX(0.0, 0.0, real_8)', 'CMPLX(0.0, 0.0, real_4)']\n\n#:set kind2 = ['real_8','real_8','real_8','real_8']\n\n#:set xsmm_supported = ['1', '1', '0', '0']\n\n#:set nametype_int1 = ['i', 'l']\n#:set type_int1 = ['INTEGER(kind=int_4)', 'INTEGER(kind=int_8)']\n#:set zero_int1 = ['0', '0']\n\n#:set nametype_all1 = nametype1 + nametype_int1\n#:set type_all1 = type1 + type_int1\n#:set zero_all1 = zero1 + zero_int1\n\n#:set inst_params_float = list(zip(n_inst, nametype1, base1, prec1, kind1, type1, dkind1, normname1))\n#:set inst_params_all = list(zip(nametype_all1, type_all1, zero_all1))\n\n#! Definitions for DBCSR_C\n#:set extype1 = ['double', 'float', 'double _Complex', 'float _Complex']\n#:set ctype1 = ['REAL(kind=c_double)', 'REAL(kind=c_float)', 'COMPLEX(kind=c_double_complex)', 'COMPLEX(kind=c_float_complex)']\n#:set c_inst_params_float = list(zip(n_inst, nametype1, base1, prec1, kind1, type1, dkind1, normname1, ctype1))\n#:set c_exparams = list(zip(n_inst, nametype1, base1, prec1, ctype1, extype1))\n\n#! Handling optional arguments for non-interoperable types\n\n#:def add_num(num,numout)\n#! binary number counter e.g. [1,0,0,0] -> [0,1,0,0]\n#:set carry = 1\n#:for i in range(0,len(num))\n#:set outi = 0\n#:if carry == 1\n #:if num[i] == 0\n  #:set outi = 1\n  #:set carry = 0\n #:else\n  #:set outi = 0\n  #:set carry = 1\n #:endif\n#:else\n #:set outi = num[i]\n#:endif\n#:mute\n$: numout.append(outi)\n#:endmute\n#:endfor\n#:enddef\n\n#:def init(list,n)\n#:mute\n #! fill a list with n zeros\n #:for i in range(n)\n  $: list.append(0)\n #:endfor\n#:endmute\n#:enddef\n\n#:def gen_permlist(permlist,n)\n#:mute\n #! generates a list of permutations from n entries\n #! example n = 2 -> [[0,0],[0,1],[1,0],[1,1]] where 0/1 means present/not present\n #:set idx = []\n #:set newidx = []\n ${init(idx,n)}$\n\n #:set imax = pow(2,n)\n #:for i in range(0,imax)\n        $: permlist.append(idx)\n        ${add_num(idx,newidx)}$\n        #:set idx = newidx\n        #:set newidx = []\n #:endfor\n#:endmute\n#:enddef\n\n#:def gen_vargroups(varlist,vargroups)\n#:mute\n #! generates permuted groups of variables from a variable list\n #! optional variables that appear together may be grouped\n #! example: varlist = [[var1], [var2,var3]]\n #! this gives: vargroups = [ [[var1],[var2,var3]], [[var1]], [[var2,var3]], []]\n #:set permlist = []\n ${gen_permlist(permlist,len(varlist))}$\n #:for p in permlist\n    #:set group = []\n    #:for i in range(len(varlist))\n        #:if p[i] == 0\n            $: group.append(varlist[i])\n        #:endif\n   #:endfor\n   $: vargroups.append(group)\n #:endfor\n#:endmute\n#:enddef\n\n#:def flatten(group,flatgroup)\n#:mute\n#! flattens an array by one level:\n#! [[var1],[var2,var3]] -> [var1,var2,var3]\n#:for sub in group\n #:for x in sub\n $: flatgroup.append(x)\n #:endfor\n#:endfor\n#:endmute\n#:enddef\n\n#:def print_group(group, prefix=\", \")\n#! for a group [[var1],[var2,var3]]\n#! prints \"var1 = var1, var2 = var2, var3 = var3\"\n#:set flatgroup = [item for sublist in group for item in sublist]\n$: prefix * (bool(len(group))) + \", \".join([str(i) + ' = ' + str(i) for i in flatgroup])\n#:enddef\n\n#:def print_groupif(vargroups,varlist,i,check='PRESENT',prefix='')\n#! for a group [[var1]] and a varlist [[var1]],[var2,var3]]\n#! prints \"(ELSE) IF (PRESENT(var1) .AND. .NOT. PRESENT(var2) .AND. .NOT. PRESENT(var3)) THEN\"\n#! to be used in a loop\n#:set group = vargroups[i]\n#:set diff = [item for item in varlist if item not in group]\n#:set stat = \"ELSE IF\"\n#:if i == 0\n#:set stat = \"IF\"\n#:elif i == len(vargroups) - 1\n#:set stat = \"ELSE\"\n#:endif\n#:if stat != \"ELSE\"\n#:set flatgroup = []\n#:set flatdiff = []\n#:mute\n${flatten(group,flatgroup)}$\n${flatten(diff,flatdiff)}$\n#:endmute\n$: stat + \"(\" +  \" .AND. \".join([check + \"(\" +  prefix + str(i) + \")\" for i in flatgroup]) &\n         + \" .AND. \" * (bool(len(diff)) * bool(len(diff) - len(varlist))) &\n         + \" .AND. \".join([\".NOT. \" + check + \"(\" +  prefix + str(i) + \")\" for i in flatdiff]) + \") THEN \"\n#:else\nELSE\n#:endif\n#:enddef\n\n#:endmute\n"
  },
  {
    "path": "src/data/dbcsr_data_methods.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_data_methods\n   !! DBCSR data methods\n   USE dbcsr_acc_devmem, ONLY: acc_devmem_allocate_bytes, &\n                               acc_devmem_allocated, &\n                               acc_devmem_dev2host, &\n                               acc_devmem_ensure_size_bytes, &\n                               acc_devmem_host2dev, &\n                               acc_devmem_setzero_bytes, &\n                               acc_devmem_size_in_bytes\n   USE dbcsr_acc_event, ONLY: acc_event_record\n   USE dbcsr_data_methods_low, ONLY: &\n      dbcsr_data_clear_pointer, dbcsr_data_exists, dbcsr_data_get_memory_type, &\n      dbcsr_data_get_size, dbcsr_data_get_size_referenced, dbcsr_data_get_sizes, &\n      dbcsr_data_get_type, dbcsr_data_hold, dbcsr_data_init, dbcsr_data_set_pointer, &\n      dbcsr_data_set_size_referenced, dbcsr_data_valid, dbcsr_data_zero, dbcsr_get_data, &\n      dbcsr_get_data_p, dbcsr_get_data_p_c, dbcsr_get_data_p_d, dbcsr_get_data_p_s, &\n      dbcsr_get_data_p_z, dbcsr_scalar, dbcsr_scalar_are_equal, dbcsr_scalar_fill_all, &\n      dbcsr_scalar_get_type, dbcsr_scalar_get_value, dbcsr_scalar_negative, dbcsr_scalar_one, &\n      dbcsr_scalar_set_type, dbcsr_scalar_zero, dbcsr_type_1d_to_2d, dbcsr_type_2d_to_1d, &\n      dbcsr_type_is_2d, internal_data_allocate, internal_data_deallocate, dbcsr_scalar_multiply\n   USE dbcsr_data_types, ONLY: &\n      dbcsr_data_obj, dbcsr_datatype_sizeof, dbcsr_memtype_default, dbcsr_memtype_type, &\n      dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_int_4, dbcsr_type_int_8, &\n      dbcsr_type_real_4, dbcsr_type_real_8\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_4, &\n                          int_8, &\n                          real_4, &\n                          real_8\n   USE dbcsr_mem_methods, ONLY: dbcsr_mempool_add, &\n                                dbcsr_mempool_get\n   USE dbcsr_ptr_util, ONLY: ensure_array_size\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_data_methods'\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   INTEGER, SAVE                        :: id = 0\n\n   PUBLIC :: dbcsr_type_2d_to_1d, dbcsr_type_1d_to_2d\n   PUBLIC :: dbcsr_scalar, dbcsr_scalar_one, dbcsr_scalar_zero, &\n             dbcsr_scalar_are_equal, dbcsr_scalar_negative, &\n             dbcsr_scalar_get_type, dbcsr_scalar_set_type, &\n             dbcsr_scalar_fill_all, dbcsr_scalar_get_value, &\n             dbcsr_data_valid, dbcsr_data_exists, dbcsr_scalar_multiply\n   PUBLIC :: dbcsr_data_init, dbcsr_data_new, dbcsr_data_hold, &\n             dbcsr_data_release, dbcsr_data_get_size, dbcsr_data_get_type\n   PUBLIC :: dbcsr_get_data, &\n             dbcsr_data_set_pointer, &\n             dbcsr_data_clear_pointer, &\n             dbcsr_data_ensure_size, &\n             dbcsr_data_get_sizes, &\n             dbcsr_data_get_memory_type\n   PUBLIC :: dbcsr_data_set_size_referenced, dbcsr_data_get_size_referenced\n   PUBLIC :: dbcsr_get_data_p, dbcsr_get_data_p_s, dbcsr_get_data_p_c, &\n             dbcsr_get_data_p_d, dbcsr_get_data_p_z\n   PUBLIC :: dbcsr_data_host2dev, dbcsr_data_dev2host\n\nCONTAINS\n\n   SUBROUTINE dbcsr_data_host2dev(area)\n      !! Transfers data from host- to device-buffer, asynchronously.\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER        :: c_sp\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER        :: c_dp\n      INTEGER(KIND=int_4), DIMENSION(:), POINTER         :: i4\n      INTEGER(KIND=int_8), DIMENSION(:), POINTER         :: i8\n      REAL(KIND=real_4), DIMENSION(:), POINTER           :: r_sp\n      REAL(KIND=real_8), DIMENSION(:), POINTER           :: r_dp\n\n      IF (.NOT. acc_devmem_allocated(area%d%acc_devmem)) RETURN !nothing to do\n      IF (area%d%ref_size == 0) RETURN !nothing to do\n\n      SELECT CASE (area%d%data_type)\n      CASE (dbcsr_type_int_4)\n         i4 => area%d%i4(:area%d%ref_size)\n         CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=i4, stream=area%d%memory_type%acc_stream)\n      CASE (dbcsr_type_int_8)\n         i8 => area%d%i8(:area%d%ref_size)\n         CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=i8, stream=area%d%memory_type%acc_stream)\n      CASE (dbcsr_type_real_4)\n         r_sp => area%d%r_sp(:area%d%ref_size)\n         CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=r_sp, stream=area%d%memory_type%acc_stream)\n      CASE (dbcsr_type_real_8)\n         r_dp => area%d%r_dp(:area%d%ref_size)\n         CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=r_dp, stream=area%d%memory_type%acc_stream)\n      CASE (dbcsr_type_complex_4)\n         c_sp => area%d%c_sp(:area%d%ref_size)\n         CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=c_sp, stream=area%d%memory_type%acc_stream)\n      CASE (dbcsr_type_complex_8)\n         c_dp => area%d%c_dp(:area%d%ref_size)\n         CALL acc_devmem_host2dev(area%d%acc_devmem, hostmem=c_dp, stream=area%d%memory_type%acc_stream)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n\n      CALL acc_event_record(area%d%acc_ready, area%d%memory_type%acc_stream)\n   END SUBROUTINE dbcsr_data_host2dev\n\n   SUBROUTINE dbcsr_data_dev2host(area)\n      !! Transfers data from device- to host-buffer, asynchronously.\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER        :: c_sp\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER        :: c_dp\n      REAL(KIND=real_4), DIMENSION(:), POINTER           :: r_sp\n      REAL(KIND=real_8), DIMENSION(:), POINTER           :: r_dp\n\n      IF (area%d%ref_size == 0) RETURN !nothing to do\n\n      SELECT CASE (area%d%data_type)\n      CASE (dbcsr_type_real_4)\n         r_sp => area%d%r_sp(:area%d%ref_size)\n         CALL acc_devmem_dev2host(area%d%acc_devmem, hostmem=r_sp, stream=area%d%memory_type%acc_stream)\n      CASE (dbcsr_type_real_8)\n         r_dp => area%d%r_dp(:area%d%ref_size)\n         CALL acc_devmem_dev2host(area%d%acc_devmem, hostmem=r_dp, stream=area%d%memory_type%acc_stream)\n      CASE (dbcsr_type_complex_4)\n         c_sp => area%d%c_sp(:area%d%ref_size)\n         CALL acc_devmem_dev2host(area%d%acc_devmem, hostmem=c_sp, stream=area%d%memory_type%acc_stream)\n      CASE (dbcsr_type_complex_8)\n         c_dp => area%d%c_dp(:area%d%ref_size)\n         CALL acc_devmem_dev2host(area%d%acc_devmem, hostmem=c_dp, stream=area%d%memory_type%acc_stream)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n\n   END SUBROUTINE dbcsr_data_dev2host\n\n   SUBROUTINE dbcsr_data_new(area, data_type, data_size, data_size2, &\n                             memory_type)\n      !! Initializes a data area and all the actual data pointers\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! data area\n      INTEGER, INTENT(IN)                                :: data_type\n         !! select data type to use\n      INTEGER, INTENT(IN), OPTIONAL                      :: data_size, data_size2\n         !! allocate this much data\n         !! second dimension data size\n      TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL     :: memory_type\n         !! type of memory to use\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_new'\n      INTEGER                                            :: d, handle, total_size_oversized, &\n                                                            total_size_requested\n      INTEGER, DIMENSION(2)                              :: sizes_oversized, sizes_requested\n      TYPE(dbcsr_memtype_type)                           :: my_memory_type\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      IF (ASSOCIATED(area%d)) &\n         DBCSR_ABORT(\"area already associated\")\n\n      my_memory_type = dbcsr_memtype_default\n      IF (PRESENT(memory_type)) my_memory_type = memory_type\n\n      sizes_requested(:) = 0; d = 1\n      IF (PRESENT(data_size)) sizes_requested(1) = data_size\n\n      IF (dbcsr_type_is_2d(data_type)) THEN\n         d = 2\n         IF (PRESENT(data_size2)) sizes_requested(2) = data_size2\n\n         IF (PRESENT(data_size) .NEQV. PRESENT(data_size2)) &\n            DBCSR_ABORT(\"Must specify 2 sizes for 2-D data\")\n      END IF\n\n      sizes_oversized = INT(sizes_requested*my_memory_type%oversize_factor)\n      total_size_requested = PRODUCT(sizes_requested(1:d))\n      total_size_oversized = PRODUCT(sizes_oversized(1:d))\n\n      IF (ANY(sizes_requested < 0) .OR. ANY(sizes_oversized < 0)) &\n         DBCSR_ABORT(\"Negative data size requested, integer overflow?\")\n\n      IF (total_size_requested > 1 .AND. ASSOCIATED(my_memory_type%pool)) THEN\n         area = dbcsr_mempool_get(my_memory_type, data_type, total_size_requested)\n      END IF\n\n      IF (.NOT. ASSOCIATED(area%d)) THEN\n         ALLOCATE (area%d)\n!$OMP        CRITICAL (crit_area_id)\n         id = id + 1\n         area%d%id = id\n!$OMP        END CRITICAL (crit_area_id)\n         area%d%refcount = 1\n         area%d%memory_type = my_memory_type\n         area%d%data_type = data_type\n         IF (PRESENT(data_size)) THEN\n            CALL internal_data_allocate(area%d, sizes_oversized(1:d))\n         END IF\n      END IF\n\n      area%d%ref_size = total_size_requested\n\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_data_new\n\n   SUBROUTINE dbcsr_data_ensure_size(area, data_size, nocopy, zero_pad, factor, &\n                                     area_resize)\n      !! Ensures a minimum size of a previously-setup data area.\n      !! The data area must have been previously setup with dbcsr_data_new.\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! data area\n      INTEGER, INTENT(IN)                                :: data_size\n         !! allocate this much data\n      LOGICAL, INTENT(IN), OPTIONAL                      :: nocopy, zero_pad\n         !! do not keep potentially existing data, default is to keep it\n         !! pad new data with zeros\n      REAL(KIND=dp), INTENT(IN), OPTIONAL                :: factor\n         !! increase size by this factor\n      TYPE(dbcsr_data_obj), INTENT(INOUT), OPTIONAL      :: area_resize\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_ensure_size'\n\n      INTEGER                                            :: current_size, handle, wanted_size\n      LOGICAL                                            :: nocp, pad\n      TYPE(dbcsr_data_obj)                               :: area_tmp\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) CALL timeset(routineN, handle)\n      IF (.NOT. ASSOCIATED(area%d)) &\n         DBCSR_ABORT(\"Data area must be setup.\")\n      current_size = dbcsr_data_get_size(area)\n\n      IF (PRESENT(area_resize)) THEN\n         ! Sanity check\n         IF (.NOT. dbcsr_data_valid(area_resize)) &\n            DBCSR_ABORT(\"Previous data area must be setup.\")\n         IF (dbcsr_data_exists(area_resize)) &\n            DBCSR_ABORT(\"Previous data area must be not associated.\")\n         IF (area%d%memory_type%acc_devalloc) &\n            DBCSR_ABORT(\"Cannot use dev memory with previous data area.\")\n         IF (ASSOCIATED(area%d%memory_type%pool)) &\n            DBCSR_ABORT(\"Cannot use memory pool with previous data area.\")\n      END IF\n\n      wanted_size = data_size\n#if defined(__HAS_smm_dnn) && defined(__HAS_smm_vec)\n      ! allocate some more as padding for libsmm kernels which read over the end.\n      IF (data_size .GT. 0) THEN\n         wanted_size = data_size + 10\n      END IF\n#endif\n\n      !IF(area%d%memory_type%acc_devalloc) THEN\n      !    IF(current_size==acc_devmem_size(area%d%acc_devmem)) &\n      !      WRITE (*,*) \"dbcsr_data_ensure_size: Host and device buffer differ in size.\"\n      !END IF\n      !IF(current_size/=acc_devmem_size(area%d%acc_devmem)) &\n      !   DBCSR_ABORT(\"Host and device buffer differ in size.\")\n\n      CALL dbcsr_data_set_size_referenced(area, data_size)\n      IF (current_size .GT. 1 .AND. current_size .GE. wanted_size) THEN\n         IF (careful_mod) CALL timestop(handle)\n         RETURN\n      END IF\n      !\n      nocp = .FALSE.\n      IF (PRESENT(nocopy)) nocp = nocopy\n      pad = .FALSE.\n      IF (PRESENT(zero_pad)) pad = zero_pad\n\n      IF (dbcsr_data_exists(area)) THEN\n         IF (nocp .AND. dbcsr_data_get_size(area) <= 1) THEN\n            IF (PRESENT(area_resize)) THEN\n               CALL dbcsr_data_set_pointer(area_resize, &\n                                           dbcsr_data_get_size(area), 1, area)\n               CALL dbcsr_data_clear_pointer(area)\n            ELSE\n               CALL internal_data_deallocate(area%d)\n            END IF\n         END IF\n      END IF\n\n      IF (.NOT. dbcsr_data_exists(area)) THEN\n         IF (ASSOCIATED(area%d%memory_type%pool)) THEN\n            area_tmp = dbcsr_mempool_get(area%d%memory_type, area%d%data_type, wanted_size)\n            IF (ASSOCIATED(area_tmp%d)) THEN\n               area_tmp%d%ref_size = wanted_size\n               area_tmp%d%refcount = area%d%refcount\n               DEALLOCATE (area%d)\n               area = area_tmp\n            END IF\n         END IF\n\n         IF (.NOT. dbcsr_data_exists(area)) &\n            CALL internal_data_allocate(area%d, (/wanted_size/))\n\n         IF (pad) CALL dbcsr_data_zero(area, (/1/), (/wanted_size/))\n      ELSE\n         SELECT CASE (area%d%data_type)\n         CASE (dbcsr_type_int_8)\n            IF (PRESENT(area_resize)) THEN\n               CALL ensure_array_size(area%d%i8, &\n                                      array_resize=area_resize%d%i8, &\n                                      ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            ELSE\n               CALL ensure_array_size(area%d%i8, ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            END IF\n         CASE (dbcsr_type_int_4)\n            IF (PRESENT(area_resize)) THEN\n               CALL ensure_array_size(area%d%i4, &\n                                      array_resize=area_resize%d%i4, &\n                                      ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            ELSE\n               CALL ensure_array_size(area%d%i4, ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            END IF\n         CASE (dbcsr_type_real_8)\n            IF (PRESENT(area_resize)) THEN\n               CALL ensure_array_size(area%d%r_dp, &\n                                      array_resize=area_resize%d%r_dp, &\n                                      ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            ELSE\n               CALL ensure_array_size(area%d%r_dp, ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            END IF\n         CASE (dbcsr_type_real_4)\n            IF (PRESENT(area_resize)) THEN\n               CALL ensure_array_size(area%d%r_sp, &\n                                      array_resize=area_resize%d%r_sp, &\n                                      ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            ELSE\n               CALL ensure_array_size(area%d%r_sp, ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            END IF\n         CASE (dbcsr_type_complex_8)\n            IF (PRESENT(area_resize)) THEN\n               CALL ensure_array_size(area%d%c_dp, &\n                                      array_resize=area_resize%d%c_dp, &\n                                      ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            ELSE\n               CALL ensure_array_size(area%d%c_dp, ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            END IF\n         CASE (dbcsr_type_complex_4)\n            IF (PRESENT(area_resize)) THEN\n               CALL ensure_array_size(area%d%c_sp, &\n                                      array_resize=area_resize%d%c_sp, &\n                                      ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            ELSE\n               CALL ensure_array_size(area%d%c_sp, ub=wanted_size, &\n                                      memory_type=area%d%memory_type, &\n                                      nocopy=nocp, zero_pad=zero_pad, &\n                                      factor=factor)\n            END IF\n         CASE default\n            DBCSR_ABORT(\"Invalid data type are supported\")\n         END SELECT\n\n         IF (area%d%memory_type%acc_devalloc) THEN\n            IF (.NOT. acc_devmem_allocated(area%d%acc_devmem)) THEN\n               CALL acc_devmem_allocate_bytes(area%d%acc_devmem, &\n                                              dbcsr_datatype_sizeof(area%d%data_type)*dbcsr_data_get_size(area))\n               IF (pad) CALL acc_devmem_setzero_bytes(area%d%acc_devmem, stream=area%d%memory_type%acc_stream)\n            ELSE\n               CALL acc_devmem_ensure_size_bytes(area%d%acc_devmem, &\n                                                 area%d%memory_type%acc_stream, &\n                                                 dbcsr_datatype_sizeof(area%d%data_type)*dbcsr_data_get_size(area), &\n                                                 nocopy, zero_pad)\n            END IF\n            CALL acc_event_record(area%d%acc_ready, area%d%memory_type%acc_stream)\n            IF (dbcsr_datatype_sizeof(area%d%data_type)*dbcsr_data_get_size(area) &\n                /= acc_devmem_size_in_bytes(area%d%acc_devmem)) &\n               DBCSR_ABORT(\"Host and device buffer differ in size.\")\n         END IF\n\n      END IF\n      IF (careful_mod) CALL timestop(handle)\n   END SUBROUTINE dbcsr_data_ensure_size\n\n   SUBROUTINE dbcsr_data_release(area)\n      !! Removes a reference and/or clears the data area.\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! data area\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_release'\n\n      INTEGER                                            :: handle\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. ASSOCIATED(area%d)) &\n         DBCSR_WARN(\"Data seems to be unreferenced.\")\n      IF (ASSOCIATED(area%d)) THEN\n         !\n         IF (careful_mod) THEN\n            IF (area%d%refcount .LE. 0) &\n               DBCSR_WARN(\"Data seems to be unreferenced.\")\n         END IF\n         !\n         area%d%refcount = area%d%refcount - 1\n         ! If we're releasing the last reference, then free the memory.\n         IF (area%d%refcount .EQ. 0) THEN\n            IF (.NOT. dbcsr_data_exists(area)) THEN\n               DEALLOCATE (area%d)\n            ELSE IF (dbcsr_data_get_size(area) > 1 .AND. ASSOCIATED(area%d%memory_type%pool)) THEN\n               area%d%ref_size = 0\n               CALL dbcsr_mempool_add(area)\n            ELSE\n               CALL internal_data_deallocate(area%d)\n               DEALLOCATE (area%d)\n            END IF\n            NULLIFY (area%d)\n         END IF\n      END IF\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_data_release\n\nEND MODULE dbcsr_data_methods\n"
  },
  {
    "path": "src/data/dbcsr_data_methods_low.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_data_methods_low\n   !! DBCSR data methods\n\n   USE dbcsr_acc_devmem, ONLY: acc_devmem_allocate_bytes, &\n                               acc_devmem_allocated, &\n                               acc_devmem_deallocate, &\n                               acc_devmem_set_cptr\n   USE dbcsr_acc_event, ONLY: acc_event_create, &\n                              acc_event_destroy\n   USE dbcsr_data_types, ONLY: &\n      dbcsr_data_area_type, dbcsr_data_obj, dbcsr_datatype_sizeof, dbcsr_memtype_type, &\n      dbcsr_scalar_type, dbcsr_type_complex_4, dbcsr_type_complex_4_2d, dbcsr_type_complex_8, &\n      dbcsr_type_complex_8_2d, dbcsr_type_int_4, dbcsr_type_int_8, dbcsr_type_real_4, &\n      dbcsr_type_real_4_2d, dbcsr_type_real_8, dbcsr_type_real_8_2d\n   USE dbcsr_ptr_util, ONLY: memory_allocate, &\n                             memory_deallocate, &\n                             memory_zero, &\n                             pointer_rank_remap2\n   USE dbcsr_kinds, ONLY: dp, &\n                          real_4, &\n                          real_8\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_data_methods_low'\n\n   PUBLIC :: dbcsr_type_is_2d, dbcsr_type_2d_to_1d, dbcsr_type_1d_to_2d\n   PUBLIC :: dbcsr_scalar, dbcsr_scalar_one, dbcsr_scalar_zero, &\n             dbcsr_scalar_are_equal, dbcsr_scalar_negative, &\n             dbcsr_scalar_get_type, dbcsr_scalar_set_type, &\n             dbcsr_scalar_fill_all, dbcsr_scalar_get_value, &\n             dbcsr_data_valid, dbcsr_scalar_multiply\n   PUBLIC :: dbcsr_data_init, dbcsr_data_hold, &\n             dbcsr_data_get_size, dbcsr_data_get_type\n   PUBLIC :: dbcsr_get_data, &\n             dbcsr_data_set_pointer, &\n             dbcsr_data_clear_pointer, &\n             dbcsr_data_get_sizes, dbcsr_data_verify_bounds, &\n             dbcsr_data_exists, dbcsr_data_get_memory_type\n   PUBLIC :: dbcsr_data_set_size_referenced, dbcsr_data_get_size_referenced\n   PUBLIC :: dbcsr_get_data_p, dbcsr_get_data_p_s, dbcsr_get_data_p_c, &\n             dbcsr_get_data_p_d, dbcsr_get_data_p_z, &\n             dbcsr_get_data_p_2d_s, dbcsr_get_data_p_2d_d, &\n             dbcsr_get_data_p_2d_c, dbcsr_get_data_p_2d_z\n   PUBLIC :: dbcsr_data_zero\n\n   PUBLIC :: internal_data_allocate, internal_data_deallocate\n\n   INTERFACE dbcsr_scalar\n      !! Encapsulates a scalar.\n      MODULE PROCEDURE dbcsr_scalar_s, dbcsr_scalar_d, &\n         dbcsr_scalar_c, dbcsr_scalar_z\n   END INTERFACE\n\n   INTERFACE dbcsr_scalar_get_value\n      !! Encapsulates a scalar.\n      MODULE PROCEDURE dbcsr_scalar_get_value_s, dbcsr_scalar_get_value_d, &\n         dbcsr_scalar_get_value_c, dbcsr_scalar_get_value_z\n   END INTERFACE\n\n   INTERFACE dbcsr_data_set_pointer\n      MODULE PROCEDURE set_data_p_s, set_data_p_d, set_data_p_c, set_data_p_z\n      MODULE PROCEDURE set_data_p_2d_s, set_data_p_2d_d, &\n         set_data_p_2d_c, set_data_p_2d_z\n      MODULE PROCEDURE set_data_area_area\n   END INTERFACE\n\n   INTERFACE dbcsr_get_data\n      MODULE PROCEDURE get_data_s, get_data_d, get_data_c, get_data_z\n      MODULE PROCEDURE get_data_2d_s, get_data_2d_d, get_data_2d_c, get_data_2d_z\n   END INTERFACE\n\n   INTERFACE dbcsr_get_data_p\n      MODULE PROCEDURE dbcsr_get_data_c_s, dbcsr_get_data_c_c, &\n         dbcsr_get_data_c_d, dbcsr_get_data_c_z\n   END INTERFACE\n\n   INTERFACE dbcsr_get_data_cptr\n      MODULE PROCEDURE dbcsr_get_data_c_s, dbcsr_get_data_c_c, &\n         dbcsr_get_data_c_d, dbcsr_get_data_c_z\n   END INTERFACE\n\n   INTERFACE dbcsr_data_get_sizes\n      MODULE PROCEDURE dbcsr_data_get_sizes_any\n      MODULE PROCEDURE dbcsr_data_get_sizes_1, dbcsr_data_get_sizes_2\n   END INTERFACE\n\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n\nCONTAINS\n\n   PURE FUNCTION dbcsr_data_get_type(area) RESULT(data_type)\n      !! Returns data type of a data area\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! data area\n      INTEGER                                            :: data_type\n         !! data type of the data area\n\n      data_type = area%d%data_type\n   END FUNCTION dbcsr_data_get_type\n\n   FUNCTION dbcsr_data_get_memory_type(area) RESULT(memory_type)\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n      TYPE(dbcsr_memtype_type)                           :: memory_type\n\n      memory_type = area%d%memory_type\n   END FUNCTION dbcsr_data_get_memory_type\n\n   SUBROUTINE dbcsr_data_init(area)\n      !! Initializes a data area\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! data area\n\n      NULLIFY (area%d)\n   END SUBROUTINE dbcsr_data_init\n\n   SUBROUTINE internal_data_allocate(area, sizes)\n      !! Allocates pointers in the data type\n\n      TYPE(dbcsr_data_area_type), INTENT(INOUT)          :: area\n         !! internal structure holding array pointers\n      INTEGER, DIMENSION(:), INTENT(IN), CONTIGUOUS      :: sizes\n         !! sizes to allocate to\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'internal_data_allocate'\n\n      INTEGER                                            :: error_handle\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) &\n         CALL timeset(routineN, error_handle)\n      IF (debug_mod) &\n         WRITE (*, *) routineN//\" Setting to sizes\", sizes\n      IF (dbcsr_type_is_2d(area%data_type)) THEN\n         IF (SIZE(sizes) /= 2) &\n            DBCSR_ABORT(\"Sizes must have 2 elements for 2-D data\")\n      ELSE\n         IF (SIZE(sizes) /= 1) &\n            DBCSR_ABORT(\"Sizes must have 1 elements for 1-D data\")\n      END IF\n\n      SELECT CASE (area%data_type)\n      CASE (dbcsr_type_int_4)\n         CALL memory_allocate(area%i4, n=sizes(1), mem_type=area%memory_type)\n      CASE (dbcsr_type_int_8)\n         CALL memory_allocate(area%i8, n=sizes(1), mem_type=area%memory_type)\n      CASE (dbcsr_type_real_4)\n         CALL memory_allocate(area%r_sp, n=sizes(1), mem_type=area%memory_type)\n      CASE (dbcsr_type_real_8)\n         CALL memory_allocate(area%r_dp, n=sizes(1), mem_type=area%memory_type)\n      CASE (dbcsr_type_complex_4)\n         CALL memory_allocate(area%c_sp, n=sizes(1), mem_type=area%memory_type)\n      CASE (dbcsr_type_complex_8)\n         CALL memory_allocate(area%c_dp, n=sizes(1), mem_type=area%memory_type)\n\n      CASE (dbcsr_type_real_4_2d)\n         CALL memory_allocate(area%r2_sp, sizes=sizes, mem_type=area%memory_type)\n      CASE (dbcsr_type_real_8_2d)\n         CALL memory_allocate(area%r2_dp, sizes=sizes, mem_type=area%memory_type)\n      CASE (dbcsr_type_complex_4_2d)\n         CALL memory_allocate(area%c2_sp, sizes=sizes, mem_type=area%memory_type)\n      CASE (dbcsr_type_complex_8_2d)\n         CALL memory_allocate(area%c2_dp, sizes=sizes, mem_type=area%memory_type)\n\n      CASE default\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n\n      IF (area%memory_type%acc_devalloc) THEN\n         IF (sizes(1) >= 0) &\n            CALL acc_devmem_allocate_bytes(area%acc_devmem, dbcsr_datatype_sizeof(area%data_type)*sizes(1))\n         CALL acc_event_create(area%acc_ready)\n      END IF\n\n      IF (careful_mod) &\n         CALL timestop(error_handle)\n\n   END SUBROUTINE internal_data_allocate\n\n   SUBROUTINE internal_data_deallocate(area)\n      !! Allocates pointers in the data type\n\n      TYPE(dbcsr_data_area_type), INTENT(INOUT)          :: area\n         !! internal structure holding array pointers\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'internal_data_deallocate'\n\n      INTEGER                                            :: handle\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) &\n         CALL timeset(routineN, handle)\n\n      SELECT CASE (area%data_type)\n      CASE (dbcsr_type_int_4)\n         CALL memory_deallocate(area%i4, mem_type=area%memory_type)\n         NULLIFY (area%i4)\n      CASE (dbcsr_type_int_8)\n         CALL memory_deallocate(area%i8, mem_type=area%memory_type)\n         NULLIFY (area%i8)\n      CASE (dbcsr_type_real_4)\n         CALL memory_deallocate(area%r_sp, mem_type=area%memory_type)\n         NULLIFY (area%r_sp)\n      CASE (dbcsr_type_real_8)\n         CALL memory_deallocate(area%r_dp, mem_type=area%memory_type)\n         NULLIFY (area%r_dp)\n      CASE (dbcsr_type_complex_4)\n         CALL memory_deallocate(area%c_sp, mem_type=area%memory_type)\n         NULLIFY (area%c_sp)\n      CASE (dbcsr_type_complex_8)\n         CALL memory_deallocate(area%c_dp, mem_type=area%memory_type)\n         NULLIFY (area%c_dp)\n\n      CASE (dbcsr_type_real_4_2d)\n         CALL memory_deallocate(area%r2_sp, mem_type=area%memory_type)\n         NULLIFY (area%r2_sp)\n      CASE (dbcsr_type_real_8_2d)\n         CALL memory_deallocate(area%r2_dp, mem_type=area%memory_type)\n         NULLIFY (area%r2_dp)\n      CASE (dbcsr_type_complex_4_2d)\n         CALL memory_deallocate(area%c2_sp, mem_type=area%memory_type)\n         NULLIFY (area%c2_sp)\n      CASE (dbcsr_type_complex_8_2d)\n         CALL memory_deallocate(area%c2_dp, mem_type=area%memory_type)\n         NULLIFY (area%c2_dp)\n\n      CASE default\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n\n      IF (area%memory_type%acc_devalloc) THEN\n         IF (acc_devmem_allocated(area%acc_devmem)) &\n            CALL acc_devmem_deallocate(area%acc_devmem)\n         CALL acc_event_destroy(area%acc_ready)\n      END IF\n\n      IF (careful_mod) &\n         CALL timestop(handle)\n   END SUBROUTINE internal_data_deallocate\n\n   SUBROUTINE dbcsr_data_clear_pointer(area)\n      !! Clears pointers from the data area.\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! data area\n\n      IF (.NOT. ASSOCIATED(area%d)) THEN\n         RETURN\n      END IF\n\n      IF (area%d%refcount .LE. 0) &\n         DBCSR_WARN(\"Data seems to be unreferenced.\")\n      SELECT CASE (area%d%data_type)\n      CASE (dbcsr_type_int_4)\n         NULLIFY (area%d%i4)\n      CASE (dbcsr_type_int_8)\n         NULLIFY (area%d%i8)\n      CASE (dbcsr_type_real_4)\n         NULLIFY (area%d%r_sp)\n      CASE (dbcsr_type_real_8)\n         NULLIFY (area%d%r_dp)\n      CASE (dbcsr_type_complex_4)\n         NULLIFY (area%d%c_sp)\n      CASE (dbcsr_type_complex_8)\n         NULLIFY (area%d%c_dp)\n      CASE (dbcsr_type_real_8_2d)\n         NULLIFY (area%d%r2_dp)\n      CASE (dbcsr_type_real_4_2d)\n         NULLIFY (area%d%r2_sp)\n      CASE (dbcsr_type_complex_8_2d)\n         NULLIFY (area%d%c2_dp)\n      CASE (dbcsr_type_complex_4_2d)\n         NULLIFY (area%d%c2_sp)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n   END SUBROUTINE dbcsr_data_clear_pointer\n\n   ELEMENTAL FUNCTION dbcsr_data_valid(area) RESULT(valid)\n      !! Checks whether a data area is valid\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! data area\n      LOGICAL                                            :: valid\n         !! whether the data area is valid\n\n      valid = ASSOCIATED(area%d)\n   END FUNCTION dbcsr_data_valid\n\n   FUNCTION dbcsr_data_exists(area) RESULT(valid)\n      !! Checks whether a data pointer exists\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! data area\n      LOGICAL                                            :: valid\n         !! whether the data pointer exists\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_exists'\n\n      INTEGER                                            :: error_handle\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) THEN\n         CALL timeset(routineN, error_handle)\n      END IF\n      !\n      valid = dbcsr_data_valid(area)\n      IF (.NOT. valid) &\n         DBCSR_ABORT(\"Data area is invalid.\")\n\n      SELECT CASE (area%d%data_type)\n      CASE (dbcsr_type_int_4)\n         valid = ASSOCIATED(area%d%i4)\n      CASE (dbcsr_type_int_8)\n         valid = ASSOCIATED(area%d%i8)\n      CASE (dbcsr_type_real_4)\n         valid = ASSOCIATED(area%d%r_sp)\n      CASE (dbcsr_type_real_8)\n         valid = ASSOCIATED(area%d%r_dp)\n      CASE (dbcsr_type_complex_4)\n         valid = ASSOCIATED(area%d%c_sp)\n      CASE (dbcsr_type_complex_8)\n         valid = ASSOCIATED(area%d%c_dp)\n      CASE (dbcsr_type_real_4_2d)\n         valid = ASSOCIATED(area%d%r2_sp)\n      CASE (dbcsr_type_real_8_2d)\n         valid = ASSOCIATED(area%d%r2_dp)\n      CASE (dbcsr_type_complex_4_2d)\n         valid = ASSOCIATED(area%d%c2_sp)\n      CASE (dbcsr_type_complex_8_2d)\n         valid = ASSOCIATED(area%d%c2_dp)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n\n      IF (careful_mod) THEN\n         CALL timestop(error_handle)\n      END IF\n   END FUNCTION dbcsr_data_exists\n\n   SUBROUTINE dbcsr_data_hold(area)\n      !! Registers another use of the data area\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! data area\n\n      IF (careful_mod) THEN\n         IF (.NOT. ASSOCIATED(area%d)) &\n            DBCSR_ABORT(\"Can't hold an empty data area.\")\n         IF (area%d%refcount <= 0) &\n            DBCSR_ABORT(\"Should not hold an area with zero references.\")\n      END IF\n      IF (.NOT. ASSOCIATED(area%d)) THEN\n         RETURN\n      END IF\n!$OMP ATOMIC\n      area%d%refcount = area%d%refcount + 1\n   END SUBROUTINE dbcsr_data_hold\n\n   SUBROUTINE set_data_area_area(area, rsize, csize, pointee, source_lb)\n      !! Points data area data pointers to another data area\n      !! Assumes that no memory will be lost when repointing the pointer in the data\n      !! area and that the area is initialized.\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! data area to repoint\n      INTEGER, INTENT(IN)                                :: rsize, csize\n         !! size of data area to point to\n         !! size of data area to point to\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: pointee\n         !! data area to point to\n      INTEGER, INTENT(IN), OPTIONAL                      :: source_lb\n         !! point to this offset in pointee\n\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER        :: c_sp\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER        :: c_dp\n      INTEGER                                            :: bp, dt1, dt2, nze\n      LOGICAL                                            :: compatible, pointee_is_2d, rmp\n      REAL(KIND=real_4), DIMENSION(:), POINTER           :: r_sp\n      REAL(KIND=real_8), DIMENSION(:), POINTER           :: r_dp\n\n!   ---------------------------------------------------------------------------\n\n      bp = 1; IF (PRESENT(source_lb)) bp = source_lb\n      nze = rsize*csize\n      dt1 = area%d%data_type\n      dt2 = pointee%d%data_type\n      IF (careful_mod) THEN\n         compatible = dt1 .EQ. dt2 .OR. dt1 .EQ. dbcsr_type_1d_to_2d(dt2)\n         IF (.NOT. compatible) &\n            DBCSR_ABORT(\"Can not point 1-d pointer to 2-d data\")\n\n      END IF\n      pointee_is_2d = dbcsr_type_is_2d(dt2)\n      IF (careful_mod) THEN\n         IF (PRESENT(source_lb) .AND. pointee_is_2d) &\n            DBCSR_ABORT(\"Lower bound specification not possible with 2-d data\")\n         ! Check if size is OK.\n         IF (bp < 1) &\n            DBCSR_ABORT(\"Attempt to point out of bounds\")\n         IF (bp + nze - 1 > dbcsr_data_get_size(pointee)) &\n            DBCSR_ABORT(\"Attempt to point out of bounds\")\n      END IF\n      ! There's a remap if the ranks are compatible but not equal.\n      rmp = dt1 .NE. dt2\n      SELECT CASE (dt2)\n      CASE (dbcsr_type_int_4)\n         area%d%i4 => pointee%d%i4(bp:bp + nze - 1)\n      CASE (dbcsr_type_real_4_2d)\n         area%d%r2_sp => pointee%d%r2_sp(1:rsize, 1:csize)\n      CASE (dbcsr_type_real_4)\n         IF (rmp) THEN\n            r_sp => dbcsr_get_data_p_s(pointee, bp, bp + nze - 1)\n            CALL pointer_rank_remap2(area%d%r2_sp, rsize, csize, &\n                                     r_sp)\n         ELSE\n            area%d%r_sp => dbcsr_get_data_p_s(pointee, bp, bp + nze - 1)\n         END IF\n      CASE (dbcsr_type_real_8_2d)\n         area%d%r2_dp => pointee%d%r2_dp(1:rsize, 1:csize)\n      CASE (dbcsr_type_real_8)\n         IF (rmp) THEN\n            r_dp => dbcsr_get_data_p_d(pointee, bp, bp + nze - 1)\n            CALL pointer_rank_remap2(area%d%r2_dp, rsize, csize, &\n                                     r_dp)\n         ELSE\n            area%d%r_dp => dbcsr_get_data_p_d(pointee, bp, bp + nze - 1)\n         END IF\n      CASE (dbcsr_type_complex_4_2d)\n         area%d%c2_sp => pointee%d%c2_sp(1:rsize, 1:csize)\n      CASE (dbcsr_type_complex_4)\n         IF (rmp) THEN\n            c_sp => dbcsr_get_data_p_c(pointee, bp, bp + nze - 1)\n            CALL pointer_rank_remap2(area%d%c2_sp, rsize, csize, &\n                                     c_sp)\n         ELSE\n            area%d%c_sp => dbcsr_get_data_p_c(pointee, bp, bp + nze - 1)\n         END IF\n      CASE (dbcsr_type_complex_8_2d)\n         area%d%c2_dp => pointee%d%c2_dp(1:rsize, 1:csize)\n      CASE (dbcsr_type_complex_8)\n         IF (rmp) THEN\n            c_dp => dbcsr_get_data_p_z(pointee, bp, bp + nze - 1)\n            CALL pointer_rank_remap2(area%d%c2_dp, rsize, csize, &\n                                     c_dp)\n         ELSE\n            area%d%c_dp => dbcsr_get_data_p_z(pointee, bp, bp + nze - 1)\n         END IF\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n      CALL dbcsr_data_set_size_referenced(area, rsize*csize)\n      IF (debug_mod) THEN\n         IF (dbcsr_data_get_size_referenced(area) /= dbcsr_data_get_size(area)) &\n            DBCSR_ABORT(\"Size mismatch\")\n      END IF\n      !\n      IF (area%d%memory_type%acc_devalloc .AND. pointee%d%memory_type%acc_devalloc) THEN\n         IF (pointee_is_2d) &\n            DBCSR_ABORT(\"Setting GPU pointers for 2D data is not available!\")\n         CALL acc_devmem_set_cptr(area%d%acc_devmem, &\n                                  pointee%d%acc_devmem, &\n                                  dbcsr_datatype_sizeof(area%d%data_type)*nze, &\n                                  dbcsr_datatype_sizeof(area%d%data_type)*(bp - 1))\n      END IF\n   END SUBROUTINE set_data_area_area\n\n   FUNCTION dbcsr_data_get_size(area) RESULT(data_size)\n      !! Returns the allocated data size\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! data area\n      INTEGER                                            :: data_size\n         !! size of data\n\n      data_size = 0\n      IF (ASSOCIATED(area%d)) THEN\n         SELECT CASE (area%d%data_type)\n         CASE (dbcsr_type_int_4)\n            IF (ASSOCIATED(area%d%i4)) &\n               data_size = SIZE(area%d%i4)\n         CASE (dbcsr_type_int_8)\n            IF (ASSOCIATED(area%d%i8)) &\n               data_size = SIZE(area%d%i8)\n         CASE (dbcsr_type_real_8)\n            IF (ASSOCIATED(area%d%r_dp)) &\n               data_size = SIZE(area%d%r_dp)\n         CASE (dbcsr_type_real_4)\n            IF (ASSOCIATED(area%d%r_sp)) &\n               data_size = SIZE(area%d%r_sp)\n         CASE (dbcsr_type_complex_8)\n            IF (ASSOCIATED(area%d%c_dp)) &\n               data_size = SIZE(area%d%c_dp)\n         CASE (dbcsr_type_complex_4)\n            IF (ASSOCIATED(area%d%c_sp)) &\n               data_size = SIZE(area%d%c_sp)\n         CASE (dbcsr_type_real_8_2d)\n            IF (ASSOCIATED(area%d%r2_dp)) &\n               data_size = SIZE(area%d%r2_dp)\n         CASE (dbcsr_type_real_4_2d)\n            IF (ASSOCIATED(area%d%r2_sp)) &\n               data_size = SIZE(area%d%r2_sp)\n         CASE (dbcsr_type_complex_8_2d)\n            IF (ASSOCIATED(area%d%c2_dp)) &\n               data_size = SIZE(area%d%c2_dp)\n         CASE (dbcsr_type_complex_4_2d)\n            IF (ASSOCIATED(area%d%c2_sp)) &\n               data_size = SIZE(area%d%c2_sp)\n         CASE default\n            DBCSR_ABORT(\"Incorrect data type\")\n         END SELECT\n      ELSE\n         DBCSR_WARN(\"Uninitialized data area\")\n         data_size = 0\n      END IF\n   END FUNCTION dbcsr_data_get_size\n\n   SUBROUTINE dbcsr_data_verify_bounds(area, lb, ub)\n      !! Verifies bounds of a data area\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! Data area\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: lb, ub\n         !! lower bounds\n         !! upper bounds\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_verify_bounds'\n\n      INTEGER                                            :: data_type, handle\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      data_type = dbcsr_data_get_type(area)\n      IF (dbcsr_type_is_2d(data_type)) THEN\n         IF (SIZE(lb) /= 2) &\n            DBCSR_ABORT(\"size must be 2 for 2-d lb\")\n         IF (SIZE(ub) /= 2) &\n            DBCSR_ABORT(\"size must be 2 for 2-d ub\")\n      ELSE\n         IF (SIZE(lb) /= 1) &\n            DBCSR_ABORT(\"size must be 1 for 1-d lb\")\n         IF (SIZE(ub) /= 1) &\n            DBCSR_ABORT(\"size must be 1 for 1-d ub\")\n      END IF\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         IF (lb(1) < LBOUND(area%d%r_sp, 1)) DBCSR_ABORT(\"lb r_sp\")\n         IF (ub(1) > UBOUND(area%d%r_sp, 1)) DBCSR_ABORT(\"ub r_sp\")\n      CASE (dbcsr_type_real_4_2d)\n         IF (lb(1) < LBOUND(area%d%r2_sp, 1)) DBCSR_ABORT(\"lb r_sp 2d\")\n         IF (ub(1) > UBOUND(area%d%r2_sp, 1)) DBCSR_ABORT(\"ub r_sp 2d\")\n         IF (lb(2) < LBOUND(area%d%r2_sp, 2)) DBCSR_ABORT(\"lb r_sp 2d\")\n         IF (ub(2) > UBOUND(area%d%r2_sp, 2)) DBCSR_ABORT(\"ub r_sp 2d\")\n      CASE (dbcsr_type_real_8)\n         IF (lb(1) < LBOUND(area%d%r_dp, 1)) DBCSR_ABORT(\"lb r_dp\")\n         IF (ub(1) > UBOUND(area%d%r_dp, 1)) DBCSR_ABORT(\"ub r_dp\")\n      CASE (dbcsr_type_real_8_2d)\n         IF (lb(1) < LBOUND(area%d%r2_dp, 1)) DBCSR_ABORT(\"lb r_dp 2d\")\n         IF (ub(1) > UBOUND(area%d%r2_dp, 1)) DBCSR_ABORT(\"ub r_dp 2d\")\n         IF (lb(2) < LBOUND(area%d%r2_dp, 2)) DBCSR_ABORT(\"lb r_dp 2d\")\n         IF (ub(2) > UBOUND(area%d%r2_dp, 2)) DBCSR_ABORT(\"ub r_dp 2d\")\n      CASE (dbcsr_type_complex_4)\n         IF (lb(1) < LBOUND(area%d%c_sp, 1)) DBCSR_ABORT(\"lb c_sp\")\n         IF (ub(1) > UBOUND(area%d%c_sp, 1)) DBCSR_ABORT(\"ub c_sp\")\n      CASE (dbcsr_type_complex_4_2d)\n         IF (lb(1) < LBOUND(area%d%c2_sp, 1)) DBCSR_ABORT(\"lb c_sp 2d\")\n         IF (ub(1) > UBOUND(area%d%c2_sp, 1)) DBCSR_ABORT(\"ub c_sp 2d\")\n         IF (lb(2) < LBOUND(area%d%c2_sp, 2)) DBCSR_ABORT(\"lb c_sp 2d\")\n         IF (ub(2) > UBOUND(area%d%c2_sp, 2)) DBCSR_ABORT(\"ub c_sp 2d\")\n      CASE (dbcsr_type_complex_8)\n         IF (lb(1) < LBOUND(area%d%c_dp, 1)) DBCSR_ABORT(\"lb c_dp\")\n         IF (ub(1) > UBOUND(area%d%c_dp, 1)) DBCSR_ABORT(\"ub c_dp\")\n      CASE (dbcsr_type_complex_8_2d)\n         IF (lb(1) < LBOUND(area%d%c2_dp, 1)) DBCSR_ABORT(\"lb c_dp 2d\")\n         IF (ub(1) > UBOUND(area%d%c2_dp, 1)) DBCSR_ABORT(\"ub c_dp 2d\")\n         IF (lb(2) < LBOUND(area%d%c2_dp, 2)) DBCSR_ABORT(\"lb c_dp 2d\")\n         IF (ub(2) > UBOUND(area%d%c2_dp, 2)) DBCSR_ABORT(\"ub c_dp 2d\")\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_data_verify_bounds\n\n   SUBROUTINE dbcsr_data_zero(area, lb, ub)\n      !! Clears a part of the data area\n      !! @note\n      !! Optimized for clearing big 1-D data areas from all data types.\n      !! @endnote\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: area\n         !! data area\n      INTEGER, DIMENSION(:), INTENT(in)                  :: lb, ub\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_zero'\n\n      INTEGER                                            :: error_handle\n\n      REAL(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: r_sp\n      REAL(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: r_dp\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: c_sp\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: c_dp\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) THEN\n         CALL timeset(routineN, error_handle)\n      END IF\n\n      SELECT CASE (area%d%data_type)\n      CASE (dbcsr_type_real_4)\n         r_sp => area%d%r_sp(lb(1):ub(1))\n         CALL memory_zero(r_sp, SIZE(r_sp))\n      CASE (dbcsr_type_real_8)\n         r_dp => area%d%r_dp(lb(1):ub(1))\n         CALL memory_zero(r_dp, SIZE(r_dp))\n      CASE (dbcsr_type_complex_4)\n         c_sp => area%d%c_sp(lb(1):ub(1))\n         CALL memory_zero(c_sp, SIZE(c_sp))\n      CASE (dbcsr_type_complex_8)\n         c_dp => area%d%c_dp(lb(1):ub(1))\n         CALL memory_zero(c_dp, SIZE(c_dp))\n      CASE (dbcsr_type_real_4_2d)\n         area%d%r2_sp(lb(1):ub(1), lb(2):ub(2)) = 0.0_real_4\n      CASE (dbcsr_type_real_8_2d)\n         area%d%r2_dp(lb(1):ub(1), lb(2):ub(2)) = 0.0_real_8\n      CASE (dbcsr_type_complex_4_2d)\n         area%d%c2_sp(lb(1):ub(1), lb(2):ub(2)) = 0.0_real_4\n      CASE (dbcsr_type_complex_8_2d)\n         area%d%c2_dp(lb(1):ub(1), lb(2):ub(2)) = 0.0_real_8\n      CASE default\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n\n      IF (area%d%memory_type%acc_devalloc) &\n         DBCSR_ABORT(\"not yet supported for acc devmem\")\n\n      IF (careful_mod) THEN\n         CALL timestop(error_handle)\n      END IF\n   END SUBROUTINE dbcsr_data_zero\n\n   SUBROUTINE dbcsr_data_get_sizes_any(area, sizes, valid)\n      !! Returns the allocated data size\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! data area to query for size\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: sizes\n         !! array with the data sizes\n      LOGICAL, INTENT(OUT)                               :: valid\n         !! whether the data is actually allocated\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_get_sizes_any'\n\n      INTEGER                                            :: handle\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) &\n         CALL timeset(routineN, handle)\n\n      valid = .FALSE.\n      sizes(:) = 0\n      IF (ASSOCIATED(area%d)) THEN\n         IF (careful_mod) THEN\n            IF (dbcsr_type_is_2d(area%d%data_type)) THEN\n               IF (SIZE(sizes) /= 2) &\n                  DBCSR_ABORT(\"Sizes must have 2 elements for 2-D data\")\n            ELSE\n               IF (SIZE(sizes) /= 1) &\n                  DBCSR_ABORT(\"Sizes must have 1 elements for 1-D data\")\n            END IF\n         END IF\n         valid = dbcsr_data_exists(area)\n         IF (valid) THEN\n            SELECT CASE (area%d%data_type)\n            CASE (dbcsr_type_real_8)\n               sizes(1) = SIZE(area%d%r_dp)\n            CASE (dbcsr_type_real_4)\n               sizes(1) = SIZE(area%d%r_sp)\n            CASE (dbcsr_type_complex_8)\n               sizes(1) = SIZE(area%d%c_dp)\n            CASE (dbcsr_type_complex_4)\n               sizes(1) = SIZE(area%d%c_sp)\n            CASE (dbcsr_type_real_8_2d)\n               sizes(1) = SIZE(area%d%r2_dp, 1)\n               sizes(2) = SIZE(area%d%r2_dp, 2)\n            CASE (dbcsr_type_real_4_2d)\n               sizes(1) = SIZE(area%d%r2_sp, 1)\n               sizes(2) = SIZE(area%d%r2_sp, 2)\n            CASE (dbcsr_type_complex_8_2d)\n               sizes(1) = SIZE(area%d%c2_dp, 1)\n               sizes(2) = SIZE(area%d%c2_dp, 2)\n            CASE (dbcsr_type_complex_4_2d)\n               sizes(1) = SIZE(area%d%c2_sp, 1)\n               sizes(2) = SIZE(area%d%c2_sp, 2)\n            CASE default\n               DBCSR_ABORT(\"Incorrect data type\")\n            END SELECT\n         END IF\n      END IF\n      IF (careful_mod) &\n         CALL timestop(handle)\n   END SUBROUTINE dbcsr_data_get_sizes_any\n\n   SUBROUTINE dbcsr_data_get_sizes_2(area, row_size, col_size, valid)\n      !! Returns the allocated data size\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! data area to query for size, should be 2-D\n      INTEGER, INTENT(OUT)                               :: row_size, col_size\n         !! row size\n         !! column size\n      LOGICAL, INTENT(OUT)                               :: valid\n         !! whether the data is actually allocated\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_get_sizes_2'\n\n      INTEGER                                            :: handle\n      INTEGER, DIMENSION(2)                              :: s\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) &\n         CALL timeset(routineN, handle)\n      IF (ASSOCIATED(area%d)) THEN\n         IF (careful_mod .AND. .NOT. dbcsr_type_is_2d(area%d%data_type)) &\n            DBCSR_ABORT(\"1-D data can not have column size\")\n         CALL dbcsr_data_get_sizes_any(area, s, valid)\n         row_size = s(1)\n         col_size = s(2)\n      ELSE\n         valid = .FALSE.\n         row_size = 0\n         col_size = 0\n      END IF\n      IF (careful_mod) &\n         CALL timestop(handle)\n   END SUBROUTINE dbcsr_data_get_sizes_2\n\n   SUBROUTINE dbcsr_data_get_sizes_1(area, total_size, valid)\n      !! Returns the allocated data size\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! data area to query for size\n      INTEGER, INTENT(OUT)                               :: total_size\n         !! size of array\n      LOGICAL, INTENT(OUT)                               :: valid\n         !! whether the data is actually allocated\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_get_sizes_1'\n\n      INTEGER                                            :: handle\n      INTEGER, DIMENSION(1)                              :: s\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      IF (ASSOCIATED(area%d)) THEN\n         IF (careful_mod .AND. dbcsr_type_is_2d(area%d%data_type)) &\n            DBCSR_ABORT(\"Should not use 2-D data\")\n         CALL dbcsr_data_get_sizes_any(area, s, valid)\n         total_size = s(1)\n      ELSE\n         valid = .FALSE.\n         total_size = 0\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_data_get_sizes_1\n\n   ELEMENTAL FUNCTION dbcsr_scalar_one(data_type) RESULT(one)\n      !! Returns an encapsulated scalar \"1\"\n\n      INTEGER, INTENT(IN)                                :: data_type\n         !! use the data type\n      TYPE(dbcsr_scalar_type)                            :: one\n         !! encapsulated value of one\n\n      one = dbcsr_scalar_zero(data_type)\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         one%r_sp = 1.0_real_4\n      CASE (dbcsr_type_real_8)\n         one%r_dp = 1.0_real_8\n      CASE (dbcsr_type_complex_4)\n         one%c_sp = CMPLX(1.0, 0.0, real_4)\n      CASE (dbcsr_type_complex_8)\n         one%c_dp = CMPLX(1.0, 0.0, real_8)\n      END SELECT\n   END FUNCTION dbcsr_scalar_one\n\n   ELEMENTAL FUNCTION dbcsr_scalar_zero(data_type) RESULT(zero)\n      !! Returns an encapsulated scalar \"0\"\n\n      INTEGER, INTENT(IN)                                :: data_type\n         !! use the data type\n      TYPE(dbcsr_scalar_type)                            :: zero\n         !! encapsulated value of zero\n\n      zero%data_type = data_type\n      zero%r_sp = 0.0_real_4\n      zero%r_dp = 0.0_real_8\n      zero%c_sp = CMPLX(0.0, 0.0, real_4)\n      zero%c_dp = CMPLX(0.0, 0.0, real_8)\n   END FUNCTION dbcsr_scalar_zero\n\n   ELEMENTAL FUNCTION dbcsr_scalar_are_equal(s1, s2) RESULT(are_equal)\n      !! Returns whether an encapsulated scalar is equal to another value\n\n      TYPE(dbcsr_scalar_type), INTENT(IN)                :: s1, s2\n         !! one value\n         !! another value\n      LOGICAL                                            :: are_equal\n         !! whether values are equal\n\n      IF (s1%data_type .NE. s2%data_type) THEN\n         are_equal = .FALSE.\n      ELSE\n         SELECT CASE (s1%data_type)\n         CASE (dbcsr_type_real_4)\n            are_equal = s1%r_sp .EQ. s2%r_sp\n         CASE (dbcsr_type_real_8)\n            are_equal = s1%r_dp .EQ. s2%r_dp\n         CASE (dbcsr_type_complex_4)\n            are_equal = s1%c_sp .EQ. s2%c_sp\n         CASE (dbcsr_type_complex_8)\n            are_equal = s1%c_dp .EQ. s2%c_dp\n         CASE default\n            are_equal = .FALSE.\n         END SELECT\n      END IF\n   END FUNCTION dbcsr_scalar_are_equal\n\n   ELEMENTAL FUNCTION dbcsr_scalar_negative(s) RESULT(negated)\n      !! Returns an encapsulated scalar as a negation of the given\n\n      TYPE(dbcsr_scalar_type), INTENT(IN)                :: s\n         !! given value\n      TYPE(dbcsr_scalar_type)                            :: negated\n         !! negated value\n\n      negated = dbcsr_scalar_zero(s%data_type)\n      SELECT CASE (s%data_type)\n      CASE (dbcsr_type_real_4)\n         negated%r_sp = -s%r_sp\n      CASE (dbcsr_type_real_8)\n         negated%r_dp = -s%r_dp\n      CASE (dbcsr_type_complex_4)\n         negated%c_sp = -s%c_sp\n      CASE (dbcsr_type_complex_8)\n         negated%c_dp = -s%c_dp\n      CASE default\n         negated = dbcsr_scalar_zero(s%data_type)\n      END SELECT\n   END FUNCTION dbcsr_scalar_negative\n\n   ELEMENTAL FUNCTION dbcsr_scalar_multiply(s1, s2) RESULT(s_product)\n      TYPE(dbcsr_scalar_type), INTENT(IN)                :: s1, s2\n      TYPE(dbcsr_scalar_type)                            :: s_product\n\n      s_product = dbcsr_scalar_zero(s1%data_type)\n      SELECT CASE (s1%data_type)\n      CASE (dbcsr_type_real_4)\n         s_product%r_sp = s1%r_sp*s2%r_sp\n      CASE (dbcsr_type_real_8)\n         s_product%r_dp = s1%r_dp*s2%r_dp\n      CASE (dbcsr_type_complex_4)\n         s_product%c_sp = s1%c_sp*s2%c_sp\n      CASE (dbcsr_type_complex_8)\n         s_product%c_dp = s1%c_dp*s2%c_dp\n      CASE default\n         s_product = dbcsr_scalar_zero(s1%data_type)\n      END SELECT\n   END FUNCTION dbcsr_scalar_multiply\n\n   ELEMENTAL FUNCTION dbcsr_scalar_get_type(scalar) RESULT(data_type)\n      !! Returns data type of a scalar\n\n      TYPE(dbcsr_scalar_type), INTENT(IN)                :: scalar\n         !! scalar\n      INTEGER                                            :: data_type\n         !! data type of the scalar\n\n      data_type = scalar%data_type\n   END FUNCTION dbcsr_scalar_get_type\n\n   ELEMENTAL SUBROUTINE dbcsr_scalar_set_type(scalar, data_type)\n      !! Sets data type of a scalar\n\n      TYPE(dbcsr_scalar_type), INTENT(INOUT)             :: scalar\n         !! scalar\n      INTEGER, INTENT(IN)                                :: data_type\n\n      scalar%data_type = data_type\n   END SUBROUTINE dbcsr_scalar_set_type\n\n   ELEMENTAL SUBROUTINE dbcsr_scalar_fill_all(scalar)\n      !! Fills all data and precision types from the set one\n\n      TYPE(dbcsr_scalar_type), INTENT(INOUT)             :: scalar\n         !! data area\n\n      SELECT CASE (scalar%data_type)\n      CASE (dbcsr_type_real_4)\n         !scalar%r_sp = 0\n         scalar%r_dp = REAL(scalar%r_sp, KIND=real_8)\n         scalar%c_sp = CMPLX(scalar%r_sp, 0, KIND=real_4)\n         scalar%c_dp = CMPLX(scalar%r_sp, 0, KIND=real_8)\n      CASE (dbcsr_type_real_8)\n         scalar%r_sp = REAL(scalar%r_dp, KIND=real_4)\n         !scalar%r_dp = REAL(scalar%r_dp, KIND=real_8)\n         scalar%c_sp = CMPLX(scalar%r_dp, 0, KIND=real_4)\n         scalar%c_dp = CMPLX(scalar%r_dp, 0, KIND=real_8)\n      CASE (dbcsr_type_complex_4)\n         scalar%r_sp = REAL(scalar%c_sp, KIND=real_4)\n         scalar%r_dp = REAL(scalar%c_sp, KIND=real_8)\n         !scalar%c_sp = CMPLX(scalar%c_sp, KIND=real_4)\n         scalar%c_dp = CMPLX(scalar%c_sp, KIND=real_8)\n      CASE (dbcsr_type_complex_8)\n         scalar%r_sp = REAL(scalar%c_dp, KIND=real_4)\n         scalar%r_dp = REAL(scalar%c_dp, KIND=real_8)\n         scalar%c_sp = CMPLX(scalar%c_dp, KIND=real_4)\n         !scalar%c_dp = CMPLX(scalar%r_dp, KIND=real_8)\n      END SELECT\n   END SUBROUTINE dbcsr_scalar_fill_all\n\n   PURE FUNCTION dbcsr_type_is_2d(data_type)\n      !! Checks whether the data type is 2-D.\n      !! \\return Data type is 2-D.\n\n      INTEGER, INTENT(IN)                                :: data_type\n      LOGICAL                                            :: dbcsr_type_is_2d\n\n      dbcsr_type_is_2d = data_type .EQ. dbcsr_type_real_4_2d .OR. &\n                         data_type .EQ. dbcsr_type_real_8_2d .OR. &\n                         data_type .EQ. dbcsr_type_complex_4_2d .OR. &\n                         data_type .EQ. dbcsr_type_complex_8_2d\n   END FUNCTION dbcsr_type_is_2d\n\n   PURE FUNCTION dbcsr_type_2d_to_1d(data_type)\n      !! Returns 1-d data type corresponding to the given 2-D one.\n      !! \\return 1-D data type\n\n      INTEGER, INTENT(IN)                                :: data_type\n      INTEGER                                            :: dbcsr_type_2d_to_1d\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4_2d)\n         dbcsr_type_2d_to_1d = dbcsr_type_real_4\n      CASE (dbcsr_type_real_8_2d)\n         dbcsr_type_2d_to_1d = dbcsr_type_real_8\n      CASE (dbcsr_type_complex_4_2d)\n         dbcsr_type_2d_to_1d = dbcsr_type_complex_4\n      CASE (dbcsr_type_complex_8_2d)\n         dbcsr_type_2d_to_1d = dbcsr_type_complex_8\n      CASE (dbcsr_type_real_4)\n         dbcsr_type_2d_to_1d = dbcsr_type_real_4\n      CASE (dbcsr_type_real_8)\n         dbcsr_type_2d_to_1d = dbcsr_type_real_8\n      CASE (dbcsr_type_complex_4)\n         dbcsr_type_2d_to_1d = dbcsr_type_complex_4\n      CASE (dbcsr_type_complex_8)\n         dbcsr_type_2d_to_1d = dbcsr_type_complex_8\n      CASE default\n         dbcsr_type_2d_to_1d = -1\n      END SELECT\n   END FUNCTION dbcsr_type_2d_to_1d\n\n   PURE FUNCTION dbcsr_type_1d_to_2d(data_type)\n      !! Returns 2-D data type corresponding to the given 1-D one.\n      !! \\return 2-D data type\n\n      INTEGER, INTENT(IN)                                :: data_type\n      INTEGER                                            :: dbcsr_type_1d_to_2d\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         dbcsr_type_1d_to_2d = dbcsr_type_real_4_2d\n      CASE (dbcsr_type_real_8)\n         dbcsr_type_1d_to_2d = dbcsr_type_real_8_2d\n      CASE (dbcsr_type_complex_4)\n         dbcsr_type_1d_to_2d = dbcsr_type_complex_4_2d\n      CASE (dbcsr_type_complex_8)\n         dbcsr_type_1d_to_2d = dbcsr_type_complex_8_2d\n      CASE (dbcsr_type_real_4_2d)\n         dbcsr_type_1d_to_2d = dbcsr_type_real_4_2d\n      CASE (dbcsr_type_real_8_2d)\n         dbcsr_type_1d_to_2d = dbcsr_type_real_8_2d\n      CASE (dbcsr_type_complex_4_2d)\n         dbcsr_type_1d_to_2d = dbcsr_type_complex_4_2d\n      CASE (dbcsr_type_complex_8_2d)\n         dbcsr_type_1d_to_2d = dbcsr_type_complex_8_2d\n      CASE default\n         dbcsr_type_1d_to_2d = -1\n      END SELECT\n   END FUNCTION dbcsr_type_1d_to_2d\n\n   PURE FUNCTION dbcsr_data_get_size_referenced(area) RESULT(data_size_referenced)\n      !! Get actual data storage used for matrix\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! Count data of this matrix\n      INTEGER                                            :: data_size_referenced\n         !! Data size used by matrix\n\n      IF (ASSOCIATED(area%d)) THEN\n         data_size_referenced = area%d%ref_size\n      ELSE\n         data_size_referenced = 0\n      END IF\n   END FUNCTION dbcsr_data_get_size_referenced\n\n   PURE SUBROUTINE dbcsr_data_set_size_referenced(data_area, referenced_size)\n      !! Sets the referenced size of the data area\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: data_area\n         !! area for which to set referenced data size\n      INTEGER, INTENT(IN)                                :: referenced_size\n         !! set referenced data size to this value\n\n      data_area%d%ref_size = referenced_size\n   END SUBROUTINE dbcsr_data_set_size_referenced\n\n! **************************************************************************************************\n\n   #:include 'dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float\n      SUBROUTINE set_data_p_${nametype1}$ (area, p)\n     !! Sets a data pointer.\n     !!\n     !! Assumptions\n     !! Assumes that no memory will be lost when repointing the\n     !! pointer in the data area and that the area is initialized.\n\n         TYPE(dbcsr_data_obj), INTENT(INOUT)      :: area\n        !! target data area\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: p\n        !! source data pointer\n\n         IF (area%d%data_type /= ${dkind1}$) &\n            DBCSR_ABORT(\"set_data_p_${nametype1}$: data-area has wrong type\")\n\n         area%d%${base1}$_${prec1}$ => p\n      END SUBROUTINE set_data_p_${nametype1}$\n\n      SUBROUTINE set_data_p_2d_${nametype1}$ (area, p)\n     !! Sets a data pointer.\n     !!\n     !! Assumptions\n     !! Assumes that no memory will be lost when repointing the\n     !! pointer in the data area and that the area is initialized.\n\n         TYPE(dbcsr_data_obj), INTENT(INOUT)      :: area\n        !! target data area\n         ${type1}$, DIMENSION(:, :), POINTER         :: p\n        !! source data pointer\n\n         IF (area%d%data_type /= ${dkind1}$_2d) &\n            DBCSR_ABORT(\"set_data_p_2d_${nametype1}$: data-area has wrong type\")\n\n         area%d%${base1}$2_${prec1}$ => p\n      END SUBROUTINE set_data_p_2d_${nametype1}$\n\n      FUNCTION dbcsr_get_data_c_${nametype1}$ (area, select_data_type, lb, ub) RESULT(DATA)\n     !! Returns the single/double precision real/complex data\n     !!\n     !! Calling\n     !! This routine is hidden behind the dbcsr_get_data interface, hence the\n     !! need for the select_data_type argument.\n     !! see dbcsr_get_data_p_${nametype1}$\n\n         TYPE(dbcsr_data_obj), INTENT(IN)         :: area\n        !! data area\n         ${type1}$, INTENT(IN)            :: select_data_type\n        !! force datatype\n         INTEGER, INTENT(IN), OPTIONAL  :: lb, ub\n        !! lower bound for pointer\n        !! upper bound for pointer\n         ${type1}$, DIMENSION(:), POINTER :: DATA\n        !! pointer to data\n\n         INTEGER                        :: l, u\n\n!   ---------------------------------------------------------------------------\n\n         ! The select_data_type argument is needed to make this function unique\n         ! enough to use in the interface.\n         IF (KIND(select_data_type) .NE. KIND(DATA)) &\n            DBCSR_ABORT(\"compiler borken\")\n\n         IF (ASSOCIATED(area%d)) THEN\n            IF (area%d%data_type /= ${dkind1}$) &\n               DBCSR_ABORT(\"dbcsr_get_data_c_${nametype1}$: data-area has wrong type\")\n            IF (PRESENT(lb) .OR. PRESENT(ub)) THEN\n               l = LBOUND(area%d%${base1}$_${prec1}$, 1)\n               IF (PRESENT(lb)) l = lb\n               u = UBOUND(area%d%${base1}$_${prec1}$, 1)\n               IF (PRESENT(ub)) u = ub\n               IF (debug_mod) THEN\n                  IF (l .LT. LBOUND(area%d%${base1}$_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n                  IF (u .GT. UBOUND(area%d%${base1}$_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n               END IF\n               DATA => area%d%${base1}$_${prec1}$ (l:u)\n            ELSE\n               DATA => area%d%${base1}$_${prec1}$\n            END IF\n         ELSE\n            NULLIFY (DATA)\n         END IF\n      END FUNCTION dbcsr_get_data_c_${nametype1}$\n\n      FUNCTION dbcsr_get_data_p_${nametype1}$ (area, lb, ub) RESULT(DATA)\n     !! Returns the single/double precision real/complex data\n     !! \\brief dbcsr_get_data_c_${nametype1}$\n     !!\n     !! Calling\n     !! This routine can be called explicitly.\n\n         TYPE(dbcsr_data_obj), INTENT(IN)         :: area\n        !! data area\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: DATA\n        !! pointer to data\n         INTEGER, INTENT(IN), OPTIONAL  :: lb, ub\n        !! lower bound for pointer\n        !! upper bound for pointer\n\n         INTEGER                        :: l, u\n!   ---------------------------------------------------------------------------\n\n         IF (ASSOCIATED(area%d)) THEN\n            IF (area%d%data_type /= ${dkind1}$) &\n               DBCSR_ABORT(\"dbcsr_get_data_p_${nametype1}$: data-area has wrong type\")\n            IF (PRESENT(lb) .OR. PRESENT(ub)) THEN\n               l = LBOUND(area%d%${base1}$_${prec1}$, 1)\n               IF (PRESENT(lb)) l = lb\n               u = UBOUND(area%d%${base1}$_${prec1}$, 1)\n               IF (PRESENT(ub)) u = ub\n               IF (debug_mod) THEN\n                  IF (l .LT. LBOUND(area%d%${base1}$_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n                  IF (u .GT. UBOUND(area%d%${base1}$_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n               END IF\n               DATA => area%d%${base1}$_${prec1}$ (l:u)\n            ELSE\n               DATA => area%d%${base1}$_${prec1}$\n            END IF\n         ELSE\n            NULLIFY (DATA)\n         END IF\n      END FUNCTION dbcsr_get_data_p_${nametype1}$\n\n      FUNCTION dbcsr_get_data_p_2d_${nametype1}$ (area, lb, ub) RESULT(DATA)\n     !! Returns the single/double precision real/complex data\n     !! \\brief dbcsr_get_data_c_${nametype1}$\n     !!\n     !! Calling\n     !! This routine can be called explicitly.\n\n         TYPE(dbcsr_data_obj), INTENT(IN)            :: area\n        !! data area\n         ${type1}$, DIMENSION(:, :), POINTER            :: DATA\n        !! pointer to data\n         INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: lb, ub\n        !! lower bound for pointer\n        !! upper bound for pointer\n\n         INTEGER, DIMENSION(2)          :: l, u\n!   ---------------------------------------------------------------------------\n\n         IF (ASSOCIATED(area%d)) THEN\n            IF (area%d%data_type /= ${dkind1}$_2d) &\n               DBCSR_ABORT(\"dbcsr_get_data_p_2d_${nametype1}$: data-area has wrong type\")\n            IF (PRESENT(lb) .OR. PRESENT(ub)) THEN\n               l = LBOUND(area%d%${base1}$2_${prec1}$)\n               IF (PRESENT(lb)) l = lb\n               u = UBOUND(area%d%${base1}$2_${prec1}$)\n               IF (PRESENT(ub)) u = ub\n               IF (debug_mod) THEN\n                  IF (l(1) .LT. LBOUND(area%d%${base1}$2_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n                  IF (l(2) .LT. LBOUND(area%d%${base1}$2_${prec1}$, 2)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n                  IF (u(1) .GT. UBOUND(area%d%${base1}$2_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n                  IF (u(2) .GT. UBOUND(area%d%${base1}$2_${prec1}$, 2)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n               END IF\n               DATA => area%d%${base1}$2_${prec1}$ (l(1):u(1), l(2):u(2))\n            ELSE\n               DATA => area%d%${base1}$2_${prec1}$\n            END IF\n         ELSE\n            NULLIFY (DATA)\n         END IF\n      END FUNCTION dbcsr_get_data_p_2d_${nametype1}$\n\n      SUBROUTINE get_data_${nametype1}$ (area, DATA, lb, ub)\n     !! Returns the single/double precision real/complex data\n\n         TYPE(dbcsr_data_obj), INTENT(IN)  :: area\n        !! data area\n         ${type1}$, DIMENSION(:), POINTER    :: DATA\n        !! pointer to data\n         INTEGER, INTENT(IN), OPTIONAL     :: lb, ub\n        !! lower bound for pointer\n        !! upper bound for pointer\n\n         INTEGER                        :: l, u\n!   ---------------------------------------------------------------------------\n\n         IF (ASSOCIATED(area%d)) THEN\n            IF (area%d%data_type /= ${dkind1}$) &\n               DBCSR_ABORT(\"get_data_${nametype1}$: data-area has wrong type\")\n            IF (PRESENT(lb) .OR. PRESENT(ub)) THEN\n               l = LBOUND(area%d%${base1}$_${prec1}$, 1)\n               IF (PRESENT(lb)) l = lb\n               u = UBOUND(area%d%${base1}$_${prec1}$, 1)\n               IF (PRESENT(ub)) u = ub\n               IF (debug_mod) THEN\n                  IF (l < LBOUND(area%d%${base1}$_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n                  IF (u > UBOUND(area%d%${base1}$_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n               END IF\n               DATA => area%d%${base1}$_${prec1}$ (l:u)\n            ELSE\n               DATA => area%d%${base1}$_${prec1}$\n            END IF\n         ELSE\n            NULLIFY (DATA)\n         END IF\n      END SUBROUTINE get_data_${nametype1}$\n\n      SUBROUTINE get_data_2d_${nametype1}$ (area, DATA, lb, ub)\n     !! Returns the single/double precision real/complex data\n\n         TYPE(dbcsr_data_obj), INTENT(IN)            :: area\n        !! data area\n         ${type1}$, DIMENSION(:, :), POINTER            :: DATA\n        !! pointer to data\n         INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: lb, ub\n        !! lower bound for pointer\n        !! upper bound for pointer\n\n         INTEGER, DIMENSION(2)          :: l, u\n!   ---------------------------------------------------------------------------\n\n         IF (ASSOCIATED(area%d)) THEN\n            IF (area%d%data_type /= ${dkind1}$_2d) &\n               DBCSR_ABORT(\"get_data_2d_${nametype1}$: data-area has wrong type\")\n            IF (PRESENT(lb) .OR. PRESENT(ub)) THEN\n               l = LBOUND(area%d%${base1}$2_${prec1}$)\n               IF (PRESENT(lb)) l = lb\n               u = UBOUND(area%d%${base1}$2_${prec1}$)\n               IF (PRESENT(ub)) u = ub\n               IF (debug_mod) THEN\n                  IF (l(1) < LBOUND(area%d%${base1}$2_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n                  IF (l(2) < LBOUND(area%d%${base1}$2_${prec1}$, 2)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n                  IF (u(1) > UBOUND(area%d%${base1}$2_${prec1}$, 1)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n                  IF (u(2) > UBOUND(area%d%${base1}$2_${prec1}$, 2)) &\n                     DBCSR_ABORT(\"Out of bounds\")\n               END IF\n               DATA => area%d%${base1}$2_${prec1}$ (l(1):u(1), l(2):u(2))\n            ELSE\n               DATA => area%d%${base1}$2_${prec1}$\n            END IF\n         ELSE\n            NULLIFY (DATA)\n         END IF\n      END SUBROUTINE get_data_2d_${nametype1}$\n\n      ELEMENTAL FUNCTION dbcsr_scalar_${nametype1}$ (scalar) RESULT(encapsulated_scalar)\n     !! Sets a scalar in an encapsulated data structure\n\n         ${type1}$, INTENT(IN)       :: scalar\n        !! scalar to encapsulate\n         TYPE(dbcsr_scalar_type)   :: encapsulated_scalar\n        !! encapsulated scalar\n\n         encapsulated_scalar = dbcsr_scalar_zero(${dkind1}$)\n         encapsulated_scalar%${base1}$_${prec1}$ = scalar\n      END FUNCTION dbcsr_scalar_${nametype1}$\n\n      ELEMENTAL SUBROUTINE dbcsr_scalar_get_value_${nametype1}$ (encapsulated_scalar, value)\n     !! Sets a scalar in an encapsulated data structure\n\n         TYPE(dbcsr_scalar_type), INTENT(IN) :: encapsulated_scalar\n        !! encapsulated scalar\n         ${type1}$, INTENT(OUT)                :: value\n        !! value of the scalar\n\n         value = encapsulated_scalar%${base1}$_${prec1}$\n      END SUBROUTINE dbcsr_scalar_get_value_${nametype1}$\n   #:endfor\n\nEND MODULE dbcsr_data_methods_low\n"
  },
  {
    "path": "src/data/dbcsr_data_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_data_operations\n   !! DBCSR data operations\n\n   USE dbcsr_block_operations, ONLY: dbcsr_block_transpose, &\n                                     dbcsr_data_copy, &\n                                     dbcsr_data_set\n   USE dbcsr_data_methods, ONLY: dbcsr_data_get_size, &\n                                 dbcsr_data_get_size_referenced, &\n                                 dbcsr_data_hold, &\n                                 dbcsr_data_release, &\n                                 dbcsr_data_set_size_referenced, &\n                                 dbcsr_get_data\n   USE dbcsr_dist_util, ONLY: sgn\n   USE dbcsr_kinds, ONLY: real_4, &\n                          real_8\n   USE dbcsr_types, ONLY: dbcsr_data_obj, &\n                          dbcsr_type, &\n                          dbcsr_type_complex_4, &\n                          dbcsr_type_complex_8, &\n                          dbcsr_type_real_4, &\n                          dbcsr_type_real_8\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_data_operations'\n\n   PUBLIC :: dbcsr_data_copyall, dbcsr_data_convert, &\n             dbcsr_copy_sort_data, &\n             dbcsr_sort_data\n   PUBLIC :: dbcsr_switch_data_area\n\nCONTAINS\n\n   SUBROUTINE dbcsr_switch_data_area(matrix, data_area, previous_data_area)\n      !! Sets the data area of a matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix for which to set the data area\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: data_area\n         !! data area to set\n      TYPE(dbcsr_data_obj), INTENT(OUT), OPTIONAL        :: previous_data_area\n         !! previous data area\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_switch_data_area'\n\n      INTEGER                                            :: handle\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (PRESENT(previous_data_area)) THEN\n         previous_data_area = matrix%data_area\n      ELSE\n         CALL dbcsr_data_release(matrix%data_area)\n      END IF\n      matrix%data_area = data_area\n      CALL dbcsr_data_hold(matrix%data_area)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_switch_data_area\n\n   SUBROUTINE dbcsr_data_copyall(target_area, source_area, shallow)\n      !! Copies a data area, deep by default.\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: target_area\n         !! target data area\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: source_area\n         !! source data area\n      LOGICAL, INTENT(IN), OPTIONAL                      :: shallow\n         !! shallow copy (default is deep)\n\n      INTEGER                                            :: i, n\n      LOGICAL                                            :: shallow_copy\n\n!   ---------------------------------------------------------------------------\n\n      IF (.NOT. ASSOCIATED(source_area%d)) &\n         DBCSR_ABORT(\"Attempt to copy unassigned data\")\n      IF (source_area%d%refcount .LE. 0) &\n         DBCSR_WARN(\"Attempt to copy unheld data\")\n      shallow_copy = .FALSE.\n      IF (PRESENT(shallow)) shallow_copy = shallow\n      IF (shallow_copy) THEN\n         target_area = source_area\n         CALL dbcsr_data_hold(target_area)\n      ELSE\n         IF (.NOT. ASSOCIATED(target_area%d)) &\n            DBCSR_ABORT(\"Target area does not exist.\")\n         CALL dbcsr_data_set_size_referenced(target_area, &\n                                             dbcsr_data_get_size_referenced(source_area))\n         n = dbcsr_data_get_size_referenced(source_area)\n         SELECT CASE (target_area%d%data_type)\n         CASE (dbcsr_type_real_4)\n!$OMP           PARALLEL DO DEFAULT(NONE) PRIVATE(I) SHARED(target_area,source_area,n)\n            DO i = 1, n\n               target_area%d%r_sp(i) = source_area%d%r_sp(i)\n            END DO\n         CASE (dbcsr_type_real_8)\n!$OMP           PARALLEL DO DEFAULT(NONE) PRIVATE(I) SHARED(target_area,source_area,n)\n            DO i = 1, n\n               target_area%d%r_dp(i) = source_area%d%r_dp(i)\n            END DO\n         CASE (dbcsr_type_complex_4)\n!$OMP           PARALLEL DO DEFAULT(NONE) PRIVATE(I) SHARED(target_area,source_area,n)\n            DO i = 1, n\n               target_area%d%c_sp(i) = source_area%d%c_sp(i)\n            END DO\n         CASE (dbcsr_type_complex_8)\n!$OMP           PARALLEL DO DEFAULT(NONE) PRIVATE(I) SHARED(target_area,source_area,n)\n            DO i = 1, n\n               target_area%d%c_dp(i) = source_area%d%c_dp(i)\n            END DO\n         CASE default\n            DBCSR_ABORT(\"Invalid data type\")\n         END SELECT\n      END IF\n!      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_data_copyall\n\n   SUBROUTINE dbcsr_data_convert(target_area, source_area, drop_real, &\n                                 multiply_by_i)\n      !! Copies a data area, converting data type\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: target_area\n         !! target data area\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: source_area\n         !! source data area\n      LOGICAL, INTENT(IN), OPTIONAL                      :: drop_real, multiply_by_i\n         !! drops real part of complex numbers instead of the imaginary part; default is false\n         !! converts real to complex by placing into imaginary instead of real part\n\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: s_data_c, t_data_c\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: s_data_z, t_data_z\n      INTEGER                                            :: n, ns, nt\n      LOGICAL                                            :: keep_real, noimult\n      REAL(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: s_data_r, t_data_r\n      REAL(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: s_data_d, t_data_d\n\n!   ---------------------------------------------------------------------------\n\n      IF (.NOT. ASSOCIATED(source_area%d)) &\n         DBCSR_WARN(\"Attempt to copy unassigned data\")\n      IF (source_area%d%refcount .LE. 0) &\n         DBCSR_WARN(\"Attempt to copy unheld data\")\n      IF (.NOT. ASSOCIATED(source_area%d)) THEN\n         RETURN\n      END IF\n      keep_real = .TRUE.\n      IF (PRESENT(drop_real)) keep_real = .NOT. drop_real\n      noimult = .TRUE.\n      IF (PRESENT(multiply_by_i)) noimult = .NOT. multiply_by_i\n      ns = dbcsr_data_get_size_referenced(source_area)\n      nt = dbcsr_data_get_size_referenced(target_area)\n      n = MIN(ns, nt)\n      IF (n .GT. 0) THEN\n         SELECT CASE (source_area%d%data_type)\n         CASE (dbcsr_type_real_8)\n            CALL dbcsr_get_data(source_area, s_data_d)\n            SELECT CASE (target_area%d%data_type)\n            CASE (dbcsr_type_real_8)\n               CALL dbcsr_get_data(target_area, t_data_d)\n               t_data_d(1:n) = s_data_d(1:n)\n            CASE (dbcsr_type_real_4)\n               CALL dbcsr_get_data(target_area, t_data_r)\n               t_data_r(1:n) = REAL(s_data_d(1:n), KIND=real_4)\n            CASE (dbcsr_type_complex_8)\n               CALL dbcsr_get_data(target_area, t_data_z)\n               IF (noimult) THEN\n                  t_data_z(1:n) = CMPLX(s_data_d(1:n), KIND=real_8)\n               ELSE\n                  t_data_z(1:n) = CMPLX(0.0, s_data_d(1:n), KIND=real_8)\n               END IF\n            CASE (dbcsr_type_complex_4)\n               CALL dbcsr_get_data(target_area, t_data_c)\n               IF (noimult) THEN\n                  t_data_c(1:n) = CMPLX(s_data_d(1:n), KIND=real_4)\n               ELSE\n                  t_data_c(1:n) = CMPLX(0.0, s_data_d(1:n), KIND=real_4)\n               END IF\n            CASE default\n               DBCSR_ABORT(\"Invalid data type\")\n            END SELECT\n         CASE (dbcsr_type_real_4)\n            CALL dbcsr_get_data(source_area, s_data_r)\n            SELECT CASE (target_area%d%data_type)\n            CASE (dbcsr_type_real_8)\n               CALL dbcsr_get_data(target_area, t_data_d)\n               t_data_d(1:n) = REAL(s_data_r(1:n), KIND=real_8)\n            CASE (dbcsr_type_real_4)\n               CALL dbcsr_get_data(target_area, t_data_r)\n               t_data_r(1:n) = s_data_r(1:n)\n            CASE (dbcsr_type_complex_8)\n               CALL dbcsr_get_data(target_area, t_data_z)\n               IF (noimult) THEN\n                  t_data_z(1:n) = CMPLX(s_data_r(1:n), KIND=real_8)\n               ELSE\n                  t_data_z(1:n) = CMPLX(0.0, s_data_r(1:n), KIND=real_8)\n               END IF\n            CASE (dbcsr_type_complex_4)\n               CALL dbcsr_get_data(target_area, t_data_c)\n               IF (noimult) THEN\n                  t_data_c(1:n) = CMPLX(s_data_r(1:n), KIND=real_4)\n               ELSE\n                  t_data_c(1:n) = CMPLX(0.0, s_data_r(1:n), KIND=real_4)\n               END IF\n            CASE default\n               DBCSR_ABORT(\"Invalid data type\")\n            END SELECT\n         CASE (dbcsr_type_complex_8)\n            CALL dbcsr_get_data(source_area, s_data_z)\n            SELECT CASE (target_area%d%data_type)\n            CASE (dbcsr_type_real_8)\n               CALL dbcsr_get_data(target_area, t_data_d)\n               IF (keep_real) THEN\n                  t_data_d(1:n) = REAL(s_data_z(1:n), KIND=real_8)\n               ELSE\n                  t_data_d(1:n) = AIMAG(s_data_z(1:n))\n               END IF\n            CASE (dbcsr_type_real_4)\n               CALL dbcsr_get_data(target_area, t_data_r)\n               IF (keep_real) THEN\n                  t_data_r(1:n) = REAL(s_data_z(1:n), KIND=real_4)\n               ELSE\n                  t_data_r(1:n) = REAL(AIMAG(s_data_z(1:n)), KIND=real_4)\n               END IF\n            CASE (dbcsr_type_complex_8)\n               CALL dbcsr_get_data(target_area, t_data_z)\n               t_data_z(1:n) = s_data_z(1:n)\n            CASE (dbcsr_type_complex_4)\n               CALL dbcsr_get_data(target_area, t_data_c)\n               t_data_c(1:n) = CMPLX(s_data_z(1:n), KIND=real_4)\n            CASE default\n               DBCSR_ABORT(\"Invalid data type\")\n            END SELECT\n         CASE (dbcsr_type_complex_4)\n            CALL dbcsr_get_data(source_area, s_data_c)\n            SELECT CASE (target_area%d%data_type)\n            CASE (dbcsr_type_real_8)\n               CALL dbcsr_get_data(target_area, t_data_d)\n               IF (keep_real) THEN\n                  t_data_d(1:n) = REAL(s_data_c(1:n), KIND=real_8)\n               ELSE\n                  t_data_d(1:n) = REAL(AIMAG(s_data_c(1:n)), KIND=real_8)\n               END IF\n            CASE (dbcsr_type_real_4)\n               CALL dbcsr_get_data(target_area, t_data_r)\n               IF (keep_real) THEN\n                  t_data_r(1:n) = REAL(s_data_c(1:n), KIND=real_4)\n               ELSE\n                  t_data_r(1:n) = AIMAG(s_data_c(1:n))\n               END IF\n            CASE (dbcsr_type_complex_8)\n               CALL dbcsr_get_data(target_area, t_data_z)\n               t_data_z(1:n) = CMPLX(s_data_c(1:n), KIND=real_8)\n            CASE (dbcsr_type_complex_4)\n               CALL dbcsr_get_data(target_area, t_data_c)\n               t_data_c(1:n) = s_data_c(1:n)\n            CASE default\n               DBCSR_ABORT(\"Invalid data type\")\n            END SELECT\n         CASE default\n            DBCSR_ABORT(\"Invalid data type\")\n         END SELECT\n      END IF\n   END SUBROUTINE dbcsr_data_convert\n\n   SUBROUTINE dbcsr_copy_sort_data(blk_p, old_blk_p, row_p, col_i, rbs, cbs, &\n                                   dst, src, mark_transposed, transpose_blocks)\n      !! Sorts the data in a matrix so that the data blocks follow\n      !! sequentially and does various transposing options.\n      !! As opposed to dbcsr_sort_data, this routine calculates block sizes\n\n      INTEGER, DIMENSION(:), INTENT(INOUT)               :: blk_p\n         !! re-arranged block pointers reflecting the new data order\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: old_blk_p, row_p, col_i, rbs, cbs\n         !! current block pointers\n         !! index\n         !! index\n         !! sizes of the blocked rows\n         !! sizes of the blocked columns\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dst\n         !! sorted data\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: src\n         !! existing unordered data\n      LOGICAL, INTENT(IN), OPTIONAL                      :: mark_transposed, transpose_blocks\n         !! mark data as transposed by negating the blk_p index entries\n         !! transpose data blocks\n\n      INTEGER                                            :: blk, col_size, nblks, nrows, nze, &\n                                                            nze_prev, row, row_size\n      LOGICAL                                            :: mark, trb\n\n!   ---------------------------------------------------------------------------\n! Analyze parameters\n\n      mark = .FALSE.\n      IF (PRESENT(mark_transposed)) mark = mark_transposed\n      trb = .FALSE.\n      IF (PRESENT(transpose_blocks)) trb = transpose_blocks\n      !\n      nblks = SIZE(old_blk_p)\n      nrows = SIZE(row_p) - 1\n      IF (SIZE(blk_p) < nblks) &\n         DBCSR_ABORT('Destination blk_p too small.')\n      IF (nblks .GE. 1) &\n         blk_p(1) = SGN(1, old_blk_p(1), mark)\n      nze_prev = 0\n      DO row = 1, nrows\n         row_size = rbs(row)\n         DO blk = row_p(row) + 1, row_p(row + 1)\n            IF (old_blk_p(blk) .NE. 0) THEN\n               col_size = cbs(col_i(blk))\n               nze = row_size*col_size\n               IF (blk .GT. 1) THEN\n                  blk_p(blk) = SGN(ABS(blk_p(blk - 1)) + nze_prev, old_blk_p(blk), &\n                                   mark)\n               END IF\n               IF (ABS(blk_p(blk)) + nze - 1 > dbcsr_data_get_size(dst)) &\n                  DBCSR_ABORT('Destination data space is too small.')\n               IF (.NOT. trb) THEN\n                  CALL dbcsr_data_copy(dst=dst, dst_lb=(/ABS(blk_p(blk))/), &\n                                       dst_sizes=(/nze/), &\n                                       src=src, src_lb=(/ABS(old_blk_p(blk))/), &\n                                       src_sizes=(/nze/))\n                  !CALL dbcsr_data_set (dst, ABS(blk_p(blk)), nze,&\n                  !     src, source_lb=ABS(old_blk_p(blk)))\n               ELSE\n                  CALL dbcsr_block_transpose(dst, src, &\n                                             col_size, row_size, &\n                                             lb=ABS(blk_p(blk)), source_lb=ABS(old_blk_p(blk)))\n               END IF\n               nze_prev = nze\n            END IF ! blk exists\n         END DO ! blk\n      END DO ! row\n   END SUBROUTINE dbcsr_copy_sort_data\n\n   SUBROUTINE dbcsr_sort_data(blk_p, old_blk_p, sizes, dsts, src, &\n                              srcs, old_blk_d)\n      !! Sorts the data in a matrix so that the data blocks follow\n      !! sequentially.\n\n      INTEGER, DIMENSION(:), INTENT(INOUT)               :: blk_p\n         !! re-arranged block pointers reflecting the new data order\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: old_blk_p, sizes\n         !! current block pointers\n         !! sizes of the data blocks\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dsts\n         !! sorted data\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: src\n         !! existing unordered data\n      TYPE(dbcsr_data_obj), DIMENSION(:), INTENT(IN), &\n         OPTIONAL                                        :: srcs\n         !! multiple source areas\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: old_blk_d\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_sort_data'\n\n      INTEGER                                            :: handle, i, nblks\n      LOGICAL                                            :: multidata\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      multidata = PRESENT(srcs) .AND. PRESENT(old_blk_d)\n      nblks = SIZE(old_blk_p)\n      IF (nblks .GT. 0) THEN\n!$OMP        BARRIER\n!$OMP        MASTER\n         blk_p(1) = SIGN(1, old_blk_p(1))\n         DO i = 2, nblks\n            blk_p(i) = SIGN(ABS(blk_p(i - 1)) + sizes(i - 1), old_blk_p(i))\n         END DO\n         CALL dbcsr_data_set_size_referenced(dsts, &\n                                             ABS(blk_p(nblks)) + sizes(nblks) - 1)\n!$OMP        END MASTER\n!$OMP        BARRIER\n!$OMP        DO\n         DO i = 1, nblks\n            IF (old_blk_p(i) .NE. 0) THEN\n               IF (.NOT. multidata) THEN\n                  CALL dbcsr_data_set(dsts, &\n                                      ABS(blk_p(i)), sizes(i), &\n                                      src, source_lb=ABS(old_blk_p(i)))\n                  !dst(ABS(blk_p(i)):ABS(blk_p(i))+sizes(i)-1) =&\n                  !     src(ABS(old_blk_p(i)):ABS(old_blk_p(i))+sizes(i)-1)\n               ELSE\n                  CALL dbcsr_data_set(dsts, &\n                                      ABS(blk_p(i)), sizes(i), &\n                                      srcs(old_blk_d(i)), source_lb=ABS(old_blk_p(i)))\n                  !dst(ABS(blk_p(i)):ABS(blk_p(i))+sizes(i)-1) =&\n                  !     srcs(old_blk_d(i))%d&\n                  !     %r_dp(ABS(old_blk_p(i)):ABS(old_blk_p(i))+sizes(i)-1)\n               END IF\n            END IF\n         END DO\n!$OMP        END DO NOWAIT\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_sort_data\n\nEND MODULE dbcsr_data_operations\n"
  },
  {
    "path": "src/data/dbcsr_data_types.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_data_types\n   !! Types related to DBCSR data area\n   USE dbcsr_acc_devmem, ONLY: acc_devmem_type\n   USE dbcsr_acc_event, ONLY: acc_event_type\n   USE dbcsr_acc_stream, ONLY: acc_stream_type\n   USE dbcsr_kinds, ONLY: &\n      dp, int_4, int_4_size, int_8, int_8_size, real_4, real_4_size, real_8, real_8_size\n\n!$ USE OMP_LIB, ONLY: omp_lock_kind\n\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_data_types'\n\n   PUBLIC :: dbcsr_data_obj, dbcsr_data_area_type, dbcsr_scalar_type\n   PUBLIC :: dbcsr_datatype_sizeof\n   PUBLIC :: dbcsr_mempool_type, &\n             dbcsr_mempool_entry_type, &\n             dbcsr_memtype_type, &\n             dbcsr_memtype_default\n   PUBLIC :: dbcsr_type_real_4, dbcsr_type_real_8, &\n             dbcsr_type_complex_4, dbcsr_type_complex_8, &\n             dbcsr_type_real_default, dbcsr_type_complex_default, &\n             dbcsr_type_real_4_2d, dbcsr_type_real_8_2d, &\n             dbcsr_type_complex_4_2d, dbcsr_type_complex_8_2d, &\n             dbcsr_type_int_4, dbcsr_type_int_8\n\n   TYPE dbcsr_scalar_type\n      !! Stores a scalar in any of the supported data types.\n      !!\n      !! Reasoning\n      !! Easier routine interfaces\n\n      REAL(KIND=real_4)    :: r_sp = -1.0_real_4\n         !! stores real values in single precision\n      REAL(KIND=real_8)    :: r_dp = -1.0_real_8\n         !! stores real values in double precision\n      COMPLEX(KIND=real_4) :: c_sp = (-1.0_real_4, -1.0_real_4)\n         !! stores complex values in single precision\n      COMPLEX(KIND=real_8) :: c_dp = (-1.0_real_8, -1.0_real_8)\n         !! stores complex values in double precision\n      INTEGER              :: data_type = -1\n         !! which of the data types is actually used\n   END TYPE dbcsr_scalar_type\n\n   TYPE dbcsr_data_obj\n      TYPE(dbcsr_data_area_type), POINTER           :: d => Null()\n   END TYPE dbcsr_data_obj\n\n   TYPE dbcsr_mempool_type\n      !! Memory related types\n      TYPE(dbcsr_mempool_entry_type), POINTER :: root => Null()\n      INTEGER                                 :: capacity = 1\n!$    INTEGER(KIND=omp_lock_kind)          :: lock = -1_omp_lock_kind\n   END TYPE dbcsr_mempool_type\n\n   TYPE dbcsr_mempool_entry_type\n      TYPE(dbcsr_data_obj)                    :: area = dbcsr_data_obj()\n      TYPE(dbcsr_mempool_entry_type), POINTER :: next => Null()\n   END TYPE dbcsr_mempool_entry_type\n\n   TYPE dbcsr_memtype_type\n      LOGICAL                           :: mpi = .FALSE.\n      LOGICAL                           :: acc_hostalloc = .FALSE.\n      LOGICAL                           :: acc_devalloc = .FALSE.\n      TYPE(acc_stream_type)             :: acc_stream = acc_stream_type()\n      TYPE(dbcsr_mempool_type), POINTER :: pool => Null()\n      REAL(KIND=dp)                     :: oversize_factor = 1.0\n   END TYPE dbcsr_memtype_type\n\n   !providing pool=Null() explicitly to circumvent bug in ifort 12.1\n   TYPE(dbcsr_memtype_type), PARAMETER :: dbcsr_memtype_default = dbcsr_memtype_type(pool=Null())\n\n   TYPE dbcsr_data_area_type\n      !! Stores actual data\n\n      INTEGER(KIND=int_4), DIMENSION(:), POINTER, CONTIGUOUS :: i4 => Null()\n      INTEGER(KIND=int_8), DIMENSION(:), POINTER, CONTIGUOUS :: i8 => Null()\n      REAL(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: r_sp => Null()\n         !! stores real values in single precision\n      REAL(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: r_dp => Null()\n         !! stores real values in double precision\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER, CONTIGUOUS :: c_sp => Null()\n         !! stores complex values in single precision\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: c_dp => Null()\n         !! stores complex values in double precision\n      REAL(KIND=real_4), DIMENSION(:, :), POINTER    :: r2_sp => Null()\n      REAL(KIND=real_8), DIMENSION(:, :), POINTER    :: r2_dp => Null()\n      COMPLEX(KIND=real_4), DIMENSION(:, :), POINTER :: c2_sp => Null()\n      COMPLEX(KIND=real_8), DIMENSION(:, :), POINTER :: c2_dp => Null()\n      INTEGER                                  :: ref_size = -1\n         !! last data element in array actually referenced\n      INTEGER                                  :: refcount = -1\n         !! reference counter for current structure\n      INTEGER                                  :: id = -1\n      TYPE(dbcsr_memtype_type)                 :: memory_type = dbcsr_memtype_default\n         !! type of memory where data lives\n      INTEGER                                  :: data_type = -1\n         !! which of the data types is actually used\n      TYPE(acc_devmem_type)                    :: acc_devmem = acc_devmem_type()\n      TYPE(acc_event_type)                     :: acc_ready = acc_event_type()\n   END TYPE dbcsr_data_area_type\n\n   ! Type definitions:\n   ! * bit 0: always 1\n   ! * bit 1: single (0: 4) vs. double (1: 1)\n   ! * bit 2: real (0) vs. complex (1)\n   ! * bit 3: dimension (0: 1, 1: 2)\n   ! * bit 4: floating point (0) or integer type (1)\n   INTEGER, PARAMETER          :: dbcsr_type_real_4 = 1 !001\n   INTEGER, PARAMETER          :: dbcsr_type_real_8 = 3 !011\n   INTEGER, PARAMETER          :: dbcsr_type_complex_4 = 5 !101\n   INTEGER, PARAMETER          :: dbcsr_type_complex_8 = 7 !111\n\n   INTEGER, PARAMETER          :: dbcsr_type_real_4_2d = 9 !1001\n   INTEGER, PARAMETER          :: dbcsr_type_real_8_2d = 11 !1011\n   INTEGER, PARAMETER          :: dbcsr_type_complex_4_2d = 13 !1101\n   INTEGER, PARAMETER          :: dbcsr_type_complex_8_2d = 15 !1111\n\n   INTEGER, PARAMETER          :: dbcsr_type_int_4 = 17 !10001\n   INTEGER, PARAMETER          :: dbcsr_type_int_8 = 19 !10011\n\n   INTEGER, PARAMETER          :: dbcsr_type_real_default = dbcsr_type_real_8\n   INTEGER, PARAMETER          :: dbcsr_type_complex_default = dbcsr_type_complex_8\n\nCONTAINS\n\n   FUNCTION dbcsr_datatype_sizeof(datatype) RESULT(size)\n      !! Helper-routine, returns size of given datatype in terms of bytes.\n      INTEGER, INTENT(IN)                                :: datatype\n      INTEGER                                            :: size\n\n      size = 0\n      SELECT CASE (datatype)\n      CASE (dbcsr_type_int_4)\n         size = int_4_size\n      CASE (dbcsr_type_int_8)\n         size = int_8_size\n      CASE (dbcsr_type_real_4)\n         size = real_4_size\n      CASE (dbcsr_type_real_8)\n         size = real_8_size\n      CASE (dbcsr_type_complex_4)\n         size = (2*real_4_size)\n      CASE (dbcsr_type_complex_8)\n         size = (2*real_8_size)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n   END FUNCTION dbcsr_datatype_sizeof\n\nEND MODULE dbcsr_data_types\n"
  },
  {
    "path": "src/data/dbcsr_mem_methods.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mem_methods\n   !! DBCSR Memory Pool to avoid slow allocations of accelerator memory\n\n   USE dbcsr_acc_stream, ONLY: acc_stream_associated, &\n                               acc_stream_equal, &\n                               acc_stream_type\n   USE dbcsr_data_methods_low, ONLY: dbcsr_data_exists, &\n                                     dbcsr_data_get_size, &\n                                     internal_data_deallocate\n   USE dbcsr_data_types, ONLY: dbcsr_data_obj, &\n                               dbcsr_mempool_entry_type, &\n                               dbcsr_mempool_type, &\n                               dbcsr_memtype_type\n   USE dbcsr_kinds, ONLY: dp\n\n!$ USE OMP_LIB, ONLY: omp_set_lock, omp_unset_lock, omp_init_lock, omp_destroy_lock\n\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mem_methods'\n\n   PUBLIC :: dbcsr_mempool_get, dbcsr_mempool_add, dbcsr_mempool_limit_capacity\n   PUBLIC :: dbcsr_mempool_destruct, dbcsr_mempool_clear\n   PUBLIC :: dbcsr_memtype_setup, dbcsr_memtype_equal\n\nCONTAINS\n\n   SUBROUTINE dbcsr_mempool_create(pool)\n      !! Creates a memory pool.\n      TYPE(dbcsr_mempool_type), POINTER                  :: pool\n\n      IF (ASSOCIATED(pool)) DBCSR_ABORT(\"pool already allocated\")\n      ALLOCATE (pool)\n!$    CALL OMP_INIT_LOCK(pool%lock)\n      ALLOCATE (pool%root) !root always allocated, but unused. Simplifies looping.\n   END SUBROUTINE dbcsr_mempool_create\n\n   SUBROUTINE dbcsr_mempool_limit_capacity(pool, capacity)\n      !! Ensures that mempool has at least the given capacity.\n      TYPE(dbcsr_mempool_type), POINTER                  :: pool\n      INTEGER, INTENT(IN)                                :: capacity\n\n      IF (.NOT. ASSOCIATED(pool)) RETURN\n!$    CALL OMP_SET_LOCK(pool%lock)\n      pool%capacity = MAX(pool%capacity, capacity)\n!$    CALL OMP_UNSET_LOCK(pool%lock)\n\n   END SUBROUTINE dbcsr_mempool_limit_capacity\n\n   FUNCTION dbcsr_mempool_get(memtype, datatype, datasize) RESULT(res)\n      !! Picks a suitable data_area from mempool, returns Null() if none found.\n      TYPE(dbcsr_memtype_type)                           :: memtype\n      INTEGER, INTENT(IN)                                :: datatype, datasize\n      TYPE(dbcsr_data_obj)                               :: res\n\n      INTEGER                                            :: best_size, s\n      TYPE(dbcsr_mempool_entry_type), POINTER            :: best_cur, best_prev, cur, prev\n      TYPE(dbcsr_mempool_type), POINTER                  :: pool\n\n      pool => memtype%pool\n      IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT(\"pool not allocated\")\n\n!$    CALL OMP_SET_LOCK(pool%lock)\n      res%d => Null()\n      best_cur => Null()\n      best_prev => Null()\n      best_size = HUGE(1)\n      prev => Null()\n      cur => pool%root\n      DO WHILE (ASSOCIATED(cur%next))\n         prev => cur\n         cur => cur%next\n         s = dbcsr_data_get_size(cur%area)\n         IF (s < datasize) CYCLE\n         IF (.NOT. dbcsr_memtype_equal(cur%area%d%memory_type, memtype)) CYCLE\n         IF (cur%area%d%data_type /= datatype) CYCLE\n         !we found a match\n         IF (s < best_size) THEN\n            best_cur => cur\n            best_prev => prev\n            best_size = s\n         END IF\n      END DO\n\n      IF (ASSOCIATED(best_cur)) THEN\n         IF (best_cur%area%d%refcount /= 0) DBCSR_ABORT(\"refcount /= 0\")\n         best_cur%area%d%refcount = 1\n         best_prev%next => best_cur%next\n         res = best_cur%area\n         DEALLOCATE (best_cur)\n      END IF\n!$    CALL OMP_UNSET_LOCK(pool%lock)\n\n      IF (.NOT. ASSOCIATED(res%d)) &\n         CALL mempool_collect_garbage(pool)\n   END FUNCTION dbcsr_mempool_get\n\n   SUBROUTINE dbcsr_mempool_add(area)\n      !! Adds an unused (refcount==0) data_area to the pool.\n      TYPE(dbcsr_data_obj)                               :: area\n\n      TYPE(dbcsr_mempool_entry_type), POINTER            :: new_entry\n      TYPE(dbcsr_mempool_type), POINTER                  :: pool\n\n      pool => area%d%memory_type%pool\n      IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT(\"pool not allocated\")\n      IF (.NOT. dbcsr_data_exists(area)) DBCSR_ABORT(\"area not allocated\")\n      IF (area%d%refcount /= 0) DBCSR_ABORT(\"refcount /= 0\")\n\n      CALL mempool_collect_garbage(pool)\n\n!$    CALL OMP_SET_LOCK(pool%lock)\n      ALLOCATE (new_entry)\n      new_entry%area = area\n      new_entry%next => pool%root%next\n      pool%root%next => new_entry\n!$    CALL OMP_UNSET_LOCK(pool%lock)\n   END SUBROUTINE dbcsr_mempool_add\n\n   SUBROUTINE mempool_collect_garbage(pool)\n      !! Ensures that pool_size < max_size, e.g. that there is a free slot.\n      TYPE(dbcsr_mempool_type), POINTER                  :: pool\n\n      INTEGER                                            :: n\n      TYPE(dbcsr_mempool_entry_type), POINTER            :: cur, prev\n\n      IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT(\"pool not allocated\")\n\n!$    CALL OMP_SET_LOCK(pool%lock)\n      prev => pool%root\n      cur => pool%root%next\n      n = 0\n      DO WHILE (ASSOCIATED(cur))\n         n = n + 1\n         IF (n >= pool%capacity) THEN\n            CALL internal_data_deallocate(cur%area%d)\n            DEALLOCATE (cur%area%d)\n            prev%next => cur%next\n            DEALLOCATE (cur)\n            cur => prev%next\n         ELSE\n            prev => cur\n            cur => cur%next\n         END IF\n      END DO\n!$    CALL OMP_UNSET_LOCK(pool%lock)\n   END SUBROUTINE mempool_collect_garbage\n\n   SUBROUTINE dbcsr_mempool_destruct(pool)\n      !! Finalizes mempool, includes deallocation of all contained data_areas.\n      TYPE(dbcsr_mempool_type), POINTER                  :: pool\n\n      IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT(\"pool not allocated\")\n\n      CALL dbcsr_mempool_clear(pool)\n\n!$    CALL OMP_DESTROY_LOCK(pool%lock)\n      DEALLOCATE (pool%root)\n      DEALLOCATE (pool)\n\n   END SUBROUTINE dbcsr_mempool_destruct\n\n   SUBROUTINE dbcsr_mempool_clear(pool)\n      !! Deallocates all data_areas contained in given mempool.\n      TYPE(dbcsr_mempool_type), POINTER                  :: pool\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_mempool_clear'\n\n      INTEGER                                            :: handle\n      TYPE(dbcsr_mempool_entry_type), POINTER            :: cur, prev\n\n      IF (.NOT. ASSOCIATED(pool)) DBCSR_ABORT(\"pool not allocated\")\n\n      CALL timeset(routineN, handle)\n\n!$    CALL OMP_SET_LOCK(pool%lock)\n      cur => pool%root%next\n      DO WHILE (ASSOCIATED(cur))\n         CALL internal_data_deallocate(cur%area%d)\n         DEALLOCATE (cur%area%d)\n         prev => cur\n         cur => cur%next\n         DEALLOCATE (prev)\n      END DO\n      NULLIFY (pool%root%next)\n!$    CALL OMP_UNSET_LOCK(pool%lock)\n\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_mempool_clear\n\n   SUBROUTINE dbcsr_memtype_setup(memtype, acc_hostalloc, acc_devalloc, mpi, &\n      !! Ensures that given memtype has requested settings.\n                                  acc_stream, oversize_factor, has_pool)\n      TYPE(dbcsr_memtype_type), INTENT(INOUT)            :: memtype\n      LOGICAL, INTENT(IN), OPTIONAL                      :: acc_hostalloc, acc_devalloc, mpi\n      TYPE(acc_stream_type), OPTIONAL                    :: acc_stream\n      REAL(KIND=dp), OPTIONAL                            :: oversize_factor\n      LOGICAL, INTENT(IN), OPTIONAL                      :: has_pool\n\n      LOGICAL                                            :: is_ok, my_has_pool\n      TYPE(dbcsr_memtype_type)                           :: aim\n\n! variable aim is initialized with default values from type definition\n\n      my_has_pool = .FALSE.\n      IF (PRESENT(has_pool)) my_has_pool = has_pool\n      IF (PRESENT(acc_hostalloc)) aim%acc_hostalloc = acc_hostalloc\n      IF (PRESENT(acc_devalloc)) aim%acc_devalloc = acc_devalloc\n      IF (PRESENT(mpi)) aim%mpi = mpi\n      IF (PRESENT(acc_stream)) aim%acc_stream = acc_stream\n      IF (PRESENT(oversize_factor)) aim%oversize_factor = oversize_factor\n\n      IF (.NOT. aim%acc_devalloc .EQV. acc_stream_associated(aim%acc_stream)) &\n         DBCSR_ABORT(\"acc_stream missing\")\n\n      is_ok = .TRUE.\n      is_ok = is_ok .AND. (memtype%acc_hostalloc .EQV. aim%acc_hostalloc)\n      is_ok = is_ok .AND. (memtype%acc_devalloc .EQV. aim%acc_devalloc)\n      is_ok = is_ok .AND. (memtype%mpi .EQV. aim%mpi)\n      is_ok = is_ok .AND. acc_stream_equal(memtype%acc_stream, aim%acc_stream)\n      is_ok = is_ok .AND. (memtype%oversize_factor == aim%oversize_factor)\n      is_ok = is_ok .AND. (ASSOCIATED(memtype%pool) .EQV. my_has_pool)\n\n      IF (.NOT. is_ok) THEN\n         IF (ASSOCIATED(memtype%pool)) &\n            CALL dbcsr_mempool_destruct(memtype%pool)\n\n         memtype%acc_hostalloc = aim%acc_hostalloc\n         memtype%acc_devalloc = aim%acc_devalloc\n         memtype%mpi = aim%mpi\n         memtype%acc_stream = aim%acc_stream\n         memtype%oversize_factor = aim%oversize_factor\n         IF (my_has_pool) &\n            CALL dbcsr_mempool_create(memtype%pool)\n      END IF\n   END SUBROUTINE dbcsr_memtype_setup\n\n   FUNCTION dbcsr_memtype_equal(mt1, mt2) RESULT(res)\n      !! Test if two memtypes are equal\n      TYPE(dbcsr_memtype_type), INTENT(in)               :: mt1, mt2\n      LOGICAL                                            :: res\n\n      res = (mt1%mpi .EQV. mt2%mpi) .AND. &\n            (mt1%acc_hostalloc .EQV. mt2%acc_hostalloc) .AND. &\n            (mt1%acc_devalloc .EQV. mt2%acc_devalloc) .AND. &\n            (ASSOCIATED(mt1%pool) .EQV. ASSOCIATED(mt2%pool)) .AND. &\n            (.NOT. ASSOCIATED(mt1%pool) .OR. ASSOCIATED(mt1%pool, mt2%pool))\n   END FUNCTION dbcsr_memtype_equal\n\nEND MODULE dbcsr_mem_methods\n"
  },
  {
    "path": "src/data/dbcsr_ptr_util.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_ptr_util\n   !! DBCSR pointer and unmanaged array utilities\n   USE dbcsr_acc_hostmem, ONLY: acc_hostmem_allocate, &\n                                acc_hostmem_deallocate\n   USE dbcsr_config, ONLY: dbcsr_cfg\n   USE dbcsr_data_types, ONLY: dbcsr_data_obj, &\n                               dbcsr_memtype_default, &\n                               dbcsr_memtype_type, &\n                               dbcsr_type_complex_4, &\n                               dbcsr_type_complex_8, &\n                               dbcsr_type_real_4, &\n                               dbcsr_type_real_8\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_4, &\n                          int_8, &\n                          real_4, &\n                          real_8\n   USE dbcsr_mpiwrap, ONLY: mp_allocate, &\n                            mp_deallocate\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_ptr_util'\n\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   PUBLIC :: ensure_array_size\n   PUBLIC :: memory_allocate, memory_deallocate\n   PUBLIC :: memory_zero\n   PUBLIC :: pointer_view\n   PUBLIC :: pointer_rank_remap2\n   PUBLIC :: memory_copy\n\n   INTERFACE ensure_array_size\n      MODULE PROCEDURE ensure_array_size_i, ensure_array_size_l\n      MODULE PROCEDURE ensure_array_size_s, ensure_array_size_d, &\n         ensure_array_size_c, ensure_array_size_z\n   END INTERFACE\n\n   INTERFACE pointer_view\n      MODULE PROCEDURE pointer_view_s, pointer_view_d, &\n         pointer_view_c, pointer_view_z\n      MODULE PROCEDURE pointer_view_i, pointer_view_l\n      MODULE PROCEDURE pointer_view_a\n   END INTERFACE\n\n   INTERFACE pointer_rank_remap2\n      MODULE PROCEDURE pointer_s_rank_remap2, pointer_d_rank_remap2, &\n         pointer_c_rank_remap2, pointer_z_rank_remap2, &\n         pointer_l_rank_remap2, pointer_i_rank_remap2\n   END INTERFACE\n\n   INTERFACE memory_copy\n      MODULE PROCEDURE mem_copy_i, mem_copy_l, &\n         mem_copy_s, mem_copy_d, &\n         mem_copy_c, mem_copy_z\n   END INTERFACE\n\n   INTERFACE memory_zero\n      MODULE PROCEDURE mem_zero_i, mem_zero_l\n      MODULE PROCEDURE mem_zero_s, mem_zero_d, mem_zero_c, mem_zero_z\n   END INTERFACE\n\n   INTERFACE memory_allocate\n      MODULE PROCEDURE mem_alloc_i, mem_alloc_l, mem_alloc_s, mem_alloc_d, mem_alloc_c, mem_alloc_z\n      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\n   END INTERFACE\n\n   INTERFACE memory_deallocate\n      MODULE PROCEDURE mem_dealloc_i, mem_dealloc_l, mem_dealloc_s, mem_dealloc_d, mem_dealloc_c, mem_dealloc_z\n      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\n   END INTERFACE\n\nCONTAINS\n\n   FUNCTION pointer_view_a(new_area, area, offset, len) RESULT(narea2)\n      !! Repoints a pointer into a part of a data area\n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: new_area\n         !! repoints this encapsulated pointer\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: area\n         !! area to point into\n      INTEGER, INTENT(IN)                                :: offset\n         !! point to this offset in area\n      INTEGER, INTENT(IN), OPTIONAL                      :: len\n         !! length of data area to point to\n      TYPE(dbcsr_data_obj)                               :: narea2\n         !! copy of new_area\n\n      IF (area%d%data_type /= new_area%d%data_type) &\n         DBCSR_ABORT(\"Incompatible data types.\")\n      IF (PRESENT(len)) THEN\n         SELECT CASE (area%d%data_type)\n         CASE (dbcsr_type_real_4)\n            new_area%d%r_sp => area%d%r_sp(offset:offset + len - 1)\n         CASE (dbcsr_type_real_8)\n            new_area%d%r_dp => area%d%r_dp(offset:offset + len - 1)\n         CASE (dbcsr_type_complex_4)\n            new_area%d%c_sp => area%d%c_sp(offset:offset + len - 1)\n         CASE (dbcsr_type_complex_8)\n            new_area%d%c_dp => area%d%c_dp(offset:offset + len - 1)\n         CASE default\n            DBCSR_ABORT(\"Invalid data type.\")\n         END SELECT\n      ELSE\n         SELECT CASE (area%d%data_type)\n         CASE (dbcsr_type_real_4)\n            new_area%d%r_sp => area%d%r_sp(offset:)\n         CASE (dbcsr_type_real_8)\n            new_area%d%r_dp => area%d%r_dp(offset:)\n         CASE (dbcsr_type_complex_4)\n            new_area%d%c_sp => area%d%c_sp(offset:)\n         CASE (dbcsr_type_complex_8)\n            new_area%d%c_dp => area%d%c_dp(offset:)\n         CASE default\n            DBCSR_ABORT(\"Invalid data type.\")\n         END SELECT\n      END IF\n      narea2 = new_area\n   END FUNCTION pointer_view_a\n\n   #:include 'dbcsr.fypp'\n   #:for nametype1, type1, zero1 in inst_params_all\n      FUNCTION pointer_view_${nametype1}$ (original, lb, ub) RESULT(view)\n     !! Returns a pointer with different bounds.\n\n         ${type1}$, DIMENSION(:), POINTER :: original, view\n        !! original data pointer\n        !! new pointer\n         INTEGER, INTENT(IN)                  :: lb, ub\n        !! lower and upper bound for the new pointer view\n        !! lower and upper bound for the new pointer view\n         view => original(lb:ub)\n      END FUNCTION pointer_view_${nametype1}$\n\n      SUBROUTINE ensure_array_size_${nametype1}$ (array, array_resize, lb, ub, factor, &\n                                                  nocopy, memory_type, zero_pad)\n     !! Ensures that an array is appropriately large.\n\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS     :: array\n        !! array to verify and possibly resize\n         ${type1}$, DIMENSION(:), POINTER, OPTIONAL       :: array_resize\n         INTEGER, INTENT(IN), OPTIONAL                  :: lb\n        !! desired array lower bound\n         INTEGER, INTENT(IN)                            :: ub\n        !! desired array upper bound\n         REAL(KIND=dp), INTENT(IN), OPTIONAL            :: factor\n        !! factor by which to exaggerate enlargements\n         LOGICAL, INTENT(IN), OPTIONAL                  :: nocopy, zero_pad\n        !! copy array on enlargement; default is to copy\n        !! zero new allocations; default is to write nothing\n         TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL :: memory_type\n        !! use special memory\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'ensure_array_size_${nametype1}$', &\n                                        routineP = moduleN//':'//routineN\n\n         INTEGER                                  :: lb_new, lb_orig, &\n                                                     ub_new, ub_orig, old_size, &\n                                                     size_increase\n         TYPE(dbcsr_memtype_type)                 :: mem_type\n         LOGICAL                                  :: dbg, docopy, &\n                                                     pad\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS    :: newarray\n\n!   ---------------------------------------------------------------------------\n         !CALL timeset(routineN, error_handler)\n         dbg = .FALSE.\n\n         IF (PRESENT(array_resize)) NULLIFY (array_resize)\n\n         IF (PRESENT(nocopy)) THEN\n            docopy = .NOT. nocopy\n         ELSE\n            docopy = .TRUE.\n         END IF\n         IF (PRESENT(memory_type)) THEN\n            mem_type = memory_type\n         ELSE\n            mem_type = dbcsr_memtype_default\n         END IF\n         lb_new = 1\n         IF (PRESENT(lb)) lb_new = lb\n         pad = .FALSE.\n         IF (PRESENT(zero_pad)) pad = zero_pad\n         ! Creates a new array if it doesn't yet exist.\n         IF (.NOT. ASSOCIATED(array)) THEN\n            IF (lb_new /= 1) &\n               DBCSR_ABORT(\"Arrays must start at 1\")\n            CALL mem_alloc_${nametype1}$ (array, ub, mem_type=mem_type)\n            IF (pad .AND. ub .GT. 0) CALL mem_zero_${nametype1}$ (array, ub)\n            !CALL timestop(error_handler)\n            RETURN\n         END IF\n         lb_orig = LBOUND(array, 1)\n         ub_orig = UBOUND(array, 1)\n         old_size = ub_orig - lb_orig + 1\n         ! The existing array is big enough.\n         IF (lb_orig .LE. lb_new .AND. ub_orig .GE. ub) THEN\n            !CALL timestop(error_handler)\n            RETURN\n         END IF\n         ! A reallocation must be performed\n         IF (dbg) WRITE (*, *) routineP//' Current bounds are', lb_orig, ':', ub_orig, &\n            '; special?' !,mem_type\n         !CALL timeset(routineN,timing_handle)\n         IF (lb_orig .GT. lb_new) THEN\n            IF (PRESENT(factor)) THEN\n               size_increase = lb_orig - lb_new\n               size_increase = MAX(NINT(size_increase*factor), &\n                                   NINT(old_size*(factor - 1)), 0)\n               lb_new = MIN(lb_orig, lb_new - size_increase)\n            ELSE\n               lb_new = lb_orig\n            END IF\n         END IF\n         IF (ub_orig .LT. ub) THEN\n            IF (PRESENT(factor)) THEN\n               size_increase = ub - ub_orig\n               size_increase = MAX(NINT(size_increase*factor), &\n                                   NINT(old_size*(factor - 1)), 0)\n               ub_new = MAX(ub_orig, ub + size_increase)\n            ELSE\n               ub_new = ub\n            END IF\n         ELSE\n            ub_new = ub\n         END IF\n         IF (dbg) WRITE (*, *) routineP//' Resizing to bounds', lb_new, ':', ub_new\n         !\n         ! Deallocates the old array if it's not needed to copy the old data.\n         IF (.NOT. docopy) THEN\n            IF (PRESENT(array_resize)) THEN\n               array_resize => array\n               NULLIFY (array)\n            ELSE\n               CALL mem_dealloc_${nametype1}$ (array, mem_type=mem_type)\n            END IF\n         END IF\n         !\n         ! Allocates the new array\n         IF (lb_new /= 1) &\n            DBCSR_ABORT(\"Arrays must start at 1\")\n         CALL mem_alloc_${nametype1}$ (newarray, ub_new - lb_new + 1, mem_type)\n         !\n         ! Now copy and/or zero pad.\n         IF (docopy) THEN\n            IF (dbg .AND. (lb_new .GT. lb_orig .OR. ub_new .LT. ub_orig)) &\n               DBCSR_ABORT(\"Old extent exceeds the new one.\")\n            IF (ub_orig - lb_orig + 1 .gt. 0) THEN\n               !newarray(lb_orig:ub_orig) = array(lb_orig:ub_orig)\n               CALL mem_copy_${nametype1}$ (newarray(lb_orig:ub_orig), &\n                                            array(lb_orig:ub_orig), ub_orig - lb_orig + 1)\n            END IF\n            IF (pad) THEN\n               !newarray(lb_new:lb_orig-1) = 0\n               CALL mem_zero_${nametype1}$ (newarray(lb_new:lb_orig - 1), (lb_orig - 1) - lb_new + 1)\n               !newarray(ub_orig+1:ub_new) = 0\n               CALL mem_zero_${nametype1}$ (newarray(ub_orig + 1:ub_new), ub_new - (ub_orig + 1) + 1)\n            END IF\n            IF (PRESENT(array_resize)) THEN\n               array_resize => array\n               NULLIFY (array)\n            ELSE\n               CALL mem_dealloc_${nametype1}$ (array, mem_type=mem_type)\n            END IF\n         ELSEIF (pad) THEN\n            !newarray(:) = ${zero1}$\n            CALL mem_zero_${nametype1}$ (newarray, SIZE(newarray))\n         END IF\n         array => newarray\n         IF (dbg) WRITE (*, *) routineP//' New array size', SIZE(array)\n         !CALL timestop(error_handler)\n      END SUBROUTINE ensure_array_size_${nametype1}$\n\n      SUBROUTINE mem_copy_${nametype1}$ (dst, src, n)\n     !! Copies memory area\n\n         INTEGER, INTENT(IN) :: n\n        !! length of copy\n         ${type1}$, DIMENSION(1:n), INTENT(OUT) :: dst\n        !! destination memory\n         ${type1}$, DIMENSION(1:n), INTENT(IN)  :: src\n        !! source memory\n         dst(:) = src(:)\n      END SUBROUTINE mem_copy_${nametype1}$\n\n      SUBROUTINE mem_zero_${nametype1}$ (dst, n)\n     !! Zeros memory area\n\n         INTEGER, INTENT(IN) :: n\n        !! length of elements to zero\n         ${type1}$, DIMENSION(1:n), INTENT(OUT) :: dst\n        !! destination memory\n         dst(:) = ${zero1}$\n      END SUBROUTINE mem_zero_${nametype1}$\n\n      SUBROUTINE mem_alloc_${nametype1}$ (mem, n, mem_type)\n     !! Allocates memory\n\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: mem\n        !! memory to allocate\n         INTEGER, INTENT(IN)                   :: n\n        !! length of elements to allocate\n         TYPE(dbcsr_memtype_type), INTENT(IN)  :: mem_type\n        !! memory type\n         CHARACTER(len=*), PARAMETER :: routineN = 'mem_alloc_${nametype1}$'\n         INTEGER                               :: error_handle\n!   ---------------------------------------------------------------------------\n\n         IF (careful_mod) &\n            CALL timeset(routineN, error_handle)\n\n         IF (mem_type%acc_hostalloc .AND. n > 1) THEN\n            CALL acc_hostmem_allocate(mem, n, mem_type%acc_stream)\n         ELSE IF (mem_type%mpi .AND. dbcsr_cfg%use_mpi_allocator%val) THEN\n            CALL mp_allocate(mem, n)\n         ELSE\n            ALLOCATE (mem(n))\n         END IF\n\n         IF (careful_mod) &\n            CALL timestop(error_handle)\n      END SUBROUTINE mem_alloc_${nametype1}$\n\n      SUBROUTINE mem_alloc_${nametype1}$_2d(mem, sizes, mem_type)\n     !! Allocates memory\n\n         ${type1}$, DIMENSION(:, :), POINTER      :: mem\n        !! memory to allocate\n         INTEGER, DIMENSION(2), INTENT(IN)     :: sizes\n        !! length of elements to allocate\n         TYPE(dbcsr_memtype_type), INTENT(IN)  :: mem_type\n        !! memory type\n         CHARACTER(len=*), PARAMETER :: routineN = 'mem_alloc_${nametype1}$_2d'\n         INTEGER                               :: error_handle\n!   ---------------------------------------------------------------------------\n\n         IF (careful_mod) &\n            CALL timeset(routineN, error_handle)\n\n         IF (mem_type%acc_hostalloc) THEN\n            DBCSR_ABORT(\"Accelerator hostalloc not supported for 2D arrays.\")\n            !CALL acc_hostmem_allocate(mem, n, mem_type%acc_stream)\n         ELSE IF (mem_type%mpi) THEN\n            DBCSR_ABORT(\"MPI allocate not supported for 2D arrays.\")\n            !CALL mp_allocate(mem, n)\n         ELSE\n            ALLOCATE (mem(sizes(1), sizes(2)))\n         END IF\n\n         IF (careful_mod) &\n            CALL timestop(error_handle)\n      END SUBROUTINE mem_alloc_${nametype1}$_2d\n\n      SUBROUTINE mem_dealloc_${nametype1}$ (mem, mem_type)\n     !! Deallocates memory\n\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: mem\n        !! memory to allocate\n         TYPE(dbcsr_memtype_type), INTENT(IN)  :: mem_type\n        !! memory type\n         CHARACTER(len=*), PARAMETER :: routineN = 'mem_dealloc_${nametype1}$'\n         INTEGER                               :: error_handle\n!   ---------------------------------------------------------------------------\n\n         IF (careful_mod) &\n            CALL timeset(routineN, error_handle)\n\n         IF (mem_type%acc_hostalloc .AND. SIZE(mem) > 1) THEN\n            CALL acc_hostmem_deallocate(mem, mem_type%acc_stream)\n         ELSE IF (mem_type%mpi .AND. dbcsr_cfg%use_mpi_allocator%val) THEN\n            CALL mp_deallocate(mem)\n         ELSE\n            DEALLOCATE (mem)\n         END IF\n\n         IF (careful_mod) &\n            CALL timestop(error_handle)\n      END SUBROUTINE mem_dealloc_${nametype1}$\n\n      SUBROUTINE mem_dealloc_${nametype1}$_2d(mem, mem_type)\n     !! Deallocates memory\n\n         ${type1}$, DIMENSION(:, :), POINTER      :: mem\n        !! memory to allocate\n         TYPE(dbcsr_memtype_type), INTENT(IN)  :: mem_type\n        !! memory type\n         CHARACTER(len=*), PARAMETER :: routineN = 'mem_dealloc_${nametype1}$'\n         INTEGER                               :: error_handle\n!   ---------------------------------------------------------------------------\n\n         IF (careful_mod) &\n            CALL timeset(routineN, error_handle)\n\n         IF (mem_type%acc_hostalloc) THEN\n            DBCSR_ABORT(\"Accelerator host deallocate not supported for 2D arrays.\")\n            !CALL acc_hostmem_deallocate(mem, mem_type%acc_stream)\n         ELSE IF (mem_type%mpi) THEN\n            DBCSR_ABORT(\"MPI deallocate not supported for 2D arrays.\")\n            !CALL mp_deallocate(mem)\n         ELSE\n            DEALLOCATE (mem)\n         END IF\n\n         IF (careful_mod) &\n            CALL timestop(error_handle)\n      END SUBROUTINE mem_dealloc_${nametype1}$_2d\n\n      SUBROUTINE pointer_${nametype1}$_rank_remap2(r2p, d1, d2, r1p)\n     !! Sets a rank-2 pointer to rank-1 data using Fortran 2003 pointer\n     !! rank remapping.\n\n         INTEGER, INTENT(IN)                      :: d1, d2\n         ${type1}$, DIMENSION(:, :), &\n            POINTER                                :: r2p\n         ${type1}$, DIMENSION(:), &\n            POINTER                                :: r1p\n\n         r2p(1:d1, 1:d2) => r1p(1:d1*d2)\n      END SUBROUTINE pointer_${nametype1}$_rank_remap2\n   #:endfor\n\nEND MODULE dbcsr_ptr_util\n"
  },
  {
    "path": "src/dbcsr.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef DBCSR_H\n#define DBCSR_H\n\n#include <mpi.h>\n#include <stdbool.h> /* we need bool from C99 */\n#:include 'data/dbcsr.fypp'\n\nstatic const int dbcsr_type_real_4 = 1;\nstatic const int dbcsr_type_real_8 = 3;\nstatic const int dbcsr_type_complex_4 = 5;\nstatic const int dbcsr_type_complex_8 = 7;\n\nstatic const int dbcsr_filter_frobenius = 1;\n\nstatic const int dbcsr_norm_frobenius = 1;\nstatic const int dbcsr_norm_maxabsnorm = 2;\nstatic const int dbcsr_norm_gershgorin = 3;\nstatic const int dbcsr_norm_column = 4;\n\nstatic const int dbcsr_func_inverse = 0;\nstatic const int dbcsr_func_tanh = 1;\nstatic const int dbcsr_func_dtanh = 2;\nstatic const int dbcsr_func_ddtanh = 3;\nstatic const int dbcsr_func_artanh = 4;\nstatic const int dbcsr_func_inverse_special = 5;\nstatic const int dbcsr_func_spread_from_zero = 6;\nstatic const int dbcsr_func_sin = 7;\nstatic const int dbcsr_func_dsin = 8;\nstatic const int dbcsr_func_ddsin = 9;\nstatic const int dbcsr_func_asin = 10;\nstatic const int dbcsr_func_cos = 11;\nstatic const int dbcsr_func_truncate = 12;\n\nstatic const char dbcsr_type_invalid = '0';\nstatic const char dbcsr_type_no_symmetry = 'N';\nstatic const char dbcsr_type_symmetric = 'S';\nstatic const char dbcsr_type_antisymmetric = 'A';\nstatic const char dbcsr_type_hermitian = 'H';\nstatic const char dbcsr_type_antihermitian = 'K';\n\nstatic const char dbcsr_no_transpose = 'N';\nstatic const char dbcsr_transpose = 'T';\nstatic const char dbcsr_conjugate_transpose = 'C';\n\nstatic const char dbcsr_repl_none = 'N';\nstatic const char dbcsr_repl_row = 'R';\nstatic const char dbcsr_repl_col = 'C';\nstatic const char dbcsr_repl_full = 'A';\n\ntypedef void* dbcsr_matrix;\ntypedef void* dbcsr_distribution;\ntypedef void* dbcsr_iterator;\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n//----------------------------------------------------!\n//                    lib init/finalize               !\n//----------------------------------------------------!\n\nvoid c_dbcsr_clear_mempools();\n\nvoid c_dbcsr_mp_grid_setup(void* c_dist);\n\nvoid c_dbcsr_init_lib_internal(MPI_Fint* fcomm, int* io_unit);\n\ninline void c_dbcsr_init_lib(MPI_Comm comm, int* io_unit) {\n  MPI_Fint fcomm = MPI_Comm_c2f(comm);\n  c_dbcsr_init_lib_internal(&fcomm, io_unit);\n}\n\nvoid c_dbcsr_print_statistics(const bool* c_print_timers, const char* c_callgraph_filename);\n\nvoid c_dbcsr_finalize_lib(void);\n\n//-------------------------------------------------------!\n//                    create/release                     !\n//-------------------------------------------------------!\n\nvoid c_dbcsr_distribution_hold(const dbcsr_distribution c_dist);\n\nvoid c_dbcsr_distribution_new_aux(\n  dbcsr_distribution* dist, MPI_Fint* fcomm, int* row_dist, int row_dist_size, int* col_dist, int col_dist_size);\n\ninline void c_dbcsr_distribution_new(\n  dbcsr_distribution* dist, MPI_Comm comm, int* row_dist, int row_dist_size, int* col_dist, int col_dist_size) {\n  MPI_Fint fcomm = MPI_Comm_c2f(comm);\n  c_dbcsr_distribution_new_aux(dist, &fcomm, row_dist, row_dist_size, col_dist, col_dist_size);\n}\n\nvoid c_dbcsr_distribution_release(dbcsr_distribution* dist);\n\nvoid c_dbcsr_create_new(dbcsr_matrix* c_matrix, const char* c_name, const dbcsr_distribution, const char c_matrix_type,\n  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,\n  const int* c_data_type, const bool* c_reuse, const bool* c_reuse_arrays, const bool* c_mutable_work,\n  const char* c_replication_type);\n\nvoid c_dbcsr_create_template(dbcsr_matrix* c_matrix, const char* c_name, const dbcsr_matrix c_template,\n  const dbcsr_distribution c_dist, const char* c_matrix_type, const int* c_row_blk_size, const int c_row_size,\n  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,\n  const bool* c_mutable_work, const char* c_replication_type);\n\nvoid c_dbcsr_finalize(const dbcsr_matrix matrix);\n\nvoid c_dbcsr_release(dbcsr_matrix* matrix);\n\n//----------------------------------------------------------!\n//              primitive matrix operations                 !\n//----------------------------------------------------------!\n\n#:for n_inst, nametype, base, prec, ctype, extype in c_exparams\n\nvoid c_dbcsr_set_${nametype}$(dbcsr_matrix c_matrix, const ${extype}$ c_alpha);\n\nvoid c_dbcsr_add_${nametype}$(\n  dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, const ${extype}$ c_alpha_scalar, const ${extype}$ c_beta_scalar);\n\nvoid c_dbcsr_scale_${nametype}$(dbcsr_matrix c_matrix_a, const ${extype}$ c_alpha_scalar, const int* c_last_column);\n\nvoid c_dbcsr_scale_by_vector_${nametype}$(\n  const dbcsr_matrix c_matrix_a, const ${extype}$* c_alpha, const int c_alpha_size, const char* c_side);\n\nvoid c_dbcsr_multiply_${nametype}$(char c_transa, char c_transb, const ${extype}$ c_alpha, const dbcsr_matrix c_matrix_a,\n  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,\n  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,\n  const double* c_filter_eps, long long int* c_flop);\n\nvoid c_dbcsr_add_on_diag_${nametype}$(dbcsr_matrix c_matrix, const ${extype}$ c_alpha_scalar);\n\nvoid c_dbcsr_set_diag_${nametype}$(dbcsr_matrix c_matrix, const ${extype}$* c_diag, const int c_diag_size);\n\nvoid c_dbcsr_get_diag_${nametype}$(const dbcsr_matrix c_matrix, ${extype}$* c_diag, const int c_diag_size);\n\nvoid c_dbcsr_trace_${nametype}$(const dbcsr_matrix c_matrix_a, ${extype}$* c_trace);\n\nvoid c_dbcsr_dot_${nametype}$(const dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, ${extype}$* c_result);\n\nvoid c_dbcsr_get_block_p_${nametype}$(const dbcsr_matrix c_matrix, const int c_row, const int c_col, ${extype}$** c_block,\n  bool* c_tr, bool* c_found, int* c_row_size, int* c_col_size);\n\nvoid c_dbcsr_get_block_notrans_p_${nametype}$(const dbcsr_matrix c_matrix, const int c_row, const int c_col, ${extype}$** c_block,\n  bool* c_found, int* c_row_size, int* c_col_size);\n\n#:endfor\n\nvoid c_dbcsr_complete_redistribute(\n  const dbcsr_matrix c_matrix, dbcsr_matrix c_redist, const bool* c_keep_sparsity, const bool* c_summation);\n\nvoid c_dbcsr_filter(\n  dbcsr_matrix c_matrix, const double* c_eps, const int* c_method, const bool* c_use_absolute, const bool* c_filter_diag);\n\nvoid c_dbcsr_get_block_diag(const dbcsr_matrix c_matrix, void** c_diag);\n\nvoid c_dbcsr_transposed(dbcsr_matrix* c_transposed, dbcsr_matrix c_normal, const bool* c_shallow_data_copy,\n  const bool* c_transpose_data, const bool* c_transpose_distribution, const bool* c_use_distribution);\n\nvoid c_dbcsr_copy(dbcsr_matrix* c_matrix_b, const dbcsr_matrix c_matrix_a, const char* c_name, const bool* c_keep_sparsity,\n  const bool* c_shallow_data, const bool* c_keep_imaginary, const char* c_matrix_type);\n\nvoid c_dbcsr_copy_into_existing(dbcsr_matrix c_matrix_b, const dbcsr_matrix c_matrix_a);\n\nvoid c_dbcsr_desymmetrize(const dbcsr_matrix c_matrix_a, dbcsr_matrix* c_matrix_b);\n\nvoid c_dbcsr_clear(dbcsr_matrix* c_dbcsr_mat);\n\n//-----------------------------------------------------------------!\n//                   block_reservations                            !\n//-----------------------------------------------------------------!\n\nvoid c_dbcsr_reserve_diag_blocks(dbcsr_matrix c_matrix);\n\nvoid c_dbcsr_reserve_blocks(dbcsr_matrix c_matrix, const int* c_rows, const int* c_cols, const int c_size);\n\nvoid c_dbcsr_reserve_all_blocks(dbcsr_matrix c_matrix);\n\n#:for n_inst, nametype, base, prec, ctype, extype in c_exparams\n\nvoid c_dbcsr_reserve_block2d_${nametype}$(dbcsr_matrix c_matrix, const int c_row, const int c_col, const ${extype}$* c_block,\n  const int c_row_size, const int c_col_size, const bool* c_transposed, bool* c_existed);\n\n#:endfor\n\n//-------------------------------!\n//        iterator               !\n//-------------------------------!\n\nvoid c_dbcsr_iterator_stop(dbcsr_iterator* c_iterator);\n\nvoid c_dbcsr_iterator_start(dbcsr_iterator* c_iterator, const dbcsr_matrix c_matrix, const bool* c_shared, const bool* c_dynamic,\n  const bool* c_dynamic_byrows, const bool* c_contiguous_pointers, const bool* c_read_only);\n\nbool c_dbcsr_iterator_blocks_left(const dbcsr_iterator c_iterator);\n\nvoid c_dbcsr_iterator_next_block_index(const dbcsr_iterator c_iterator, int* c_row, int* c_column, int* c_blk, int* c_blk_p);\n\n#:for n_inst, nametype, base, prec, ctype, extype in c_exparams\n\nvoid c_dbcsr_iterator_next_2d_block_${nametype}$(const dbcsr_iterator c_iterator, int* c_row, int* c_column, ${extype}$** c_block,\n  bool* c_transposed, int* c_block_number, int* c_row_size, int* c_col_size, int* c_row_offset, int* c_col_offset);\n\n#:endfor\n\n//--------------------------------------------------------!\n//                  work operations                       !\n//--------------------------------------------------------!\n\n#:for n_inst, nametype, base, prec, ctype, extype in c_exparams\nvoid c_dbcsr_put_block2d_${nametype}$(dbcsr_matrix c_matrix, const int c_row, const int c_col, const ${extype}$* c_block,\n  const int c_row_size, const int c_col_size, const bool* c_summation, const ${extype}$* c_scale);\n\nvoid c_dbcsr_get_data_${nametype}$(const dbcsr_matrix c_matrix, ${extype}$** c_data, long long int* c_data_size,\n  ${extype}$* c_select_data_type, int* c_lb, int* c_ub);\n\n#:endfor\n\n//------------------------------------------------------------!\n//                   replication                              !\n//------------------------------------------------------------!\n\nvoid c_dbcsr_replicate_all(dbcsr_matrix c_matrix);\n\nvoid c_dbcsr_distribute(dbcsr_matrix c_matrix, bool* c_fast);\n\nvoid c_dbcsr_sum_replicated(dbcsr_matrix c_matrix);\n\n//-----------------------------------------!\n//       high level matrix functions       !\n//-----------------------------------------!\n\nvoid c_dbcsr_hadamard_product(\n  const dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, dbcsr_matrix c_matrix_c, const double* c_b_assume_value);\n\nvoid c_dbcsr_print(const dbcsr_matrix matrix);\n\nvoid c_dbcsr_print_block_sum(const dbcsr_matrix c_matrix, const int* c_unit_nr);\n\ndouble c_dbcsr_checksum(const dbcsr_matrix c_matrix, const bool* c_local, const bool* c_pos);\n\ndouble c_dbcsr_maxabs(const dbcsr_matrix c_matrix);\n\ndouble c_dbcsr_gershgorin_norm(const dbcsr_matrix c_matrix);\n\ndouble c_dbcsr_frobenius_norm(const dbcsr_matrix c_matrix, const bool* c_local);\n\nvoid c_dbcsr_norm_scalar(const dbcsr_matrix c_matrix, const int c_which_norm, double* c_norm_scalar);\n\nvoid c_dbcsr_triu(const dbcsr_matrix c_matrix);\n\nvoid c_dbcsr_init_random(dbcsr_matrix c_matrix, const bool* c_keep_sparsity);\n\nvoid c_dbcsr_function_of_elements(\n  dbcsr_matrix c_matrix, const int c_func, const double* c_a0, const double* c_a1, const double* c_a2);\n\n//--------------------------------------------------!\n//           setters/getters                        !\n//--------------------------------------------------!\n\nint c_dbcsr_nblkrows_total(const dbcsr_matrix c_matrix);\n\nint c_dbcsr_nblkcols_total(const dbcsr_matrix c_matrix);\n\nint c_dbcsr_nblkrows_local(const dbcsr_matrix c_matrix);\n\nint c_dbcsr_nblkcols_local(const dbcsr_matrix c_matrix);\n\nvoid c_dbcsr_get_info(const dbcsr_matrix c_matrix, int* c_nblkrows_total, int* c_nblkcols_total, int* c_nfullrows_total,\n  int* c_nfullcols_total, int* c_nblkrows_local, int* c_nblkcols_local, int* c_nfullrows_local, int* c_nfullcols_local,\n  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,\n  int* c_row_blk_size, int* c_col_blk_size, int* c_row_blk_offset, int* c_col_blk_offset, dbcsr_distribution* c_distribution,\n  char** c_name, char* c_matrix_type, int* c_data_type, int* c_group);\n\n#:set infovars =['local_rows', 'local_cols', 'proc_row_dist', 'proc_col_dist', &\n              'row_blk_size', 'col_blk_size', 'row_blk_offset', 'col_blk_offset']\n#:for var in infovars\n   void c_dbcsr_get_${var}$ (dbcsr_matrix c_matrix, int* c_${var}$, int c_size);\n#:endfor\n\n              void c_dbcsr_get_name(dbcsr_matrix c_matrix, char** c_name);\n\n              void c_dbcsr_get_group_aux(dbcsr_matrix c_matrix, MPI_Fint* fgroup);\n\n              inline void c_dbcsr_get_group(dbcsr_matrix c_matrix, MPI_Comm* c_group) {\n                MPI_Fint fgroup;\n                c_dbcsr_get_group_aux(c_matrix, &fgroup);\n                *c_group = MPI_Comm_f2c(fgroup);\n              };\n\n              void c_dbcsr_get_distribution(dbcsr_matrix c_matrix, dbcsr_distribution* c_dist);\n\n              void c_dbcsr_distribution_get_aux(const dbcsr_distribution c_dist, int** c_row_dist, int** c_col_dist, int* c_nrows,\n                int* c_ncols, bool* c_has_threads, MPI_Fint* c_group, int* c_mynode, int* c_numnodes, int* c_nprows, int* c_npcols,\n                int* c_myprow, int* c_mypcol, int** c_pgrid, bool* c_subgroups_defined, int* c_prow_group, int* c_pcol_group);\n\n              inline void c_dbcsr_distribution_get(const dbcsr_distribution c_dist, int** c_row_dist, int** c_col_dist,\n                int* c_nrows, int* c_ncols, bool* c_has_threads, MPI_Comm* c_group, int* c_mynode, int* c_numnodes, int* c_nprows,\n                int* c_npcols, int* c_myprow, int* c_mypcol, int** c_pgrid, bool* c_subgroups_defined, int* c_prow_group,\n                int* c_pcol_group) {\n                MPI_Fint fgroup;\n                c_dbcsr_distribution_get_aux(c_dist, c_row_dist, c_col_dist, c_nrows, c_ncols, c_has_threads, &fgroup, c_mynode,\n                  c_numnodes, c_nprows, c_npcols, c_myprow, c_mypcol, c_pgrid, c_subgroups_defined, c_prow_group, c_pcol_group);\n\n                if (c_group != nullptr) *c_group = MPI_Comm_f2c(fgroup);\n              }\n\n              void c_dbcsr_get_stored_coordinates(const dbcsr_matrix matrix, const int row, const int col, int* processor);\n\n              void c_dbcsr_setname(const dbcsr_matrix c_matrix, const char* c_newname);\n\n              char c_dbcsr_get_matrix_type(const dbcsr_matrix c_matrix);\n\n              double c_dbcsr_get_occupation(const dbcsr_matrix c_matrix);\n\n              int c_dbcsr_get_num_blocks(const dbcsr_matrix c_matrix);\n\n              int c_dbcsr_get_data_size(const dbcsr_matrix c_matrix);\n\n              bool c_dbcsr_has_symmetry(const dbcsr_matrix c_matrix);\n\n              int c_dbcsr_nfullrows_total(const dbcsr_matrix c_matrix);\n\n              int c_dbcsr_nfullcols_total(const dbcsr_matrix c_matrix);\n\n              bool c_dbcsr_valid_index(const dbcsr_matrix c_matrix);\n\n              int c_dbcsr_get_data_type(const dbcsr_matrix c_matrix);\n\n              //-----------------------------------------------!\n              //                  other                        !\n              //-----------------------------------------------!\n\n              void c_dbcsr_binary_write(const dbcsr_matrix c_matrix, const char* c_filepath);\n\n              void c_dbcsr_binary_read(const char* c_filepath, dbcsr_distribution c_distribution, dbcsr_matrix* c_matrix_new);\n\n              void c_free_string(char** c_string);\n\n#if defined(__cplusplus)\n              }\n#endif\n\n#if defined(__cplusplus)\n              // --------------------------------------------------- //\n              //         overloaded functions (cpp only)             //\n              // --------------------------------------------------- //\n\n#:for n_inst, nametype, base, prec, ctype, extype in c_exparams\n\n              inline void c_dbcsr_set(dbcsr_matrix c_matrix, const ${extype}$ c_alpha) {\n                c_dbcsr_set_${nametype}$(c_matrix, c_alpha);\n              }\n\n              inline void c_dbcsr_add(dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, const ${extype}$ c_alpha_scalar,\n                const ${extype}$ c_beta_scalar) {\n                c_dbcsr_add_${nametype}$(c_matrix_a, c_matrix_b, c_alpha_scalar, c_beta_scalar);\n              }\n\n              inline void c_dbcsr_scale(dbcsr_matrix c_matrix_a, const ${extype}$ c_alpha_scalar, const int* c_last_column) {\n                c_dbcsr_scale_${nametype}$(c_matrix_a, c_alpha_scalar, c_last_column);\n              }\n\n              inline void c_dbcsr_scale_by_vector(\n                const dbcsr_matrix c_matrix_a, const ${extype}$* c_alpha, const int c_alpha_size, const char* c_side) {\n                c_dbcsr_scale_by_vector_${nametype}$(c_matrix_a, c_alpha, c_alpha_size, c_side);\n              }\n\n              inline void c_dbcsr_multiply(char c_transa, char c_transb, const ${extype}$ c_alpha, const dbcsr_matrix c_matrix_a,\n                const dbcsr_matrix c_matrix_b, const ${extype}$ c_beta, dbcsr_matrix c_matrix_c, const int* c_first_row,\n                const int* c_last_row, const int* c_first_column, const int* c_last_column, const int* c_first_k,\n                const int* c_last_k, const bool* c_retain_sparsity, const double* c_filter_eps, long long int* c_flop) {\n                c_dbcsr_multiply_${nametype}$(c_transa, c_transb, c_alpha, c_matrix_a, c_matrix_b, c_beta, c_matrix_c, c_first_row,\n                  c_last_row, c_first_column, c_last_column, c_first_k, c_last_k, c_retain_sparsity, c_filter_eps, c_flop);\n              }\n\n              inline void c_dbcsr_add_on_diag(dbcsr_matrix c_matrix, const ${extype}$ c_alpha_scalar) {\n                c_dbcsr_add_on_diag_${nametype}$(c_matrix, c_alpha_scalar);\n              }\n\n              inline void c_dbcsr_set_diag(dbcsr_matrix c_matrix, const ${extype}$* c_diag, const int c_diag_size) {\n                c_dbcsr_set_diag_${nametype}$(c_matrix, c_diag, c_diag_size);\n              }\n\n              inline void c_dbcsr_get_diag(const dbcsr_matrix c_matrix, ${extype}$* c_diag, const int c_diag_size) {\n                c_dbcsr_get_diag_${nametype}$(c_matrix, c_diag, c_diag_size);\n              }\n\n              inline void c_dbcsr_trace(const dbcsr_matrix c_matrix_a, ${extype}$* c_trace) {\n                c_dbcsr_trace_${nametype}$(c_matrix_a, c_trace);\n              }\n\n              inline void c_dbcsr_dot(const dbcsr_matrix c_matrix_a, const dbcsr_matrix c_matrix_b, ${extype}$* c_result) {\n                c_dbcsr_dot_${nametype}$(c_matrix_a, c_matrix_b, c_result);\n              }\n\n              inline void c_dbcsr_get_block_p(const dbcsr_matrix c_matrix, const int c_row, const int c_col, ${extype}$** c_block,\n                bool* c_tr, bool* c_found, int* c_row_size, int* c_col_size) {\n                c_dbcsr_get_block_p_${nametype}$(c_matrix, c_row, c_col, c_block, c_tr, c_found, c_row_size, c_col_size);\n              }\n\n              inline void c_dbcsr_get_block_p(const dbcsr_matrix c_matrix, const int c_row, const int c_col, ${extype}$** c_block,\n                bool* c_found, int* c_row_size, int* c_col_size) {\n                c_dbcsr_get_block_notrans_p_${nametype}$(c_matrix, c_row, c_col, c_block, c_found, c_row_size, c_col_size);\n              }\n\n              inline void c_dbcsr_reserve_block2d(dbcsr_matrix c_matrix, const int c_row, const int c_col,\n                const ${extype}$* c_block, const int c_row_size, const int c_col_size, const bool* c_transposed, bool* c_existed) {\n                c_dbcsr_reserve_block2d_${nametype}$(\n                  c_matrix, c_row, c_col, c_block, c_row_size, c_col_size, c_transposed, c_existed);\n              }\n\n              inline void c_dbcsr_iterator_next_2d_block(const dbcsr_iterator c_iterator, int* c_row, int* c_column,\n                ${extype}$** c_block, bool* c_transposed, int* c_block_number, int* c_row_size, int* c_col_size, int* c_row_offset,\n                int* c_col_offset) {\n                c_dbcsr_iterator_next_2d_block_${nametype}$(c_iterator, c_row, c_column, c_block, c_transposed, c_block_number,\n                  c_row_size, c_col_size, c_row_offset, c_col_offset);\n              }\n\n              inline void c_dbcsr_put_block2d(dbcsr_matrix c_matrix, const int c_row, const int c_col, const ${extype}$* c_block,\n                const int c_row_size, const int c_col_size, const bool* c_summation, const ${extype}$* c_scale) {\n                c_dbcsr_put_block2d_${nametype}$(c_matrix, c_row, c_col, c_block, c_row_size, c_col_size, c_summation, c_scale);\n              }\n\n              inline void c_dbcsr_get_data(const dbcsr_matrix c_matrix, ${extype}$** c_data, long long int* c_data_size,\n                ${extype}$* c_select_data_type, int* c_lb, int* c_ub) {\n                c_dbcsr_get_data_${nametype}$(c_matrix, c_data, c_data_size, c_select_data_type, c_lb, c_ub);\n              }\n#:endfor\n#endif\n\n#endif\n"
  },
  {
    "path": "src/dbcsr_api.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_api\n   !! This is the start of a dbcsr_api, all publicly needed functions\n   !! are exported here. The others remain private to the library.\n   !! Currently, this is the CP2K used set.\n   !! Ultimately, a reduced subset and well defined api will remain,\n   !! possibly grouped in to standard and expert api.\n   !! Currently, this is work in progress.\n\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_exists, &\n                                array_size\n   USE dbcsr_block_access, ONLY: dbcsr_get_block_p_prv => dbcsr_get_block_p, &\n                                 dbcsr_put_block_prv => dbcsr_put_block, &\n                                 dbcsr_reserve_all_blocks_prv => dbcsr_reserve_all_blocks, &\n                                 dbcsr_reserve_block2d_prv => dbcsr_reserve_block2d, &\n                                 dbcsr_reserve_blocks_prv => dbcsr_reserve_blocks, &\n                                 dbcsr_reserve_diag_blocks_prv => dbcsr_reserve_diag_blocks\n   USE dbcsr_config, ONLY: dbcsr_get_default_config, &\n                           dbcsr_print_config, &\n                           dbcsr_set_config\n   USE dbcsr_csr_conversions, ONLY: &\n      convert_csr_to_dbcsr_prv => convert_csr_to_dbcsr, &\n      convert_dbcsr_to_csr_prv => convert_dbcsr_to_csr, &\n      csr_create_from_dbcsr_prv => csr_create_from_dbcsr, csr_create_new_prv => csr_create_new, &\n      csr_create_template, dbcsr_csr_dbcsr_blkrow_dist => csr_dbcsr_blkrow_dist, &\n      dbcsr_csr_destroy => csr_destroy, dbcsr_csr_eqrow_ceil_dist => csr_eqrow_ceil_dist, &\n      dbcsr_csr_eqrow_floor_dist => csr_eqrow_floor_dist, dbcsr_csr_p_type => csr_p_type, &\n      dbcsr_csr_print_sparsity => csr_print_sparsity, dbcsr_csr_type => csr_type, &\n      dbcsr_csr_write => csr_write, &\n      dbcsr_to_csr_filter_prv => dbcsr_to_csr_filter, csr_type\n   USE dbcsr_data_methods, ONLY: dbcsr_get_data_p_prv => dbcsr_get_data_p, &\n                                 dbcsr_scalar, &\n                                 dbcsr_scalar_fill_all, &\n                                 dbcsr_scalar_get_type, &\n                                 dbcsr_scalar_get_value, &\n                                 dbcsr_scalar_set_type, &\n                                 dbcsr_scalar_zero\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_get_num_images => dbcsr_distribution_get_num_images_1d, &\n                                 dbcsr_distribution_hold_prv => dbcsr_distribution_hold, &\n                                 dbcsr_distribution_new_prv => dbcsr_distribution_new, &\n                                 dbcsr_distribution_release_prv => dbcsr_distribution_release, &\n                                 dbcsr_distribution_get_prv => dbcsr_distribution_get\n   USE dbcsr_dist_operations, ONLY: dbcsr_get_stored_coordinates_prv => dbcsr_get_stored_coordinates\n   USE dbcsr_io, ONLY: dbcsr_binary_read_prv => dbcsr_binary_read, &\n                       dbcsr_binary_write_prv => dbcsr_binary_write, &\n                       dbcsr_print_block_sum_prv => dbcsr_print_block_sum, &\n                       dbcsr_print_prv => dbcsr_print\n   USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left_prv => dbcsr_iterator_blocks_left, &\n                                        dbcsr_iterator_next_block_prv => dbcsr_iterator_next_block, &\n                                        dbcsr_iterator_start_prv => dbcsr_iterator_start, &\n                                        dbcsr_iterator_stop_prv => dbcsr_iterator_stop\n   USE dbcsr_lib, ONLY: dbcsr_clear_mempools, &\n                        dbcsr_finalize_lib, &\n                        dbcsr_init_lib, dbcsr_print_statistics_prv => dbcsr_print_statistics\n   USE dbcsr_methods, ONLY: &\n      dbcsr_get_data_size_prv => dbcsr_get_data_size, &\n      dbcsr_get_data_type_prv => dbcsr_get_data_type, &\n      dbcsr_get_matrix_type_prv => dbcsr_get_matrix_type, &\n      dbcsr_get_num_blocks_prv => dbcsr_get_num_blocks, &\n      dbcsr_has_symmetry_prv => dbcsr_has_symmetry, &\n      dbcsr_nblkcols_total_prv => dbcsr_nblkcols_total, &\n      dbcsr_nblkrows_total_prv => dbcsr_nblkrows_total, &\n      dbcsr_nblkcols_local_prv => dbcsr_nblkcols_local, &\n      dbcsr_nblkrows_local_prv => dbcsr_nblkrows_local, &\n      dbcsr_nfullcols_total_prv => dbcsr_nfullcols_total, &\n      dbcsr_nfullrows_total_prv => dbcsr_nfullrows_total, &\n      dbcsr_release_prv => dbcsr_release, &\n      dbcsr_setname_prv => dbcsr_setname, &\n      dbcsr_valid_index_prv => dbcsr_valid_index, dbcsr_wm_use_mutable\n   USE dbcsr_mpiwrap, ONLY: mp_comm_type\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_grid_setup_prv => dbcsr_mp_grid_setup\n   USE dbcsr_multiply_api, ONLY: dbcsr_multiply_prv => dbcsr_multiply\n   USE dbcsr_operations, ONLY: &\n      dbcsr_add_on_diag_prv => dbcsr_add_on_diag, &\n      dbcsr_add_prv => dbcsr_add, &\n      dbcsr_copy_into_existing_prv => dbcsr_copy_into_existing, &\n      dbcsr_copy_prv => dbcsr_copy, &\n      dbcsr_filter_anytype, &\n      dbcsr_frobenius_norm_prv => dbcsr_frobenius_norm, &\n      dbcsr_function_of_elements_prv => dbcsr_function_of_elements, &\n      dbcsr_gershgorin_norm_prv => dbcsr_gershgorin_norm, &\n      dbcsr_get_block_diag_prv => dbcsr_get_block_diag, &\n      dbcsr_get_diag_prv => dbcsr_get_diag, &\n      dbcsr_get_info_prv => dbcsr_get_info, &\n      dbcsr_get_occupation_prv => dbcsr_get_occupation, &\n      dbcsr_hadamard_product_prv => dbcsr_hadamard_product, &\n      dbcsr_init_random_prv => dbcsr_init_random, &\n      dbcsr_maxabs_prv => dbcsr_maxabs, &\n      dbcsr_norm_scalar_prv => dbcsr_norm_scalar, &\n      dbcsr_norm_r8_vec_prv => dbcsr_norm_r8_vec, &\n      dbcsr_scale_by_vector_prv => dbcsr_scale_by_vector, &\n      dbcsr_scale_prv => dbcsr_scale, &\n      dbcsr_set_diag_prv => dbcsr_set_diag, &\n      dbcsr_set_prv => dbcsr_set, &\n      dbcsr_sum_replicated_prv => dbcsr_sum_replicated, &\n      dbcsr_trace_prv => dbcsr_trace, &\n      dbcsr_dot_prv => dbcsr_dot, &\n      dbcsr_triu_prv => dbcsr_triu, &\n      dbcsr_clear_prv => dbcsr_clear, &\n      dbcsr_add_block_node_prv => dbcsr_add_block_node, &\n      dbcsr_conform_scalar_prv => dbcsr_conform_scalar\n   USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed\n   USE dbcsr_tests, ONLY: dbcsr_run_tests_prv => dbcsr_run_tests, &\n                          dbcsr_test_binary_io, &\n                          dbcsr_test_mm\n   USE dbcsr_string_utilities, ONLY: uppercase\n   USE dbcsr_transformations, ONLY: dbcsr_complete_redistribute_prv => dbcsr_complete_redistribute, &\n                                    dbcsr_desymmetrize_deep_prv => dbcsr_desymmetrize_deep, &\n                                    dbcsr_distribute_prv => dbcsr_distribute, &\n                                    dbcsr_replicate_all_prv => dbcsr_replicate_all, &\n                                    dbcsr_transposed_prv => dbcsr_transposed\n   USE dbcsr_types, ONLY: &\n      dbcsr_dist_prv_obj => dbcsr_distribution_obj, dbcsr_func_artanh, dbcsr_func_dtanh, &\n      dbcsr_func_inverse, dbcsr_func_tanh, dbcsr_iterator_prv => dbcsr_iterator, dbcsr_mp_obj, &\n      dbcsr_no_transpose, dbcsr_norm_column, dbcsr_norm_frobenius, dbcsr_norm_maxabsnorm, &\n      dbcsr_prv_type => dbcsr_type, dbcsr_scalar_type, dbcsr_transpose, &\n      dbcsr_type_antisymmetric, dbcsr_type_complex_4, dbcsr_type_complex_8, &\n      dbcsr_type_complex_default, dbcsr_type_no_symmetry, dbcsr_type_real_4, dbcsr_type_real_8, &\n      dbcsr_type_real_default, dbcsr_type_symmetric\n   USE dbcsr_dist_util, ONLY: dbcsr_convert_offsets_to_sizes => convert_offsets_to_sizes, &\n                              dbcsr_convert_sizes_to_offsets => convert_sizes_to_offsets, &\n                              dbcsr_checksum_prv => dbcsr_checksum, &\n                              dbcsr_verify_matrix_prv => dbcsr_verify_matrix\n   USE dbcsr_work_operations, ONLY: add_work_coordinate_prv => add_work_coordinate, &\n                                    dbcsr_create_prv => dbcsr_create, &\n                                    dbcsr_finalize_prv => dbcsr_finalize, &\n                                    dbcsr_work_create_prv => dbcsr_work_create\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          dp, &\n                          int_8, &\n                          real_4, &\n                          real_8\n\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_api'\n\n   ! constants\n   PUBLIC :: dbcsr_type_no_symmetry\n   PUBLIC :: dbcsr_type_symmetric\n   PUBLIC :: dbcsr_type_antisymmetric\n   PUBLIC :: dbcsr_transpose\n   PUBLIC :: dbcsr_no_transpose\n   PUBLIC :: dbcsr_type_complex_8\n   PUBLIC :: dbcsr_type_real_4\n   PUBLIC :: dbcsr_type_real_8\n   PUBLIC :: dbcsr_type_complex_4\n   PUBLIC :: dbcsr_type_complex_default\n   PUBLIC :: dbcsr_type_real_default\n\n   ! types\n   PUBLIC :: dbcsr_type\n   PUBLIC :: dbcsr_p_type\n   PUBLIC :: dbcsr_distribution_type\n   PUBLIC :: dbcsr_iterator_type\n   PUBLIC :: dbcsr_scalar_type\n\n   ! lib init/finalize\n   PUBLIC :: dbcsr_clear_mempools\n   PUBLIC :: dbcsr_init_lib\n   PUBLIC :: dbcsr_finalize_lib\n   PUBLIC :: dbcsr_set_config\n   PUBLIC :: dbcsr_get_default_config\n   PUBLIC :: dbcsr_print_config\n   PUBLIC :: dbcsr_reset_randmat_seed\n   PUBLIC :: dbcsr_mp_grid_setup\n   PUBLIC :: dbcsr_print_statistics\n\n   ! create / release\n   PUBLIC :: dbcsr_distribution_hold\n   PUBLIC :: dbcsr_distribution_release\n   PUBLIC :: dbcsr_distribution_new\n   PUBLIC :: dbcsr_create\n   PUBLIC :: dbcsr_init_p\n   PUBLIC :: dbcsr_release\n   PUBLIC :: dbcsr_release_p\n   PUBLIC :: dbcsr_deallocate_matrix\n\n   ! primitive matrix operations\n   PUBLIC :: dbcsr_set\n   PUBLIC :: dbcsr_add\n   PUBLIC :: dbcsr_scale\n   PUBLIC :: dbcsr_scale_by_vector\n   PUBLIC :: dbcsr_transposed\n   PUBLIC :: dbcsr_multiply\n   PUBLIC :: dbcsr_copy\n   PUBLIC :: dbcsr_copy_into_existing\n   PUBLIC :: dbcsr_desymmetrize\n   PUBLIC :: dbcsr_add_on_diag\n   PUBLIC :: dbcsr_get_block_diag\n   PUBLIC :: dbcsr_set_diag\n   PUBLIC :: dbcsr_get_diag\n   PUBLIC :: dbcsr_filter\n   PUBLIC :: dbcsr_trace\n   PUBLIC :: dbcsr_dot\n   PUBLIC :: dbcsr_complete_redistribute\n   PUBLIC :: dbcsr_get_block_p\n   PUBLIC :: dbcsr_clear\n\n   ! block reservation\n   PUBLIC :: dbcsr_reserve_diag_blocks\n   PUBLIC :: dbcsr_reserve_block2d\n   PUBLIC :: dbcsr_reserve_blocks\n   PUBLIC :: dbcsr_reserve_all_blocks\n\n   ! iterator\n   PUBLIC :: dbcsr_iterator_start\n   PUBLIC :: dbcsr_iterator_stop\n   PUBLIC :: dbcsr_iterator_blocks_left\n   PUBLIC :: dbcsr_iterator_next_block\n\n   ! getters / setters\n   PUBLIC :: dbcsr_get_info\n   PUBLIC :: dbcsr_distribution_get\n   PUBLIC :: dbcsr_setname\n   PUBLIC :: dbcsr_get_matrix_type\n   PUBLIC :: dbcsr_get_occupation\n   PUBLIC :: dbcsr_nblkrows_total\n   PUBLIC :: dbcsr_nblkcols_total\n   PUBLIC :: dbcsr_nblkrows_local\n   PUBLIC :: dbcsr_nblkcols_local\n   PUBLIC :: dbcsr_get_num_blocks\n   PUBLIC :: dbcsr_get_data_size\n   PUBLIC :: dbcsr_has_symmetry\n   PUBLIC :: dbcsr_nfullrows_total\n   PUBLIC :: dbcsr_nfullcols_total\n   PUBLIC :: dbcsr_get_stored_coordinates\n   PUBLIC :: dbcsr_valid_index\n   PUBLIC :: dbcsr_get_data_type\n\n   ! work operations\n   PUBLIC :: dbcsr_add_block_node\n   PUBLIC :: dbcsr_put_block\n   PUBLIC :: dbcsr_work_create\n   PUBLIC :: dbcsr_verify_matrix\n   PUBLIC :: dbcsr_add_work_coordinate\n   PUBLIC :: dbcsr_get_wms_data_p\n   PUBLIC :: dbcsr_get_data_p\n   PUBLIC :: dbcsr_set_work_size\n   PUBLIC :: dbcsr_finalize\n\n   ! replication\n   PUBLIC :: dbcsr_replicate_all\n   PUBLIC :: dbcsr_sum_replicated\n   PUBLIC :: dbcsr_distribute\n\n   ! misc\n   PUBLIC :: dbcsr_distribution_get_num_images\n   PUBLIC :: dbcsr_convert_offsets_to_sizes\n   PUBLIC :: dbcsr_convert_sizes_to_offsets\n   PUBLIC :: dbcsr_run_tests\n   PUBLIC :: dbcsr_test_mm\n   PUBLIC :: dbcsr_scalar\n\n   ! high level matrix functions\n   PUBLIC :: dbcsr_norm_frobenius\n   PUBLIC :: dbcsr_norm_maxabsnorm\n   PUBLIC :: dbcsr_norm_column\n   PUBLIC :: dbcsr_hadamard_product\n   PUBLIC :: dbcsr_func_artanh\n   PUBLIC :: dbcsr_func_dtanh\n   PUBLIC :: dbcsr_func_inverse\n   PUBLIC :: dbcsr_func_tanh\n   PUBLIC :: dbcsr_print\n   PUBLIC :: dbcsr_print_block_sum\n   PUBLIC :: dbcsr_checksum\n   PUBLIC :: dbcsr_maxabs\n   PUBLIC :: dbcsr_norm\n   PUBLIC :: dbcsr_gershgorin_norm\n   PUBLIC :: dbcsr_frobenius_norm\n   PUBLIC :: dbcsr_init_random\n   PUBLIC :: dbcsr_function_of_elements\n   PUBLIC :: dbcsr_triu\n\n   ! csr conversion\n   PUBLIC :: dbcsr_csr_type\n   PUBLIC :: dbcsr_csr_p_type\n   PUBLIC :: dbcsr_convert_csr_to_dbcsr\n   PUBLIC :: dbcsr_convert_dbcsr_to_csr\n   PUBLIC :: dbcsr_csr_create_from_dbcsr\n   PUBLIC :: dbcsr_csr_destroy\n   PUBLIC :: dbcsr_csr_create\n   PUBLIC :: dbcsr_csr_eqrow_floor_dist\n   PUBLIC :: dbcsr_csr_eqrow_ceil_dist\n   PUBLIC :: dbcsr_csr_dbcsr_blkrow_dist\n   PUBLIC :: dbcsr_csr_print_sparsity\n   PUBLIC :: dbcsr_to_csr_filter\n   PUBLIC :: dbcsr_csr_write\n\n   ! binary io\n   PUBLIC :: dbcsr_binary_write\n   PUBLIC :: dbcsr_binary_read\n   PUBLIC :: dbcsr_test_binary_io\n\n   ! -----------------------------------------------------------------------------------------------\n   TYPE dbcsr_type\n      TYPE(dbcsr_prv_type), PRIVATE        :: prv = dbcsr_prv_type()\n   END TYPE dbcsr_type\n\n   TYPE dbcsr_p_type\n      TYPE(dbcsr_type), POINTER :: matrix => Null()\n   END TYPE dbcsr_p_type\n\n   ! the components of this type must remain private to encapsulate better the internals\n   ! of the dbcsr library.\n   TYPE dbcsr_distribution_type\n      TYPE(dbcsr_dist_prv_obj), PRIVATE        :: prv = dbcsr_dist_prv_obj()\n   END TYPE dbcsr_distribution_type\n\n   TYPE dbcsr_iterator_type\n      TYPE(dbcsr_iterator_prv), PRIVATE        :: prv = dbcsr_iterator_prv()\n   END TYPE dbcsr_iterator_type\n\n   INTERFACE dbcsr_create\n      MODULE PROCEDURE dbcsr_create_new, dbcsr_create_template\n   END INTERFACE\n\n   INTERFACE dbcsr_trace\n      MODULE PROCEDURE dbcsr_trace_d, dbcsr_trace_s\n      MODULE PROCEDURE dbcsr_trace_z, dbcsr_trace_c\n   END INTERFACE\n\n   INTERFACE dbcsr_dot\n      MODULE PROCEDURE dbcsr_dot_d, dbcsr_dot_s\n      MODULE PROCEDURE dbcsr_dot_z, dbcsr_dot_c\n   END INTERFACE\n\n   INTERFACE dbcsr_set\n      MODULE PROCEDURE dbcsr_set_d, dbcsr_set_s, dbcsr_set_c, dbcsr_set_z\n   END INTERFACE\n\n   INTERFACE dbcsr_add\n      MODULE PROCEDURE dbcsr_add_d, dbcsr_add_s, dbcsr_add_c, dbcsr_add_z\n   END INTERFACE\n\n   INTERFACE dbcsr_add_on_diag\n      MODULE PROCEDURE dbcsr_add_on_diag_d, dbcsr_add_on_diag_s\n      MODULE PROCEDURE dbcsr_add_on_diag_c, dbcsr_add_on_diag_z\n   END INTERFACE\n\n   INTERFACE dbcsr_get_diag\n      MODULE PROCEDURE dbcsr_get_diag_d, dbcsr_get_diag_s\n      MODULE PROCEDURE dbcsr_get_diag_c, dbcsr_get_diag_z\n   END INTERFACE\n\n   INTERFACE dbcsr_set_diag\n      MODULE PROCEDURE dbcsr_set_diag_d, dbcsr_set_diag_s\n      MODULE PROCEDURE dbcsr_set_diag_c, dbcsr_set_diag_z\n   END INTERFACE\n\n   INTERFACE dbcsr_scale\n      MODULE PROCEDURE dbcsr_scale_d, dbcsr_scale_s, dbcsr_scale_c, dbcsr_scale_z\n   END INTERFACE\n\n   INTERFACE dbcsr_scale_by_vector\n      MODULE PROCEDURE dbcsr_scale_by_vector_d, dbcsr_scale_by_vector_s\n      MODULE PROCEDURE dbcsr_scale_by_vector_c, dbcsr_scale_by_vector_z\n   END INTERFACE\n\n   INTERFACE dbcsr_multiply\n      MODULE PROCEDURE dbcsr_multiply_d, dbcsr_multiply_s, dbcsr_multiply_c, dbcsr_multiply_z\n   END INTERFACE\n\n   INTERFACE dbcsr_get_block_p\n      MODULE PROCEDURE dbcsr_get_block_p_d, dbcsr_get_block_p_s\n      MODULE PROCEDURE dbcsr_get_block_p_z, dbcsr_get_block_p_c\n      MODULE PROCEDURE dbcsr_get_2d_block_p_d, dbcsr_get_2d_block_p_s\n      MODULE PROCEDURE dbcsr_get_2d_block_p_z, dbcsr_get_2d_block_p_c\n      MODULE PROCEDURE dbcsr_get_block_notrans_p_d, dbcsr_get_block_notrans_p_s\n      MODULE PROCEDURE dbcsr_get_block_notrans_p_z, dbcsr_get_block_notrans_p_c\n      MODULE PROCEDURE dbcsr_get_2d_block_notrans_p_d, dbcsr_get_2d_block_notrans_p_s\n      MODULE PROCEDURE dbcsr_get_2d_block_notrans_p_z, dbcsr_get_2d_block_notrans_p_c\n   END INTERFACE\n\n   INTERFACE dbcsr_put_block\n      MODULE PROCEDURE dbcsr_put_block_d, dbcsr_put_block_s, dbcsr_put_block_z, dbcsr_put_block_c\n      MODULE PROCEDURE dbcsr_put_block2d_d, dbcsr_put_block2d_s, dbcsr_put_block2d_z, dbcsr_put_block2d_c\n   END INTERFACE\n\n   INTERFACE dbcsr_iterator_next_block\n      MODULE PROCEDURE dbcsr_iterator_next_block_index\n      MODULE PROCEDURE dbcsr_iterator_next_2d_block_d, dbcsr_iterator_next_2d_block_s\n      MODULE PROCEDURE dbcsr_iterator_next_2d_block_c, dbcsr_iterator_next_2d_block_z\n      MODULE PROCEDURE dbcsr_iterator_next_1d_block_d, dbcsr_iterator_next_1d_block_s\n      MODULE PROCEDURE dbcsr_iterator_next_1d_block_c, dbcsr_iterator_next_1d_block_z\n      MODULE PROCEDURE dbcsr_iterator_next_2d_block_notrans_d, dbcsr_iterator_next_2d_block_notrans_s\n      MODULE PROCEDURE dbcsr_iterator_next_2d_block_notrans_c, dbcsr_iterator_next_2d_block_notrans_z\n      MODULE PROCEDURE dbcsr_iterator_next_1d_block_notrans_d, dbcsr_iterator_next_1d_block_notrans_s\n      MODULE PROCEDURE dbcsr_iterator_next_1d_block_notrans_c, dbcsr_iterator_next_1d_block_notrans_z\n   END INTERFACE\n\n   INTERFACE dbcsr_reserve_block2d\n      MODULE PROCEDURE dbcsr_reserve_block2d_d, dbcsr_reserve_block2d_s\n      MODULE PROCEDURE dbcsr_reserve_block2d_c, dbcsr_reserve_block2d_z\n   END INTERFACE\n\n   INTERFACE dbcsr_csr_create\n      MODULE PROCEDURE csr_create_new, csr_create_template\n   END INTERFACE\n\n   INTERFACE dbcsr_get_wms_data_p\n      MODULE PROCEDURE dbcsr_get_wms_data_s, dbcsr_get_wms_data_c\n      MODULE PROCEDURE dbcsr_get_wms_data_d, dbcsr_get_wms_data_z\n   END INTERFACE\n\n   INTERFACE dbcsr_get_data_p\n      MODULE PROCEDURE dbcsr_get_data_s, dbcsr_get_data_c, dbcsr_get_data_d, dbcsr_get_data_z\n   END INTERFACE\n\n   INTERFACE dbcsr_norm\n      MODULE PROCEDURE dbcsr_norm_scalar\n      MODULE PROCEDURE dbcsr_norm_r8_vec\n   END INTERFACE dbcsr_norm\n\n   PRIVATE\n\nCONTAINS\n\n   SUBROUTINE dbcsr_mp_grid_setup(dist)\n      TYPE(dbcsr_distribution_type), INTENT(INOUT)       :: dist\n\n      CALL dbcsr_mp_grid_setup_prv(dist%prv%d%mp_env)\n   END SUBROUTINE dbcsr_mp_grid_setup\n\n   SUBROUTINE dbcsr_setname(matrix, newname)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      CHARACTER(len=*), INTENT(IN)                       :: newname\n\n      CALL dbcsr_setname_prv(matrix%prv, newname)\n   END SUBROUTINE dbcsr_setname\n\n   FUNCTION dbcsr_gershgorin_norm(matrix) RESULT(norm)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      REAL(KIND=real_8)                                  :: norm\n\n      norm = dbcsr_gershgorin_norm_prv(matrix%prv)\n   END FUNCTION dbcsr_gershgorin_norm\n\n   FUNCTION dbcsr_frobenius_norm(matrix, local) RESULT(norm)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      LOGICAL, INTENT(in), OPTIONAL                      :: local\n      REAL(KIND=real_8)                                  :: norm\n\n      norm = dbcsr_frobenius_norm_prv(matrix%prv, local)\n   END FUNCTION dbcsr_frobenius_norm\n\n   FUNCTION dbcsr_maxabs(matrix) RESULT(norm)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      REAL(KIND=real_8)                                  :: norm\n\n      norm = dbcsr_maxabs_prv(matrix%prv)\n   END FUNCTION dbcsr_maxabs\n\n   SUBROUTINE dbcsr_complete_redistribute(matrix, redist, keep_sparsity, summation)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: redist\n      LOGICAL, INTENT(IN), OPTIONAL                      :: keep_sparsity, summation\n\n      CALL dbcsr_complete_redistribute_prv(matrix%prv, redist%prv, keep_sparsity, summation)\n   END SUBROUTINE dbcsr_complete_redistribute\n\n   SUBROUTINE dbcsr_reserve_blocks(matrix, rows, cols, blk_pointers)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: rows, cols\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: blk_pointers\n\n      CALL dbcsr_reserve_blocks_prv(matrix%prv, rows, cols, blk_pointers)\n   END SUBROUTINE dbcsr_reserve_blocks\n\n   SUBROUTINE dbcsr_reserve_all_blocks(matrix)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n\n      CALL dbcsr_reserve_all_blocks_prv(matrix%prv)\n   END SUBROUTINE dbcsr_reserve_all_blocks\n\n   SUBROUTINE dbcsr_reserve_diag_blocks(matrix)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n\n      CALL dbcsr_reserve_diag_blocks_prv(matrix%prv)\n   END SUBROUTINE dbcsr_reserve_diag_blocks\n\n   SUBROUTINE dbcsr_add_work_coordinate(matrix, index_matrix, row, col, blk, index)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      INTEGER, INTENT(IN)                                :: index_matrix, row, col\n      INTEGER, INTENT(IN), OPTIONAL                      :: blk\n      INTEGER, INTENT(OUT), OPTIONAL                     :: index\n\n      CALL add_work_coordinate_prv(matrix%prv%wms(index_matrix), row, col, blk, index)\n   END SUBROUTINE dbcsr_add_work_coordinate\n\n   SUBROUTINE dbcsr_set_work_size(matrix, index_matrix, newvalue)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      INTEGER, INTENT(IN)                                :: index_matrix, newvalue\n\n      matrix%prv%wms(index_matrix)%datasize = newvalue\n   END SUBROUTINE dbcsr_set_work_size\n\n   SUBROUTINE dbcsr_init_random(matrix, keep_sparsity, mini_seed)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      LOGICAL, OPTIONAL                                  :: keep_sparsity\n      INTEGER, INTENT(IN), OPTIONAL                      :: mini_seed\n\n      CALL dbcsr_init_random_prv(matrix%prv, keep_sparsity=keep_sparsity, mini_seed=mini_seed)\n   END SUBROUTINE dbcsr_init_random\n\n   PURE FUNCTION dbcsr_get_data_type(matrix) RESULT(data_type)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: data_type\n\n      data_type = dbcsr_get_data_type_prv(matrix%prv)\n   END FUNCTION dbcsr_get_data_type\n\n   PURE FUNCTION dbcsr_valid_index(matrix) RESULT(valid_index)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      LOGICAL                                            :: valid_index\n\n      valid_index = dbcsr_valid_index_prv(matrix%prv)\n   END FUNCTION dbcsr_valid_index\n\n   SUBROUTINE dbcsr_get_stored_coordinates(matrix, row, column, processor)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, INTENT(IN)                                :: row, column\n      INTEGER, INTENT(OUT), OPTIONAL                     :: processor\n\n      CALL dbcsr_get_stored_coordinates_prv(matrix%prv, row, column, processor)\n   END SUBROUTINE dbcsr_get_stored_coordinates\n\n   PURE FUNCTION dbcsr_get_num_blocks(matrix) RESULT(num_blocks)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: num_blocks\n\n      num_blocks = dbcsr_get_num_blocks_prv(matrix%prv)\n   END FUNCTION dbcsr_get_num_blocks\n\n   FUNCTION dbcsr_get_data_size(matrix) RESULT(data_size)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: data_size\n\n      data_size = dbcsr_get_data_size_prv(matrix%prv)\n   END FUNCTION dbcsr_get_data_size\n\n   PURE FUNCTION dbcsr_get_matrix_type(matrix) RESULT(matrix_type)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      CHARACTER                                          :: matrix_type\n\n      matrix_type = dbcsr_get_matrix_type_prv(matrix%prv)\n   END FUNCTION dbcsr_get_matrix_type\n\n   FUNCTION dbcsr_get_occupation(matrix) RESULT(occupation)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      REAL(KIND=real_8)                                  :: occupation\n\n      occupation = dbcsr_get_occupation_prv(matrix%prv)\n   END FUNCTION dbcsr_get_occupation\n\n   FUNCTION dbcsr_nblkrows_total(matrix) RESULT(nblkrows_total)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nblkrows_total\n\n      nblkrows_total = dbcsr_nblkrows_total_prv(matrix%prv)\n   END FUNCTION dbcsr_nblkrows_total\n\n   FUNCTION dbcsr_nblkcols_total(matrix) RESULT(nblkcols_total)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nblkcols_total\n\n      nblkcols_total = dbcsr_nblkcols_total_prv(matrix%prv)\n   END FUNCTION dbcsr_nblkcols_total\n\n   FUNCTION dbcsr_nblkrows_local(matrix) RESULT(nblkrows_local)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nblkrows_local\n\n      nblkrows_local = dbcsr_nblkrows_local_prv(matrix%prv)\n   END FUNCTION dbcsr_nblkrows_local\n\n   FUNCTION dbcsr_nblkcols_local(matrix) RESULT(nblkcols_local)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nblkcols_local\n\n      nblkcols_local = dbcsr_nblkcols_local_prv(matrix%prv)\n   END FUNCTION dbcsr_nblkcols_local\n\n   FUNCTION dbcsr_nfullrows_total(matrix) RESULT(nfullrows_total)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nfullrows_total\n\n      nfullrows_total = dbcsr_nfullrows_total_prv(matrix%prv)\n   END FUNCTION dbcsr_nfullrows_total\n\n   FUNCTION dbcsr_nfullcols_total(matrix) RESULT(nfullcols_total)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: nfullcols_total\n\n      nfullcols_total = dbcsr_nfullcols_total_prv(matrix%prv)\n   END FUNCTION dbcsr_nfullcols_total\n\n   PURE FUNCTION dbcsr_iterator_blocks_left(iterator) RESULT(blocks_left)\n      TYPE(dbcsr_iterator_type), INTENT(IN)              :: iterator\n      LOGICAL                                            :: blocks_left\n\n      blocks_left = dbcsr_iterator_blocks_left_prv(iterator%prv)\n   END FUNCTION dbcsr_iterator_blocks_left\n\n   SUBROUTINE dbcsr_iterator_stop(iterator)\n      TYPE(dbcsr_iterator_type), INTENT(INOUT)           :: iterator\n\n      CALL dbcsr_iterator_stop_prv(iterator%prv)\n   END SUBROUTINE dbcsr_iterator_stop\n\n   SUBROUTINE dbcsr_iterator_start(iterator, matrix, shared, dynamic, &\n                                   dynamic_byrows, contiguous_pointers, read_only)\n      TYPE(dbcsr_iterator_type), INTENT(OUT)             :: iterator\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: shared, dynamic, dynamic_byrows, &\n                                                            contiguous_pointers, read_only\n\n      CALL dbcsr_iterator_start_prv(iterator%prv, matrix%prv, shared, dynamic, &\n                                    dynamic_byrows, contiguous_pointers, read_only)\n   END SUBROUTINE dbcsr_iterator_start\n\n   SUBROUTINE dbcsr_iterator_next_block_index(iterator, row, column, blk, blk_p)\n      !! Gets the index information of the next block, no data.\n\n      TYPE(dbcsr_iterator_type), INTENT(INOUT)           :: iterator\n      !! the iterator\n      INTEGER, INTENT(OUT)                               :: row, column, blk\n      !! row of the data block\n      !! column of the data block\n      !! block number\n      INTEGER, INTENT(OUT), OPTIONAL                     :: blk_p\n      !! index into block data array\n\n      CALL dbcsr_iterator_next_block_prv(iterator%prv, row=row, column=column, blk=blk, blk_p=blk_p)\n   END SUBROUTINE dbcsr_iterator_next_block_index\n\n   SUBROUTINE dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, &\n                             nfullrows_total, nfullcols_total, &\n                             nblkrows_local, nblkcols_local, &\n                             nfullrows_local, nfullcols_local, &\n                             my_prow, my_pcol, &\n                             local_rows, local_cols, proc_row_dist, proc_col_dist, &\n                             row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, &\n                             distribution, name, matrix_type, data_type, &\n                             group)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, INTENT(OUT), OPTIONAL :: nblkrows_total, nblkcols_total, nfullrows_total, &\n                                        nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, &\n                                        my_prow, my_pcol\n      INTEGER, DIMENSION(:), OPTIONAL, POINTER           :: local_rows, local_cols, proc_row_dist, &\n                                                            proc_col_dist, &\n                                                            row_blk_size, col_blk_size, &\n                                                            row_blk_offset, col_blk_offset\n      TYPE(dbcsr_distribution_type), INTENT(OUT), &\n         OPTIONAL                                        :: distribution\n      CHARACTER(len=*), INTENT(OUT), OPTIONAL            :: name\n      CHARACTER, INTENT(OUT), OPTIONAL                   :: matrix_type\n      INTEGER, INTENT(OUT), OPTIONAL                     :: data_type, group\n\n      TYPE(dbcsr_dist_prv_obj)                           :: dist\n      TYPE(mp_comm_type)                                 :: my_group\n\n      CALL dbcsr_get_info_prv(matrix=matrix%prv, &\n                              nblkrows_total=nblkrows_total, &\n                              nblkcols_total=nblkcols_total, &\n                              nfullrows_total=nfullrows_total, &\n                              nfullcols_total=nfullcols_total, &\n                              nblkrows_local=nblkrows_local, &\n                              nblkcols_local=nblkcols_local, &\n                              nfullrows_local=nfullrows_local, &\n                              nfullcols_local=nfullcols_local, &\n                              my_prow=my_prow, &\n                              my_pcol=my_pcol, &\n                              local_rows=local_rows, &\n                              local_cols=local_cols, &\n                              proc_row_dist=proc_row_dist, &\n                              proc_col_dist=proc_col_dist, &\n                              row_blk_size=row_blk_size, &\n                              col_blk_size=col_blk_size, &\n                              row_blk_offset=row_blk_offset, &\n                              col_blk_offset=col_blk_offset, &\n                              distribution=dist, &\n                              name=name, &\n                              matrix_type=matrix_type, &\n                              data_type=data_type, &\n                              group=my_group)\n\n      IF (PRESENT(distribution)) THEN\n         distribution%prv = dist\n      END IF\n\n      IF (PRESENT(group)) group = my_group%get_handle()\n\n   END SUBROUTINE dbcsr_get_info\n\n   SUBROUTINE dbcsr_distribution_get(dist, row_dist, col_dist, &\n                                     nrows, ncols, has_threads, &\n                                     group, mynode, numnodes, nprows, npcols, myprow, mypcol, pgrid, &\n                                     subgroups_defined, prow_group, pcol_group)\n      TYPE(dbcsr_distribution_type), INTENT(IN)          :: dist\n      INTEGER, DIMENSION(:), OPTIONAL, POINTER           :: row_dist, col_dist\n      INTEGER, INTENT(OUT), OPTIONAL                     :: nrows, ncols\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: has_threads\n      INTEGER, INTENT(OUT), OPTIONAL                     :: group, mynode, numnodes, nprows, npcols, &\n                                                            myprow, mypcol\n      INTEGER, DIMENSION(:, :), OPTIONAL, POINTER        :: pgrid\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: subgroups_defined\n      INTEGER, INTENT(OUT), OPTIONAL                     :: prow_group, pcol_group\n\n      TYPE(mp_comm_type) :: my_group, my_prow_group, my_pcol_group\n\n      call dbcsr_distribution_get_prv(dist%prv, row_dist, col_dist, &\n                                      nrows, ncols, has_threads, &\n                                      my_group, mynode, numnodes, nprows, npcols, myprow, mypcol, pgrid, &\n                                      subgroups_defined, my_prow_group, my_pcol_group)\n\n      IF (PRESENT(group)) group = my_group%get_handle()\n      IF (PRESENT(prow_group)) prow_group = my_prow_group%get_handle()\n      IF (PRESENT(pcol_group)) pcol_group = my_pcol_group%get_handle()\n   END SUBROUTINE dbcsr_distribution_get\n\n   SUBROUTINE dbcsr_distribution_hold(dist)\n      TYPE(dbcsr_distribution_type)                      :: dist\n\n      CALL dbcsr_distribution_hold_prv(dist%prv)\n   END SUBROUTINE dbcsr_distribution_hold\n\n   SUBROUTINE dbcsr_distribution_release(dist)\n      TYPE(dbcsr_distribution_type)                      :: dist\n\n      CALL dbcsr_distribution_release_prv(dist%prv)\n   END SUBROUTINE dbcsr_distribution_release\n\n   SUBROUTINE dbcsr_norm_scalar(matrix, which_norm, norm_scalar)\n\n      TYPE(dbcsr_type), INTENT(INOUT), TARGET            :: matrix\n      INTEGER, INTENT(IN)                                :: which_norm\n      REAL(dp), INTENT(OUT)                              :: norm_scalar\n\n      CALL dbcsr_norm_scalar_prv(matrix%prv, which_norm, norm_scalar)\n   END SUBROUTINE dbcsr_norm_scalar\n\n   SUBROUTINE dbcsr_norm_r8_vec(matrix, which_norm, norm_vector)\n\n      TYPE(dbcsr_type), INTENT(INOUT), TARGET            :: matrix\n      INTEGER, INTENT(IN)                                :: which_norm\n      REAL(dp), DIMENSION(:), INTENT(OUT)                :: norm_vector\n\n      CALL dbcsr_norm_r8_vec_prv(matrix%prv, which_norm, norm_vector)\n   END SUBROUTINE dbcsr_norm_r8_vec\n\n   SUBROUTINE dbcsr_replicate_all(matrix)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n\n      CALL dbcsr_replicate_all_prv(matrix%prv)\n   END SUBROUTINE dbcsr_replicate_all\n\n   SUBROUTINE dbcsr_distribute(matrix, fast)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      LOGICAL, INTENT(in), OPTIONAL                      :: fast\n\n      CALL dbcsr_distribute_prv(matrix%prv, fast)\n   END SUBROUTINE dbcsr_distribute\n\n   SUBROUTINE dbcsr_release_p(matrix)\n      TYPE(dbcsr_type), POINTER                          :: matrix\n\n      IF (ASSOCIATED(matrix)) THEN\n         CALL dbcsr_release(matrix)\n         DEALLOCATE (matrix)\n      END IF\n   END SUBROUTINE dbcsr_release_p\n\n   SUBROUTINE dbcsr_release(matrix)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n\n      CALL dbcsr_release_prv(matrix%prv)\n   END SUBROUTINE dbcsr_release\n\n   SUBROUTINE dbcsr_init_p(matrix)\n      TYPE(dbcsr_type), POINTER                          :: matrix\n\n      IF (ASSOCIATED(matrix)) THEN\n         CALL dbcsr_release(matrix)\n         DEALLOCATE (matrix)\n      END IF\n\n      ALLOCATE (matrix)\n   END SUBROUTINE dbcsr_init_p\n\n   SUBROUTINE dbcsr_print(matrix, nodata, matlab_format, variable_name, unit_nr)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: nodata, matlab_format\n      CHARACTER(*), INTENT(in), OPTIONAL                 :: variable_name\n      INTEGER, OPTIONAL                                  :: unit_nr\n\n      CALL dbcsr_print_prv(matrix%prv, nodata, matlab_format, variable_name, unit_nr)\n   END SUBROUTINE dbcsr_print\n\n   SUBROUTINE dbcsr_print_block_sum(matrix, unit_nr)\n      !! Prints the sum of the elements in each block\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, OPTIONAL                                  :: unit_nr\n\n      CALL dbcsr_print_block_sum_prv(matrix%prv, unit_nr)\n   END SUBROUTINE dbcsr_print_block_sum\n\n   FUNCTION dbcsr_checksum(matrix, local, pos) RESULT(checksum)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: local, pos\n      REAL(KIND=dp)                                      :: checksum\n\n      checksum = dbcsr_checksum_prv(matrix%prv, local=local, pos=pos)\n   END FUNCTION dbcsr_checksum\n\n   SUBROUTINE dbcsr_sum_replicated(matrix)\n      TYPE(dbcsr_type), INTENT(inout)                    :: matrix\n\n      CALL dbcsr_sum_replicated_prv(matrix%prv)\n   END SUBROUTINE dbcsr_sum_replicated\n\n   SUBROUTINE dbcsr_triu(matrix)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n\n      CALL dbcsr_triu_prv(matrix%prv)\n   END SUBROUTINE dbcsr_triu\n\n   SUBROUTINE dbcsr_verify_matrix(matrix, verbosity, local)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER, INTENT(IN), OPTIONAL                      :: verbosity\n      LOGICAL, INTENT(IN), OPTIONAL                      :: local\n\n      CALL dbcsr_verify_matrix_prv(matrix%prv, verbosity, local)\n   END SUBROUTINE dbcsr_verify_matrix\n\n   SUBROUTINE dbcsr_distribution_new(dist, template, group, pgrid, row_dist, col_dist, &\n                                     reuse_arrays)\n      !! Creates new distribution from blockr distributions\n\n      TYPE(dbcsr_distribution_type), INTENT(OUT)         :: dist\n      !! distribution\n      TYPE(dbcsr_distribution_type), INTENT(IN), &\n         OPTIONAL                                        :: template\n      INTEGER, INTENT(IN), OPTIONAL                      :: group\n      INTEGER, DIMENSION(:, :), OPTIONAL, POINTER        :: pgrid\n      INTEGER, DIMENSION(:), INTENT(INOUT), POINTER      :: row_dist, col_dist\n      LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_arrays\n\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: cont_row_dist, cont_col_dist\n\n      TYPE(mp_comm_type)                                 :: my_mp_group\n\n      ! Make the arrays contiguous, avoid change in the API\n      ALLOCATE (cont_row_dist(SIZE(row_dist)), cont_col_dist(SIZE(col_dist)))\n      cont_row_dist(:) = row_dist(:)\n      cont_col_dist(:) = col_dist(:)\n\n      IF (PRESENT(reuse_arrays)) THEN\n         IF (reuse_arrays) THEN\n            DEALLOCATE (row_dist, col_dist)\n            NULLIFY (row_dist, col_dist)\n         END IF\n      END IF\n\n      IF (PRESENT(group)) THEN\n         CALL my_mp_group%set_handle(group)\n         IF (PRESENT(template)) THEN\n            call dbcsr_distribution_new_prv(dist%prv, template%prv, my_mp_group, pgrid, cont_row_dist, cont_col_dist, &\n                                            reuse_arrays=.TRUE.)\n         ELSE\n            call dbcsr_distribution_new_prv(dist%prv, group=my_mp_group, pgrid=pgrid, &\n                                            row_dist=cont_row_dist, col_dist=cont_col_dist, &\n                                            reuse_arrays=.TRUE.)\n         END IF\n      ELSE\n         IF (PRESENT(template)) THEN\n            call dbcsr_distribution_new_prv(dist%prv, template%prv, pgrid=pgrid, row_dist=cont_row_dist, col_dist=cont_col_dist, &\n                                            reuse_arrays=.TRUE.)\n         ELSE\n            call dbcsr_distribution_new_prv(dist%prv, pgrid=pgrid, &\n                                            row_dist=cont_row_dist, col_dist=cont_col_dist, &\n                                            reuse_arrays=.TRUE.)\n         END IF\n      END IF\n   END SUBROUTINE dbcsr_distribution_new\n\n   SUBROUTINE dbcsr_print_statistics(print_timers, callgraph_filename)\n      !! Print statistics\n      LOGICAL, INTENT(IN), OPTIONAL          :: print_timers\n      CHARACTER(len=*), INTENT(IN), OPTIONAL :: callgraph_filename\n\n      CALL dbcsr_print_statistics_prv(print_timers, callgraph_filename)\n   END SUBROUTINE dbcsr_print_statistics\n\n   SUBROUTINE dbcsr_finalize(matrix, reshuffle)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: reshuffle\n\n      CALL dbcsr_finalize_prv(matrix%prv, reshuffle)\n   END SUBROUTINE dbcsr_finalize\n\n   SUBROUTINE dbcsr_work_create(matrix, nblks_guess, sizedata_guess, n, work_mutable)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      INTEGER, INTENT(IN), OPTIONAL                      :: nblks_guess, sizedata_guess, n\n      LOGICAL, INTENT(in), OPTIONAL                      :: work_mutable\n\n      CALL dbcsr_work_create_prv(matrix%prv, nblks_guess, sizedata_guess, n, work_mutable)\n   END SUBROUTINE dbcsr_work_create\n\n   SUBROUTINE dbcsr_create_new(matrix, name, dist, matrix_type, &\n                               row_blk_size, col_blk_size, nze, data_type, reuse, &\n                               reuse_arrays, mutable_work, replication_type)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      CHARACTER(len=*), INTENT(IN)                       :: name\n      TYPE(dbcsr_distribution_type), INTENT(IN)          :: dist\n      CHARACTER, INTENT(IN)                              :: matrix_type\n      INTEGER, DIMENSION(:), INTENT(INOUT), POINTER      :: row_blk_size, col_blk_size\n      INTEGER, INTENT(IN), OPTIONAL                      :: nze, data_type\n      LOGICAL, INTENT(IN), OPTIONAL                      :: reuse, reuse_arrays, mutable_work\n      CHARACTER, INTENT(IN), OPTIONAL                    :: replication_type\n\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: cont_row_blk_size, cont_col_blk_size\n\n      ! Make the array contiguous, avoid to change API\n      ALLOCATE (cont_row_blk_size(SIZE(row_blk_size)), cont_col_blk_size(SIZE(col_blk_size)))\n      cont_row_blk_size(:) = row_blk_size(:)\n      cont_col_blk_size(:) = col_blk_size(:)\n      IF (PRESENT(reuse_arrays)) THEN\n         IF (reuse_arrays) THEN\n            DEALLOCATE (row_blk_size, col_blk_size)\n            NULLIFY (row_blk_size, col_blk_size)\n         END IF\n      END IF\n      CALL dbcsr_create_prv(matrix%prv, name, dist%prv, &\n                            matrix_type, &\n                            cont_row_blk_size, cont_col_blk_size, nze=nze, &\n                            data_type=data_type, reuse=reuse, &\n                            reuse_arrays=.TRUE., &\n                            mutable_work=mutable_work, replication_type=replication_type)\n   END SUBROUTINE dbcsr_create_new\n\n   SUBROUTINE dbcsr_create_template(matrix, name, template, &\n                                    dist, matrix_type, &\n                                    row_blk_size, col_blk_size, nze, data_type, &\n                                    reuse_arrays, mutable_work, replication_type)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      CHARACTER(len=*), INTENT(IN), OPTIONAL             :: name\n      TYPE(dbcsr_type), INTENT(IN)                       :: template\n      TYPE(dbcsr_distribution_type), INTENT(IN), &\n         OPTIONAL                                        :: dist\n      CHARACTER, INTENT(IN), OPTIONAL                    :: matrix_type\n      INTEGER, DIMENSION(:), INTENT(INOUT), OPTIONAL, &\n         POINTER                                         :: row_blk_size, col_blk_size\n      INTEGER, INTENT(IN), OPTIONAL                      :: nze, data_type\n      LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_arrays, mutable_work\n      CHARACTER, INTENT(IN), OPTIONAL                    :: replication_type\n\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: cont_row_blk_size, cont_col_blk_size\n\n      IF (PRESENT(row_blk_size) .NEQV. PRESENT(col_blk_size)) THEN\n         DBCSR_ABORT(\"Both row_blk_size and col_blk_size must be provided!\")\n      END IF\n\n      ! Make the array contiguous, avoid to change API\n      IF (PRESENT(row_blk_size)) THEN\n         ! Avoid to change API\n         ALLOCATE (cont_row_blk_size(SIZE(row_blk_size)), cont_col_blk_size(SIZE(col_blk_size)))\n         cont_row_blk_size(:) = row_blk_size(:)\n         cont_col_blk_size(:) = col_blk_size(:)\n         IF (PRESENT(reuse_arrays)) THEN\n            IF (reuse_arrays) THEN\n               DEALLOCATE (row_blk_size, col_blk_size)\n               NULLIFY (row_blk_size, col_blk_size)\n            END IF\n         END IF\n      END IF\n\n      IF (PRESENT(dist)) THEN\n         IF (PRESENT(row_blk_size)) THEN\n            CALL dbcsr_create_prv(matrix%prv, template%prv, name, &\n                                  dist%prv, matrix_type, &\n                                  row_blk_size=cont_row_blk_size, col_blk_size=cont_col_blk_size, &\n                                  nze=nze, data_type=data_type, &\n                                  reuse_arrays=.TRUE., mutable_work=mutable_work, &\n                                  replication_type=replication_type)\n         ELSE\n            CALL dbcsr_create_prv(matrix%prv, template%prv, name, &\n                                  dist%prv, matrix_type, &\n                                  nze=nze, data_type=data_type, &\n                                  reuse_arrays=reuse_arrays, mutable_work=mutable_work, &\n                                  replication_type=replication_type)\n         END IF\n      ELSE\n         IF (PRESENT(row_blk_size)) THEN\n            CALL dbcsr_create_prv(matrix%prv, template%prv, name, &\n                                  matrix_type=matrix_type, &\n                                  row_blk_size=cont_row_blk_size, col_blk_size=cont_col_blk_size, &\n                                  nze=nze, data_type=data_type, &\n                                  reuse_arrays=.TRUE., mutable_work=mutable_work, &\n                                  replication_type=replication_type)\n         ELSE\n            CALL dbcsr_create_prv(matrix%prv, template%prv, name, &\n                                  matrix_type=matrix_type, &\n                                  nze=nze, data_type=data_type, &\n                                  reuse_arrays=reuse_arrays, mutable_work=mutable_work, &\n                                  replication_type=replication_type)\n         END IF\n      END IF\n   END SUBROUTINE dbcsr_create_template\n\n   SUBROUTINE dbcsr_filter(matrix, eps, method, use_absolute, filter_diag)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      REAL(dp), INTENT(IN)                               :: eps\n      INTEGER, INTENT(IN), OPTIONAL                      :: method\n      LOGICAL, INTENT(in), OPTIONAL                      :: use_absolute, filter_diag\n\n      CALL dbcsr_filter_anytype(matrix%prv, dbcsr_conform_scalar_prv(eps, matrix%prv), &\n                                method, use_absolute, filter_diag)\n   END SUBROUTINE dbcsr_filter\n\n   SUBROUTINE dbcsr_get_block_diag(matrix, diag)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: diag\n\n      CALL dbcsr_get_block_diag_prv(matrix%prv, diag%prv)\n   END SUBROUTINE dbcsr_get_block_diag\n\n   SUBROUTINE dbcsr_binary_write(matrix, filepath)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      CHARACTER(LEN=*), INTENT(IN)                       :: filepath\n\n      CALL dbcsr_binary_write_prv(matrix%prv, filepath)\n   END SUBROUTINE dbcsr_binary_write\n\n   SUBROUTINE dbcsr_binary_read(filepath, distribution, matrix_new)\n      CHARACTER(len=*), INTENT(IN)                       :: filepath\n      TYPE(dbcsr_distribution_type), INTENT(IN)          :: distribution\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_new\n\n      CALL dbcsr_binary_read_prv(filepath, distribution%prv, matrix_new%prv)\n   END SUBROUTINE dbcsr_binary_read\n\n   SUBROUTINE dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, &\n                         shallow_data, keep_imaginary, matrix_type)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n      CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: name\n      LOGICAL, INTENT(IN), OPTIONAL                      :: keep_sparsity, shallow_data, &\n                                                            keep_imaginary\n      CHARACTER, INTENT(IN), OPTIONAL                    :: matrix_type\n\n      CALL dbcsr_copy_prv(matrix_b%prv, matrix_a%prv, name, keep_sparsity, &\n                          shallow_data, keep_imaginary, matrix_type)\n   END SUBROUTINE dbcsr_copy\n\n   SUBROUTINE dbcsr_copy_into_existing(matrix_b, matrix_a)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n\n      CALL dbcsr_copy_into_existing_prv(matrix_b%prv, matrix_a%prv)\n   END SUBROUTINE dbcsr_copy_into_existing\n\n   SUBROUTINE dbcsr_desymmetrize(matrix_a, matrix_b)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b\n\n      CALL dbcsr_desymmetrize_deep_prv(matrix_a%prv, matrix_b%prv, untransposed_data=.TRUE.)\n   END SUBROUTINE dbcsr_desymmetrize\n\n   SUBROUTINE dbcsr_transposed(transposed, normal, shallow_data_copy, &\n                               transpose_data, transpose_distribution, use_distribution)\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: transposed\n      TYPE(dbcsr_type), INTENT(IN)                       :: normal\n      LOGICAL, INTENT(IN), OPTIONAL                      :: shallow_data_copy, transpose_data, &\n                                                            transpose_distribution\n      TYPE(dbcsr_distribution_type), INTENT(IN), &\n         OPTIONAL                                        :: use_distribution\n\n      IF (PRESENT(use_distribution)) THEN\n         CALL dbcsr_transposed_prv(transposed%prv, normal%prv, shallow_data_copy, &\n                                   transpose_data, transpose_distribution, &\n                                   use_distribution%prv)\n      ELSE\n         CALL dbcsr_transposed_prv(transposed%prv, normal%prv, shallow_data_copy, &\n                                   transpose_data, transpose_distribution)\n      END IF\n   END SUBROUTINE dbcsr_transposed\n\n   SUBROUTINE dbcsr_function_of_elements(matrix_a, func, a0, a1, a2)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n      INTEGER, INTENT(IN)                                :: func\n      REAL(kind=dp), INTENT(IN), OPTIONAL                :: a0, a1, a2\n\n      CALL dbcsr_function_of_elements_prv(matrix_a%prv, func, a0, a1, a2)\n   END SUBROUTINE dbcsr_function_of_elements\n\n   SUBROUTINE dbcsr_hadamard_product(matrix_a, matrix_b, matrix_c, b_assume_value)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c\n      REAL(KIND=dp), INTENT(IN), OPTIONAL                :: b_assume_value\n\n      CALL dbcsr_hadamard_product_prv(matrix_a%prv, matrix_b%prv, matrix_c%prv, b_assume_value)\n   END SUBROUTINE dbcsr_hadamard_product\n\n   SUBROUTINE dbcsr_deallocate_matrix(matrix)\n      !! Deallocates a DBCSR matrix for compatibility with CP2K\n\n      TYPE(dbcsr_type), POINTER                          :: matrix\n      !! DBCSR matrix\n\n      CALL dbcsr_release(matrix)\n      IF (dbcsr_valid_index(matrix)) &\n         CALL dbcsr_abort(__LOCATION__, &\n                          'You should not \"deallocate\" a referenced matrix. '// &\n                          'Avoid pointers to DBCSR matrices.')\n      DEALLOCATE (matrix)\n   END SUBROUTINE dbcsr_deallocate_matrix\n\n   PURE FUNCTION dbcsr_has_symmetry(matrix) RESULT(has_symmetry)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      LOGICAL                                            :: has_symmetry\n\n      has_symmetry = dbcsr_has_symmetry_prv(matrix%prv)\n   END FUNCTION dbcsr_has_symmetry\n\n   SUBROUTINE csr_create_new(csr_mat, nrows_total, ncols_total, nze_total, &\n                             nze_local, nrows_local, mp_group, data_type)\n      TYPE(dbcsr_csr_type), INTENT(OUT)                  :: csr_mat\n      INTEGER, INTENT(IN)                                :: nrows_total, ncols_total\n      INTEGER(KIND=int_8)                                :: nze_total\n      INTEGER, INTENT(IN)                                :: nze_local, nrows_local\n      INTEGER, INTENT(IN)                                :: mp_group\n      INTEGER, INTENT(IN), OPTIONAL                      :: data_type\n\n      TYPE(mp_comm_type)                                 :: my_mp_group\n\n      CALL my_mp_group%set_handle(mp_group)\n\n      CALL csr_create_new_prv(csr_mat, nrows_total, ncols_total, nze_total, &\n                              nze_local, nrows_local, my_mp_group, data_type)\n\n   END SUBROUTINE csr_create_new\n\n   SUBROUTINE dbcsr_csr_create_from_dbcsr(dbcsr_mat, csr_mat, dist_format, csr_sparsity, numnodes)\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat\n      TYPE(dbcsr_csr_type), INTENT(OUT)                  :: csr_mat\n      INTEGER                                            :: dist_format\n      TYPE(dbcsr_type), INTENT(IN), OPTIONAL             :: csr_sparsity\n      INTEGER, INTENT(IN), OPTIONAL                      :: numnodes\n\n      IF (PRESENT(csr_sparsity)) THEN\n         CALL csr_create_from_dbcsr_prv(dbcsr_mat%prv, csr_mat, dist_format, csr_sparsity%prv, numnodes)\n      ELSE\n         CALL csr_create_from_dbcsr_prv(dbcsr_mat%prv, csr_mat, dist_format, numnodes=numnodes)\n      END IF\n   END SUBROUTINE dbcsr_csr_create_from_dbcsr\n\n   SUBROUTINE dbcsr_convert_csr_to_dbcsr(dbcsr_mat, csr_mat)\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: dbcsr_mat\n      TYPE(dbcsr_csr_type), INTENT(INOUT)                :: csr_mat\n\n      CALL convert_csr_to_dbcsr_prv(dbcsr_mat%prv, csr_mat)\n   END SUBROUTINE dbcsr_convert_csr_to_dbcsr\n\n   SUBROUTINE dbcsr_convert_dbcsr_to_csr(dbcsr_mat, csr_mat)\n      TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat\n      TYPE(dbcsr_csr_type), INTENT(INOUT)                :: csr_mat\n\n      CALL convert_dbcsr_to_csr_prv(dbcsr_mat%prv, csr_mat)\n   END SUBROUTINE dbcsr_convert_dbcsr_to_csr\n\n   SUBROUTINE dbcsr_to_csr_filter(dbcsr_mat, csr_sparsity, eps)\n      !! Apply filtering threshold eps to DBCSR blocks in order to improve\n      !! CSR sparsity (currently only used for testing purposes)\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat\n      TYPE(dbcsr_type), INTENT(OUT)                      :: csr_sparsity\n      REAL(kind=real_8), INTENT(IN)                      :: eps\n\n      CALL dbcsr_to_csr_filter_prv(dbcsr_mat%prv, csr_sparsity%prv, eps)\n   END SUBROUTINE dbcsr_to_csr_filter\n\n   SUBROUTINE dbcsr_clear(dbcsr_mat)\n      !! Clear a matrix\n      TYPE(dbcsr_type), INTENT(INOUT) :: dbcsr_mat\n\n      CALL dbcsr_clear_prv(dbcsr_mat%prv)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_add_block_node(matrix, block_row, block_col, block)\n      !! Emulation of sparse_matrix_types/add_block_node mapped\n      !! to add_real_matrix_block.... should not be used any longer\n      !! It adds a block to the dbcsr matrix and returns a rank-2 pointer to the\n      !! block. Currently it only and always uses the mutable data.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      !! DBCSR matrix\n      INTEGER, INTENT(IN)                                :: block_row, block_col\n      !! the row\n      !! the column\n      REAL(KIND=dp), DIMENSION(:, :), POINTER            :: block\n      !! the block to put\n\n      call dbcsr_add_block_node_prv(matrix%prv, block_row, block_col, block)\n   END SUBROUTINE dbcsr_add_block_node\n\n   SUBROUTINE dbcsr_run_tests(mp_group, io_unit, nproc, matrix_sizes, trs, &\n                              bs_m, bs_n, bs_k, sparsities, alpha, beta, data_type, test_type, &\n                              n_loops, eps, retain_sparsity, always_checksum)\n\n      INTEGER, INTENT(IN)                                :: mp_group, io_unit\n      INTEGER, DIMENSION(:), POINTER                     :: nproc\n      INTEGER, DIMENSION(:), INTENT(in)                  :: matrix_sizes\n      LOGICAL, DIMENSION(2), INTENT(in)                  :: trs\n      INTEGER, DIMENSION(:), POINTER                     :: bs_m, bs_n, bs_k\n      REAL(kind=dp), DIMENSION(3), INTENT(in)            :: sparsities\n      REAL(kind=dp), INTENT(in)                          :: alpha, beta\n      INTEGER, INTENT(IN)                                :: data_type, test_type, n_loops\n      REAL(kind=dp), INTENT(in)                          :: eps\n      LOGICAL, INTENT(in)                                :: retain_sparsity, always_checksum\n\n      TYPE(mp_comm_type)                                 :: my_mp_group\n\n      CALL my_mp_group%set_handle(mp_group)\n\n      CALL dbcsr_run_tests_prv(my_mp_group, io_unit, nproc, matrix_sizes, trs, &\n                               bs_m, bs_n, bs_k, sparsities, alpha, beta, data_type, test_type, &\n                               n_loops, eps, retain_sparsity, always_checksum)\n\n   END SUBROUTINE dbcsr_run_tests\n\n   #:include 'data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float\n      SUBROUTINE dbcsr_reserve_block2d_${nametype1}$ (matrix, row, col, block, transposed, existed)\n         TYPE(dbcsr_type), INTENT(INOUT)          :: matrix\n         INTEGER, INTENT(IN)                      :: row, col\n         ${type1}$, DIMENSION(:, :), POINTER        :: block\n         LOGICAL, INTENT(IN), OPTIONAL            :: transposed\n         LOGICAL, INTENT(OUT), OPTIONAL           :: existed\n\n         CALL dbcsr_reserve_block2d_prv(matrix%prv, row, col, block, &\n                                        transposed, existed)\n      END SUBROUTINE dbcsr_reserve_block2d_${nametype1}$\n\n      SUBROUTINE dbcsr_iterator_next_2d_block_${nametype1}$ (iterator, row, column, block, &\n                                                             transposed, block_number, &\n                                                             row_size, col_size, row_offset, col_offset)\n         TYPE(dbcsr_iterator_type), INTENT(INOUT) :: iterator\n         INTEGER, INTENT(OUT)                     :: row, column\n         ${type1}$, DIMENSION(:, :), POINTER        :: block\n         LOGICAL, INTENT(OUT)                     :: transposed\n         INTEGER, INTENT(OUT), OPTIONAL           :: block_number, row_size, &\n                                                     col_size, row_offset, &\n                                                     col_offset\n\n         CALL dbcsr_iterator_next_block_prv(iterator%prv, row, column, block, transposed, &\n                                            block_number, row_size, col_size, row_offset, col_offset)\n      END SUBROUTINE dbcsr_iterator_next_2d_block_${nametype1}$\n\n      SUBROUTINE dbcsr_iterator_next_2d_block_notrans_${nametype1}$ (iterator, row, column, block, &\n                                                                     block_number, &\n                                                                     row_size, col_size, row_offset, col_offset)\n         TYPE(dbcsr_iterator_type), INTENT(INOUT) :: iterator\n         INTEGER, INTENT(OUT)                     :: row, column\n         ${type1}$, DIMENSION(:, :), POINTER        :: block\n         INTEGER, INTENT(OUT), OPTIONAL           :: block_number, row_size, &\n                                                     col_size, row_offset, &\n                                                     col_offset\n\n         LOGICAL                                  :: tr\n\n         CALL dbcsr_iterator_next_block_prv(iterator%prv, row, column, block, tr, &\n                                            block_number, row_size, col_size, row_offset, col_offset)\n         IF (tr) DBCSR_ABORT(\"Block is transposed!\")\n      END SUBROUTINE dbcsr_iterator_next_2d_block_notrans_${nametype1}$\n\n! **************************************************************************************************\n! *************************************************************************************************\n      SUBROUTINE dbcsr_iterator_next_1d_block_${nametype1}$ (iterator, row, column, block, &\n                                                             transposed, block_number, &\n                                                             row_size, col_size, row_offset, col_offset)\n         TYPE(dbcsr_iterator_type), INTENT(INOUT)  :: iterator\n         INTEGER, INTENT(OUT)                      :: row, column\n         ${type1}$, DIMENSION(:), POINTER            :: block\n         LOGICAL, INTENT(OUT)                      :: transposed\n         INTEGER, INTENT(OUT), OPTIONAL            :: block_number, row_size, &\n                                                      col_size, row_offset, &\n                                                      col_offset\n\n         CALL dbcsr_iterator_next_block_prv(iterator%prv, row, column, block, &\n                                            transposed, block_number, row_size, col_size, row_offset, col_offset)\n      END SUBROUTINE dbcsr_iterator_next_1d_block_${nametype1}$\n\n! **************************************************************************************************\n! *************************************************************************************************\n      SUBROUTINE dbcsr_iterator_next_1d_block_notrans_${nametype1}$ (iterator, row, column, block, &\n                                                                     block_number, &\n                                                                     row_size, col_size, row_offset, col_offset)\n         TYPE(dbcsr_iterator_type), INTENT(INOUT)  :: iterator\n         INTEGER, INTENT(OUT)                      :: row, column\n         ${type1}$, DIMENSION(:), POINTER            :: block\n         INTEGER, INTENT(OUT), OPTIONAL            :: block_number, row_size, &\n                                                      col_size, row_offset, &\n                                                      col_offset\n\n         LOGICAL                                   :: tr\n\n         CALL dbcsr_iterator_next_block_prv(iterator%prv, row, column, block, &\n                                            tr, block_number, row_size, col_size, row_offset, col_offset)\n         IF (tr) DBCSR_ABORT(\"Block is transposed!\")\n      END SUBROUTINE dbcsr_iterator_next_1d_block_notrans_${nametype1}$\n\n      SUBROUTINE dbcsr_put_block2d_${nametype1}$ (matrix, row, col, block, &\n                                                  summation, scale)\n         TYPE(dbcsr_type), INTENT(INOUT)          :: matrix\n         INTEGER, INTENT(IN)                      :: row, col\n         ${type1}$, DIMENSION(:, :), INTENT(IN)     :: block\n         LOGICAL, INTENT(IN), OPTIONAL            :: summation\n         ${type1}$, INTENT(IN), OPTIONAL            :: scale\n\n         CALL dbcsr_put_block_prv(matrix%prv, row, col, block, summation=summation, scale=scale)\n      END SUBROUTINE dbcsr_put_block2d_${nametype1}$\n\n      SUBROUTINE dbcsr_put_block_${nametype1}$ (matrix, row, col, block, &\n                                                summation, scale)\n         TYPE(dbcsr_type), INTENT(INOUT)          :: matrix\n         INTEGER, INTENT(IN)                      :: row, col\n         ${type1}$, DIMENSION(:), INTENT(IN)        :: block\n         LOGICAL, INTENT(IN), OPTIONAL            :: summation\n         ${type1}$, INTENT(IN), OPTIONAL            :: scale\n\n         CALL dbcsr_put_block_prv(matrix%prv, row, col, block, summation=summation, scale=scale)\n      END SUBROUTINE dbcsr_put_block_${nametype1}$\n\n      SUBROUTINE dbcsr_get_2d_block_p_${nametype1}$ (matrix, row, col, block, tr, found, row_size, col_size)\n         TYPE(dbcsr_type), INTENT(INOUT)          :: matrix\n         INTEGER, INTENT(IN)                      :: row, col\n         ${type1}$, DIMENSION(:, :), POINTER        :: block\n         LOGICAL, INTENT(OUT)                     :: tr\n         LOGICAL, INTENT(OUT)                     :: found\n         INTEGER, INTENT(OUT), OPTIONAL           :: row_size, col_size\n\n         CALL dbcsr_get_block_p_prv(matrix%prv, row, col, block, tr, found, row_size, col_size)\n      END SUBROUTINE dbcsr_get_2d_block_p_${nametype1}$\n\n      SUBROUTINE dbcsr_get_2d_block_notrans_p_${nametype1}$ (matrix, row, col, block, found, row_size, col_size)\n         TYPE(dbcsr_type), INTENT(INOUT)          :: matrix\n         INTEGER, INTENT(IN)                      :: row, col\n         ${type1}$, DIMENSION(:, :), POINTER        :: block\n         LOGICAL, INTENT(OUT)                     :: found\n         INTEGER, INTENT(OUT), OPTIONAL           :: row_size, col_size\n\n         LOGICAL                                  :: tr\n\n         CALL dbcsr_get_block_p_prv(matrix%prv, row, col, block, tr, found, row_size, col_size)\n         IF (tr) DBCSR_ABORT(\"Block is transposed!\")\n      END SUBROUTINE dbcsr_get_2d_block_notrans_p_${nametype1}$\n\n      SUBROUTINE dbcsr_get_block_p_${nametype1}$ (matrix, row, col, block, tr, found, row_size, col_size)\n         TYPE(dbcsr_type), INTENT(IN)              :: matrix\n         INTEGER, INTENT(IN)                       :: row, col\n         ${type1}$, DIMENSION(:), POINTER            :: block\n         LOGICAL, INTENT(OUT)                      :: tr\n         LOGICAL, INTENT(OUT)                      :: found\n         INTEGER, INTENT(OUT), OPTIONAL            :: row_size, col_size\n\n         CALL dbcsr_get_block_p_prv(matrix%prv, row, col, block, tr, found, row_size, col_size)\n      END SUBROUTINE dbcsr_get_block_p_${nametype1}$\n\n      SUBROUTINE dbcsr_get_block_notrans_p_${nametype1}$ (matrix, row, col, block, found, row_size, col_size)\n         TYPE(dbcsr_type), INTENT(IN)              :: matrix\n         INTEGER, INTENT(IN)                       :: row, col\n         ${type1}$, DIMENSION(:), POINTER            :: block\n         LOGICAL, INTENT(OUT)                      :: found\n         INTEGER, INTENT(OUT), OPTIONAL            :: row_size, col_size\n\n         LOGICAL                                   :: tr\n\n         CALL dbcsr_get_block_p_prv(matrix%prv, row, col, block, tr, found, row_size, col_size)\n         IF (tr) DBCSR_ABORT(\"Block is transposed!\")\n      END SUBROUTINE dbcsr_get_block_notrans_p_${nametype1}$\n\n      SUBROUTINE dbcsr_trace_${nametype1}$ (matrix_a, trace)\n         TYPE(dbcsr_type), INTENT(IN)              :: matrix_a\n         ${type1}$, INTENT(OUT)                     :: trace\n\n         CALL dbcsr_trace_prv(matrix_a%prv, trace)\n      END SUBROUTINE dbcsr_trace_${nametype1}$\n\n      SUBROUTINE dbcsr_dot_${nametype1}$ (matrix_a, matrix_b, result)\n         TYPE(dbcsr_type), INTENT(IN)              :: matrix_a, matrix_b\n         ${type1}$, INTENT(INOUT)                  :: result\n\n         CALL dbcsr_dot_prv(matrix_a%prv, matrix_b%prv, result)\n      END SUBROUTINE dbcsr_dot_${nametype1}$\n\n      SUBROUTINE dbcsr_multiply_${nametype1}$ (transa, transb, &\n                                               alpha, matrix_a, matrix_b, beta, matrix_c, &\n                                               first_row, last_row, first_column, last_column, first_k, last_k, &\n                                               retain_sparsity, filter_eps, flop)\n         CHARACTER(LEN=1), INTENT(IN)             :: transa, transb\n         ${type1}$, INTENT(IN)                      :: alpha\n         TYPE(dbcsr_type), INTENT(IN)             :: matrix_a, matrix_b\n         ${type1}$, INTENT(IN)                      :: beta\n         TYPE(dbcsr_type), INTENT(INOUT)          :: matrix_c\n         INTEGER, INTENT(IN), OPTIONAL            :: first_row, last_row, &\n                                                     first_column, last_column, &\n                                                     first_k, last_k\n         LOGICAL, INTENT(IN), OPTIONAL            :: retain_sparsity\n         REAL(kind=${kind2[n]}$), INTENT(IN), OPTIONAL :: filter_eps\n         INTEGER(int_8), INTENT(OUT), OPTIONAL    :: flop\n\n         CALL dbcsr_multiply_prv(transa, transb, &\n                                 alpha, matrix_a%prv, matrix_b%prv, beta, matrix_c%prv, &\n                                 first_row, last_row, first_column, last_column, first_k, last_k, &\n                                 retain_sparsity, &\n                                 filter_eps=filter_eps, &\n                                 flop=flop)\n      END SUBROUTINE dbcsr_multiply_${nametype1}$\n\n      SUBROUTINE dbcsr_scale_by_vector_${nametype1}$ (matrix_a, alpha, side)\n         TYPE(dbcsr_type), INTENT(INOUT)           :: matrix_a\n         ${type1}$, DIMENSION(:), INTENT(IN), TARGET :: alpha\n         CHARACTER(LEN=*), INTENT(IN)              :: side\n\n         CALL dbcsr_scale_by_vector_prv(matrix_a%prv, alpha, side)\n      END SUBROUTINE dbcsr_scale_by_vector_${nametype1}$\n\n      SUBROUTINE dbcsr_scale_${nametype1}$ (matrix_a, alpha_scalar, last_column)\n         TYPE(dbcsr_type), INTENT(INOUT)          :: matrix_a\n         ${type1}$, INTENT(IN)                      :: alpha_scalar\n         INTEGER, INTENT(IN), OPTIONAL            :: last_column\n\n         CALL dbcsr_scale_prv(matrix_a%prv, alpha_scalar, last_column)\n      END SUBROUTINE dbcsr_scale_${nametype1}$\n\n      SUBROUTINE dbcsr_set_${nametype1}$ (matrix, alpha)\n         TYPE(dbcsr_type), INTENT(INOUT)       :: matrix\n         ${type1}$, INTENT(IN)                      :: alpha\n\n         CALL dbcsr_set_prv(matrix%prv, alpha)\n      END SUBROUTINE dbcsr_set_${nametype1}$\n\n      SUBROUTINE dbcsr_add_${nametype1}$ (matrix_a, matrix_b, alpha_scalar, beta_scalar)\n         TYPE(dbcsr_type), INTENT(INOUT)          :: matrix_a\n         TYPE(dbcsr_type), INTENT(IN)             :: matrix_b\n         ${type1}$, INTENT(IN)                      :: alpha_scalar, beta_scalar\n\n         CALL dbcsr_add_prv(matrix_a%prv, matrix_b%prv, alpha_scalar, beta_scalar)\n      END SUBROUTINE dbcsr_add_${nametype1}$\n\n      SUBROUTINE dbcsr_add_on_diag_${nametype1}$ (matrix, alpha_scalar)\n         TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         ${type1}$, INTENT(IN)                                :: alpha_scalar\n\n         CALL dbcsr_add_on_diag_prv(matrix%prv, alpha_scalar)\n      END SUBROUTINE dbcsr_add_on_diag_${nametype1}$\n\n      SUBROUTINE dbcsr_set_diag_${nametype1}$ (matrix, diag)\n         TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         ${type1}$, DIMENSION(:), INTENT(IN)                  :: diag\n\n         CALL dbcsr_set_diag_prv(matrix%prv, diag)\n      END SUBROUTINE dbcsr_set_diag_${nametype1}$\n\n      SUBROUTINE dbcsr_get_diag_${nametype1}$ (matrix, diag)\n         TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         ${type1}$, DIMENSION(:), INTENT(OUT)                 :: diag\n\n         CALL dbcsr_get_diag_prv(matrix%prv, diag)\n      END SUBROUTINE dbcsr_get_diag_${nametype1}$\n\n      FUNCTION dbcsr_get_wms_data_${nametype1}$ (matrix, index_matrix, select_data_type, lb, ub) RESULT(DATA)\n         TYPE(dbcsr_type), INTENT(IN)     :: matrix\n         INTEGER, INTENT(IN)              :: index_matrix\n         ${type1}$, INTENT(IN)              :: select_data_type\n         ${type1}$, DIMENSION(:), POINTER   :: DATA\n         INTEGER, INTENT(IN), OPTIONAL    :: lb, ub\n\n         DATA => dbcsr_get_data_p_prv(matrix%prv%wms(index_matrix)%data_area, select_data_type, lb, ub)\n      END FUNCTION dbcsr_get_wms_data_${nametype1}$\n\n      FUNCTION dbcsr_get_data_${nametype1}$ (matrix, select_data_type, lb, ub) RESULT(DATA)\n         TYPE(dbcsr_type), INTENT(IN)     :: matrix\n         ${type1}$, INTENT(IN)              :: select_data_type\n         ${type1}$, DIMENSION(:), POINTER   :: DATA\n         INTEGER, INTENT(IN), OPTIONAL    :: lb, ub\n\n         DATA => dbcsr_get_data_p_prv(matrix%prv%data_area, select_data_type, lb, ub)\n      END FUNCTION dbcsr_get_data_${nametype1}$\n   #:endfor\n\nEND MODULE dbcsr_api\n"
  },
  {
    "path": "src/dbcsr_api_c.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_api_c\n\n   USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_loc, c_ptr, c_double, c_sizeof, C_NULL_CHAR, &\n                                                                             c_float, c_f_pointer, c_int, c_long_long, &\n                                                                             c_char, c_null_ptr, c_bool, c_associated, &\n                                                                             c_float_complex, c_double_complex\n   USE dbcsr_api\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          dp, &\n                          int_8, &\n                          real_4, &\n                          real_8\n\n   IMPLICIT NONE\n   PRIVATE\n\n   #:include 'data/dbcsr.fypp'\n\nCONTAINS\n\n   SUBROUTINE c_f_string(c_str, str)\n      USE, INTRINSIC :: iso_c_binding, ONLY: c_ptr, c_f_pointer, c_char\n      TYPE(c_ptr), INTENT(in) :: c_str\n      CHARACTER(kind=c_char), POINTER :: arr(:)\n      CHARACTER(:, kind=c_char), ALLOCATABLE, INTENT(out) :: str\n      INTEGER(8) :: n, i\n      INTERFACE\n         ! steal std c library function rather than writing our own.\n         FUNCTION strlen(s) bind(c, name='strlen')\n            USE, INTRINSIC :: iso_c_binding, ONLY: c_ptr, c_size_t\n            IMPLICIT NONE\n            !----\n            TYPE(c_ptr), INTENT(in), value :: s\n            INTEGER(c_size_t) :: strlen\n         END FUNCTION strlen\n      END INTERFACE\n      n = strlen(c_str)\n      !****\n      CALL c_f_pointer(c_str, arr, [n])\n      ALLOCATE (CHARACTER(len=n) :: str)\n      DO i = 1, n\n         str(i:i) = arr(i)\n      END DO\n   END SUBROUTINE c_f_string\n\n   !----------------------------------------------------!\n   !                    lib init/finalize               !\n   !----------------------------------------------------!\n\n   SUBROUTINE c_dbcsr_clear_mempools() BIND(C, name=\"c_dbcsr_clear_mempools\")\n      CALL dbcsr_clear_mempools()\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_init_lib(fcomm, io_unit) bind(C, name=\"c_dbcsr_init_lib_internal\")\n      INTEGER(kind=c_int), INTENT(in)                    :: fcomm\n      INTEGER(kind=c_int), INTENT(in), optional          :: io_unit\n\n      CALL dbcsr_init_lib(fcomm, io_unit)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_finalise_lib() bind(C, name=\"c_dbcsr_finalize_lib\")\n      CALL dbcsr_finalize_lib()\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_mp_grid_setup(c_dist) BIND(C, name=\"c_dbcsr_mp_grid_setup\")\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_dist\n      TYPE(dbcsr_distribution_type), POINTER :: dist\n\n      CALL c_f_pointer(c_dist, dist)\n\n      CALL dbcsr_mp_grid_setup(dist)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_print_statistics(c_print_timers, c_callgraph_filename) &\n      BIND(C, name=\"c_dbcsr_print_statistics\")\n\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_print_timers\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_callgraph_filename\n\n      LOGICAL :: print_timers\n      CHARACTER(:, kind=c_char), ALLOCATABLE :: callgraph_filename\n\n      IF (C_ASSOCIATED(c_callgraph_filename)) CALL c_f_string(c_callgraph_filename, callgraph_filename)\n\n      IF (PRESENT(c_print_timers)) THEN\n         print_timers = c_print_timers\n         CALL dbcsr_print_statistics(print_timers=print_timers, &\n                                     callgraph_filename=callgraph_filename)\n      ELSE\n         CALL dbcsr_print_statistics(callgraph_filename=callgraph_filename)\n      END IF\n\n   END SUBROUTINE\n\n   ! create / release\n   !PUBLIC :: dbcsr_distribution_hold\n   !PUBLIC :: dbcsr_distribution_release\n   !PUBLIC :: dbcsr_distribution_new\n   !--- PUBLIC :: dbcsr_create\n   ! SKIP PUBLIC :: dbcsr_init_p\n   !PUBLIC :: dbcsr_release\n   ! SKIP PUBLIC :: dbcsr_release_p\n   ! SKIP PUBLIC :: dbcsr_deallocate_matrix\n\n   !-------------------------------------------------------!\n   !                    create/release                     !\n   !-------------------------------------------------------!\n\n   SUBROUTINE c_dbcsr_distribution_hold(c_dist) &\n      BIND(C, name=\"c_dbcsr_distribution_hold\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_dist\n      TYPE(dbcsr_distribution_type), POINTER :: dist\n\n      CALL c_f_pointer(c_dist, dist)\n\n      CALL dbcsr_distribution_hold(dist)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_distribution_new(c_dist, fcomm, c_row_dist, row_dist_size, &\n                                       c_col_dist, col_dist_size) &\n      bind(C, name=\"c_dbcsr_distribution_new_aux\")\n      TYPE(c_ptr), INTENT(out)                           :: c_dist\n      INTEGER(kind=c_int), INTENT(in)                    :: fcomm\n      INTEGER(kind=c_int), INTENT(in), value             :: row_dist_size\n      INTEGER(kind=c_int), INTENT(in), TARGET            :: c_row_dist(row_dist_size)\n      INTEGER(kind=c_int), INTENT(in), value             :: col_dist_size\n      INTEGER(kind=c_int), INTENT(in), TARGET            :: c_col_dist(col_dist_size)\n\n      INTEGER, POINTER                                   :: col_dist(:), row_dist(:)\n      TYPE(dbcsr_distribution_type), POINTER             :: dist\n\n      ALLOCATE (dist)\n      row_dist => c_row_dist\n      col_dist => c_col_dist\n      CALL dbcsr_distribution_new(dist, group=fcomm, row_dist=row_dist, &\n                                  col_dist=col_dist, reuse_arrays=.FALSE.)\n      c_dist = c_loc(dist)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_distribution_release(c_dist) bind(C, name=\"c_dbcsr_distribution_release\")\n      TYPE(c_ptr), INTENT(inout)                         :: c_dist\n\n      TYPE(dbcsr_distribution_type), POINTER             :: dist\n\n      CALL c_f_pointer(c_dist, dist)\n\n      CALL dbcsr_distribution_release(dist)\n\n      DEALLOCATE (dist)\n\n      c_dist = c_null_ptr\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_release(c_matrix) bind(C, name=\"c_dbcsr_release\")\n      TYPE(c_ptr), INTENT(inout)                         :: c_matrix\n\n      TYPE(dbcsr_type), POINTER                          :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n\n      CALL dbcsr_release(matrix)\n\n      DEALLOCATE (matrix)\n\n      c_matrix = c_null_ptr\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_create_new(c_matrix, c_name, c_dist, c_matrix_type, &\n                                 c_row_blk_size, c_row_size, &\n                                 c_col_blk_size, c_col_size, &\n                                 c_nze, c_data_type, c_reuse, &\n                                 c_reuse_arrays, c_mutable_work, c_replication_type) &\n      BIND(C, name=\"c_dbcsr_create_new\")\n\n      TYPE(c_ptr), INTENT(INOUT) :: c_matrix\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_name\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_dist\n      CHARACTER(kind=c_char), INTENT(IN), VALUE :: c_matrix_type\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row_size, &\n                                                c_col_size\n      INTEGER(kind=c_int), INTENT(IN), TARGET :: c_row_blk_size(c_row_size), &\n                                                 c_col_blk_size(c_col_size)\n      INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_nze, c_data_type\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_reuse, c_reuse_arrays, &\n                                                    c_mutable_work\n      CHARACTER(kind=c_char), INTENT(IN), OPTIONAL :: c_replication_type\n\n      TYPE(dbcsr_type), POINTER :: matrix\n      CHARACTER(:, kind=c_char), ALLOCATABLE  :: name\n      TYPE(dbcsr_distribution_type), POINTER :: dist\n      INTEGER, DIMENSION(:), POINTER :: row_blk_size, col_blk_size\n      LOGICAL, POINTER :: reuse, reuse_arrays, mutable_work\n\n      ALLOCATE (matrix)\n      CALL c_f_pointer(c_dist, dist)\n      CALL c_f_string(c_name, name)\n\n      row_blk_size => c_row_blk_size\n      col_blk_size => c_col_blk_size\n\n      #:set list = ['reuse', 'reuse_arrays', 'mutable_work']\n      #:for var in list\n         NULLIFY (${var}$)\n         IF (PRESENT(c_${var}$)) THEN\n            ALLOCATE (${var}$)\n            ${var}$ = c_${var}$\n         END IF\n      #:endfor\n\n      CALL dbcsr_create(matrix, name, dist, c_matrix_type, &\n                        row_blk_size, col_blk_size, &\n                        c_nze, c_data_type, reuse, &\n                        reuse_arrays, mutable_work, c_replication_type)\n\n      #:for var in list\n         IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$)\n      #:endfor\n\n      c_matrix = c_loc(matrix)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_create_template(c_matrix, c_name, c_template, &\n                                      c_dist, c_matrix_type, &\n                                      c_row_blk_size, c_row_size, &\n                                      c_col_blk_size, c_col_size, &\n                                      c_nze, c_data_type, &\n                                      c_reuse_arrays, c_mutable_work, c_replication_type) &\n      BIND(C, name=\"c_dbcsr_create_template\")\n\n      TYPE(c_ptr), INTENT(INOUT) :: c_matrix\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_name\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_template\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_dist\n      CHARACTER(kind=c_char), INTENT(IN), OPTIONAL :: c_matrix_type\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row_size, &\n                                                c_col_size\n      INTEGER(kind=c_int), INTENT(IN), OPTIONAL, TARGET :: c_row_blk_size(c_row_size), &\n                                                           C_col_blk_size(c_col_size)\n      INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_nze, c_data_type\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_reuse_arrays, &\n                                                    c_mutable_work\n      CHARACTER(kind=c_char), INTENT(IN), OPTIONAL :: c_replication_type\n\n      TYPE(dbcsr_type), POINTER :: matrix, template\n      CHARACTER(:, kind=c_char), ALLOCATABLE  :: name\n      INTEGER, DIMENSION(:), POINTER :: row_blk_size, col_blk_size\n      TYPE(dbcsr_distribution_type), POINTER :: dist\n      LOGICAL, POINTER :: reuse_arrays, mutable_work\n\n      ALLOCATE (matrix)\n      CALL c_f_pointer(c_template, template)\n      CALL c_f_string(c_name, name)\n\n      NULLIFY (row_blk_size)\n      NULLIFY (col_blk_size)\n      IF (PRESENT(c_row_blk_size)) row_blk_size => c_row_blk_size\n      IF (PRESENT(c_col_blk_size)) col_blk_size => c_col_blk_size\n\n      NULLIFY (dist)\n      IF (C_ASSOCIATED(c_dist)) CALL c_f_pointer(c_dist, dist)\n\n      #:set list = ['reuse_arrays', 'mutable_work']\n      #:for var in list\n         NULLIFY (${var}$)\n         IF (PRESENT(c_${var}$)) THEN\n            ALLOCATE (${var}$)\n            ${var}$ = c_${var}$\n         END IF\n      #:endfor\n\n      #:set optvars = [['row_blk_size'], ['col_blk_size']]\n      #:set optgroups = []\n      ${gen_vargroups(optvars,optgroups)}$\n\n      #:for i in range(len(optgroups))\n         ${print_groupif(optgroups,optvars,i,'PRESENT','c_')}$\n\n         CALL dbcsr_create(matrix, name, template, dist, c_matrix_type &\n                           ${print_group(optgroups[i])}$, &\n                           nze=c_nze, data_type=c_data_type, &\n                           reuse_arrays=reuse_arrays, mutable_work=mutable_work, &\n                           replication_type=c_replication_type)\n\n      #:endfor\n      $:\"ENDIF\"\n\n      #:for var in list\n         IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$)\n      #:endfor\n\n      c_matrix = c_loc(matrix)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_finalize(c_matrix) bind(C, name=\"c_dbcsr_finalize\")\n      TYPE(c_ptr), INTENT(in), value                     :: c_matrix\n\n      TYPE(dbcsr_type), POINTER                          :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n\n      CALL dbcsr_finalize(matrix)\n   END SUBROUTINE\n\n   !----------------------------------------------------------!\n   !              primitive matrix operations                 !\n   !----------------------------------------------------------!\n\n   #:for n, nametype, base, prec, kind, type, dkind, normname, ctype in c_inst_params_float\n\n      SUBROUTINE c_dbcsr_set_${nametype}$ (c_matrix, c_alpha) &\n         BIND(C, name=\"c_dbcsr_set_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         ${ctype}$, INTENT(IN), VALUE :: c_alpha\n         TYPE(dbcsr_type), POINTER :: matrix\n\n         CALL c_f_pointer(c_matrix, matrix)\n\n         CALL dbcsr_set(matrix, c_alpha)\n\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_add_${nametype}$ (c_matrix_a, c_matrix_b, c_alpha_scalar, c_beta_scalar) &\n         BIND(C, name=\"c_dbcsr_add_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_matrix_b\n         ${ctype}$, INTENT(IN), VALUE :: c_alpha_scalar, c_beta_scalar\n         TYPE(dbcsr_type), POINTER :: matrix_a, matrix_b\n\n         CALL c_f_pointer(c_matrix_a, matrix_a)\n         CALL c_f_pointer(c_matrix_b, matrix_b)\n         CALL dbcsr_add(matrix_a, matrix_b, c_alpha_scalar, c_beta_scalar)\n\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_scale_${nametype}$ (c_matrix_a, c_alpha_scalar, c_last_column) &\n         BIND(C, name=\"c_dbcsr_scale_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a\n         ${ctype}$, INTENT(IN), VALUE :: c_alpha_scalar\n         INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_last_column\n         TYPE(dbcsr_type), POINTER :: matrix_a\n\n         CALL c_f_pointer(c_matrix_a, matrix_a)\n         CALL dbcsr_scale(matrix_a, c_alpha_scalar, c_last_column)\n\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_scale_by_vector_${nametype}$ (c_matrix_a, c_alpha, c_alpha_size, c_side) &\n         BIND(C, name=\"c_dbcsr_scale_by_vector_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a\n         INTEGER(kind=c_int), INTENT(IN), VALUE :: c_alpha_size\n         ${ctype}$, INTENT(IN) :: c_alpha(c_alpha_size)\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_side\n         TYPE(dbcsr_type), POINTER :: matrix_a\n         CHARACTER(:, kind=c_char), ALLOCATABLE  :: side\n\n         CALL c_f_pointer(c_matrix_a, matrix_a)\n         CALL c_f_string(c_side, side)\n\n         CALL dbcsr_scale_by_vector(matrix_a, c_alpha, side)\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_multiply_${nametype}$ (c_transa, c_transb, &\n                                                c_alpha, c_matrix_a, c_matrix_b, c_beta, c_matrix_c, &\n                                                c_first_row, c_last_row, c_first_column, c_last_column, &\n                                                c_first_k, c_last_k, &\n                                                c_retain_sparsity, c_filter_eps, c_flop) &\n         BIND(C, name=\"c_dbcsr_multiply_${nametype}$\")\n\n         CHARACTER(kind=c_char), INTENT(in), value :: c_transa, c_transb\n         ${ctype}$, INTENT(in), value :: c_alpha, c_beta\n         TYPE(c_ptr), INTENT(in), VALUE :: c_matrix_a, c_matrix_b, c_matrix_c\n         INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_first_row, c_last_row, &\n                                                      c_first_column, c_last_column, &\n                                                      c_first_k, c_last_k\n         LOGICAL(c_bool), INTENT(in), OPTIONAL :: c_retain_sparsity\n         REAL(kind=c_double), OPTIONAL :: c_filter_eps\n         INTEGER(kind=c_long_long), OPTIONAL :: c_flop\n\n         LOGICAL                                            :: ret_sp\n         TYPE(dbcsr_type), POINTER                          :: matrix_a, matrix_b, matrix_c\n         INTEGER, POINTER :: first_row, last_row, first_column, last_column, first_k, last_k\n\n         #:set vars = ['first_row', 'last_row', 'first_column', 'last_column', 'first_k', 'last_k']\n         #:for var in vars\n            NULLIFY (${var}$)\n            IF (PRESENT(c_${var}$)) THEN\n               ALLOCATE (${var}$)\n               ${var}$ = c_${var}$+1\n            END IF\n         #:endfor\n\n         CALL c_f_pointer(c_matrix_a, matrix_a)\n         CALL c_f_pointer(c_matrix_b, matrix_b)\n         CALL c_f_pointer(c_matrix_c, matrix_c)\n\n         IF (PRESENT(c_retain_sparsity)) THEN\n            ret_sp = c_retain_sparsity\n            CALL dbcsr_multiply(c_transa, c_transb, &\n                                c_alpha, matrix_a, matrix_b, c_beta, matrix_c, &\n                                first_row, last_row, first_column, last_column, &\n                                first_k, last_k, &\n                                ret_sp, c_filter_eps, c_flop)\n         ELSE\n            CALL dbcsr_multiply(c_transa, c_transb, &\n                                c_alpha, matrix_a, matrix_b, c_beta, matrix_c, &\n                                first_row, last_row, first_column, last_column, &\n                                first_k, last_k, &\n                                filter_eps=c_filter_eps, flop=c_flop)\n         END IF\n\n         #:for var in vars\n            IF (PRESENT(c_${var}$)) DEALLOCATE (${var}$)\n         #:endfor\n\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_add_on_diag_${nametype}$ (c_matrix, c_alpha_scalar) &\n         BIND(C, name=\"c_dbcsr_add_on_diag_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         ${ctype}$, INTENT(IN) :: c_alpha_scalar\n         TYPE(dbcsr_type), POINTER :: matrix\n\n         CALL c_f_pointer(c_matrix, matrix)\n         CALL dbcsr_add_on_diag(matrix, c_alpha_scalar)\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_set_diag_${nametype}$ (c_matrix, c_diag, c_diag_size) &\n         BIND(C, name=\"c_dbcsr_set_diag_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         INTEGER(kind=c_int), INTENT(IN), VALUE :: c_diag_size\n         ${ctype}$, INTENT(IN) :: c_diag(c_diag_size)\n         TYPE(dbcsr_type), POINTER :: matrix\n\n         CALL c_f_pointer(c_matrix, matrix)\n         CALL dbcsr_set_diag(matrix, c_diag)\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_get_diag_${nametype}$ (c_matrix, c_diag, c_diag_size) &\n         BIND(C, name=\"c_dbcsr_get_diag_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         INTEGER(kind=c_int), INTENT(IN), VALUE :: c_diag_size\n         ${ctype}$, INTENT(INOUT) :: c_diag(c_diag_size)\n         TYPE(dbcsr_type), POINTER :: matrix\n\n         CALL c_f_pointer(c_matrix, matrix)\n         CALL dbcsr_get_diag(matrix, c_diag)\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_trace_${nametype}$ (c_matrix_a, c_trace) &\n         BIND(C, name=\"c_dbcsr_trace_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a\n         ${ctype}$, INTENT(OUT) :: c_trace\n         TYPE(dbcsr_type), POINTER :: matrix_a\n\n         CALL c_f_pointer(c_matrix_a, matrix_a)\n         CALL dbcsr_trace(matrix_a, c_trace)\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_dot_${nametype}$ (c_matrix_a, c_matrix_b, c_result) &\n         BIND(C, name=\"c_dbcsr_dot_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_matrix_b\n         ${ctype}$, INTENT(INOUT) :: c_result\n         TYPE(dbcsr_type), POINTER :: matrix_a, matrix_b\n\n         CALL c_f_pointer(c_matrix_a, matrix_a)\n         CALL c_f_pointer(c_matrix_b, matrix_b)\n         CALL dbcsr_dot(matrix_a, matrix_b, c_result)\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_get_block_p_${nametype}$ (c_matrix, c_row, c_col, c_block, &\n                                                   c_tr, c_found, c_row_size, c_col_size) &\n         BIND(C, name=\"c_dbcsr_get_block_p_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row, c_col\n         TYPE(c_ptr), INTENT(INOUT) :: c_block\n         LOGICAL(kind=c_bool), INTENT(OUT) :: c_tr, c_found\n         INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_row_size, c_col_size\n\n         TYPE(dbcsr_type), POINTER :: matrix\n         ${ctype}$, DIMENSION(:), POINTER :: block\n         LOGICAL :: tr, found\n\n         CALL c_f_pointer(c_matrix, matrix)\n\n         CALL dbcsr_get_block_p(matrix, c_row + 1, c_col + 1, block, tr, &\n                                found, c_row_size, c_col_size)\n\n         c_tr = tr\n         c_found = found\n         c_block = c_loc(block)\n\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_get_block_notrans_p_${nametype}$ (c_matrix, c_row, c_col, &\n                                                           c_block, c_found, c_row_size, c_col_size) &\n         BIND(C, name=\"c_dbcsr_get_block_notrans_p_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row, c_col\n         TYPE(c_ptr), INTENT(INOUT) :: c_block\n         LOGICAL(kind=c_bool), INTENT(OUT) :: c_found\n         INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_row_size, c_col_size\n\n         TYPE(dbcsr_type), POINTER :: matrix\n         ${ctype}$, DIMENSION(:), POINTER :: block\n         LOGICAL :: found\n\n         CALL c_f_pointer(c_matrix, matrix)\n\n         CALL dbcsr_get_block_p(matrix, c_row + 1, c_col + 1, block, found, &\n                                c_row_size, c_col_size)\n\n         c_block = c_loc(block)\n         c_found = found\n\n      END SUBROUTINE\n\n   #:endfor\n\n   SUBROUTINE c_dbcsr_complete_redistribute(c_matrix, c_redist, c_keep_sparsity, c_summation) &\n      BIND(C, name=\"c_dbcsr_complete_redistribute\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_redist\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_keep_sparsity, c_summation\n      TYPE(dbcsr_type), POINTER :: matrix, redist\n      LOGICAL, POINTER :: keep_sparsity, summation\n\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL c_f_pointer(c_redist, redist)\n\n      #:set vars = ['keep_sparsity', 'summation']\n      #:for var in vars\n         NULLIFY (${var}$)\n         IF (PRESENT(c_${var}$)) THEN\n            ALLOCATE (${var}$)\n            ${var}$ = c_${var}$\n         END IF\n      #:endfor\n\n      CALL dbcsr_complete_redistribute(matrix, redist, keep_sparsity, summation)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_filter(c_matrix, c_eps, c_method, c_use_absolute, c_filter_diag) &\n      BIND(C, name=\"c_dbcsr_filter\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      REAL(kind=c_double), INTENT(IN) :: c_eps\n      INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_method\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_use_absolute, c_filter_diag\n      TYPE(dbcsr_type), POINTER :: matrix\n      LOGICAL, POINTER :: use_absolute, filter_diag\n\n      CALL c_f_pointer(c_matrix, matrix)\n      #:set vars = ['use_absolute', 'filter_diag']\n      #:for var in vars\n         NULLIFY (${var}$)\n         IF (PRESENT(c_${var}$)) THEN\n            ALLOCATE (${var}$)\n            ${var}$ = c_${var}$\n         END IF\n      #:endfor\n      CALL dbcsr_filter(matrix, c_eps, c_method, use_absolute, filter_diag)\n      #:for var in vars\n         IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$)\n      #:endfor\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_get_block_diag(c_matrix, c_diag) &\n      BIND(C, name=\"c_dbcsr_get_block_diag\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(c_ptr), INTENT(INOUT) :: c_diag\n      TYPE(dbcsr_type), POINTER :: matrix, diag\n\n      CALL c_f_pointer(c_matrix, matrix)\n      IF (C_ASSOCIATED(c_diag)) THEN\n         CALL c_f_pointer(c_diag, diag)\n      ELSE\n         ALLOCATE (diag)\n      END IF\n\n      CALL dbcsr_get_block_diag(matrix, diag)\n      IF (.NOT. C_ASSOCIATED(c_diag)) c_diag = c_loc(diag)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_transposed(c_transposed, c_normal, c_shallow_data_copy, &\n                                 c_transpose_data, c_transpose_distribution, c_use_distribution) &\n      BIND(C, name=\"c_dbcsr_transposed\")\n\n      TYPE(c_ptr), INTENT(INOUT) :: c_transposed\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_normal, c_use_distribution\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_shallow_data_copy, c_transpose_data, &\n                                                    c_transpose_distribution\n\n      TYPE(dbcsr_type), POINTER :: transposed, normal\n      LOGICAL, POINTER :: shallow_data_copy, transpose_data, &\n                          transpose_distribution\n      TYPE(dbcsr_distribution_type), POINTER :: use_distribution\n\n      ALLOCATE (transposed)\n      CALL c_f_pointer(c_normal, normal)\n      IF (C_ASSOCIATED(c_use_distribution)) &\n         CALL c_f_pointer(c_use_distribution, use_distribution)\n\n      #:set vars = ['shallow_data_copy', 'transpose_data', 'transpose_distribution']\n      #:for var in vars\n         NULLIFY (${var}$)\n         IF (PRESENT(c_${var}$)) THEN\n            ALLOCATE (${var}$)\n            ${var}$ = c_${var}$\n         END IF\n      #:endfor\n\n      CALL dbcsr_transposed(transposed, normal, shallow_data_copy, &\n                            transpose_data, transpose_distribution, use_distribution)\n\n      c_transposed = c_loc(transposed)\n\n      #:for var in vars\n         IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$)\n      #:endfor\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_copy(c_matrix_b, c_matrix_a, c_name, c_keep_sparsity, &\n                           c_shallow_data, c_keep_imaginary, c_matrix_type) &\n      BIND(C, name=\"c_dbcsr_copy\")\n\n      TYPE(c_ptr), INTENT(INOUT) :: c_matrix_b\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_name\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_keep_sparsity, c_shallow_data, &\n                                                    c_keep_imaginary\n      CHARACTER(kind=c_char), INTENT(IN), OPTIONAL :: c_matrix_type\n\n      TYPE(dbcsr_type), POINTER :: matrix_b, matrix_a\n      CHARACTER(:, kind=c_char), ALLOCATABLE  :: name\n      LOGICAL, POINTER :: keep_sparsity, shallow_data, &\n                          keep_imaginary\n\n      IF (C_ASSOCIATED(c_matrix_b)) THEN\n         CALL c_f_pointer(c_matrix_b, matrix_b)\n      ELSE\n         ALLOCATE (matrix_b)\n      END IF\n\n      IF (C_ASSOCIATED(c_name)) CALL c_f_string(c_name, name)\n\n      CALL c_f_pointer(c_matrix_a, matrix_a)\n\n      #:set vars = ['keep_sparsity', 'shallow_data', 'keep_imaginary']\n      #:for var in vars\n         NULLIFY (${var}$)\n         IF (PRESENT(c_${var}$)) THEN\n            ALLOCATE (${var}$)\n            ${var}$ = c_${var}$\n         END IF\n      #:endfor\n\n      CALL dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, &\n                      shallow_data, keep_imaginary, c_matrix_type)\n\n      #:for var in vars\n         IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$)\n      #:endfor\n      IF (.NOT. C_ASSOCIATED(c_matrix_b)) c_matrix_b = c_loc(matrix_b)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_copy_into_existing(c_matrix_b, c_matrix_a) &\n      BIND(C, name=\"c_dbcsr_copy_into_existing\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_matrix_b\n      TYPE(dbcsr_type), POINTER :: matrix_b, matrix_a\n\n      CALL c_f_pointer(c_matrix_a, matrix_a)\n      CALL c_f_pointer(c_matrix_b, matrix_b)\n\n      CALL dbcsr_copy_into_existing(matrix_b, matrix_a)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_desymmetrize(c_matrix_a, c_matrix_b) &\n      BIND(C, name=\"c_dbcsr_desymmetrize\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a\n      TYPE(c_ptr), INTENT(INOUT) :: c_matrix_b\n      TYPE(dbcsr_type), POINTER :: matrix_a, matrix_b\n\n      CALL c_f_pointer(c_matrix_a, matrix_a)\n      IF (C_ASSOCIATED(c_matrix_b)) THEN\n         CALL c_f_pointer(c_matrix_b, matrix_b)\n      ELSE\n         ALLOCATE (matrix_b)\n      END IF\n\n      CALL dbcsr_desymmetrize(matrix_a, matrix_b)\n      IF (.NOT. C_ASSOCIATED(c_matrix_b)) c_matrix_b = c_loc(matrix_b)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_clear(c_dbcsr_mat) BIND(C, name=\"c_dbcsr_clear\")\n      TYPE(c_ptr), INTENT(INOUT) :: c_dbcsr_mat\n      TYPE(dbcsr_type), POINTER :: dbcsr_mat\n      CALL c_f_pointer(c_dbcsr_mat, dbcsr_mat)\n      CALL dbcsr_clear(dbcsr_mat)\n      c_dbcsr_mat = c_loc(dbcsr_mat)\n   END SUBROUTINE\n\n   ! block reservation\n   !PUBLIC :: dbcsr_reserve_diag_blocks\n   !PUBLIC :: dbcsr_reserve_block2d\n   ! MODIFIED !!! PUBLIC :: dbcsr_reserve_blocks\n   !PUBLIC :: dbcsr_reserve_all_blocks\n\n   !-----------------------------------------------------------------!\n   !                   block_reservations                            !\n   !-----------------------------------------------------------------!\n\n   SUBROUTINE c_dbcsr_reserve_diag_blocks(c_matrix) &\n      BIND(C, name=\"c_dbcsr_reserve_diag_blocks\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL dbcsr_reserve_diag_blocks(matrix)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_reserve_blocks(c_matrix, c_rows, c_cols, c_size) &\n      BIND(C, name=\"c_dbcsr_reserve_blocks\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: c_size\n      INTEGER(kind=c_int), INTENT(IN) :: c_rows(c_size), c_cols(c_size)\n      TYPE(dbcsr_type), POINTER:: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n\n      CALL dbcsr_reserve_blocks(matrix, c_rows + 1, c_cols + 1)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_reserve_all_blocks(c_matrix) &\n      BIND(C, name=\"c_dbcsr_reserve_all_blocks\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL dbcsr_reserve_all_blocks(matrix)\n   END SUBROUTINE\n\n   #:for n, nametype, base, prec, kind, type, dkind, normname, ctype in c_inst_params_float\n\n      SUBROUTINE c_dbcsr_reserve_block2d_${nametype}$ (c_matrix, c_row, c_col, &\n                                                       c_block, c_row_size, c_col_size, c_transposed, c_existed) &\n         BIND(C, name=\"c_dbcsr_reserve_block2d_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         INTEGER(kind=c_int), INTENT(IN) :: c_row, c_col, c_row_size, c_col_size\n         ${ctype}$, INTENT(IN), DIMENSION(c_row_size, c_col_size), TARGET :: c_block\n         LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_transposed\n         LOGICAL(kind=c_bool), INTENT(OUT), OPTIONAL :: c_existed\n\n         TYPE(dbcsr_type), POINTER :: matrix\n         ${type}$, DIMENSION(:, :), POINTER        :: block\n         LOGICAL, POINTER :: transposed\n         LOGICAL, POINTER :: existed\n\n         CALL c_f_pointer(c_matrix, matrix)\n         block => c_block\n         NULLIFY (transposed)\n         NULLIFY (existed)\n         IF (PRESENT(c_transposed)) THEN\n            ALLOCATE (transposed)\n            transposed = c_transposed\n         END IF\n         IF (PRESENT(c_existed)) ALLOCATE (existed)\n\n         CALL dbcsr_reserve_block2d(matrix, c_row + 1, c_col + 1, block, transposed, existed)\n         IF (PRESENT(c_existed)) c_existed = existed\n      END SUBROUTINE\n\n   #:endfor\n\n   ! iterator\n   !PUBLIC :: dbcsr_iterator_start\n   !PUBLIC :: dbcsr_iterator_stop\n   !PUBLIC :: dbcsr_iterator_blocks_left\n   ! SOME MODS NEEDED PUBLIC :: dbcsr_iterator_next_block\n\n   !-------------------------------!\n   !        iterator               !\n   !-------------------------------!\n\n   SUBROUTINE c_dbcsr_iterator_stop(c_iterator) &\n      BIND(C, name=\"c_dbcsr_iterator_stop\")\n\n      TYPE(c_ptr), INTENT(INOUT) :: c_iterator\n      TYPE(dbcsr_iterator_type), POINTER :: iterator\n\n      CALL c_f_pointer(c_iterator, iterator)\n      CALL dbcsr_iterator_stop(iterator)\n      IF (ASSOCIATED(iterator)) DEALLOCATE (iterator)\n      c_iterator = c_null_ptr\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_iterator_start(c_iterator, c_matrix, c_shared, c_dynamic, &\n                                     c_dynamic_byrows, c_contiguous_pointers, c_read_only) &\n      BIND(C, name=\"c_dbcsr_iterator_start\")\n\n      TYPE(c_ptr), INTENT(INOUT) :: c_iterator\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_shared, c_dynamic, c_dynamic_byrows, &\n                                                    c_contiguous_pointers, c_read_only\n      TYPE(dbcsr_iterator_type), POINTER :: iterator\n      TYPE(dbcsr_type), POINTER :: matrix\n      LOGICAL, POINTER :: shared, dynamic, dynamic_byrows, &\n                          contiguous_pointers, read_only\n\n      ALLOCATE (iterator)\n      CALL c_f_pointer(c_matrix, matrix)\n      #:set vars = ['shared', 'dynamic', 'dynamic_byrows', 'contiguous_pointers', 'read_only']\n      #:for var in vars\n         NULLIFY (${var}$)\n         IF (PRESENT(c_${var}$)) THEN\n            ALLOCATE (${var}$)\n            ${var}$ = c_${var}$\n         END IF\n      #:endfor\n\n      CALL dbcsr_iterator_start(iterator, matrix, shared, dynamic, &\n                                dynamic_byrows, contiguous_pointers, read_only)\n\n      c_iterator = c_loc(iterator)\n      #:for var in vars\n         IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$)\n      #:endfor\n\n   END SUBROUTINE\n\n   FUNCTION c_dbcsr_iterator_blocks_left(c_iterator) RESULT(c_blocks_left) &\n      BIND(C, name=\"c_dbcsr_iterator_blocks_left\")\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_iterator\n      TYPE(dbcsr_iterator_type), POINTER :: iterator\n      LOGICAL(kind=c_bool) :: c_blocks_left\n\n      CALL c_f_pointer(c_iterator, iterator)\n      c_blocks_left = dbcsr_iterator_blocks_left(iterator)\n   END FUNCTION\n\n   SUBROUTINE c_dbcsr_iterator_next_block_index(c_iterator, c_row, c_column, c_blk, c_blk_p) &\n      BIND(C, name=\"c_dbcsr_iterator_next_block_index\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_iterator\n      INTEGER(kind=c_int), INTENT(OUT) :: c_row, c_column, c_blk\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_blk_p\n      TYPE(dbcsr_iterator_type), POINTER :: iterator\n\n      CALL c_f_pointer(c_iterator, iterator)\n\n      CALL dbcsr_iterator_next_block(iterator, c_row, c_column, c_blk, c_blk_p)\n\n      c_row = c_row - 1\n      c_column = c_column - 1\n      c_blk = c_blk - 1\n\n   END SUBROUTINE\n\n   #:for n, nametype, base, prec, kind, type, dkind, normname, ctype in c_inst_params_float\n      SUBROUTINE c_dbcsr_iterator_next_2d_block_${nametype}$ (c_iterator, c_row, c_column, c_block, &\n                                                              c_transposed, c_block_number, &\n                                                              c_row_size, c_col_size, c_row_offset, c_col_offset) &\n         BIND(C, name=\"c_dbcsr_iterator_next_2d_block_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_iterator\n         INTEGER(kind=c_int), INTENT(OUT) :: c_row, c_column\n         TYPE(c_ptr), INTENT(INOUT) :: c_block\n         LOGICAL(kind=c_bool), INTENT(OUT) :: c_transposed\n         INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_block_number, c_row_size, &\n                                                       c_col_size, c_row_offset, &\n                                                       c_col_offset\n         TYPE(dbcsr_iterator_type), POINTER :: iterator\n         ${ctype}$, DIMENSION(:, :), POINTER :: block\n         LOGICAL :: transposed\n\n         CALL c_f_pointer(c_iterator, iterator)\n\n         CALL dbcsr_iterator_next_block(iterator, c_row, c_column, block, &\n                                        transposed, c_block_number, &\n                                        c_row_size, c_col_size, c_row_offset, c_col_offset)\n\n         c_row = c_row - 1\n         c_column = c_column - 1\n\n         IF (PRESENT(c_block_number)) c_block_number = c_block_number - 1\n         IF (PRESENT(c_row_offset)) c_row_offset = c_row_offset - 1\n         IF (PRESENT(c_col_offset)) c_col_offset = c_col_offset - 1\n\n         c_transposed = transposed\n         c_block = c_loc(block)\n\n      END SUBROUTINE\n   #:endfor\n\n   !--------------------------------------------------------!\n   !                  work operations                       !\n   !--------------------------------------------------------!\n\n   ! SKIP PUBLIC :: dbcsr_add_block_node\n   !PUBLIC :: dbcsr_put_block\n   ! SKIP PUBLIC :: dbcsr_work_create\n   ! SKIP PUBLIC :: dbcsr_verify_matrix\n   ! SKIP PUBLIC :: dbcsr_add_work_coordinate\n   ! SKIP PUBLIC :: dbcsr_get_wms_data_p\n   ! MODIFIED PUBLIC :: dbcsr_get_data_p\n   ! SKIP PUBLIC :: dbcsr_set_work_size\n   ! SKIP PUBLIC :: dbcsr_finalize\n\n   #:for n, nametype, base, prec, kind, type, dkind, normname, ctype in c_inst_params_float\n      SUBROUTINE c_dbcsr_put_block2d_${nametype}$ (c_matrix, c_row, c_col, c_block, &\n                                                   c_row_size, c_col_size, c_summation, c_scale) &\n         BIND(C, name=\"c_dbcsr_put_block2d_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         INTEGER(kind=c_int), INTENT(IN), VALUE :: c_row, c_col, c_row_size, c_col_size\n         ${ctype}$, INTENT(IN) :: c_block(c_row_size, c_col_size)\n         LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_summation\n         ${ctype}$, INTENT(IN), OPTIONAL :: c_scale\n\n         TYPE(dbcsr_type), POINTER :: matrix\n         LOGICAL :: summation\n\n         CALL c_f_pointer(c_matrix, matrix)\n\n         IF (PRESENT(c_summation)) THEN\n            summation = c_summation\n            CALL dbcsr_put_block(matrix, c_row + 1, c_col + 1, c_block, summation, c_scale)\n         ELSE\n            CALL dbcsr_put_block(matrix, c_row + 1, c_col + 1, c_block, scale=c_scale)\n         END IF\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_get_data_${nametype}$ (c_matrix, c_data, c_data_size, c_select_data_type, c_lb, c_ub) &\n         BIND(C, name=\"c_dbcsr_get_data_${nametype}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         TYPE(c_ptr), INTENT(OUT) :: c_data\n         INTEGER(kind=c_long_long), INTENT(OUT) :: c_data_size\n         ${ctype}$, INTENT(IN) :: c_select_data_type\n         INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_lb, c_ub\n         INTEGER(kind=c_int), POINTER :: lb, ub\n         TYPE(dbcsr_type), POINTER :: matrix\n         ${ctype}$, DIMENSION(:), POINTER :: data\n\n         CALL c_f_pointer(c_matrix, matrix)\n         #:set vars = ['lb', 'ub']\n         #:for var in vars\n            NULLIFY (${var}$)\n            IF (PRESENT(c_${var}$)) THEN\n               ALLOCATE (${var}$)\n               ${var}$ = c_${var}$+1\n            END IF\n         #:endfor\n\n         data => dbcsr_get_data_p(matrix, c_select_data_type, lb, ub)\n         c_data = c_loc(data)\n         c_data_size = SIZE(data)\n\n      END SUBROUTINE\n\n   #:endfor\n\n   !------------------------------------------------------------!\n   !                   replication                              !\n   !------------------------------------------------------------!\n\n   !PUBLIC :: dbcsr_replicate_all\n   !PUBLIC :: dbcsr_sum_replicated\n   !PUBLIC :: dbcsr_distribute\n\n   SUBROUTINE c_dbcsr_replicate_all(c_matrix) &\n      BIND(C, name=\"c_dbcsr_replicate_all\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL dbcsr_replicate_all(matrix)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_distribute(c_matrix, c_fast) &\n      BIND(C, name=\"c_dbcsr_distribute\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_fast\n      TYPE(dbcsr_type), POINTER :: matrix\n      LOGICAL :: fast\n\n      CALL c_f_pointer(c_matrix, matrix)\n      IF (PRESENT(c_fast)) THEN\n         fast = c_fast\n         CALL dbcsr_distribute(matrix, fast)\n      ELSE\n         CALL dbcsr_distribute(matrix)\n      END IF\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_sum_replicated(c_matrix) &\n      BIND(C, name=\"c_dbcsr_sum_replicated\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n\n      CALL dbcsr_sum_replicated(matrix)\n   END SUBROUTINE\n\n   !PUBLIC :: dbcsr_norm_frobenius\n   !PUBLIC :: dbcsr_norm_maxabsnorm\n   !PUBLIC :: dbcsr_norm_column\n   !PUBLIC :: dbcsr_hadamard_product\n   !PUBLIC :: dbcsr_func_artanh\n   !PUBLIC :: dbcsr_func_dtanh\n   !PUBLIC :: dbcsr_func_inverse\n   !PUBLIC :: dbcsr_func_tanh\n   !PUBLIC :: dbcsr_print\n   !PUBLIC :: dbcsr_print_block_sum\n   !PUBLIC :: dbcsr_checksum\n   !PUBLIC :: dbcsr_maxabs\n   ! VECTOR? PUBLIC :: dbcsr_norm\n   !PUBLIC :: dbcsr_gershgorin_norm\n   !PUBLIC :: dbcsr_frobenius_norm\n   !PUBLIC :: dbcsr_init_random\n   !PUBLIC :: dbcsr_function_of_elements\n   !PUBLIC :: dbcsr_triu\n\n   !-----------------------------------------!\n   !       high level matrix functions       !\n   !-----------------------------------------!\n\n   SUBROUTINE c_dbcsr_hadamard_product(c_matrix_a, c_matrix_b, c_matrix_c, c_b_assume_value) &\n      BIND(C, name=\"c_dbcsr_hadamard_product\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix_a, c_matrix_b, c_matrix_c\n      REAL(kind=c_double), INTENT(IN), OPTIONAL :: c_b_assume_value\n      TYPE(dbcsr_type), POINTER :: matrix_a, matrix_b, matrix_c\n\n      CALL c_f_pointer(c_matrix_a, matrix_a)\n      CALL c_f_pointer(c_matrix_b, matrix_b)\n      CALL c_f_pointer(c_matrix_c, matrix_c)\n\n      CALL dbcsr_hadamard_product(matrix_a, matrix_b, matrix_c, c_b_assume_value)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_print(c_matrix) bind(C, name=\"c_dbcsr_print\")\n      TYPE(c_ptr), INTENT(in), value                     :: c_matrix\n\n      TYPE(dbcsr_type), POINTER                          :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n\n      CALL dbcsr_print(matrix)\n\n      ! Fortran and C may use different buffers for I/O, make sure we flush before returning:\n      flush (default_output_unit)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_print_block_sum(c_matrix, c_unit_nr) &\n      BIND(C, name=\"c_dbcsr_print_block_sum\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_unit_nr\n      TYPE(dbcsr_type), POINTER :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL dbcsr_print_block_sum(matrix, c_unit_nr)\n      FLUSH (default_output_unit)\n   END SUBROUTINE\n\n   FUNCTION c_dbcsr_checksum(c_matrix, c_local, c_pos) RESULT(c_checksum) &\n      BIND(C, name=\"c_dbcsr_checksum\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_local, c_pos\n      TYPE(dbcsr_type), POINTER :: matrix\n      LOGICAL, POINTER :: local, pos\n      REAL(kind=c_double) :: c_checksum\n\n      CALL c_f_pointer(c_matrix, matrix)\n      #:set vars = ['local','pos']\n      #:for var in vars\n         NULLIFY (${var}$)\n         IF (PRESENT(c_${var}$)) THEN\n            ALLOCATE (${var}$)\n            ${var}$ = c_${var}$\n         END IF\n      #:endfor\n      c_checksum = dbcsr_checksum(matrix, local, pos)\n      #:for var in vars\n         IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$)\n      #:endfor\n   END FUNCTION\n\n   FUNCTION c_dbcsr_maxabs(c_matrix) RESULT(c_norm) &\n      BIND(C, name=\"c_dbcsr_maxabs\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      REAL(kind=c_double) :: c_norm\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_norm = dbcsr_maxabs(matrix)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_gershgorin_norm(c_matrix) RESULT(c_norm) &\n      BIND(C, name=\"c_dbcsr_gershgorin_norm\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      REAL(kind=c_double) :: c_norm\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_norm = dbcsr_gershgorin_norm(matrix)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_frobenius_norm(c_matrix, c_local) RESULT(c_norm) &\n      BIND(C, name=\"c_dbcsr_frobenius_norm\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_local\n      TYPE(dbcsr_type), POINTER :: matrix\n      LOGICAL :: local\n      REAL(kind=c_double) :: c_norm\n\n      CALL c_f_pointer(c_matrix, matrix)\n      IF (PRESENT(c_local)) THEN\n         local = c_local\n         c_norm = dbcsr_frobenius_norm(matrix, local)\n      ELSE\n         c_norm = dbcsr_frobenius_norm(matrix)\n      END IF\n   END FUNCTION\n\n   SUBROUTINE c_dbcsr_norm_scalar(c_matrix, c_which_norm, c_norm_scalar) &\n      BIND(C, name=\"c_dbcsr_norm_scalar\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: c_which_norm\n      REAL(kind=c_double), INTENT(OUT) :: c_norm_scalar\n      TYPE(dbcsr_type), POINTER  :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL dbcsr_norm(matrix, c_which_norm, c_norm_scalar)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_triu(c_matrix) BIND(C, name=\"c_dbcsr_triu\")\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL dbcsr_triu(matrix)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_init_random(c_matrix, c_keep_sparsity) &\n      BIND(C, name=\"c_dbcsr_init_random\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL :: c_keep_sparsity\n      TYPE(dbcsr_type), POINTER :: matrix\n      LOGICAL :: keep_sparsity\n\n      CALL c_f_pointer(c_matrix, matrix)\n      IF (PRESENT(c_keep_sparsity)) THEN\n         keep_sparsity = c_keep_sparsity\n         CALL dbcsr_init_random(matrix, keep_sparsity)\n      ELSE\n         CALL dbcsr_init_random(matrix)\n      END IF\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_function_of_elements(c_matrix, c_func, c_a0, c_a1, c_a2) &\n      BIND(C, name=\"c_dbcsr_function_of_elements\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: c_func\n      REAL(kind=c_double), INTENT(IN), OPTIONAL :: c_a0, c_a1, c_a2\n      TYPE(dbcsr_type), POINTER :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL dbcsr_function_of_elements(matrix, c_func, c_a0, c_a1, c_a2)\n   END SUBROUTINE\n\n   ! ---------------------------------------------------- !\n   !                 getters / setters                    !\n   ! ---------------------------------------------------- !\n\n   ! getters / setters\n   !!PUBLIC :: dbcsr_get_info\n   !!PUBLIC :: dbcsr_distribution_get\n   !!PUBLIC :: dbcsr_setname\n   !!PUBLIC :: dbcsr_get_matrix_type\n   !!PUBLIC :: dbcsr_get_occupation\n   !!PUBLIC :: dbcsr_nblkrows_total\n   !!PUBLIC :: dbcsr_nblkcols_total\n   ! ADDED LOCAL TOO\n   !!PUBLIC :: dbcsr_get_num_blocks\n   !!PUBLIC :: dbcsr_get_data_size\n   !!PUBLIC :: dbcsr_has_symmetry\n   !!PUBLIC :: dbcsr_nfullrows_total\n   !!PUBLIC :: dbcsr_nfullcols_total\n   !!PUBLIC :: dbcsr_get_stored_coordinates\n   !!PUBLIC :: dbcsr_valid_index\n   !!PUBLIC :: dbcsr_get_data_type\n\n   FUNCTION c_dbcsr_nblkrows_total(c_matrix) RESULT(c_nblkrows_tot) &\n      BIND(C, name=\"c_dbcsr_nblkrows_total\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int) :: c_nblkrows_tot\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_nblkrows_tot = dbcsr_nblkrows_total(matrix)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_nblkcols_total(c_matrix) RESULT(c_nblkcols_tot) &\n      BIND(C, name=\"c_dbcsr_nblkcols_total\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int) :: c_nblkcols_tot\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_nblkcols_tot = dbcsr_nblkcols_total(matrix)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_nblkrows_local(c_matrix) RESULT(c_nblkrows_loc) &\n      BIND(C, name=\"c_dbcsr_nblkrows_local\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int) :: c_nblkrows_loc\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_nblkrows_loc = dbcsr_nblkrows_local(matrix)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_nblkcols_local(c_matrix) RESULT(c_nblkcols_loc) &\n      BIND(C, name=\"c_dbcsr_nblkcols_local\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int) :: c_nblkcols_loc\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_nblkcols_loc = dbcsr_nblkcols_local(matrix)\n\n   END FUNCTION\n\n   SUBROUTINE c_dbcsr_get_info(c_matrix, c_nblkrows_total, c_nblkcols_total, &\n                               c_nfullrows_total, c_nfullcols_total, &\n                               c_nblkrows_local, c_nblkcols_local, &\n                               c_nfullrows_local, c_nfullcols_local, &\n                               c_my_prow, c_my_pcol, &\n                               c_local_rows, c_local_cols, c_proc_row_dist, c_proc_col_dist, &\n                               c_row_blk_size, c_col_blk_size, c_row_blk_offset, c_col_blk_offset, &\n                               c_distribution, c_name, c_matrix_type, c_data_type, &\n                               c_group) BIND(C, name=\"c_dbcsr_get_info\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_nblkrows_total, c_nblkcols_total, c_nfullrows_total, &\n                                                    c_nfullcols_total, c_nblkrows_local, c_nblkcols_local, c_nfullrows_local, &\n                                                    c_nfullcols_local, c_my_prow, c_my_pcol\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_local_rows, c_local_cols, c_proc_row_dist, &\n                                        c_proc_col_dist, c_row_blk_size, c_col_blk_size, &\n                                        c_row_blk_offset, c_col_blk_offset\n      TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_distribution\n      TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_name\n      CHARACTER(kind=c_char), INTENT(OUT), OPTIONAL :: c_matrix_type\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_data_type, c_group\n\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int), DIMENSION(:), POINTER :: f_local_rows, f_local_cols, f_proc_row_dist, &\n                                                    f_proc_col_dist, &\n                                                    f_row_blk_size, f_col_blk_size, &\n                                                    f_row_blk_offset, f_col_blk_offset\n      ! copies for the following arrays\n      INTEGER(kind=c_int), DIMENSION(:), POINTER :: local_rows, local_cols, proc_row_dist, &\n                                                    proc_col_dist, &\n                                                    row_blk_size, col_blk_size, &\n                                                    row_blk_offset, col_blk_offset\n      TYPE(dbcsr_distribution_type), POINTER :: distribution\n      CHARACTER(kind=c_char, len=:), POINTER :: name\n\n      CALL c_f_pointer(c_matrix, matrix)\n\n      ! Because the pointers passed are always null at the beginning, we cannot just pass them in this case\n      ! we use if/else branches, but reduce their number by grouping some variables together\n      ! and splitting the function into several calls\n\n      #:set optvars = [['local_rows', 'local_cols'], &\n         ['proc_row_dist', 'proc_col_dist'], &\n         ['row_blk_size', 'col_blk_size'], &\n         ['row_blk_offset', 'col_blk_offset']]\n      #:set optgroups = []\n      ${gen_vargroups(optvars,optgroups)}$\n\n      #:set vars = ['local_rows', 'local_cols',&\n         'proc_row_dist', 'proc_col_dist',&\n         'row_blk_size', 'col_blk_size',&\n         'row_blk_offset', 'col_blk_offset']\n\n      ! This will generate 16 branches\n      #:for i in range(len(optgroups))\n         ${print_groupif(optgroups,optvars,i,'C_ASSOCIATED','c_')}$\n\n         CALL dbcsr_get_info(matrix, c_nblkrows_total, c_nblkcols_total, &\n                             c_nfullrows_total, c_nfullcols_total, &\n                             c_nblkrows_local, c_nblkcols_local, &\n                             c_nfullrows_local, c_nfullcols_local, &\n                             c_my_prow, c_my_pcol &\n                             ${print_group(optgroups[i])}$, &\n                             matrix_type=c_matrix_type, data_type=c_data_type, &\n                             group=c_group)\n      #:endfor\n      $:\"ENDIF\"\n\n      ! now take care of name and dist\n\n      IF (PRESENT(c_name)) THEN\n         ALLOCATE (CHARACTER(len=default_string_length) :: name)\n         CALL dbcsr_get_info(matrix, name=name)\n         name = TRIM(name)//char(0)\n         c_name = c_loc(name)\n      END IF\n\n      IF (PRESENT(c_distribution)) THEN\n         ALLOCATE (distribution)\n         CALL dbcsr_get_info(matrix, distribution=distribution)\n         c_distribution = c_loc(distribution)\n      END IF\n\n      #:set vars = ['local_rows', 'local_cols', 'proc_row_dist', 'proc_col_dist', &\n         'row_blk_size', 'col_blk_size', 'row_blk_offset', 'col_blk_offset']\n      #:for var in vars\n         IF (C_ASSOCIATED(c_${var}$)) THEN\n            CALL c_f_pointer(c_${var}$, f_${var}$, SHAPE(${var}$))\n            #:if var in ['local_rows', 'local_cols', 'row_blk_offset', 'col_blk_offset']\n               f_${var}$ = ${var}$-1\n            #:else\n               f_${var}$ = ${var}$\n            #:endif\n            NULLIFY (${var}$)\n         END IF\n      #:endfor\n\n   END SUBROUTINE\n\n   #:set infovars = ['local_rows', 'local_cols', 'proc_row_dist', 'proc_col_dist', &\n      'row_blk_size', 'col_blk_size', 'row_blk_offset', 'col_blk_offset']\n   #:for var in infovars\n      SUBROUTINE c_dbcsr_get_${var}$ (c_matrix, c_${var}$, c_size) BIND(C, name=\"c_dbcsr_get_${var}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n         INTEGER(kind=c_int), INTENT(IN), VALUE :: c_size\n         INTEGER(kind=c_int), INTENT(INOUT), DIMENSION(c_size) :: c_${var}$\n         TYPE(dbcsr_type), POINTER :: matrix\n         INTEGER(kind=c_int), DIMENSION(:), POINTER :: ${var}$\n         INTEGER :: i\n\n         CALL c_f_pointer(c_matrix, matrix)\n\n         NULLIFY (${var}$)\n         CALL dbcsr_get_info(matrix=matrix, ${var}$=${var}$)\n\n         #:if var in ['local_rows', 'local_cols', 'row_blk_offset', 'col_blk_offset']\n            DO i = 1, c_size\n               c_${var}$ (i) = ${var}$ (i) - 1\n            END DO\n         #:else\n            DO i = 1, c_size\n               c_${var}$ (i) = ${var}$ (i)\n            END DO\n         #:endif\n         NULLIFY (${var}$)\n\n      END SUBROUTINE\n   #:endfor\n\n   ! name, group\n   SUBROUTINE c_dbcsr_get_name(c_matrix, c_name) BIND(C, name=\"c_dbcsr_get_name\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(c_ptr), INTENT(OUT) :: c_name\n      TYPE(dbcsr_type), POINTER :: matrix\n      CHARACTER(kind=c_char, len=:), POINTER :: name\n\n      CALL c_f_pointer(c_matrix, matrix)\n\n      NULLIFY (name)\n      ALLOCATE (CHARACTER(len=default_string_length) :: name)\n      CALL dbcsr_get_info(matrix=matrix, name=name)\n\n      name = TRIM(name)//char(0)\n      c_name = c_loc(name)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_get_group(c_matrix, c_group) BIND(C, name=\"c_dbcsr_get_group_aux\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      INTEGER(kind=c_int), INTENT(OUT) :: c_group\n      TYPE(dbcsr_type), POINTER :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n\n      CALL dbcsr_get_info(matrix=matrix, group=c_group)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_get_distribution(c_matrix, c_dist) &\n      BIND(C, name=\"c_dbcsr_get_distribution\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(c_ptr), INTENT(OUT) :: c_dist\n      TYPE(dbcsr_type), POINTER :: matrix\n      TYPE(dbcsr_distribution_type), POINTER :: dist\n\n      ALLOCATE (dist)\n      CALL c_f_pointer(c_matrix, matrix)\n\n      CALL dbcsr_get_info(matrix=matrix, distribution=dist)\n      c_dist = c_loc(dist)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_distribution_get(c_dist, c_row_dist, c_col_dist, &\n                                       c_nrows, c_ncols, c_has_threads, &\n                                       c_group, c_mynode, c_numnodes, c_nprows, &\n                                       c_npcols, c_myprow, c_mypcol, c_pgrid, &\n                                       c_subgroups_defined, c_prow_group, c_pcol_group) &\n      BIND(C, name=\"c_dbcsr_distribution_get_aux\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_dist\n      TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_row_dist, c_col_dist\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_nrows, c_ncols\n      LOGICAL(kind=c_bool), INTENT(OUT), OPTIONAL :: c_has_threads\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_group, c_mynode, c_numnodes, c_nprows, c_npcols, &\n                                                    c_myprow, c_mypcol\n      TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_pgrid\n      LOGICAL(kind=c_bool), INTENT(OUT), OPTIONAL :: c_subgroups_defined\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_prow_group, c_pcol_group\n\n      TYPE(dbcsr_distribution_type), POINTER :: dist\n      INTEGER, DIMENSION(:), POINTER :: row_dist, col_dist\n      LOGICAL, POINTER :: has_threads\n      INTEGER, DIMENSION(:, :), POINTER :: pgrid\n      LOGICAL, POINTER :: subgroups_defined\n\n      CALL c_f_pointer(c_dist, dist)\n      #:set bools = ['has_threads', 'subgroups_defined']\n      #:for var in bools\n         NULLIFY (${var}$)\n         IF (PRESENT(c_${var}$)) THEN\n            ALLOCATE (${var}$)\n         END IF\n      #:endfor\n\n      #:set optvars = [['row_dist'], ['col_dist'], ['pgrid']]\n      #:set optgroups = []\n      ${gen_vargroups(optvars,optgroups)}$\n\n      #:for i in range(len(optgroups))\n         ${print_groupif(optgroups,optvars,i,'PRESENT','c_')}$\n\n         CALL dbcsr_distribution_get(dist=dist, nrows=c_nrows, ncols=c_ncols, &\n                                     has_threads=has_threads, &\n                                     group=c_group, mynode=c_mynode, numnodes=c_numnodes, &\n                                     nprows=c_nprows, npcols=c_npcols, myprow=c_myprow, mypcol=c_mypcol, &\n                                     subgroups_defined=subgroups_defined, &\n                                     prow_group=c_prow_group, pcol_group=c_pcol_group &\n                                     ${print_group(optgroups[i])}$)\n      #:endfor\n      $:\"ENDIF\"\n\n      #:for var in bools\n         IF (PRESENT(c_${var}$)) THEN\n            c_${var}$ = ${var}$\n            DEALLOCATE (${var}$)\n         END IF\n      #:endfor\n      #:set list = ['row_dist', 'col_dist', 'pgrid']\n      #:for var in list\n         IF (PRESENT(c_${var}$)) THEN\n            c_${var}$ = c_loc(${var}$)\n         END IF\n      #:endfor\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_get_stored_coordinates(c_matrix, row, col, processor) &\n      bind(C, name=\"c_dbcsr_get_stored_coordinates\")\n\n      TYPE(c_ptr), INTENT(in), value                     :: c_matrix\n      INTEGER(kind=c_int), INTENT(in), value             :: row, col\n      INTEGER(kind=c_int), INTENT(out)                   :: processor\n\n      TYPE(dbcsr_type), POINTER                          :: matrix\n\n      CALL c_f_pointer(c_matrix, matrix)\n\n      CALL dbcsr_get_stored_coordinates(matrix, row + 1, col + 1, processor)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_setname(c_matrix, c_newname) &\n      BIND(C, name=\"c_dbcsr_setname\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix, c_newname\n      TYPE(dbcsr_type), POINTER :: matrix\n      CHARACTER(:, kind=c_char), ALLOCATABLE  :: newname\n\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL c_f_string(c_newname, newname)\n      CALL dbcsr_setname(matrix, newname)\n   END SUBROUTINE\n\n   FUNCTION c_dbcsr_get_matrix_type(c_matrix) RESULT(c_matrix_type) &\n      BIND(C, name=\"c_dbcsr_get_matrix_type\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      CHARACTER(kind=c_char) :: c_matrix_type\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_matrix_type = dbcsr_get_matrix_type(matrix)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_get_occupation(c_matrix) RESULT(c_occupation) &\n      BIND(C, name=\"c_dbcsr_get_occupation\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      REAL(KIND=c_double) :: c_occupation\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_occupation = dbcsr_get_occupation(matrix)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_get_num_blocks(c_matrix) RESULT(c_num_blocks) &\n      BIND(C, name=\"c_dbcsr_get_num_blocks\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int) :: c_num_blocks\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_num_blocks = dbcsr_get_num_blocks(matrix)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_get_data_size(c_matrix) RESULT(c_data_size) &\n      BIND(C, name=\"c_dbcsr_get_data_size\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int) :: c_data_size\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_data_size = dbcsr_get_data_size(matrix)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_has_symmetry(c_matrix) RESULT(c_has_symmetry) &\n      BIND(C, name=\"c_dbcsr_has_symmetry\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      LOGICAL(kind=c_bool) :: c_has_symmetry\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_has_symmetry = dbcsr_has_symmetry(matrix)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_nfullrows_total(c_matrix) RESULT(c_nfullrows_total) &\n      BIND(C, name=\"c_dbcsr_nfullrows_total\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int) :: c_nfullrows_total\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_nfullrows_total = dbcsr_nfullrows_total(matrix)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_nfullcols_total(c_matrix) RESULT(c_nfullcols_total) &\n      BIND(C, name=\"c_dbcsr_nfullcols_total\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int) :: c_nfullcols_total\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_nfullcols_total = dbcsr_nfullcols_total(matrix)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_valid_index(c_matrix) RESULT(c_valid_index) &\n      BIND(C, name=\"c_dbcsr_valid_index\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      LOGICAL(kind=c_bool) :: c_valid_index\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_valid_index = dbcsr_valid_index(matrix)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_get_data_type(c_matrix) RESULT(c_data_type) &\n      BIND(C, name=\"c_dbcsr_get_data_type\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix\n      TYPE(dbcsr_type), POINTER :: matrix\n      INTEGER(kind=c_int) :: c_data_type\n\n      CALL c_f_pointer(c_matrix, matrix)\n      c_data_type = dbcsr_get_data_type(matrix)\n   END FUNCTION\n\n   ! ---------------------------------------- !\n   !              other                       !\n   ! ---------------------------------------- !\n\n   SUBROUTINE c_dbcsr_binary_write(c_matrix, c_filepath) &\n      BIND(C, name=\"c_dbcsr_binary_write\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_matrix, c_filepath\n      TYPE(dbcsr_type), POINTER :: matrix\n      CHARACTER(:, kind=c_char), ALLOCATABLE :: filepath\n\n      CALL c_f_pointer(c_matrix, matrix)\n      CALL c_f_string(c_filepath, filepath)\n\n      CALL dbcsr_binary_write(matrix, filepath)\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_binary_read(c_filepath, c_distribution, c_matrix_new) &\n      BIND(C, name=\"c_dbcsr_binary_read\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_filepath, c_distribution\n      TYPE(c_ptr), INTENT(INOUT) :: c_matrix_new\n\n      CHARACTER(:, kind=c_char), ALLOCATABLE :: filepath\n      TYPE(dbcsr_distribution_type), POINTER :: distribution\n      TYPE(dbcsr_type), POINTER :: matrix_new\n\n      CALL c_f_string(c_filepath, filepath)\n      CALL c_f_pointer(c_distribution, distribution)\n      ALLOCATE (matrix_new)\n\n      CALL dbcsr_binary_read(filepath, distribution, matrix_new)\n      c_matrix_new = c_loc(matrix_new)\n   END SUBROUTINE\n\n   SUBROUTINE c_free_string(c_string) BIND(C, name=\"c_free_string\")\n      TYPE(c_ptr), INTENT(INOUT)             :: c_string\n\n      CHARACTER(:, kind=c_char), POINTER :: string\n\n      CALL c_f_pointer(c_string, string)\n      DEALLOCATE (string)\n      c_string = c_null_ptr\n\n   END SUBROUTINE c_free_string\n\nEND MODULE\n"
  },
  {
    "path": "src/mm/PACKAGE",
    "content": "{\n\"description\": \"Matrix matrix multiplication\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../mpi\", \"../base\", \"../core\", \"../acc\", \"../data\",\n\"../dist\", \"../block\", \"../ops\", \"../acc/libsmm_acc\", \"../utils\", \"../work\"],\n\"implicit\": \"SMM_.*\"\n}\n"
  },
  {
    "path": "src/mm/dbcsr_acc_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_acc_operations\n   !! Accelerator support for DBCSR\n   USE ISO_C_BINDING, ONLY: C_INT, &\n                            C_PTR, &\n                            C_CHAR, &\n                            C_LOC\n   USE dbcsr_acc_devmem, ONLY: acc_devmem_cptr, &\n                               acc_devmem_type\n   USE dbcsr_acc_stream, ONLY: acc_stream_cptr, &\n                               acc_stream_type, &\n                               acc_stream_synchronize\n   USE dbcsr_config, ONLY: max_kernel_dim\n   USE dbcsr_mm_types, ONLY: dbcsr_ps_width\n   USE dbcsr_kinds, ONLY: real_8, dp\n   USE dbcsr_types, ONLY: dbcsr_type_real_8\n\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   PUBLIC :: dbcsr_acc_do_mm_stack, dbcsr_acc_transpose\n\n#if defined (__DBCSR_ACC)\n   INTERFACE\n      FUNCTION libsmm_acc_process_cu(param_stack_host, param_stack_dev, stack_size, &\n                                     data_type, a_data, b_data, c_data, m_max, &\n                                     n_max, k_max, max_kernel_dim, def_mnk, &\n                                     stack_stream_ptr, c_stream_ptr) &\n         RESULT(istat) &\n         BIND(C, name=\"libsmm_acc_process\")\n         IMPORT\n         TYPE(C_PTR), INTENT(IN), VALUE           :: param_stack_host\n         TYPE(C_PTR), INTENT(IN), VALUE           :: param_stack_dev\n         INTEGER(KIND=C_INT), INTENT(IN), VALUE   :: stack_size, data_type\n         TYPE(C_PTR), INTENT(IN), VALUE           :: a_data, b_data, c_data\n         INTEGER(KIND=C_INT), INTENT(IN), VALUE   :: m_max, n_max, k_max\n         INTEGER(KIND=C_INT), INTENT(IN), VALUE   :: max_kernel_dim, def_mnk\n         TYPE(C_PTR), VALUE                       :: stack_stream_ptr, c_stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n      END FUNCTION libsmm_acc_process_cu\n\n      FUNCTION libsmm_acc_transpose_cu(trs_stack, offset, nblks, buffer, &\n                                       data_type, m, n, max_kernel_dim, stream_ptr) &\n         RESULT(istat) &\n         BIND(C, name=\"libsmm_acc_transpose\")\n         IMPORT\n         TYPE(C_PTR), INTENT(IN), VALUE           :: trs_stack\n         INTEGER(KIND=C_INT), INTENT(IN), VALUE   :: offset, nblks\n         TYPE(C_PTR), INTENT(IN), VALUE           :: buffer\n         INTEGER(KIND=C_INT), INTENT(IN), VALUE   :: data_type, m, n\n         INTEGER(KIND=C_INT), INTENT(IN), VALUE   :: max_kernel_dim\n         TYPE(C_PTR), VALUE                       :: stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n      END FUNCTION libsmm_acc_transpose_cu\n\n   END INTERFACE\n#endif\n\nCONTAINS\n\n   SUBROUTINE dbcsr_acc_do_mm_stack(param_stack_host, param_stack_dev, stack_size, data_type, &\n                                    a_data, b_data, c_data, m_max, n_max, k_max, def_mnk, &\n                                    stack_stream, c_stream, success, generated_acc_untuned)\n      !! Launch an accelerated kernel for processing a stack.\n      INTEGER, DIMENSION(:, :), TARGET, INTENT(IN) :: param_stack_host\n      TYPE(acc_devmem_type), INTENT(IN)            :: param_stack_dev\n      INTEGER, INTENT(IN)                          :: stack_size\n      INTEGER, INTENT(IN)                          :: data_type\n      TYPE(acc_devmem_type), INTENT(IN)            :: a_data, b_data\n      TYPE(acc_devmem_type), INTENT(INOUT)         :: c_data\n      INTEGER, INTENT(IN)                          :: m_max, n_max, k_max\n      LOGICAL, INTENT(IN)                          :: def_mnk\n      TYPE(acc_stream_type), INTENT(IN)            :: stack_stream, c_stream\n      LOGICAL, INTENT(INOUT)                       :: success, generated_acc_untuned\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(param_stack_host)\n      MARK_USED(param_stack_dev)\n      MARK_USED(stack_size)\n      MARK_USED(data_type)\n      MARK_USED(a_data)\n      MARK_USED(b_data)\n      MARK_USED(c_data)\n      MARK_USED(m_max)\n      MARK_USED(n_max)\n      MARK_USED(k_max)\n      MARK_USED(def_mnk)\n      MARK_USED(stack_stream)\n      MARK_USED(c_stream)\n      MARK_USED(success)\n      MARK_USED(generated_acc_untuned)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_acc_do_mm_stack'\n\n      INTEGER                                  :: error_handle, istat\n      INTEGER(KIND=C_INT)                      :: mnk\n      INTEGER, DIMENSION(:, :), POINTER         :: param_stack_host_ptr\n\n      param_stack_host_ptr => param_stack_host(:, :)\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n\n      mnk = 0\n      IF (def_mnk) mnk = 1\n\n      ! Call batched matrix-matrix multiplication in libsmm_acc\n      istat = libsmm_acc_process_cu(C_LOC(param_stack_host_ptr), &\n                                    acc_devmem_cptr(param_stack_dev), &\n                                    INT(stack_size, KIND=C_INT), &\n                                    INT(data_type, KIND=C_INT), &\n                                    acc_devmem_cptr(a_data), &\n                                    acc_devmem_cptr(b_data), &\n                                    acc_devmem_cptr(c_data), &\n                                    INT(m_max, KIND=C_INT), &\n                                    INT(n_max, KIND=C_INT), &\n                                    INT(k_max, KIND=C_INT), &\n                                    INT(max_kernel_dim, KIND=C_INT), &\n                                    mnk, acc_stream_cptr(stack_stream), acc_stream_cptr(c_stream))\n!      IF (istat == -10) DBCSR_ABORT(\"Data type not supported with GPU backend.\")\n!      IF (istat == -20) DBCSR_ABORT(\"GPU kernel not JIT-ed.\")\n      success = (istat .GE. 0) ! false if no suitable kernel was found\n      generated_acc_untuned = (istat == 10) ! Generated default untuned kernel\n\n      IF (careful_mod) CALL timestop(error_handle)\n#endif\n   END SUBROUTINE dbcsr_acc_do_mm_stack\n\n   SUBROUTINE dbcsr_acc_transpose(trs_stack, offset, nblks, data_type, buffer, m, n, stream)\n      !! Launch an accelerated transpose kernel\n      TYPE(acc_devmem_type), INTENT(IN)        :: trs_stack\n      INTEGER, INTENT(IN)                      :: offset\n      INTEGER, INTENT(IN)                      :: nblks\n      INTEGER, INTENT(IN)                      :: data_type\n      TYPE(acc_devmem_type), INTENT(IN)        :: buffer\n      INTEGER, INTENT(IN)                      :: m, n\n      TYPE(acc_stream_type), INTENT(IN)        :: stream\n#if ! defined (__DBCSR_ACC)\n      MARK_USED(trs_stack)\n      MARK_USED(offset)\n      MARK_USED(nblks)\n      MARK_USED(data_type)\n      MARK_USED(buffer)\n      MARK_USED(m)\n      MARK_USED(n)\n      MARK_USED(stream)\n      DBCSR_ABORT(\"__DBCSR_ACC not compiled in.\")\n#else\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_acc_transpose'\n\n      INTEGER                                  :: error_handle, istat\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n      istat = 0\n\n      ! Call batched in-place transpose in libsmm_acc\n      IF (m .LE. max_kernel_dim .AND. &\n          n .LE. max_kernel_dim) THEN\n         istat = libsmm_acc_transpose_cu(acc_devmem_cptr(trs_stack), &\n                                         INT(offset, KIND=C_INT), &\n                                         INT(nblks, KIND=C_INT), &\n                                         acc_devmem_cptr(buffer), &\n                                         INT(data_type, KIND=C_INT), &\n                                         INT(m, KIND=C_INT), &\n                                         INT(n, KIND=C_INT), &\n                                         INT(max_kernel_dim, KIND=C_INT), &\n                                         acc_stream_cptr(stream))\n      END IF\n\n      IF (istat /= 0) DBCSR_ABORT(\"something went wrong.\")\n      IF (careful_mod) CALL timestop(error_handle)\n#endif\n   END SUBROUTINE dbcsr_acc_transpose\n\nEND MODULE dbcsr_acc_operations\n"
  },
  {
    "path": "src/mm/dbcsr_mm.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved                            !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm\n   !! Entry point of the dbcsr matrix-matrix multiplication.\n   !! <b>Modification history:</b>\n   !! - 2016-08    Code organization (Alfio Lazzaro).\n\n   USE dbcsr_acc_device, ONLY: dbcsr_acc_clear_errors\n   USE dbcsr_acc_stream, ONLY: acc_stream_associated, &\n                               acc_stream_create, &\n                               acc_stream_destroy\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_equality, &\n                                array_hold, &\n                                array_i1d_obj, &\n                                array_nullify, &\n                                array_release\n   USE dbcsr_config, ONLY: dbcsr_cfg, &\n                           dbcsr_set_config, &\n                           default_resize_factor, &\n                           use_acc\n   USE dbcsr_data_methods, ONLY: dbcsr_data_set_size_referenced, &\n                                 dbcsr_scalar_are_equal, &\n                                 dbcsr_scalar_one, &\n                                 dbcsr_scalar_zero\n   USE dbcsr_dist_methods, ONLY: &\n      dbcsr_distribution_col_dist, dbcsr_distribution_get_num_images_1d, &\n      dbcsr_distribution_has_threads, dbcsr_distribution_hold, dbcsr_distribution_make_threads, &\n      dbcsr_distribution_mp, dbcsr_distribution_ncols, dbcsr_distribution_no_threads, &\n      dbcsr_distribution_nrows, dbcsr_distribution_release, dbcsr_distribution_row_dist\n   USE dbcsr_dist_util, ONLY: dbcsr_checksum, &\n                              dbcsr_verify_matrix\n   USE dbcsr_index_operations, ONLY: dbcsr_make_index_canonical\n   USE dbcsr_io, ONLY: dbcsr_print\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_8, &\n                          real_8\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_mem_methods, ONLY: dbcsr_mempool_clear, &\n                                dbcsr_mempool_destruct, &\n                                dbcsr_mempool_limit_capacity, &\n                                dbcsr_memtype_setup\n   USE dbcsr_methods, ONLY: &\n      dbcsr_col_block_offsets, dbcsr_col_block_sizes, dbcsr_destroy_array, dbcsr_distribution, &\n      dbcsr_get_matrix_type, dbcsr_has_symmetry, dbcsr_image_dist_release, dbcsr_nblkcols_total, &\n      dbcsr_nfullcols_total, dbcsr_nfullrows_total, dbcsr_release, dbcsr_release_locals, &\n      dbcsr_row_block_offsets, dbcsr_get_data_type\n   USE dbcsr_mm_3D, ONLY: buffers_release, &\n                          dbcsr_make_buffers, &\n                          get_max_layers_3D, &\n                          make_layers_3D_C_reduction, &\n                          multiply_3D, &\n                          release_layers_3D_C_reduction, &\n                          request_sync_mult\n   USE dbcsr_mm_cannon, ONLY: make_m2s, &\n                              multiply_cannon, &\n                              multiply_cannon_g2g\n   USE dbcsr_mm_common, ONLY: &\n      dbcsr_mpi_statistics, max_memory, memtype_abpanel_1, memtype_abpanel_2, &\n      memtype_mpi_buffer, memtype_mpi_product, memtype_product_wm, memtype_trsbuffer_1, &\n      memtype_normsbuf, memtype_offsetsbuf, memtype_nelemsbuf, &\n      memtype_trsbuffer_2, num_multiplications, stream_1, stream_2\n   USE dbcsr_mm_dist_operations, ONLY: dbcsr_create_image_dist, &\n                                       dbcsr_make_dists_dense, &\n                                       dbcsr_reset_locals, &\n                                       make_sizes_dense\n   USE dbcsr_mm_multrec, ONLY: dbcsr_mm_multrec_lib_finalize, &\n                               dbcsr_mm_multrec_lib_init\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_group, &\n                               dbcsr_mp_npcols, &\n                               dbcsr_mp_nprows, &\n                               dbcsr_mp_numnodes\n   USE dbcsr_mpiwrap, ONLY: mp_get_library_version, &\n                            mp_isync, &\n                            mp_max, &\n                            mp_max_library_version_string, &\n                            mp_min, &\n                            mp_request_null, &\n                            mp_sum, &\n                            mp_wait, mp_comm_type\n   USE dbcsr_operations, ONLY: dbcsr_conjg, &\n                               dbcsr_copy, &\n                               dbcsr_get_occupation, &\n                               dbcsr_may_be_dense, &\n                               dbcsr_scale\n   USE dbcsr_string_utilities, ONLY: uppercase\n   USE dbcsr_transformations, ONLY: dbcsr_make_dense, &\n                                    dbcsr_make_undense, &\n                                    dbcsr_make_untransposed_blocks, &\n                                    dbcsr_new_transposed\n   USE dbcsr_types, ONLY: &\n      dbcsr_2d_array_type, dbcsr_conjugate_transpose, dbcsr_distribution_obj, &\n      dbcsr_imagedistribution_obj, dbcsr_mp_obj, dbcsr_mpi_size_limits, dbcsr_no_transpose, &\n      dbcsr_scalar_type, dbcsr_transpose, dbcsr_type, dbcsr_type_antisymmetric, &\n      dbcsr_type_real_8\n   USE dbcsr_work_operations, ONLY: dbcsr_add_wm_from_matrix, &\n                                    dbcsr_finalize, &\n                                    dbcsr_work_create\n   USE dbcsr_mm_sched, ONLY: dbcsr_mm_sched_print_statistics\n\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm'\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   REAL, PRIVATE, SAVE :: marketing_flops = 0\n\n   PUBLIC :: dbcsr_multiply_lib_init, dbcsr_multiply_lib_finalize\n   PUBLIC :: dbcsr_multiply_print_statistics\n   PUBLIC :: dbcsr_multiply_clear_mempools\n   PUBLIC :: dbcsr_multiply_generic\n\nCONTAINS\n\n   SUBROUTINE dbcsr_multiply_lib_init()\n      !! Initialize the library\n\n      INTEGER                                            :: ithread, nthreads\n\n      nthreads = 1; ithread = 0\n!$    nthreads = OMP_GET_NUM_THREADS(); ithread = OMP_GET_THREAD_NUM()\n\n      CALL dbcsr_mm_multrec_lib_init()\n\n!$OMP     MASTER\n      dbcsr_mpi_statistics%last_mpi_ranks_used = 0\n      dbcsr_mpi_statistics%nimages = -1\n      dbcsr_mpi_statistics%nexchanged = 0\n      dbcsr_mpi_statistics%data_size = 0\n      dbcsr_mpi_statistics%data_size(:, 2) = HUGE(dbcsr_mpi_statistics%data_size(1, 2))\n      dbcsr_mpi_statistics%data_size_breakdown = 0\n\n      marketing_flops = 0\n      max_memory = 0\n      ALLOCATE (memtype_product_wm(0:nthreads - 1))\n!$OMP     END MASTER\n!$OMP     BARRIER\n\n      ! Each thread has its own working-matrix and its own mempool\n      ALLOCATE (memtype_product_wm(ithread)%p)\n      CALL dbcsr_memtype_setup(memtype_product_wm(ithread)%p, has_pool=dbcsr_cfg%use_mempools_cpu%val .OR. use_acc())\n      CALL dbcsr_mempool_limit_capacity(memtype_product_wm(ithread)%p%pool, capacity=MAX(1, dbcsr_cfg%num_layers_3D%val))\n   END SUBROUTINE dbcsr_multiply_lib_init\n\n   SUBROUTINE dbcsr_multiply_lib_finalize()\n      !! Finalize the library\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_multiply_lib_finalize'\n\n      INTEGER                                            :: error_handle, ithread\n\n      CALL timeset(routineN, error_handle)\n\n      CALL dbcsr_mm_multrec_lib_finalize()\n\n      ithread = 0\n!$    ithread = omp_get_thread_num()\n\n      ! Each thread has its own working-matrix and its own mempool\n      IF (ASSOCIATED(memtype_product_wm(ithread)%p%pool)) &\n         CALL dbcsr_mempool_destruct(memtype_product_wm(ithread)%p%pool)\n      DEALLOCATE (memtype_product_wm(ithread)%p)\n!$OMP      BARRIER\n!$OMP      MASTER\n      DEALLOCATE (memtype_product_wm)\n\n      ! Deallocate buffers\n      CALL buffers_release()\n\n      ! Release 3D communicators\n      CALL release_layers_3D_C_reduction(release_buffers=.TRUE.)\n\n      IF (ASSOCIATED(memtype_trsbuffer_1%pool)) &\n         CALL dbcsr_mempool_destruct(memtype_trsbuffer_1%pool)\n      IF (ASSOCIATED(memtype_trsbuffer_2%pool)) &\n         CALL dbcsr_mempool_destruct(memtype_trsbuffer_2%pool)\n      IF (ASSOCIATED(memtype_normsbuf%pool)) &\n         CALL dbcsr_mempool_destruct(memtype_normsbuf%pool)\n      IF (ASSOCIATED(memtype_offsetsbuf%pool)) &\n         CALL dbcsr_mempool_destruct(memtype_offsetsbuf%pool)\n      IF (ASSOCIATED(memtype_nelemsbuf%pool)) &\n         CALL dbcsr_mempool_destruct(memtype_nelemsbuf%pool)\n      IF (ASSOCIATED(memtype_abpanel_1%pool)) &\n         CALL dbcsr_mempool_destruct(memtype_abpanel_1%pool)\n      IF (ASSOCIATED(memtype_abpanel_2%pool)) &\n         CALL dbcsr_mempool_destruct(memtype_abpanel_2%pool)\n      IF (ASSOCIATED(memtype_mpi_product%pool)) &\n         CALL dbcsr_mempool_destruct(memtype_mpi_product%pool)\n      IF (acc_stream_associated(stream_1)) &\n         CALL acc_stream_destroy(stream_1)\n      IF (acc_stream_associated(stream_2)) &\n         CALL acc_stream_destroy(stream_2)\n!$OMP      END MASTER\n\n      CALL timestop(error_handle)\n\n   END SUBROUTINE dbcsr_multiply_lib_finalize\n\n   SUBROUTINE dbcsr_multiply_print_statistics(group, output_unit)\n      !! Print statistics\n      TYPE(mp_comm_type), INTENT(IN)                     :: group\n      INTEGER, INTENT(IN)                                :: output_unit\n\n      INTEGER(KIND=int_8)                                :: total_nexchanged\n      INTEGER(KIND=int_8), &\n         DIMENSION(SIZE(dbcsr_mpi_size_limits) + 1, 2, 2)  :: total_recv_breakdown\n      REAL                                               :: average, total_marketing_flops, &\n                                                            total_max_memory\n      REAL, DIMENSION(2)                                 :: max_recv_data, min_recv_data, &\n                                                            total_recv_data\n      INTEGER                                            :: ilimit, isqrt, isqrt2\n      CHARACTER(len=1000)                                :: msg\n\n      call dbcsr_mm_sched_print_statistics(group, output_unit)\n\n      total_max_memory = max_memory\n      CALL mp_max(total_max_memory, group)\n\n      total_marketing_flops = marketing_flops\n      CALL mp_sum(total_marketing_flops, group)\n\n      total_nexchanged = dbcsr_mpi_statistics%nexchanged\n      CALL mp_sum(total_nexchanged, group)\n\n      total_recv_data(:) = dbcsr_mpi_statistics%data_size(:, 1)\n      CALL mp_sum(total_recv_data, group)\n\n      min_recv_data(:) = dbcsr_mpi_statistics%data_size(:, 2)\n      CALL mp_min(min_recv_data, group)\n\n      max_recv_data(:) = dbcsr_mpi_statistics%data_size(:, 3)\n      CALL mp_max(max_recv_data, group)\n\n      IF (dbcsr_mpi_statistics%nexchanged .GT. 0) THEN\n         average = SUM(total_recv_data(:))/REAL(total_nexchanged)\n      ELSE\n         average = 0\n         min_recv_data = 0\n      END IF\n\n      total_recv_breakdown(:, :, :) = dbcsr_mpi_statistics%data_size_breakdown(:, :, :)\n      CALL mp_sum(total_recv_breakdown, group)\n\n      IF (output_unit > 0) THEN\n         WRITE (output_unit, '(A,T30,EN20.6)') \" marketing flops\", total_marketing_flops\n\n         IF (dbcsr_mpi_statistics%nimages .GT. 0) THEN\n            WRITE (UNIT=output_unit, FMT=\"(T2,A)\") REPEAT(\"-\", 79)\n            WRITE (output_unit, '(A,T30,I20)') \" # multiplications\", num_multiplications\n            WRITE (output_unit, '(A,T30,EN20.6)') \" max memory usage/rank\", total_max_memory\n            WRITE (output_unit, '(A,T30,I20)') \" # max total images/rank\", dbcsr_mpi_statistics%nimages\n            WRITE (output_unit, '(A,T30,I20)') \" # max 3D layers\", get_max_layers_3D()\n            WRITE (output_unit, '(A,T30,I20)') \" # MPI messages exchanged\", total_nexchanged\n            IF (total_nexchanged > 0) THEN  ! omit noisy output in single-node case\n               WRITE (output_unit, '(A)') \" MPI messages size (bytes):\"\n               WRITE (output_unit, '(A,T30,EN20.6)') \"  total size\", &\n                  SUM(total_recv_data(:))\n               WRITE (output_unit, '(A,T30,EN20.6)') \"  min size\", &\n                  MINVAL(min_recv_data(:))\n               WRITE (output_unit, '(A,T30,EN20.6)') \"  max size\", &\n                  MAXVAL(max_recv_data(:))\n               WRITE (output_unit, '(A,T30,EN20.6)') \"  average size\", average\n\n               WRITE (output_unit, '(A)') \" MPI breakdown and total messages size (bytes):\"\n               WRITE (output_unit, '(A,I8,T40,I10,T55,I20)') \"             size <= \", dbcsr_mpi_size_limits(1), &\n                  SUM(total_recv_breakdown(1, 1, :)), SUM(total_recv_breakdown(1, 2, :))\n               DO ilimit = 2, SIZE(dbcsr_mpi_size_limits)\n                  WRITE (output_unit, '(A,I8,A,I8,T40,I10,T55,I20)') \"  \", dbcsr_mpi_size_limits(ilimit - 1), &\n                     \" < size <= \", dbcsr_mpi_size_limits(ilimit), &\n                     SUM(total_recv_breakdown(ilimit, 1, :)), SUM(total_recv_breakdown(ilimit, 2, :))\n               END DO\n               ilimit = SIZE(dbcsr_mpi_size_limits)\n               WRITE (output_unit, '(A,I8,A,T40,I10,T55,I20)') \"  \", dbcsr_mpi_size_limits(ilimit), &\n                  \" < size    \", SUM(total_recv_breakdown(ilimit + 1, 1, :)), SUM(total_recv_breakdown(ilimit + 1, 2, :))\n            END IF\n         END IF\n\n         isqrt = NINT(SQRT(REAL(dbcsr_mpi_statistics%last_mpi_ranks_used, KIND=real_8)))\n         isqrt2 = NINT(SQRT(REAL(dbcsr_mpi_statistics%last_mpi_ranks_used*2, KIND=real_8)))\n         IF (isqrt*isqrt .NE. dbcsr_mpi_statistics%last_mpi_ranks_used) THEN\n            WRITE (UNIT=output_unit, FMT=\"(T2,A)\") REPEAT(\"-\", 79)\n            WRITE (UNIT=msg, FMT=\"(A,I0,A,2(I0,1X))\") &\n               \"Using a non-square number of MPI ranks might lead to poor performance.\"// &\n               \" Used ranks: \", dbcsr_mpi_statistics%last_mpi_ranks_used, &\n               \" Suggested: \", isqrt**2, isqrt2**2\n            DBCSR_WARN(msg)\n         END IF\n      END IF\n   END SUBROUTINE dbcsr_multiply_print_statistics\n\n   SUBROUTINE dbcsr_multiply_clear_mempools()\n      !! Deallocate memory contained in mempools\n\n      INTEGER                                            :: ithread\n\n      ithread = 0\n!$    ithread = omp_get_thread_num()\n\n      ! Each thread has its own working-matrix and its own mempool\n      IF (ASSOCIATED(memtype_product_wm(ithread)%p%pool)) &\n         CALL dbcsr_mempool_clear(memtype_product_wm(ithread)%p%pool)\n\n!$OMP      MASTER\n      IF (ASSOCIATED(memtype_trsbuffer_1%pool)) &\n         CALL dbcsr_mempool_clear(memtype_trsbuffer_1%pool)\n      IF (ASSOCIATED(memtype_trsbuffer_2%pool)) &\n         CALL dbcsr_mempool_clear(memtype_trsbuffer_2%pool)\n      IF (ASSOCIATED(memtype_normsbuf%pool)) &\n         CALL dbcsr_mempool_clear(memtype_normsbuf%pool)\n      IF (ASSOCIATED(memtype_offsetsbuf%pool)) &\n         CALL dbcsr_mempool_clear(memtype_offsetsbuf%pool)\n      IF (ASSOCIATED(memtype_nelemsbuf%pool)) &\n         CALL dbcsr_mempool_clear(memtype_nelemsbuf%pool)\n      IF (ASSOCIATED(memtype_abpanel_1%pool)) &\n         CALL dbcsr_mempool_clear(memtype_abpanel_1%pool)\n      IF (ASSOCIATED(memtype_abpanel_2%pool)) &\n         CALL dbcsr_mempool_clear(memtype_abpanel_2%pool)\n!$OMP      END MASTER\n   END SUBROUTINE dbcsr_multiply_clear_mempools\n\n   SUBROUTINE dbcsr_multiply_generic(transa, transb, &\n                                     alpha, matrix_a, matrix_b, beta, matrix_c, &\n                                     first_row, last_row, first_column, last_column, first_k, last_k, &\n                                     retain_sparsity, filter_eps, &\n                                     flop)\n      !! Performs a multiplication of two dbcsr_type matrices,\n      !! as  C := alpha * op( A ) * op( B ) + beta * C.\n      !!\n      !! Matrices m_a and m_b are multiplied into the m_c product matrix. If the\n      !! dist2d parameter is not specified, then a new distribution_2d is\n      !! determined for it.\n      !!\n      !! Non-equal column dimensions of the right and product matrices\n      !! The right and product matrix are allowed to have different\n      !! (full) column dimensions. If they differ, there are certain\n      !! peculiar behaviors, then the last_column is effectively set to\n      !! the minimal of the two.\n      !!\n      !! Beta scaling of the right product matrix\n      !! If the effective last_column is less than the full column\n      !! dimension of the product matrix, then the scaling of the\n      !! product matrix with beta is limited to the submatrix specified\n      !! by last_column.\n      !!\n      !! Filtering\n      !! The filter_eps parameter, if present, is used to filter the\n      !! resulting matrix.  The filtering criterion is whether the\n      !! block-frobenius norm is less than the specified epsilon.\n      !! One-the-fly filtering is done such that individual\n      !! multiplications are skipped if the product of the frobenius\n      !! norms of the left- and right-matrix blocks are less than the\n      !! specified epsilon divided by the maximum number of possible\n      !! multiplies in each row.  In addition a final filtering is done\n      !! as well with the same epsilon value.\n\n      CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb\n         !! specifies the form of op( A ) to be used in the matrix multiplication transa = 'N' or 'n',  op( A ) = A. transa = 'T' or\n         !! 't',  op( A ) = transpose(A). transa = 'C' or 'c',  op( A ) = transpose(conjg(A)).\n         !! specifies the form of op( B ) to be used in the matrix multiplication transb = 'N' or 'n',  op( B ) = B. transb = 'T' or\n         !! 't',  op( B ) = transpose(B). transb = 'C' or 'c',  op( B ) = transpose(conjg(B)).\n      TYPE(dbcsr_scalar_type), INTENT(IN)                :: alpha\n         !! scaling of product\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b\n         !! left BCSR matrix\n         !! right BCSR matrix\n      TYPE(dbcsr_scalar_type), INTENT(IN)                :: beta\n         !! scaling of existing data\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c\n         !! resulting BCSR product matrix.\n      INTEGER, INTENT(IN), OPTIONAL                      :: first_row, last_row, first_column, &\n                                                            last_column, first_k, last_k\n         !! first full row of limiting submatrix\n         !! last full row of limiting submatrix\n         !! first full column of limiting submatrix\n         !! last full column of limiting submatrix\n         !! first full column of limiting inner product\n         !! last full column of limiting inner product\n      LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity\n         !! enforce the sparsity pattern of the existing product matrix; default is no\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: filter_eps\n         !! Filtering of the matrix\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL         :: flop\n         !! effective flop\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_multiply_generic'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n      REAL(real_8), PARAMETER                            :: make_dense_occ_thresh = 1.0_dp\n\n      CHARACTER                                          :: transa_l, transb_l\n      INTEGER :: f_col, f_k, f_row, handle, handle2, ithread, l_col, l_k, l_row, &\n                 nimages_left_rows, nimages_match, nimages_right_cols, npcols, nprows, numnodes, &\n                 data_type, output_unit\n      INTEGER(KIND=int_8)                                :: my_flop\n      LOGICAL :: ab_dense, keep_product_data, keep_sparsity, product_reindex, release_tdist, &\n                 transpose_left, transpose_right, use_dense_mult, use_mempools, thread_dist_force\n      REAL(KIND=dp)                                      :: cs\n      TYPE(array_i1d_obj) :: dense_col_sizes, dense_k_sizes, dense_row_sizes, k_vmap, m_map, &\n                             n_map, old_product_col_blk_offsets, old_product_col_blk_sizes, &\n                             old_product_row_blk_offsets, old_product_row_blk_sizes, &\n                             matrix_c_thread_dist\n      TYPE(dbcsr_2d_array_type), POINTER                 :: m2s_left, m2s_right\n      TYPE(dbcsr_distribution_obj)                       :: dense_product_distribution, &\n                                                            old_product_distribution\n      TYPE(dbcsr_imagedistribution_obj)                  :: dense_rdist_left, dense_rdist_right, &\n                                                            rdist_left, rdist_right\n      TYPE(dbcsr_mp_obj)                                 :: mp_obj\n      TYPE(dbcsr_type)                                   :: matrix_left, matrix_right, product_matrix\n      TYPE(mp_comm_type)                                 :: comm\n\n      CALL timeset(routineN, handle)\n\n      IF (dbcsr_get_occupation(matrix_a) .GT. 1) &\n         DBCSR_ABORT(\"Matrix A occupation > 1\")\n\n      IF (dbcsr_get_occupation(matrix_b) .GT. 1) &\n         DBCSR_ABORT(\"Matrix B occupation > 1\")\n\n      IF (dbcsr_get_occupation(matrix_c) .GT. 1) &\n         DBCSR_ABORT(\"Matrix C occupation > 1\")\n\n      CALL array_nullify(dense_k_sizes)\n      CALL array_nullify(dense_col_sizes)\n      CALL array_nullify(dense_row_sizes)\n\n      ! Reset GPU errors\n      IF (use_acc()) THEN\n         CALL dbcsr_acc_clear_errors()\n      END IF\n\n      ! Check if RMA is used with OpenMPI, if so disabled it\n      ! (OpenMPI has several bugs with RMA and it does not\n      ! give any performance benefit)\n      CALL check_openmpi_rma()\n\n      use_mempools = dbcsr_cfg%use_mempools_cpu%val .OR. use_acc()\n\n      ! setup driver-dependent memory-types and their memory-pools ---------------\n\n      ! the ab_buffers are shared by all threads\n      IF (use_acc()) THEN\n         IF (.NOT. acc_stream_associated(stream_1)) THEN\n            CALL acc_stream_create(stream_1, \"MemCpy (odd ticks)\")\n            CALL acc_stream_create(stream_2, \"MemCpy (even ticks)\")\n         END IF\n\n         CALL dbcsr_memtype_setup(memtype_abpanel_1, has_pool=.TRUE., &\n                                  acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1, &\n                                  mpi=.TRUE., oversize_factor=default_resize_factor)\n\n         CALL dbcsr_memtype_setup(memtype_abpanel_2, has_pool=.TRUE., &\n                                  acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_2, &\n                                  mpi=.TRUE., oversize_factor=default_resize_factor)\n\n         !TODO: ensure capacity 2/3?\n         CALL dbcsr_memtype_setup(memtype_trsbuffer_1, has_pool=.TRUE., &\n                                  acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1)\n         CALL dbcsr_memtype_setup(memtype_trsbuffer_2, has_pool=.TRUE., &\n                                  acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_2)\n         CALL dbcsr_memtype_setup(memtype_normsbuf, has_pool=.TRUE., &\n                                  acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1)\n         CALL dbcsr_memtype_setup(memtype_offsetsbuf, has_pool=.TRUE., &\n                                  acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1)\n         CALL dbcsr_memtype_setup(memtype_nelemsbuf, has_pool=.TRUE., &\n                                  acc_hostalloc=.TRUE., acc_devalloc=.TRUE., acc_stream=stream_1)\n         CALL dbcsr_mempool_limit_capacity(memtype_trsbuffer_1%pool, capacity=1)\n         CALL dbcsr_mempool_limit_capacity(memtype_trsbuffer_2%pool, capacity=1)\n         CALL dbcsr_mempool_limit_capacity(memtype_normsbuf%pool, capacity=1)\n         CALL dbcsr_mempool_limit_capacity(memtype_offsetsbuf%pool, capacity=1)\n         CALL dbcsr_mempool_limit_capacity(memtype_nelemsbuf%pool, capacity=1)\n      END IF\n\n      CALL dbcsr_memtype_setup(memtype_mpi_buffer, mpi=.TRUE.)\n      CALL dbcsr_memtype_setup(memtype_mpi_product, mpi=.TRUE., has_pool=use_mempools)\n\n      ! check parameters ---------------------------------------------------------\n      transa_l = transa\n      transb_l = transb\n      CALL uppercase(transa_l)\n      CALL uppercase(transb_l)\n      IF (transa_l .NE. dbcsr_no_transpose .AND. &\n          transa_l .NE. dbcsr_transpose .AND. &\n          transa_l .NE. dbcsr_conjugate_transpose) &\n         DBCSR_ABORT(\"Invalid transa_l = \"//transa_l)\n\n      IF (transb_l .NE. dbcsr_no_transpose .AND. &\n          transb_l .NE. dbcsr_transpose .AND. &\n          transb_l .NE. dbcsr_conjugate_transpose) &\n         DBCSR_ABORT(\"Invalid transb_l = \"//transb_l)\n\n      IF (dbg) THEN\n         WRITE (*, *) '========== MULTIPLICATION ========================'\n         CALL dbcsr_verify_matrix(matrix_a)\n         CALL dbcsr_verify_matrix(matrix_b)\n         CALL dbcsr_verify_matrix(matrix_c)\n         WRITE (*, *) routineN//\" ABC checksums\", &\n            dbcsr_checksum(matrix_a), &\n            dbcsr_checksum(matrix_b), &\n            dbcsr_checksum(matrix_c)\n         IF (dbg) THEN\n            CALL dbcsr_print(matrix_a, nodata=.TRUE.)\n            CALL dbcsr_print(matrix_b, nodata=.TRUE.)\n            CALL dbcsr_print(matrix_c, nodata=.TRUE.)\n         END IF\n      END IF\n\n      ! transpose/conjg left and/or right matrices if needed\n      transpose_left = .FALSE.\n      SELECT CASE (transa_l)\n      CASE (dbcsr_no_transpose)\n         matrix_left = matrix_a\n         transpose_left = .FALSE.\n      CASE (dbcsr_transpose)\n         matrix_left = dbcsr_type()\n         IF (dbcsr_get_matrix_type(matrix_a) .EQ. dbcsr_type_antisymmetric) THEN\n            !\n            ! For antisymmetric matrix, we need to do a hard copy\n            ! shallow_data_copy=.TRUE. does not handle properly antisymm matrices\n            CALL dbcsr_new_transposed(matrix_left, matrix_a, &\n                                      shallow_data_copy=.FALSE., redistribute=.FALSE., &\n                                      transpose_distribution=.FALSE.)\n         ELSE\n            CALL dbcsr_new_transposed(matrix_left, matrix_a, &\n                                      shallow_data_copy=.TRUE., redistribute=.FALSE., &\n                                      transpose_distribution=.FALSE.)\n         END IF\n         transpose_left = .TRUE.\n      CASE (dbcsr_conjugate_transpose)\n         matrix_left = dbcsr_type()\n         CALL dbcsr_new_transposed(matrix_left, matrix_a, &\n                                   shallow_data_copy=.FALSE., redistribute=.FALSE., &\n                                   transpose_distribution=.FALSE.)\n         CALL dbcsr_conjg(matrix_left)\n         transpose_left = .TRUE.\n      CASE DEFAULT\n         DBCSR_ABORT(\"wrong transa_l = \"//transa_l)\n      END SELECT\n\n      transpose_right = .FALSE.\n      SELECT CASE (transb_l)\n      CASE (dbcsr_no_transpose)\n         matrix_right = matrix_b\n         transpose_right = .FALSE.\n      CASE (dbcsr_transpose)\n         matrix_right = dbcsr_type()\n         IF (dbcsr_get_matrix_type(matrix_b) .EQ. dbcsr_type_antisymmetric) THEN\n            !\n            ! For antisymmetric matrix, we need to do a hard copy\n            ! shallow_data_copy=.TRUE. does not handle properly antisymm matrices\n            CALL dbcsr_new_transposed(matrix_right, matrix_b, &\n                                      shallow_data_copy=.FALSE., redistribute=.FALSE., &\n                                      transpose_distribution=.FALSE.)\n         ELSE\n            CALL dbcsr_new_transposed(matrix_right, matrix_b, &\n                                      shallow_data_copy=.TRUE., redistribute=.FALSE., &\n                                      transpose_distribution=.FALSE.)\n         END IF\n         transpose_right = .TRUE.\n      CASE (dbcsr_conjugate_transpose)\n         matrix_right = dbcsr_type()\n         CALL dbcsr_new_transposed(matrix_right, matrix_b, &\n                                   shallow_data_copy=.FALSE., redistribute=.FALSE., &\n                                   transpose_distribution=.FALSE.)\n         CALL dbcsr_conjg(matrix_right)\n         transpose_right = .TRUE.\n      CASE DEFAULT\n         DBCSR_ABORT(\"wrong transb_l = \"//transb_l)\n      END SELECT\n      !\n      ! Ensure matrix compatibility.\n      IF (.NOT. array_equality(matrix_c%row_blk_offset, matrix_left%row_blk_offset)) &\n         DBCSR_ABORT(\"C/A rows not equal\")\n      IF (.NOT. array_equality(matrix_c%col_blk_offset, matrix_right%col_blk_offset)) &\n         DBCSR_ABORT(\"C/B columns not equal\")\n      IF (.NOT. array_equality(matrix_left%col_blk_offset, matrix_right%row_blk_offset)) &\n         DBCSR_ABORT(\"A cols/B rows not equal\")\n      !\n      ! No dense multiplication when filtering is used.\n      use_dense_mult = dbcsr_cfg%mm_dense%val .AND. (.NOT. PRESENT(filter_eps))\n      !\n      mp_obj = dbcsr_distribution_mp(matrix_c%dist)\n      numnodes = dbcsr_mp_numnodes(mp_obj)\n      nprows = dbcsr_mp_nprows(mp_obj)\n      npcols = dbcsr_mp_npcols(mp_obj)\n      !\n      ! 3D layers\n      CALL make_layers_3D_C_reduction(dbcsr_cfg%num_layers_3D%val, mp_obj)\n      !\n      ! No dense multiplication when RMA is used.\n      IF (dbcsr_cfg%use_mpi_rma%val) THEN\n         use_dense_mult = .FALSE.\n      END IF\n      ! we skip dense multiply for (anti)symmetric matrices (slowdown for S/H * C)\n      IF (use_dense_mult) THEN\n         IF (dbcsr_has_symmetry(matrix_left) .OR. &\n             dbcsr_has_symmetry(matrix_right)) THEN\n            use_dense_mult = .FALSE.\n         ELSE\n            use_dense_mult = dbcsr_may_be_dense(matrix_left, make_dense_occ_thresh) &\n                             .AND. dbcsr_may_be_dense(matrix_right, make_dense_occ_thresh)\n         END IF\n      END IF\n      ab_dense = use_dense_mult\n      ! Use memory pools when no dense\n      IF (.NOT. use_acc()) THEN\n         CALL dbcsr_memtype_setup(memtype_abpanel_1, has_pool=.NOT. ab_dense .AND. use_mempools, mpi=.TRUE.)\n         CALL dbcsr_memtype_setup(memtype_abpanel_2, has_pool=.NOT. ab_dense .AND. use_mempools, mpi=.TRUE.)\n      END IF\n      !\n      ! Submatrix selection\n      f_row = 1\n      l_row = dbcsr_nfullrows_total(matrix_c)\n      f_col = 1\n      l_col = dbcsr_nfullcols_total(matrix_c)\n      f_k = 1\n      l_k = dbcsr_nfullcols_total(matrix_left)\n      IF (PRESENT(first_row)) THEN\n         IF (first_row .LT. 1 .OR. first_row .GT. dbcsr_nfullrows_total(matrix_c)) &\n            DBCSR_ABORT(\"Invalid first row specified\")\n         f_row = first_row\n      END IF\n      IF (PRESENT(last_row)) THEN\n         IF (last_row .GT. dbcsr_nfullrows_total(matrix_c)) &\n            DBCSR_ABORT(\"Invalid last row specified\")\n         l_row = last_row\n      END IF\n      IF (PRESENT(first_column)) THEN\n         IF (first_column .LT. 1 .OR. first_column .GT. dbcsr_nfullcols_total(matrix_c)) &\n            DBCSR_ABORT(\"Invalid first col specified\")\n         f_col = first_column\n      END IF\n      IF (PRESENT(last_column)) THEN\n         IF (last_column .GT. dbcsr_nfullcols_total(matrix_c)) &\n            DBCSR_ABORT(\"Invalid last column specified (C)\")\n         IF (last_column .GT. dbcsr_nfullcols_total(matrix_right)) &\n            DBCSR_ABORT(\"Invalid last column specified (B)\")\n         l_col = last_column\n      END IF\n      IF (PRESENT(first_k)) THEN\n         IF (first_k .LT. 1 .OR. first_k .GT. dbcsr_nfullcols_total(matrix_left)) &\n            DBCSR_ABORT(\"Invalid first k specified (A)\")\n         f_k = first_k\n      END IF\n      IF (PRESENT(last_k)) THEN\n         IF (last_k .GT. dbcsr_nfullcols_total(matrix_left)) &\n            DBCSR_ABORT(\"Invalid last k specified (A)\")\n         l_k = last_k\n      END IF\n      !\n      ! update statistics (we count marketing flops per MPI rank)\n      dbcsr_mpi_statistics%last_mpi_ranks_used = numnodes\n      marketing_flops = marketing_flops + &\n                        (2.0*(l_row - f_row + 1.0)*(l_col - f_col + 1.0)/numnodes)*(l_k - f_k + 1.0)\n      !\n      ! Now optimize the default submatrix selection values away\n      IF (f_row .EQ. 1) f_row = 0\n      IF (l_row .EQ. dbcsr_nfullrows_total(matrix_left)) l_row = 0\n      IF (f_col .EQ. 1) f_col = 0\n      ! The last column must be set if the right and product matrices\n      ! differ.\n      l_col = MIN(l_col, dbcsr_nfullcols_total(matrix_right))\n      l_col = MIN(l_col, dbcsr_nfullcols_total(matrix_c))\n      IF (f_col .LE. 1 .AND. &\n          l_col .EQ. dbcsr_nfullcols_total(matrix_right) .AND. &\n          dbcsr_nfullcols_total(matrix_right) .EQ. &\n          dbcsr_nfullcols_total(matrix_c)) l_col = 0\n      IF (f_k .EQ. 1) f_k = 0\n      IF (l_k .EQ. dbcsr_nfullcols_total(matrix_left)) l_k = 0\n      IF (.NOT. PRESENT(last_column) .AND. &\n          .NOT. array_equality(matrix_right%col_blk_size, &\n                               matrix_c%col_blk_size)) THEN\n         l_col = MIN(dbcsr_nfullcols_total(matrix_right), &\n                     dbcsr_nfullcols_total(matrix_c))\n      END IF\n      IF (f_row .GT. l_row .AND. l_row .GT. 0) &\n         DBCSR_ABORT(\"Last row smaller than first row\")\n      IF (f_col .GT. l_col .AND. l_col .GT. 0) &\n         DBCSR_ABORT(\"Last col smaller than first col\")\n      !\n      ! Product data needs to be retained when\n      ! * beta != 0; or\n      ! * there is column limiting (l_col > 0) and the limiting column\n      !   is less than the number of full columns in the product matrix\n      keep_sparsity = .FALSE.\n      IF (PRESENT(retain_sparsity)) keep_sparsity = retain_sparsity\n      !\n      keep_product_data = keep_sparsity &\n                          .OR. .NOT. dbcsr_scalar_are_equal(beta, dbcsr_scalar_zero(beta%data_type)) &\n                          .OR. (l_col .GT. 0 .AND. l_col .LT. dbcsr_nfullcols_total(matrix_c)) &\n                          .OR. (l_row .GT. 0 .AND. l_row .LT. dbcsr_nfullrows_total(matrix_c))\n      !\n      IF (.NOT. dbcsr_scalar_are_equal(beta, dbcsr_scalar_one(beta%data_type)) .AND. keep_product_data) THEN\n         CALL dbcsr_scale(matrix_c, alpha_scalar=beta, &\n                          limits=(/f_row, l_row, f_col, l_col/))\n      END IF\n      !\n      ! The index of the product matrix is twiddled into canonical form\n      ! if it is (anti)symmetric (i.e., rows and columns are where the\n      ! row/column distributions say they are). Doing this in advance\n      ! makes the local multiply more efficient.\n      IF (dbcsr_has_symmetry(matrix_c)) THEN\n         product_reindex = .TRUE.\n      ELSE\n         product_reindex = .FALSE.\n      END IF\n      ! Product can not be made dense; however, A & B may still be made\n      ! dense unless previously determined otherwise.\n      IF (product_reindex .OR. keep_sparsity) THEN\n         use_dense_mult = .FALSE.\n      END IF\n      !\n      ! The thread distribution must reflect the current (possibly\n      ! dense) distribution\n      thread_dist_force = .FALSE.\n      IF (.NOT. dbcsr_distribution_has_threads(matrix_c%dist)) THEN\n         release_tdist = .TRUE.\n         CALL dbcsr_distribution_make_threads(matrix_c%dist)\n      ELSE\n         release_tdist = .FALSE.\n         ! Make sure matrix_c thread dist == matrix_left thread dist\n         ! This is currently a workaround\n         IF (dbcsr_distribution_has_threads(matrix_left%dist)) THEN\n            matrix_c_thread_dist = matrix_c%dist%d%thread_dist\n            matrix_c%dist%d%thread_dist = matrix_left%dist%d%thread_dist\n            CALL array_hold(matrix_left%dist%d%thread_dist)\n            thread_dist_force = .TRUE.\n         END IF\n      END IF\n      !\n      ! Compute number of images (rows and columns)\n      nimages_left_rows = dbcsr_mp_nprows(dbcsr_distribution_mp(matrix_left%dist))\n      nimages_match = dbcsr_distribution_get_num_images_1d( &\n                      dbcsr_nfullcols_total(matrix_left), &\n                      dbcsr_nblkcols_total(matrix_left), &\n                      dbcsr_mp_nprows(dbcsr_distribution_mp(matrix_left%dist)), &\n                      dbcsr_mp_npcols(dbcsr_distribution_mp(matrix_left%dist)))\n      nimages_right_cols = dbcsr_mp_npcols(dbcsr_distribution_mp(matrix_right%dist))\n      !\n      ! Create imaged distributions for the multiply.\n      CALL dbcsr_create_image_dist(rdist_right, matrix_right%dist, &\n                                   match_row_nbins=dbcsr_mp_npcols(dbcsr_distribution_mp(matrix_left%dist)), &\n                                   match_col_nbins=npcols, &\n                                   match_col_pdist=dbcsr_distribution_col_dist(matrix_c%dist), &\n                                   nimages_rows=nimages_match, &\n                                   nimages_cols=nimages_right_cols)\n      !\n      CALL dbcsr_create_image_dist(rdist_left, matrix_left%dist, &\n                                   match_row_pdist=dbcsr_distribution_row_dist(matrix_c%dist), &\n                                   match_row_nbins=nprows, &\n                                   match_col_pdist=dbcsr_distribution_row_dist(rdist_right%i%main), &\n                                   match_col_idist=array_data(rdist_right%i%row_image), &\n                                   match_col_nbins=dbcsr_mp_nprows(dbcsr_distribution_mp(matrix_right%dist)), &\n                                   nimages_rows=nimages_left_rows, &\n                                   nimages_cols=nimages_match)\n      !\n      IF (ab_dense) THEN\n         CALL dbcsr_make_dists_dense(dbcsr_distribution(matrix_c), &\n                                     rdist_left, rdist_right, dense_product_distribution, &\n                                     dense_rdist_left, dense_rdist_right,.NOT. use_dense_mult, &\n                                     m_map, k_vmap, n_map, matrix_c%row_blk_size)\n         CALL make_sizes_dense(matrix_c%row_blk_size, m_map, &\n                               dbcsr_distribution_nrows(dense_product_distribution), &\n                               dense_row_sizes)\n         CALL make_sizes_dense(matrix_c%col_blk_size, n_map, &\n                               dbcsr_distribution_ncols(dense_product_distribution), &\n                               dense_col_sizes)\n         CALL make_sizes_dense(matrix_right%row_blk_size, k_vmap, &\n                               dbcsr_distribution_nrows(dense_rdist_right%i%main), &\n                               dense_k_sizes)\n      END IF\n      !\n      IF (use_dense_mult .AND. .NOT. ab_dense) &\n         DBCSR_ABORT(\"Wrong logic when making dense matrices.\")\n      IF (use_dense_mult) THEN\n         old_product_row_blk_offsets = matrix_c%row_blk_offset\n         old_product_col_blk_offsets = matrix_c%col_blk_offset\n         old_product_row_blk_sizes = matrix_c%row_blk_size\n         old_product_col_blk_sizes = matrix_c%col_blk_size\n         CALL array_hold(old_product_row_blk_offsets)\n         CALL array_hold(old_product_col_blk_offsets)\n         CALL array_hold(old_product_row_blk_sizes)\n         CALL array_hold(old_product_col_blk_sizes)\n         old_product_distribution = dbcsr_distribution(matrix_c)\n         CALL dbcsr_distribution_hold(old_product_distribution)\n         product_matrix = dbcsr_type()\n         CALL dbcsr_make_dense(matrix_c, product_matrix, &\n                               dense_product_distribution, &\n                               dense_row_sizes, dense_col_sizes, &\n                               m_map, n_map)\n      ELSE\n         product_matrix = dbcsr_type()\n         CALL dbcsr_copy(product_matrix, matrix_c, shallow_data=.TRUE.)\n      END IF\n      IF (ab_dense) THEN\n         CALL dbcsr_distribution_release(dense_product_distribution)\n      END IF\n      !\n      ! This is needed to build the hash tables because they are\n      ! locally indexed.\n      CALL dbcsr_reset_locals(product_matrix)\n      !\n      IF (debug_mod) THEN\n         WRITE (*, *) routineN//\" Matrices \", dbcsr_get_matrix_type(matrix_a), &\n            dbcsr_get_matrix_type(matrix_b), dbcsr_get_matrix_type(matrix_c)\n         WRITE (*, *) routineN//\" Matrices \", transa_l, transb_l, \"keep\", keep_product_data\n      END IF\n      IF (keep_product_data) THEN\n         IF (product_reindex) THEN\n            IF (debug_mod) WRITE (*, *) routineN//\" Making canonical index\"\n            CALL dbcsr_make_index_canonical(product_matrix)\n         END IF\n         IF (ASSOCIATED(product_matrix%wms)) &\n            DBCSR_ABORT(\"Product matrix should be finalized!\")\n         CALL dbcsr_make_untransposed_blocks(product_matrix)\n!$OMP PARALLEL &\n!$OMP DEFAULT (NONE) SHARED (product_matrix)\n         ! For the multiply logic to work correctly, existing data must\n         ! be added only after the index has been transformed into the\n         ! canonical form.\n         CALL dbcsr_add_wm_from_matrix(product_matrix)\n!$OMP END PARALLEL\n      ELSE\n!$OMP PARALLEL DEFAULT(NONE) PRIVATE(ithread) &\n!$OMP SHARED(product_matrix, memtype_product_wm)\n         ithread = 0\n!$       ithread = OMP_GET_THREAD_NUM()\n         CALL dbcsr_work_create(product_matrix, work_mutable=.FALSE., &\n                                memory_type=memtype_product_wm(ithread)%p)\n!$OMP END PARALLEL\n      END IF\n      !\n      IF (dbcsr_cfg%use_mpi_rma%val) THEN\n         ! Check for previous multiplication completeness\n         IF (request_sync_mult .NE. mp_request_null) THEN\n            CALL timeset(routineN//\"_sync_mult\", handle2)\n            CALL mp_wait(request_sync_mult)\n            CALL timestop(handle2)\n            request_sync_mult = mp_request_null\n         END IF\n         !\n         ! Left buffer images\n         CALL dbcsr_make_buffers(matrix_left, rdist_left, .TRUE., &\n                                 f_row, l_row, f_k, l_k, &\n                                 PRESENT(filter_eps))\n         !\n         ! Right buffer images\n         CALL dbcsr_make_buffers(matrix_right, rdist_right, .FALSE., &\n                                 f_k, l_k, f_col, l_col, &\n                                 PRESENT(filter_eps), &\n                                 alpha)\n      ELSE\n         product_matrix%nblks = 0\n         product_matrix%nze = 0\n         product_matrix%row_p(:) = 0\n         CALL dbcsr_data_set_size_referenced(product_matrix%data_area, 0)\n         product_matrix%valid = .FALSE.\n         !\n         ! Right images\n         CALL make_m2s(matrix_right, m2s_right, rdist_right, dense_rdist_right, &\n                       use_dense_mult, ab_dense, \"R\", &\n                       f_k, l_k, f_row, l_row, f_col, l_col, &\n                       dense_k_sizes, dense_col_sizes, &\n                       k_vmap, m_map, n_map, &\n                       alpha)\n         !\n         ! Left images\n         CALL make_m2s(matrix_left, m2s_left, rdist_left, dense_rdist_left, &\n                       use_dense_mult, ab_dense, \"L\", &\n                       f_k, l_k, f_row, l_row, f_col, l_col, &\n                       dense_row_sizes, dense_k_sizes, &\n                       k_vmap, m_map, n_map)\n      END IF\n      !\n      IF (ab_dense) THEN\n         CALL array_release(k_vmap)\n         CALL array_release(dense_row_sizes)\n         CALL array_release(dense_col_sizes)\n         CALL array_release(dense_k_sizes)\n      END IF\n      !\n      ! The limits were already used.  Reset them.\n      f_row = 0; l_row = 0\n      f_col = 0; l_col = 0\n      f_k = 0; l_k = 0\n      !\n      my_flop = 0\n      IF (dbcsr_cfg%use_mpi_rma%val) THEN\n         CALL multiply_3D(rdist_left, rdist_right, &\n                          matrix_left, matrix_right, product_matrix, &\n                          retain_sparsity=retain_sparsity, &\n                          filter_eps=filter_eps, &\n                          flop=my_flop, keep_product_data=keep_product_data)\n      ELSE\n         data_type = dbcsr_get_data_type(product_matrix)\n         IF (data_type .NE. dbcsr_type_real_8 .OR. (.NOT. dbcsr_cfg%use_acc_g2g%val)) THEN\n            ! If G2G is enabled, norms have to be calculated on the GPU.\n            ! Since the norms kernel expects only real_8 type data, we\n            ! avoid using G2G for all other data types\n            CALL multiply_cannon(m2s_left, m2s_right, product_matrix, &\n                                 retain_sparsity=retain_sparsity, &\n                                 filter_eps=filter_eps, &\n                                 flop=my_flop, keep_product_data=keep_product_data)\n         ELSE\n            CALL multiply_cannon_g2g(m2s_left, m2s_right, product_matrix, &\n                                     retain_sparsity=retain_sparsity, &\n                                     filter_eps=filter_eps, &\n                                     flop=my_flop, keep_product_data=keep_product_data)\n         END IF\n         CALL dbcsr_finalize(product_matrix, reshuffle=PRESENT(filter_eps) .AND. .NOT. keep_sparsity)\n      END IF\n      !\n      ! RMA implementation algorithm has to synchronize at the end of each multiplication\n      comm = dbcsr_mp_group(dbcsr_distribution_mp(dbcsr_distribution(matrix_c)))\n      IF (PRESENT(flop)) THEN\n         ! return the average number of flops per MPI rank.\n         ! Variance (which is fairly large) could be computed as well.\n         CALL timeset(routineN//\"_mpsum_flop\", handle2)\n         numnodes = dbcsr_mp_numnodes(dbcsr_distribution_mp(dbcsr_distribution(matrix_c)))\n         CALL mp_sum(my_flop, comm)\n         IF (PRESENT(flop)) THEN\n            flop = (my_flop + numnodes - 1)/numnodes\n         END IF\n         CALL timestop(handle2)\n      ELSEIF (dbcsr_cfg%use_mpi_rma%val) THEN\n         CALL mp_isync(comm, request_sync_mult)\n      END IF\n      !\n      IF (release_tdist) THEN\n         CALL dbcsr_distribution_no_threads(product_matrix%dist)\n      ELSEIF (thread_dist_force) THEN\n         ! Restore matrix_c thread-dist\n         matrix_c%dist%d%thread_dist = matrix_c_thread_dist\n         CALL array_release(matrix_left%dist%d%thread_dist)\n      END IF\n      IF (transpose_left) CALL dbcsr_release(matrix_left)\n      IF (transpose_right) CALL dbcsr_release(matrix_right)\n      !\n      CALL dbcsr_release_locals(product_matrix)\n      ! The index of the product matrix is reset to the CP2K form if it\n      ! was previously set to the canonical form.\n      IF (product_reindex) THEN\n         IF (debug_mod) WRITE (*, *) routineN//\" Making CP2K index\"\n         CALL dbcsr_make_index_canonical(product_matrix, cp2k=.TRUE.)\n      END IF\n      IF (use_dense_mult) THEN\n         CALL dbcsr_release(matrix_c)\n         matrix_c = dbcsr_type()\n         CALL dbcsr_make_undense(product_matrix, matrix_c, &\n                                 old_product_distribution, &\n                                 old_product_row_blk_offsets, old_product_col_blk_offsets, &\n                                 old_product_row_blk_sizes, old_product_col_blk_sizes, &\n                                 m_map, n_map)\n         CALL dbcsr_release(product_matrix)\n         CALL array_release(old_product_row_blk_offsets)\n         CALL array_release(old_product_col_blk_offsets)\n         CALL array_release(old_product_row_blk_sizes)\n         CALL array_release(old_product_col_blk_sizes)\n         CALL dbcsr_distribution_release(old_product_distribution)\n      ELSE\n         CALL dbcsr_release(matrix_c)\n         matrix_c = dbcsr_type()\n         CALL dbcsr_copy(matrix_c, product_matrix, shallow_data=.TRUE.)\n         CALL dbcsr_release(product_matrix)\n      END IF\n      !\n      IF (.NOT. dbcsr_cfg%use_mpi_rma%val) THEN\n         CALL dbcsr_destroy_array(m2s_left)\n         DEALLOCATE (m2s_left)\n         CALL dbcsr_destroy_array(m2s_right)\n         DEALLOCATE (m2s_right)\n      END IF\n      !\n      CALL dbcsr_image_dist_release(rdist_left)\n      CALL dbcsr_image_dist_release(rdist_right)\n      IF (ab_dense) THEN\n         CALL array_release(m_map)\n         CALL array_release(n_map)\n      END IF\n      !\n      ! To support the canonical multiply (all non-transposed blocks),\n      ! blocks may have to be transposed according to the CP2K\n      ! triangular index.\n      CALL dbcsr_make_untransposed_blocks(matrix_c)\n      !\n      IF (debug_mod .OR. careful_mod) THEN\n         IF (debug_mod) &\n            WRITE (*, *) routineN//\" Use dense mult, symm\", &\n            use_dense_mult, ab_dense, dbcsr_has_symmetry(matrix_c)\n         CALL dbcsr_verify_matrix(matrix_c)\n         IF (debug_mod) THEN\n            cs = dbcsr_checksum(matrix_c)\n            WRITE (*, *) routineN//\" Multiplication\", &\n               num_multiplications, \" Product checksum\", cs\n         END IF\n      END IF\n\n      ! This tends to trigger only when all of these conditions are fulfilled:\n      !  - transa==\"T\"\n      !  - matrix_c contains already blocks and beta is not zero\n      !  - GPU-acceleration is enabled\n      !  - multiple OpenMP threads are used\n      IF (INT(matrix_c%nblks, KIND=int_8) > &\n          INT(SIZE(array_data(matrix_c%row_blk_size)), KIND=int_8)* &\n          INT(SIZE(array_data(matrix_c%col_blk_size)), KIND=int_8)) &\n         DBCSR_ABORT(\"Bug: Matrix contains too many blocks\")\n      output_unit = default_output_unit\n      num_multiplications = num_multiplications + 1\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_multiply_generic\n\n   SUBROUTINE check_openmpi_rma()\n      ! Check if RMA is used with OpenMPI, if so disabled it\n      ! (OpenMPI has several bugs with RMA and it does not\n      ! give any performance benefit)\n      CHARACTER(LEN=mp_max_library_version_string)       :: mpi_library_version\n      INTEGER                                            :: ipos, resultlen\n\n      IF (.NOT. dbcsr_cfg%use_mpi_rma%val) &\n         RETURN\n\n#if defined(__DBCSR_OPENMPI_RMA)\n      RETURN\n#endif\n\n      CALL mp_get_library_version(mpi_library_version, resultlen)\n      ! ignore failure to obtain the library version string\n      IF (resultlen .EQ. 0) &\n         RETURN\n\n      ! check if Open MPI\n      ipos = INDEX(mpi_library_version(1:resultlen), \"Open MPI v\")\n      IF (ipos .EQ. 0) &\n         RETURN\n\n      CALL dbcsr_warn(__LOCATION__, \"You are using OpenMPI: --- \"// &\n                      mpi_library_version(1:resultlen)// &\n                      \" --- We disable RMA to prevent errors. \"// &\n                      \"Please install MPICH version or use __DBCSR_OPENMPI_RMA to force the \"// &\n                      \"execution. \")\n      CALL dbcsr_set_config(use_mpi_rma=.FALSE.)\n\n   END SUBROUTINE check_openmpi_rma\n\nEND MODULE dbcsr_mm\n"
  },
  {
    "path": "src/mm/dbcsr_mm_3d.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_3d\n   !! 3D matrix-matrix multiplication.\n   !! <b>Modification history:</b>\n   !! - 2016-08    Code organization (Alfio Lazzaro).\n   !! - 2017-02    Remove clusters (Alfio Lazzaro).\n\n   USE dbcsr_acc_event, ONLY: acc_event_create, &\n                              acc_event_destroy, &\n                              acc_event_synchronize\n   USE dbcsr_acc_device, ONLY: acc_device_synchronize\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_get, &\n                                array_size\n   USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, &\n                                     dbcsr_block_copy_aa, &\n                                     dbcsr_block_real_neg, &\n                                     dbcsr_block_scale, &\n                                     dbcsr_block_transpose_aa, &\n                                     dbcsr_data_clear, &\n                                     dbcsr_data_set\n   USE dbcsr_config, ONLY: dbcsr_cfg, &\n                           use_acc\n   USE dbcsr_data_methods, ONLY: &\n      dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_exists, &\n      dbcsr_data_get_memory_type, dbcsr_data_get_size, dbcsr_data_get_size_referenced, &\n      dbcsr_data_get_type, dbcsr_data_host2dev, dbcsr_data_init, dbcsr_data_new, &\n      dbcsr_data_release, dbcsr_data_set_pointer, dbcsr_data_set_size_referenced, &\n      dbcsr_data_valid, dbcsr_scalar_are_equal, dbcsr_scalar_negative, dbcsr_scalar_one, &\n      dbcsr_type_1d_to_2d\n   USE dbcsr_data_types, ONLY: dbcsr_datatype_sizeof\n   USE dbcsr_dist_methods, ONLY: &\n      dbcsr_distribution_col_dist, dbcsr_distribution_has_threads, &\n      dbcsr_distribution_local_cols, dbcsr_distribution_local_rows, &\n      dbcsr_distribution_max_col_dist, dbcsr_distribution_max_row_dist, dbcsr_distribution_mp, &\n      dbcsr_distribution_row_dist, dbcsr_distribution_thread_dist\n   USE dbcsr_dist_util, ONLY: find_block_of_element\n   USE dbcsr_index_operations, ONLY: dbcsr_repoint_index\n   USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, &\n                                        dbcsr_iterator_next_block, &\n                                        dbcsr_iterator_start, &\n                                        dbcsr_iterator_stop\n   USE dbcsr_kinds, ONLY: int_8, &\n                          real_8, &\n                          sp\n   USE dbcsr_machine, ONLY: m_memory\n   USE dbcsr_mem_methods, ONLY: dbcsr_mempool_limit_capacity\n   USE dbcsr_methods, ONLY: &\n      dbcsr_col_block_offsets, dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_type, &\n      dbcsr_has_symmetry, dbcsr_max_col_size, dbcsr_max_row_size, dbcsr_nblkcols_local, &\n      dbcsr_nblkcols_total, dbcsr_nblkrows_local, dbcsr_nblkrows_total, dbcsr_nfullcols_local, &\n      dbcsr_nfullcols_total, dbcsr_nfullrows_local, dbcsr_nfullrows_total, dbcsr_release, &\n      dbcsr_row_block_offsets, dbcsr_row_block_sizes, dbcsr_valid_index\n   USE dbcsr_mm_common, ONLY: &\n      acc_transpose_blocks, calculate_norms, count_mpi_statistics, dbcsr_mm_multrec_type_p, &\n      dbcsr_mpi_statistics, enumerate_blk_sizes, local_filter, max_memory, memtype_abpanel_1, &\n      memtype_abpanel_2, memtype_mpi_buffer, memtype_mpi_product, memtype_product_wm, &\n      memtype_trsbuffer_1, memtype_trsbuffer_2, product_matrix_size_guess, rec_sort_index, &\n      setup_buffer_matrix\n   USE dbcsr_mm_dist_operations, ONLY: dbcsr_reset_locals, &\n                                       dbcsr_reset_vlocals, &\n                                       image_calculator\n   USE dbcsr_mm_multrec, ONLY: dbcsr_mm_multrec_dev2host_init, &\n                               dbcsr_mm_multrec_finalize, &\n                               dbcsr_mm_multrec_get_nblks, &\n                               dbcsr_mm_multrec_get_nze, &\n                               dbcsr_mm_multrec_init, &\n                               dbcsr_mm_multrec_multiply, &\n                               dbcsr_mm_multrec_red3D\n   USE dbcsr_mp_methods, ONLY: &\n      dbcsr_mp_grid_setup, dbcsr_mp_group, dbcsr_mp_has_subgroups, dbcsr_mp_my_col_group, &\n      dbcsr_mp_my_row_group, dbcsr_mp_mynode, dbcsr_mp_mypcol, dbcsr_mp_myprow, dbcsr_mp_npcols, &\n      dbcsr_mp_nprows, dbcsr_mp_numnodes, dbcsr_mp_pgrid\n   USE dbcsr_mp_operations, ONLY: dbcsr_isendrecv_any, &\n                                  dbcsr_rget_any, &\n                                  dbcsr_win_create_any, &\n                                  hybrid_alltoall_any, &\n                                  hybrid_alltoall_i1\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_allgather, mp_alltoall, mp_comm_free, mp_comm_null, mp_comm_split_direct, &\n      mp_iallgather, mp_isendrecv, mp_isum, mp_request_null, mp_rget, mp_wait, mp_waitall, &\n      mp_win_create, mp_win_free, mp_win_lock_all, mp_win_unlock_all, mp_environ, &\n      mp_comm_type, mp_request_type, mp_win_type\n   USE dbcsr_ptr_util, ONLY: ensure_array_size, &\n                             memory_deallocate\n   USE dbcsr_types, ONLY: &\n      dbcsr_2d_array_obj, dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_imagedistribution_obj, &\n      dbcsr_iterator, dbcsr_memtype_type, dbcsr_mp_obj, dbcsr_num_slots, dbcsr_scalar_type, &\n      dbcsr_slot_blk_p, dbcsr_slot_col_i, dbcsr_slot_coo_l, dbcsr_slot_dense, &\n      dbcsr_slot_home_pcol, dbcsr_slot_home_prow, dbcsr_slot_home_vpcol, dbcsr_slot_home_vprow, &\n      dbcsr_slot_nblkrows_total, dbcsr_slot_nblks, dbcsr_slot_nfullcols_local, dbcsr_slot_nze, &\n      dbcsr_slot_row_p, dbcsr_slot_size, dbcsr_slot_thr_c, dbcsr_slot_type, dbcsr_type, &\n      dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_int_4, dbcsr_type_no_symmetry, &\n      dbcsr_type_real_4, dbcsr_type_real_8\n   USE dbcsr_work_operations, ONLY: dbcsr_add_wm_from_matrix, &\n                                    dbcsr_create, &\n                                    dbcsr_finalize, &\n                                    dbcsr_work_create, &\n                                    dbcsr_work_destroy\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads, &\n!$                    omp_set_lock, omp_unset_lock, omp_init_lock, &\n!$                    omp_lock_kind, omp_destroy_lock\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_3d'\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   TYPE dbcsr_buffer\n      TYPE(dbcsr_data_obj)                        :: DATA = dbcsr_data_obj(), &\n                                                     data_before_resize = dbcsr_data_obj(), &\n                                                     trs_stackbuf = dbcsr_data_obj()\n      INTEGER                                     :: vprow = -1, vpcol = -1\n      INTEGER                                     :: myproc = -1\n      TYPE(mp_comm_type)                          :: grp = mp_comm_null, & ! Global communicator\n                                                     subgrp = mp_comm_null ! Communicator for A and B\n      TYPE(mp_win_type)                           :: data_win = mp_win_type(), meta_win = mp_win_type()\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS  :: meta => Null(), &\n                                                     meta_before_resize => Null(), &\n                                                     meta_red3D => Null()\n      TYPE(mp_request_type), DIMENSION(2)         :: get_requests = mp_request_null\n      INTEGER                                     :: meta_size = -1\n      INTEGER                                     :: num_layers_3D = 1\n      INTEGER                                     :: coord3D = 1\n      TYPE(dbcsr_type)                            :: matrix = dbcsr_type()\n      LOGICAL                                     :: is_valid = .FALSE., &\n                                                     is_comm = .FALSE., &\n                                                     has_rma_win = .FALSE.\n   END TYPE dbcsr_buffer\n\n   TYPE dbcsr_buffers\n      TYPE(dbcsr_buffer)                 :: left = dbcsr_buffer(), right = dbcsr_buffer()\n   END TYPE dbcsr_buffers\n\n   TYPE mn_local_sizes\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: sizes => Null()\n   END TYPE mn_local_sizes\n\n   TYPE dbcsr_layers_3D_C_reduction\n      TYPE(mp_comm_type)                 :: grp = mp_comm_null, &\n                                            grp3D = mp_comm_null, &\n                                            rowgrp3D = mp_comm_null\n      INTEGER                            :: num_layers_3D = 1, &\n                                            max_num_layers_3D = 1, &\n                                            side3D = HUGE(1)\n      ! Use a buffer per each thread\n      TYPE(dbcsr_data_obj), &\n         DIMENSION(:), ALLOCATABLE       :: data_red3D\n      INTEGER                            :: data_type = -1\n   END TYPE dbcsr_layers_3D_C_reduction\n\n   ! Buffers\n   TYPE(dbcsr_buffers), TARGET, SAVE :: buffers_win, &\n                                        buffers_1, buffers_2\n\n   INTEGER, PARAMETER, PRIVATE               :: idata = 1, &\n                                                imeta = 2, &\n                                                ilocal_proc = 1\n\n   TYPE(dbcsr_layers_3D_C_reduction), SAVE :: layers_3D_C_reduction\n\n   LOGICAL, DIMENSION(2), TARGET, SAVE, PRIVATE       :: do_win_create_left, &\n                                                         do_win_create_right\n\n   INTEGER, ALLOCATABLE, DIMENSION(:), PRIVATE :: left_total_row_counts\n\n   INTEGER, ALLOCATABLE, DIMENSION(:, :), TARGET, PRIVATE  :: left_local_images_size, &\n                                                              right_local_images_size\n   INTEGER, DIMENSION(:, :, :, :), POINTER, CONTIGUOUS, PRIVATE :: left_images_size => Null(), &\n                                                                   right_images_size => Null()\n\n   INTEGER, ALLOCATABLE, DIMENSION(:), TARGET, PRIVATE :: g2l_map_cols, g2l_map_rows\n\n   TYPE(mp_request_type), PRIVATE               :: request_count_rows\n   TYPE(mp_request_type), DIMENSION(2), PRIVATE :: requests\n   TYPE(mp_request_type), DIMENSION(2), PRIVATE :: requests_win_create\n\n   TYPE(mp_request_type) :: request_sync_mult = mp_request_null\n\n   ! Buffers used in make_buffers\n   TYPE(dbcsr_data_obj), TARGET, SAVE :: make_buffers_data_recv, make_buffers_data_send\n   INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: make_buffers_meta_recv => Null(), &\n                                                 make_buffers_meta_send => Null()\n\n   PUBLIC :: multiply_3D\n   PUBLIC :: release_layers_3d_C_reduction, buffers_release\n   PUBLIC :: dbcsr_make_buffers, make_layers_3d_C_reduction\n   PUBLIC :: request_sync_mult\n   PUBLIC :: get_max_layers_3D\n\nCONTAINS\n\n   SUBROUTINE dbcsr_make_buffers(matrix, imgdist, is_left, &\n      !! Prepare orig images for MPI windows\n                                 f_row, l_row, f_col, l_col, &\n                                 otf_filtering, alpha)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      TYPE(dbcsr_imagedistribution_obj), INTENT(IN)      :: imgdist\n      LOGICAL, INTENT(IN)                                :: is_left\n      INTEGER, INTENT(IN)                                :: f_row, l_row, f_col, l_col\n      LOGICAL, INTENT(IN)                                :: otf_filtering\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: alpha\n\n      LOGICAL                                            :: do_scale\n\n      do_scale = .FALSE.\n      IF (PRESENT(alpha)) THEN\n         IF (.NOT. dbcsr_scalar_are_equal(alpha, dbcsr_scalar_one(alpha%data_type))) THEN\n            do_scale = .TRUE.\n         END IF\n      END IF\n      !\n      IF (do_scale) THEN\n         CALL make_buffers(matrix, imgdist, is_left, &\n                           f_row, l_row, f_col, l_col, &\n                           otf_filtering, alpha)\n      ELSE\n         CALL make_buffers(matrix, imgdist, is_left, &\n                           f_row, l_row, f_col, l_col, &\n                           otf_filtering)\n      END IF\n   END SUBROUTINE dbcsr_make_buffers\n\n   SUBROUTINE make_buffers(matrix, imgdist, is_left, &\n      !! Prepare orig images for MPI windows\n                           f_row, l_row, f_col, l_col, &\n                           otf_filtering, scale_value)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      TYPE(dbcsr_imagedistribution_obj), INTENT(IN)      :: imgdist\n      LOGICAL, INTENT(IN)                                :: is_left\n      INTEGER, INTENT(IN)                                :: f_row, l_row, f_col, l_col\n      LOGICAL, INTENT(IN)                                :: otf_filtering\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: scale_value\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'make_buffers'\n      INTEGER :: blk, blk_p, bp, col, col_img, col_size, data_type, dst_proc, f_col_f, f_row_f, &\n                 handle, handle2, irequests, it, ithread, l_col_l, l_row_l, mynode, myt, &\n                 nblkcols_local, nblkrows_local, ncols_images, nimages, nprocs, nprocs_total, &\n                 nrows_images, nsymmetries, nthreads, nze, pcol, prow, row, row_img, row_size, size_index, &\n                 stored_col, stored_row, symmetry_i, tr_col_size, tr_row_size\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: img_nblks_cols, img_nblks_rows\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: local_images_displ, recv_displ_proc, &\n                                                            recv_size_proc, send_displ_proc, &\n                                                            send_size_proc\n      INTEGER, ALLOCATABLE, DIMENSION(:, :, :)           :: offset_data, offset_threads\n      INTEGER, ALLOCATABLE, DIMENSION(:, :, :, :)        :: recv_displs, recv_sizes, send_displs, &\n                                                            send_sizes\n      INTEGER, DIMENSION(2)                              :: block_col_bounds, block_row_bounds\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS  :: col_dist, col_img_dist, local_cols, local_g2l_map_cols, &\n                                                     local_g2l_map_rows, local_rows, meta_buffer_p, &\n                                                     row_dist, row_img_dist, threads_dist\n      INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS      :: blacs2mpi, local_images_size\n      INTEGER, DIMENSION(idata:imeta)                    :: my_size_recv, my_size_send\n      INTEGER, POINTER                                   :: coli, rowi\n      INTEGER, TARGET                                    :: mi, ui\n      LOGICAL :: do_crop, do_part_crop_col, do_part_crop_f_col, do_part_crop_f_row, &\n                 do_part_crop_l_col, do_part_crop_l_row, do_part_crop_row, do_symmetry, tr\n      LOGICAL, DIMENSION(:), POINTER, CONTIGUOUS         :: do_win_create\n      TYPE(dbcsr_buffer), POINTER                        :: buffer\n      TYPE(dbcsr_data_obj)                               :: data_block\n      TYPE(dbcsr_data_obj), POINTER                      :: data_buffer_p\n      TYPE(dbcsr_distribution_obj)                       :: set_dist\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_mp_obj)                                 :: mp_obj\n      TYPE(dbcsr_scalar_type)                            :: scale_neg_one\n      TYPE(dbcsr_type)                                   :: sm\n      TYPE(mp_comm_type)                                 :: grp\n\n!$    INTEGER(kind=omp_lock_kind), ALLOCATABLE, DIMENSION(:) :: locks\n\n      CALL timeset(routineN, handle)\n      ! Sync with previous multiplication\n      IF (request_sync_mult .NE. mp_request_null) &\n         DBCSR_ABORT(\"Multiplications are not in sync!\")\n      !\n      ! Take input values and check validity\n      IF (.NOT. dbcsr_valid_index(matrix)) &\n         DBCSR_ABORT(\"Matrix not initialized.\")\n      sm = matrix\n      data_type = sm%data_type\n      IF (data_type .NE. dbcsr_type_real_8 .AND. &\n          data_type .NE. dbcsr_type_real_4 .AND. &\n          data_type .NE. dbcsr_type_complex_8 .AND. &\n          data_type .NE. dbcsr_type_complex_4) &\n         DBCSR_ABORT(\"Invalid data type.\")\n      scale_neg_one = dbcsr_scalar_negative(dbcsr_scalar_one(data_type))\n      set_dist = imgdist%i%main\n      row_dist => dbcsr_distribution_row_dist(set_dist)\n      col_dist => dbcsr_distribution_col_dist(set_dist)\n      local_rows => dbcsr_distribution_local_rows(set_dist)\n      local_cols => dbcsr_distribution_local_cols(set_dist)\n      nblkrows_local = SIZE(local_rows)\n      nblkcols_local = SIZE(local_cols)\n      IF (sm%symmetry) THEN\n         IF (SIZE(row_dist) .NE. SIZE(col_dist)) &\n            DBCSR_WARN('Unequal row and column distributions for symmetric matrix.')\n      END IF\n      nrows_images = imgdist%i%row_decimation\n      row_img_dist => array_data(imgdist%i%row_image)\n      ncols_images = imgdist%i%col_decimation\n      col_img_dist => array_data(imgdist%i%col_image)\n      mp_obj = dbcsr_distribution_mp(imgdist%i%main)\n      CALL dbcsr_mp_grid_setup(mp_obj)\n      nprocs_total = dbcsr_mp_numnodes(mp_obj)\n      mynode = dbcsr_mp_mynode(mp_obj)\n      grp = dbcsr_mp_group(mp_obj)\n      blacs2mpi => dbcsr_mp_pgrid(mp_obj)\n      IF (dbcsr_distribution_max_row_dist(set_dist) .GT. UBOUND(blacs2mpi, 1)) &\n         DBCSR_ABORT(\"Row distribution references unexistent processor rows\")\n      IF (dbcsr_distribution_max_col_dist(set_dist) .GT. UBOUND(blacs2mpi, 2)) &\n         DBCSR_ABORT(\"Col distribution references unexistent processor cols\")\n      ! Check threads configuration\n      NULLIFY (threads_dist)\n!$    IF (.NOT. dbcsr_distribution_has_threads(dbcsr_distribution(matrix))) &\n!$       DBCSR_ABORT(\"Thread distribution not defined\")\n!$    threads_dist => array_data(dbcsr_distribution_thread_dist(dbcsr_distribution(matrix)))\n      IF (is_left) THEN\n         IF (nrows_images .GT. 1) &\n            DBCSR_ABORT(\"Row nimages for left matrix is not 1!\")\n      ELSE\n         IF (ncols_images .GT. 1) &\n            DBCSR_ABORT(\"Col nimages for right matrix is not 1!\")\n      END IF\n      !\n      ! Crop matrix\n      do_crop = .FALSE.\n      do_part_crop_row = .FALSE.\n      do_part_crop_col = .FALSE.\n      do_part_crop_f_row = .FALSE.\n      do_part_crop_l_row = .FALSE.\n      do_part_crop_f_col = .FALSE.\n      do_part_crop_l_col = .FALSE.\n      ! Set no limits\n      IF (ANY((/f_row, l_row, f_col, l_col/) .NE. 0)) THEN\n         IF (f_row .LT. 0) &\n            DBCSR_ABORT(\"Invalid first row bound.\")\n         IF (l_row .GT. dbcsr_nfullrows_total(matrix)) &\n            DBCSR_ABORT(\"Invalid last row bound.\")\n         IF (f_col .LT. 0) &\n            DBCSR_ABORT(\"Invalid first column bound.\")\n         IF (l_col .GT. dbcsr_nfullcols_total(matrix)) &\n            DBCSR_ABORT(\"Invalid last column bound.\")\n         !\n         do_crop = .TRUE.\n         !\n         ! Convert bounds to block addressing\n         IF (f_row .EQ. 0) THEN\n            block_row_bounds(1) = 1\n         ELSE\n            CALL find_block_of_element(f_row, block_row_bounds(1), &\n                                       dbcsr_nblkrows_total(matrix), &\n                                       dbcsr_row_block_offsets(matrix), &\n                                       hint=0)\n            do_part_crop_f_row = array_get(dbcsr_row_block_offsets(matrix), block_row_bounds(1)) .NE. f_row\n            IF (do_part_crop_f_row) THEN\n               ! Block offset of last cleared row\n               f_row_f = f_row - array_get(dbcsr_row_block_offsets(matrix), block_row_bounds(1))\n            END IF\n         END IF\n         !\n         IF (l_row .EQ. 0) THEN\n            block_row_bounds(2) = dbcsr_nblkrows_total(matrix)\n         ELSE\n            CALL find_block_of_element(l_row, block_row_bounds(2), &\n                                       dbcsr_nblkrows_total(matrix), &\n                                       dbcsr_row_block_offsets(matrix), &\n                                       hint=0)\n            do_part_crop_l_row = (array_get(dbcsr_row_block_offsets(matrix), block_row_bounds(2) + 1) - 1) .NE. l_row\n            IF (do_part_crop_l_row) THEN\n               ! Block offset of first cleared row\n               l_row_l = 2 + l_row - array_get(dbcsr_row_block_offsets(matrix), block_row_bounds(2))\n            END IF\n         END IF\n         do_part_crop_row = do_part_crop_f_row .OR. do_part_crop_l_row\n         !\n         IF (f_col .EQ. 0) THEN\n            block_col_bounds(1) = 1\n         ELSE\n            CALL find_block_of_element(f_col, block_col_bounds(1), &\n                                       dbcsr_nblkcols_total(matrix), &\n                                       dbcsr_col_block_offsets(matrix), &\n                                       hint=0)\n            do_part_crop_f_col = array_get(dbcsr_col_block_offsets(matrix), block_col_bounds(1)) .NE. f_col\n            IF (do_part_crop_f_col) THEN\n               ! Block offset of last cleared col\n               f_col_f = f_col - array_get(dbcsr_col_block_offsets(matrix), block_col_bounds(1))\n            END IF\n         END IF\n         !\n         IF (l_col .EQ. 0) THEN\n            block_col_bounds(2) = dbcsr_nblkcols_total(matrix)\n         ELSE\n            CALL find_block_of_element(l_col, block_col_bounds(2), &\n                                       dbcsr_nblkcols_total(matrix), &\n                                       dbcsr_col_block_offsets(matrix), &\n                                       hint=0)\n            do_part_crop_l_col = (array_get(dbcsr_col_block_offsets(matrix), block_col_bounds(2) + 1) - 1) .NE. l_col\n            IF (do_part_crop_l_col) THEN\n               ! Block offset of first cleared col\n               l_col_l = 2 + l_col - array_get(dbcsr_col_block_offsets(matrix), block_col_bounds(2))\n            END IF\n         END IF\n         do_part_crop_col = do_part_crop_f_col .OR. do_part_crop_l_col\n      END IF\n      !\n      IF (dbcsr_has_symmetry(matrix)) THEN\n         nsymmetries = 2\n         do_symmetry = .TRUE.\n      ELSE\n         nsymmetries = 1\n         do_symmetry = .FALSE.\n      END IF\n      !\n      IF (is_left) THEN\n         nimages = ncols_images\n         buffer => buffers_win%left\n         nprocs = dbcsr_mp_npcols(mp_obj)\n         ALLOCATE (left_images_size(idata:imeta, &\n                                    nimages, &\n                                    MAX(1, dbcsr_mp_nprows(mp_obj)/layers_3D_C_reduction%side3D), &\n                                    0:nprocs - 1))\n         ALLOCATE (left_local_images_size(idata:imeta, nimages))\n         local_images_size => left_local_images_size\n         irequests = 1\n         !\n         ! Count the maximum possible multiplies per row for on-the-fly filtering\n         IF (otf_filtering) THEN\n            ALLOCATE (left_total_row_counts(nblkrows_local))\n            left_total_row_counts = 0\n         END IF\n         do_win_create => do_win_create_left\n      ELSE\n         nimages = nrows_images\n         buffer => buffers_win%right\n         nprocs = dbcsr_mp_nprows(mp_obj)\n         ALLOCATE (right_images_size(idata:imeta, &\n                                     nimages, &\n                                     MAX(1, dbcsr_mp_npcols(mp_obj)/layers_3D_C_reduction%side3D), &\n                                     0:nprocs - 1))\n         ALLOCATE (right_local_images_size(idata:imeta, nimages))\n         local_images_size => right_local_images_size\n         irequests = 2\n         do_win_create => do_win_create_right\n      END IF\n      !\n      ! 3D communicator\n      CALL make_layers_3D_AB(layers_3D_C_reduction%num_layers_3D, &\n                             layers_3D_C_reduction%side3D, &\n                             mp_obj, is_left, buffer)\n      !\n      ! Evaluate maps for global -> local indexing (g2l_map_rows, g2l_map_cols)\n      ! Count the number of blocks per row/column (img_nblks_rows, img_nblks_cols)\n      IF (is_left) THEN\n         ALLOCATE (g2l_map_rows(sm%nblkrows_total))\n         local_g2l_map_rows => g2l_map_rows\n         ALLOCATE (local_g2l_map_cols(sm%nblkcols_total))\n         ALLOCATE (img_nblks_rows(1), img_nblks_cols(nimages))\n      ELSE\n         ALLOCATE (g2l_map_cols(sm%nblkcols_total))\n         local_g2l_map_cols => g2l_map_cols\n         ALLOCATE (local_g2l_map_rows(sm%nblkrows_total))\n         ALLOCATE (img_nblks_rows(nimages), img_nblks_cols(1))\n      END IF\n      !\n      local_g2l_map_rows(:) = 0\n      IF (nrows_images .EQ. 1) THEN\n         img_nblks_rows(1) = nblkrows_local\n         DO row = 1, nblkrows_local\n            local_g2l_map_rows(local_rows(row)) = row\n         END DO\n      ELSE\n         img_nblks_rows(:) = 0\n         DO row = 1, nblkrows_local\n            row_img = row_img_dist(local_rows(row))\n            ui = MOD(row_img - 1, nrows_images) + 1\n            img_nblks_rows(ui) = img_nblks_rows(ui) + 1\n            local_g2l_map_rows(local_rows(row)) = img_nblks_rows(ui)\n         END DO\n      END IF\n      !\n      local_g2l_map_cols(:) = 0\n      IF (ncols_images .EQ. 1) THEN\n         img_nblks_cols(1) = nblkcols_local\n         DO col = 1, nblkcols_local\n            local_g2l_map_cols(local_cols(col)) = col\n         END DO\n      ELSE\n         img_nblks_cols(:) = 0\n         DO col = 1, nblkcols_local\n            col_img = col_img_dist(local_cols(col))\n            ui = MOD(col_img - 1, ncols_images) + 1\n            img_nblks_cols(ui) = img_nblks_cols(ui) + 1\n            local_g2l_map_cols(local_cols(col)) = img_nblks_cols(ui)\n         END DO\n      END IF\n      !\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP PRIVATE (ithread,myt,iter,row,col,blk,row_size,col_size,&\n!$OMP          stored_row,stored_col,blk_p,bp,tr,&\n!$OMP          nze,symmetry_i,row_img,col_img,rowi,coli,&\n!$OMP          tr_row_size,tr_col_size,prow,pcol,dst_proc,&\n!$OMP          data_buffer_p,meta_buffer_p,&\n!$OMP          mi,ui,it,data_block) &\n!$OMP SHARED (nthreads,send_sizes,offset_data,matrix,nsymmetries,do_symmetry,&\n!$OMP         row_img_dist,col_img_dist,imgdist,row_dist,col_dist,&\n!$OMP         is_left,my_size_send,my_size_recv,nimages,&\n!$OMP         local_images_size,data_type,memtype_mpi_buffer,sm,&\n!$OMP         img_nblks_cols,img_nblks_rows,mynode,offset_threads,&\n!$OMP         local_g2l_map_cols,local_g2l_map_rows,recv_sizes,grp,make_buffers_meta_send,&\n!$OMP         scale_value,scale_neg_one,make_buffers_data_send,make_buffers_data_recv,&\n!$OMP         size_index,recv_displ_proc,recv_size_proc,send_size_proc,&\n!$OMP         mp_obj,threads_dist,make_buffers_meta_recv,nrows_images,ncols_images,&\n!$OMP         locks,blacs2mpi,send_displ_proc,recv_displs,send_displs,&\n!$OMP         left_images_size,right_images_size,local_images_displ,requests,&\n!$OMP         buffer,left_total_row_counts,otf_filtering,&\n!$OMP         irequests,do_win_create,handle2,nprocs_total,&\n!$OMP         do_crop,do_part_crop_row,do_part_crop_col,block_row_bounds,block_col_bounds,&\n!$OMP         do_part_crop_f_row,do_part_crop_l_row,do_part_crop_f_col,do_part_crop_l_col,&\n!$OMP         f_row_f,l_row_l,f_col_f,l_col_l,requests_win_create)\n      ithread = 0\n!$    ithread = omp_get_thread_num()\n      myt = ithread\n      IF (is_left) THEN\n         rowi => mi\n         coli => ui\n      ELSE\n         rowi => ui\n         coli => mi\n      END IF\n!$OMP MASTER\n      nthreads = 1\n!$    nthreads = omp_get_num_threads()\n      ALLOCATE (send_sizes(idata:imeta, 0:nthreads - 1, &\n                           nimages, 0:nprocs_total - 1))\n      send_sizes(:, :, :, :) = 0\n      !\n      size_index = 0\n!$    IF (is_left) THEN\n!$       size_index = nthreads + 1\n!$    END IF\n!$    IF (is_left .AND. do_symmetry) THEN\n!$       ALLOCATE (locks(0:nthreads - 1))\n!$    END IF\n!$OMP END MASTER\n!$OMP BARRIER\n!$    IF (is_left .AND. do_symmetry) THEN\n!$       call omp_init_lock(locks(ithread))\n!$    END IF\n      !\n      ! Take data and meta dimensions per each thread, image, proc\n      CALL dbcsr_iterator_start(iter, matrix, shared=.TRUE.)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, blk, &\n                                        row_size=row_size, col_size=col_size)\n         nze = row_size*col_size\n         IF (nze .EQ. 0) CYCLE\n         DO symmetry_i = 1, nsymmetries\n            IF (symmetry_i .EQ. 1) THEN\n               stored_row = row; stored_col = col\n            ELSE\n               IF (row .EQ. col) CYCLE\n               stored_row = col; stored_col = row\n            END IF\n            ! Apply cropping\n            IF (do_crop) THEN\n               IF (stored_row .LT. block_row_bounds(1)) CYCLE\n               IF (stored_row .GT. block_row_bounds(2)) CYCLE\n               IF (stored_col .LT. block_col_bounds(1)) CYCLE\n               IF (stored_col .GT. block_col_bounds(2)) CYCLE\n            END IF\n            row_img = row_img_dist(stored_row)\n            col_img = col_img_dist(stored_col)\n            CALL image_calculator(imgdist, &\n                                  prow=prow, pcol=pcol, &\n                                  rowi=rowi, coli=coli, &\n                                  myprow=row_dist(stored_row), myrowi=row_img, &\n                                  mypcol=col_dist(stored_col), mycoli=col_img, &\n                                  shifting='0')\n            dst_proc = blacs2mpi(prow, pcol)\n!$          IF (is_left .AND. do_symmetry) THEN\n!$             myt = threads_dist(stored_row)\n!$          END IF\n!$OMP ATOMIC\n            send_sizes(imeta, myt, ui, dst_proc) = &\n               send_sizes(imeta, myt, ui, dst_proc) + 3\n!$OMP ATOMIC\n            send_sizes(idata, myt, ui, dst_proc) = &\n               send_sizes(idata, myt, ui, dst_proc) + nze\n         END DO ! symmetry_i\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n!$OMP BARRIER\n!$OMP MASTER\n      ! Exchange refs\n      ALLOCATE (recv_sizes(idata:imeta, 0:nthreads - 1, &\n                           nimages, 0:nprocs_total - 1))\n      CALL timeset(routineN//\"_sizes\", handle2)\n      CALL mp_alltoall(send_sizes(:, :, :, :), &\n                       recv_sizes(:, :, :, :), &\n                       2*nimages*nthreads, grp)\n      CALL timestop(handle2)\n      !\n      ! Evaluate the local size for each image, accumulating over threads and procs.\n      ! Take the local displacement for each image.\n      ! Note that displacement starts at zero.\n      my_size_recv(:) = 0\n      local_images_size(:, :) = 0\n      ALLOCATE (local_images_displ(idata:imeta, nimages))\n      DO ui = 1, nimages\n         local_images_displ(:, ui) = my_size_recv(:)\n         DO dst_proc = 0, nprocs_total - 1\n            DO it = 0, nthreads - 1\n               local_images_size(:, ui) = local_images_size(:, ui) + &\n                                          recv_sizes(:, it, ui, dst_proc)\n            END DO\n         END DO\n         IF (local_images_size(imeta, ui) .EQ. 0) CYCLE\n         ! Include stats slots for threads indices\n         local_images_size(imeta, ui) = local_images_size(imeta, ui) + size_index\n         my_size_recv(:) = my_size_recv(:) + local_images_size(:, ui)\n      END DO\n      !\n      ! Exchange sizes\n      IF (is_left) THEN\n         CALL mp_iallgather(local_images_size, left_images_size, buffer%subgrp, requests(irequests))\n      ELSE\n         CALL mp_iallgather(local_images_size, right_images_size, buffer%subgrp, requests(irequests))\n      END IF\n      !\n      ! Allocate data and meta buffers\n      do_win_create(:) = .NOT. buffer%has_rma_win\n      IF (buffer%has_rma_win) THEN\n         IF (buffer%grp .NE. grp .OR. dbcsr_data_get_type(buffer%data) .NE. data_type) THEN\n            do_win_create(:) = .TRUE.\n         END IF\n      END IF\n      CALL buffer_init(buffer, data_type, &\n                       my_size_recv(idata), my_size_recv(imeta), &\n                       data_memory_type=memtype_mpi_buffer)\n      buffer%grp = grp\n      !\n      ! Set send and recv buffers sizes and displacements for each proc.\n      ! Accumulate over images and threads.\n      ! Here displacement starts at one.\n      ALLOCATE (send_displs(idata:imeta, 0:nthreads - 1, &\n                            nimages, 0:nprocs_total - 1))\n      ! Displs for local data arrangement, starting at one.\n      ALLOCATE (recv_displs(idata:imeta, 0:nthreads - 1, &\n                            nimages, 0:nprocs_total - 1))\n      ! Here displacement starts at zero.\n      ALLOCATE (send_size_proc(idata:imeta, 0:nprocs_total - 1))\n      ALLOCATE (recv_size_proc(idata:imeta, 0:nprocs_total - 1))\n      ALLOCATE (send_displ_proc(idata:imeta, 0:nprocs_total - 1))\n      ALLOCATE (recv_displ_proc(idata:imeta, 0:nprocs_total - 1))\n      my_size_send(:) = 1\n      my_size_recv(:) = 1\n      DO dst_proc = 0, nprocs_total - 1\n         send_displ_proc(:, dst_proc) = my_size_send(:) - 1\n         recv_displ_proc(:, dst_proc) = my_size_recv(:) - 1\n         ! Avoid communication of local data\n         IF (dst_proc .NE. mynode) THEN\n            DO ui = 1, nimages\n               DO it = 0, nthreads - 1\n                  send_displs(:, it, ui, dst_proc) = my_size_send(:)\n                  recv_displs(:, it, ui, dst_proc) = my_size_recv(:)\n                  my_size_send(:) = my_size_send(:) + send_sizes(:, it, ui, dst_proc)\n                  my_size_recv(:) = my_size_recv(:) + recv_sizes(:, it, ui, dst_proc)\n               END DO\n            END DO\n         ELSE\n            ! Reset all\n            send_displs(:, :, :, dst_proc) = 0\n            recv_displs(:, :, :, dst_proc) = 0\n         END IF\n         send_size_proc(:, dst_proc) = my_size_send(:) - send_displ_proc(:, dst_proc) - 1\n         recv_size_proc(:, dst_proc) = my_size_recv(:) - recv_displ_proc(:, dst_proc) - 1\n      END DO\n      !\n      ! Allocate data/meta to send\n      IF (dbcsr_data_valid(make_buffers_data_send)) THEN\n         IF (dbcsr_data_get_type(make_buffers_data_send) .NE. data_type) THEN\n            CALL dbcsr_data_release(make_buffers_data_send)\n         END IF\n      END IF\n      IF (dbcsr_data_valid(make_buffers_data_send)) THEN\n         CALL dbcsr_data_ensure_size(make_buffers_data_send, my_size_send(idata) - 1, nocopy=.TRUE.)\n      ELSE\n         CALL dbcsr_data_init(make_buffers_data_send)\n         CALL dbcsr_data_new(make_buffers_data_send, data_type, my_size_send(idata) - 1, &\n                             memory_type=memtype_mpi_buffer)\n      END IF\n      CALL ensure_array_size(make_buffers_meta_send, ub=my_size_send(imeta) - 1, &\n                             nocopy=.TRUE., memory_type=memtype_mpi_buffer)\n      ! Displs for data offset\n      ALLOCATE (offset_threads(idata:imeta, 0:nthreads - 1, nimages))\n      offset_threads(:, :, :) = 0\n      ! Set offset for local data\n      ALLOCATE (offset_data(0:nthreads - 1, nimages, 0:nprocs_total - 1))\n      offset_data(:, :, :) = 1\n      ! Evaluate local displs\n      DO ui = 1, nimages\n         IF (local_images_size(imeta, ui) .EQ. 0) CYCLE\n         offset_threads(:, 0, ui) = 0\n         DO it = 1, nthreads - 1\n            offset_threads(:, it, ui) = offset_threads(:, it - 1, ui)\n            DO dst_proc = 0, nprocs_total - 1\n               offset_threads(:, it, ui) = offset_threads(:, it, ui) + &\n                                           recv_sizes(:, it - 1, ui, dst_proc)\n            END DO\n         END DO\n         ! Fill meta indices for threads\n!$       IF (is_left) THEN\n!$          buffer%meta(local_images_displ(imeta, ui) + 1:local_images_displ(imeta, ui) + nthreads) = &\n!$             offset_threads(imeta, :, ui)/3\n!$          buffer%meta(local_images_displ(imeta, ui) + size_index) = &\n!$             (local_images_size(imeta, ui) - size_index)/3\n!$       END IF\n         offset_threads(imeta, :, ui) = offset_threads(imeta, :, ui) + local_images_displ(imeta, ui) + size_index + 1\n         send_displs(:, :, ui, mynode) = offset_threads(:, :, ui)\n         !\n         ! Allow ordering by proc for insertion\n         DO dst_proc = 0, mynode - 1\n            DO it = 0, nthreads - 1\n               send_displs(:, it, ui, mynode) = send_displs(:, it, ui, mynode) + &\n                                                recv_sizes(:, it, ui, dst_proc)\n            END DO\n         END DO\n         offset_data(:, ui, mynode) = send_displs(idata, :, ui, mynode) + 1\n         send_displs(idata, :, ui, mynode) = send_displs(idata, :, ui, mynode) + local_images_displ(idata, ui) + 1\n      END DO\n!$OMP END MASTER\n!$OMP BARRIER\n      !\n      IF (do_part_crop_row .OR. do_part_crop_col) THEN\n         CALL dbcsr_data_init(data_block)\n         CALL dbcsr_data_new(data_block, dbcsr_type_1d_to_2d(data_type))\n      END IF\n      !\n      ! Copy data and meta in the buffers\n      CALL timeset(routineN//\"_pack\", handle2)\n      CALL dbcsr_iterator_start(iter, matrix, shared=.TRUE.)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, blk, blk_p=blk_p, &\n                                        row_size=row_size, col_size=col_size)\n         nze = row_size*col_size\n         IF (nze .EQ. 0) CYCLE\n         bp = ABS(blk_p)\n         DO symmetry_i = 1, nsymmetries\n            IF (symmetry_i .EQ. 1) THEN\n               stored_row = row; stored_col = col; tr = blk_p .LT. 0\n               tr_row_size = col_size; tr_col_size = row_size\n            ELSE\n               IF (row .EQ. col) CYCLE\n               stored_row = col; stored_col = row; tr = blk_p .GT. 0\n               tr_row_size = row_size; tr_col_size = col_size\n            END IF\n            ! Apply cropping\n            IF (do_crop) THEN\n               IF (stored_row .LT. block_row_bounds(1)) CYCLE\n               IF (stored_row .GT. block_row_bounds(2)) CYCLE\n               IF (stored_col .LT. block_col_bounds(1)) CYCLE\n               IF (stored_col .GT. block_col_bounds(2)) CYCLE\n            END IF\n            row_img = row_img_dist(stored_row)\n            col_img = col_img_dist(stored_col)\n            CALL image_calculator(imgdist, &\n                                  prow=prow, pcol=pcol, &\n                                  rowi=rowi, coli=coli, &\n                                  myprow=row_dist(stored_row), myrowi=row_img, &\n                                  mypcol=col_dist(stored_col), mycoli=col_img, &\n                                  shifting='0')\n            dst_proc = blacs2mpi(prow, pcol)\n            IF (dst_proc .EQ. mynode) THEN\n               data_buffer_p => buffer%data\n               meta_buffer_p => buffer%meta\n            ELSE\n               data_buffer_p => make_buffers_data_send\n               meta_buffer_p => make_buffers_meta_send\n            END IF\n!$          IF (is_left .AND. do_symmetry) THEN\n!$             myt = threads_dist(stored_row)\n!$             call omp_set_lock(locks(myt))\n!$          END IF\n            IF (tr) THEN\n               CALL dbcsr_block_transpose_aa(data_buffer_p, sm%data_area, tr_row_size, tr_col_size, &\n                                             send_displs(idata, myt, ui, dst_proc), bp, &\n                                             scale_value)\n               IF (sm%negate_real .AND. sm%negate_imaginary) THEN\n                  CALL dbcsr_block_scale(data_buffer_p, scale=scale_neg_one, &\n                                         row_size=nze, col_size=1, &\n                                         lb=send_displs(idata, myt, ui, dst_proc))\n               ELSEIF (sm%negate_real) THEN\n                  CALL dbcsr_block_real_neg(data_buffer_p, row_size=nze, col_size=1, &\n                                            lb=send_displs(idata, myt, ui, dst_proc))\n               ELSEIF (sm%negate_imaginary) THEN\n                  CALL dbcsr_block_conjg(data_buffer_p, row_size=nze, col_size=1, &\n                                         lb=send_displs(idata, myt, ui, dst_proc))\n               END IF\n            ELSE\n               CALL dbcsr_block_copy_aa(data_buffer_p, sm%data_area, row_size, col_size, &\n                                        send_displs(idata, myt, ui, dst_proc), bp, &\n                                        scale_value)\n            END IF\n            !\n            ! Apply cropping for partial blocks\n            IF (do_part_crop_row .OR. do_part_crop_col) THEN\n               CALL dbcsr_data_set_pointer( &\n                  area=data_block, &\n                  rsize=row_size, &\n                  csize=col_size, &\n                  pointee=data_buffer_p, &\n                  source_lb=send_displs(idata, myt, ui, dst_proc))\n               IF (do_part_crop_row) THEN\n                  IF (do_part_crop_f_row .AND. stored_row .EQ. block_row_bounds(1)) THEN\n                     CALL dbcsr_data_clear(data_block, ub=f_row_f)\n                  END IF\n                  IF (do_part_crop_l_row .AND. stored_row .EQ. block_row_bounds(2)) THEN\n                     CALL dbcsr_data_clear(data_block, lb=l_row_l)\n                  END IF\n               END IF\n               IF (do_part_crop_col) THEN\n                  IF (do_part_crop_f_col .AND. stored_col .EQ. block_col_bounds(1)) THEN\n                     CALL dbcsr_data_clear(data_block, ub2=f_col_f)\n                  END IF\n                  IF (do_part_crop_l_col .AND. stored_col .EQ. block_col_bounds(2)) THEN\n                     CALL dbcsr_data_clear(data_block, lb2=l_col_l)\n                  END IF\n               END IF\n            END IF\n            !\n            ! Set meta data (global or local indexing)\n            IF (dst_proc .EQ. mynode) THEN\n               stored_row = local_g2l_map_rows(stored_row)\n               stored_col = local_g2l_map_cols(stored_col)\n               ! Count the maximum possible multiplies per row for on-the-fly filtering\n               IF (is_left .AND. otf_filtering) THEN\n                  left_total_row_counts(stored_row) = &\n                     left_total_row_counts(stored_row) + 1\n               END IF\n            END IF\n            meta_buffer_p(send_displs(imeta, myt, ui, dst_proc)) = stored_row\n            meta_buffer_p(send_displs(imeta, myt, ui, dst_proc) + 1) = stored_col\n            meta_buffer_p(send_displs(imeta, myt, ui, dst_proc) + 2) = offset_data(myt, ui, dst_proc)\n            !\n            send_displs(imeta, myt, ui, dst_proc) = send_displs(imeta, myt, ui, dst_proc) + 3\n            send_displs(idata, myt, ui, dst_proc) = send_displs(idata, myt, ui, dst_proc) + nze\n            offset_data(myt, ui, dst_proc) = offset_data(myt, ui, dst_proc) + nze\n!$          IF (is_left .AND. do_symmetry) THEN\n!$             call omp_unset_lock(locks(myt))\n!$          END IF\n         END DO\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL timestop(handle2)\n      !\n      IF (do_part_crop_row .OR. do_part_crop_col) THEN\n         CALL dbcsr_data_clear_pointer(data_block)\n         CALL dbcsr_data_release(data_block)\n      END IF\n      !\n!$OMP BARRIER\n!$OMP MASTER\n      !\n      ! Allocate data/meta to recv\n      IF (dbcsr_data_valid(make_buffers_data_recv)) THEN\n         IF (dbcsr_data_get_type(make_buffers_data_recv) .NE. data_type) THEN\n            CALL dbcsr_data_release(make_buffers_data_recv)\n         END IF\n      END IF\n      IF (dbcsr_data_valid(make_buffers_data_recv)) THEN\n         CALL dbcsr_data_ensure_size(make_buffers_data_recv, my_size_recv(idata) - 1, nocopy=.TRUE.)\n      ELSE\n         CALL dbcsr_data_init(make_buffers_data_recv)\n         CALL dbcsr_data_new(make_buffers_data_recv, data_type, my_size_recv(idata) - 1, &\n                             memory_type=memtype_mpi_buffer)\n      END IF\n      CALL ensure_array_size(make_buffers_meta_recv, ub=my_size_recv(imeta) - 1, &\n                             nocopy=.TRUE., memory_type=memtype_mpi_buffer)\n      ! Exchange data\n      CALL timeset(routineN//\"_data\", handle2)\n      CALL hybrid_alltoall_any(make_buffers_data_send, send_size_proc(idata, :), send_displ_proc(idata, :), &\n                               make_buffers_data_recv, recv_size_proc(idata, :), recv_displ_proc(idata, :), &\n                               mp_obj, &\n                               most_ptp=.TRUE., remainder_ptp=.TRUE., no_hybrid=.FALSE.)\n      CALL hybrid_alltoall_i1(make_buffers_meta_send, send_size_proc(imeta, :), send_displ_proc(imeta, :), &\n                              make_buffers_meta_recv, recv_size_proc(imeta, :), recv_displ_proc(imeta, :), &\n                              mp_obj, &\n                              most_ptp=.TRUE., remainder_ptp=.TRUE., no_hybrid=.FALSE.)\n      CALL timestop(handle2)\n!$OMP END MASTER\n!$OMP BARRIER\n!$    IF (is_left .AND. do_symmetry) THEN\n!$       call omp_destroy_lock(locks(ithread))\n!$    END IF\n      !\n      ! Arrange data in the local buffers in images\n      data_buffer_p => buffer%data\n      meta_buffer_p => buffer%meta\n      DO ui = 1, nimages\n         ! Check for empty images\n         IF (local_images_size(imeta, ui) .EQ. 0) CYCLE\n         DO dst_proc = 0, nprocs_total - 1\n            IF (recv_sizes(imeta, ithread, ui, dst_proc) .EQ. 0) CYCLE\n            ! Skip local data\n            IF (dst_proc .EQ. mynode) THEN\n               offset_threads(:, ithread, ui) = offset_threads(:, ithread, ui) + &\n                                                recv_sizes(:, ithread, ui, dst_proc)\n            ELSE\n               ! Copy meta, block by block\n               DO blk = recv_displs(imeta, ithread, ui, dst_proc), &\n                  recv_displs(imeta, ithread, ui, dst_proc) + recv_sizes(imeta, ithread, ui, dst_proc) - 1, 3\n                  stored_row = local_g2l_map_rows(make_buffers_meta_recv(blk))\n                  stored_col = local_g2l_map_cols(make_buffers_meta_recv(blk + 1))\n                  meta_buffer_p(offset_threads(imeta, ithread, ui)) = stored_row\n                  meta_buffer_p(offset_threads(imeta, ithread, ui) + 1) = stored_col\n                  meta_buffer_p(offset_threads(imeta, ithread, ui) + 2) = make_buffers_meta_recv(blk + 2) + &\n                                                                          offset_threads(idata, ithread, ui)\n                  offset_threads(imeta, ithread, ui) = offset_threads(imeta, ithread, ui) + 3\n                  ! Count the maximum possible multiplies per row for on-the-fly filtering\n                  IF (is_left .AND. otf_filtering) THEN\n!$OMP ATOMIC\n                     left_total_row_counts(stored_row) = &\n                        left_total_row_counts(stored_row) + 1\n                  END IF\n               END DO\n               ! Copy data\n               CALL dbcsr_data_set(data_buffer_p, &\n                                   offset_threads(idata, ithread, ui) + local_images_displ(idata, ui) + 1, &\n                                   recv_sizes(idata, ithread, ui, dst_proc), &\n                                   make_buffers_data_recv, recv_displs(idata, ithread, ui, dst_proc))\n               offset_threads(idata, ithread, ui) = offset_threads(idata, ithread, ui) + &\n                                                    recv_sizes(idata, ithread, ui, dst_proc)\n            END IF\n         END DO\n      END DO\n!$OMP END PARALLEL\n      DEALLOCATE (send_sizes, recv_sizes)\n      DEALLOCATE (send_displs, recv_displs, offset_data, offset_threads)\n      DEALLOCATE (send_size_proc, send_displ_proc, recv_size_proc, recv_displ_proc)\n      !\n      IF (is_left .AND. otf_filtering) THEN\n         CALL mp_isum(left_total_row_counts, dbcsr_mp_my_row_group(mp_obj), request_count_rows)\n      END IF\n      !\n      CALL setup_rec_index_images(buffer%meta, img_nblks_rows, img_nblks_cols, &\n                                  local_images_size(imeta, :), local_images_displ(imeta, :), &\n                                  size_index, is_left)\n      IF (buffer%has_rma_win) THEN\n         do_win_create(1) = do_win_create(1) .OR. dbcsr_data_exists(buffer%data_before_resize)\n         do_win_create(2) = do_win_create(2) .OR. ASSOCIATED(buffer%meta_before_resize)\n         CALL mp_isum(do_win_create, buffer%subgrp, requests_win_create(irequests))\n      END IF\n      !\n      IF (is_left) THEN\n         NULLIFY (local_g2l_map_rows)\n         DEALLOCATE (local_g2l_map_cols)\n      ELSE\n         DEALLOCATE (local_g2l_map_rows)\n         NULLIFY (local_g2l_map_cols)\n      END IF\n!$    IF (is_left .AND. do_symmetry) THEN\n!$       DEALLOCATE (locks)\n!$    END IF\n      !\n      DEALLOCATE (img_nblks_rows, img_nblks_cols)\n      DEALLOCATE (local_images_displ)\n      !\n      CALL timestop(handle)\n   END SUBROUTINE make_buffers\n\n   SUBROUTINE make_layers_3D_AB(my_num_layers_3D, side3D, mp_obj, is_left, buffer)\n      !! Make communicators for A and B matrices\n      INTEGER, INTENT(IN)                                :: my_num_layers_3D, side3D\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_obj\n      LOGICAL, INTENT(IN)                                :: is_left\n      TYPE(dbcsr_buffer), INTENT(INOUT)                  :: buffer\n\n      INTEGER                                            :: color, key, mypcol, myprow\n      TYPE(mp_comm_type)                                 :: mygrp\n\n      ! Switch to single layer communicator\n      IF (my_num_layers_3D .LE. 1) THEN\n         IF (buffer%num_layers_3D .GT. 1 .AND. buffer%subgrp .NE. mp_comm_null) &\n            CALL mp_comm_free(buffer%subgrp)\n         buffer%num_layers_3D = 1\n         IF (is_left) THEN\n            buffer%subgrp = dbcsr_mp_my_row_group(mp_obj)\n         ELSE\n            buffer%subgrp = dbcsr_mp_my_col_group(mp_obj)\n         END IF\n         RETURN\n      END IF\n      !\n      ! Check if any existing 3D communicator can be reused\n      mygrp = dbcsr_mp_group(mp_obj)\n      IF (buffer%grp .EQ. mygrp .AND. buffer%num_layers_3D .EQ. my_num_layers_3D) RETURN\n      !\n      ! Reset previous 3D communicator\n      IF (buffer%num_layers_3D .GT. 1 .AND. buffer%subgrp .NE. mp_comm_null) &\n         CALL mp_comm_free(buffer%subgrp)\n      !\n      myprow = dbcsr_mp_myprow(mp_obj)\n      mypcol = dbcsr_mp_mypcol(mp_obj)\n      IF (is_left) THEN\n         color = MOD(myprow, side3D)\n         ! Column-major order\n         key = mypcol*(dbcsr_mp_nprows(mp_obj)/side3D) + myprow/side3D\n      ELSE\n         color = MOD(mypcol, side3D)\n         ! Row-major order\n         key = myprow*(dbcsr_mp_npcols(mp_obj)/side3D) + mypcol/side3D\n      END IF\n      CALL mp_comm_split_direct(mygrp, buffer%subgrp, color, key)\n      buffer%num_layers_3D = my_num_layers_3D\n   END SUBROUTINE make_layers_3D_AB\n\n   PURE FUNCTION get_rank3D(myprow, mypcol, nprows, side3D)\n      !! Return the rank of the 3D layer (3D communicator for C), Column-major order\n      INTEGER, INTENT(IN)                                :: myprow, mypcol, nprows, side3D\n      INTEGER                                            :: get_rank3D\n\n      get_rank3D = myprow/side3D + (nprows/side3D)*(mypcol/side3D)\n   END FUNCTION get_rank3D\n\n   SUBROUTINE make_layers_3D_C_reduction(my_num_layers_3D, mp_obj)\n      !! Make communicators for 3D layers for C-reduction\n      INTEGER, INTENT(IN)                                :: my_num_layers_3D\n      TYPE(dbcsr_mp_obj), INTENT(INOUT)                  :: mp_obj\n\n      CHARACTER(len=100)                                 :: msg\n      INTEGER                                            :: color, key, mypcol, myprow, &\n                                                            npcols, nprows, numnodes\n      LOGICAL                                            :: do_layers_3D\n      LOGICAL, SAVE                                      :: warning = .TRUE.\n      TYPE(mp_comm_type)                                 :: mygrp\n\n      CALL dbcsr_mp_grid_setup(mp_obj)\n      IF (my_num_layers_3D .LE. 1) THEN\n         ! Reset 3D communicator if it was previously declared\n         IF (layers_3D_C_reduction%num_layers_3D .GT. 1) CALL release_layers_3D_C_reduction()\n         RETURN\n      END IF\n      !\n      ! Check if any existing 3D communicator can be reused\n      mygrp = dbcsr_mp_group(mp_obj)\n      IF (layers_3D_C_reduction%grp .EQ. mygrp .AND. &\n          layers_3D_C_reduction%num_layers_3D .EQ. my_num_layers_3D) RETURN\n      !\n      ! Reset 3D communicator\n      CALL release_layers_3D_C_reduction()\n      !\n      ! Checks for 3D algorithm\n      numnodes = dbcsr_mp_numnodes(mp_obj)\n      nprows = dbcsr_mp_nprows(mp_obj)\n      npcols = dbcsr_mp_npcols(mp_obj)\n      IF (dbcsr_cfg%use_mpi_rma%val) THEN\n         IF (nprows .NE. npcols) THEN\n            ! No square topology, scale the maximum coordinate\n            do_layers_3D = MAX(nprows, npcols) .EQ. (my_num_layers_3D*MIN(nprows, npcols)) .AND. &\n                           my_num_layers_3D .LE. MIN(nprows, npcols)\n         ELSE\n            ! Square topology, scale both coordinates\n            do_layers_3D = ((nprows/NINT(SQRT(REAL(MAX(1, my_num_layers_3D), KIND=real_8))))**2)* &\n                           my_num_layers_3D .EQ. (nprows*npcols)\n         END IF\n         IF (.NOT. do_layers_3D .AND. warning) THEN\n            WRITE (UNIT=msg, FMT='(A,I3,A,I3,A,I3,A)') \"Cannot make 3D layers with \", my_num_layers_3D, &\n               \" layers and (\", nprows, \"x\", npcols, \") ranks! Run with a single layer.\"\n            DBCSR_WARN(msg)\n            warning = .FALSE.\n         END IF\n         IF (do_layers_3D) THEN\n            layers_3D_C_reduction%grp = mygrp\n            layers_3D_C_reduction%num_layers_3D = my_num_layers_3D\n            layers_3D_C_reduction%max_num_layers_3D = &\n               MAX(layers_3D_C_reduction%max_num_layers_3D, &\n                   my_num_layers_3D)\n            layers_3D_C_reduction%side3D = NINT(SQRT(REAL(numnodes/my_num_layers_3D, KIND=real_8)))\n            !\n            ! Create a new 3D communicator\n            myprow = dbcsr_mp_myprow(mp_obj)\n            mypcol = dbcsr_mp_mypcol(mp_obj)\n            ! Row-wise order for color\n            color = MOD(myprow, layers_3D_C_reduction%side3D)* &\n                    layers_3D_C_reduction%side3D + MOD(mypcol, layers_3D_C_reduction%side3D)\n            ! Column-major order\n            key = get_rank3D(myprow, mypcol, nprows, layers_3D_C_reduction%side3D)\n            CALL mp_comm_split_direct(mygrp, layers_3D_C_reduction%grp3D, color, key)\n            !\n            ! Create a 3D-row communicator based on the 3D communicator\n            color = key/(nprows/layers_3D_C_reduction%side3D)\n            CALL mp_comm_split_direct(layers_3D_C_reduction%grp3D, &\n                                      layers_3D_C_reduction%rowgrp3D, color, key)\n         END IF\n      ELSE\n         DBCSR_WARN('Cannot make 3D layers without experimental MPI algorithm enabled!')\n      END IF\n   END SUBROUTINE make_layers_3D_C_reduction\n\n   SUBROUTINE release_layers_3D_C_reduction(release_buffers)\n      !! Release communicators for 3D layers for C-reduction\n      LOGICAL, OPTIONAL                                  :: release_buffers\n\n      INTEGER                                            :: ibuff\n\n      layers_3D_C_reduction%grp = mp_comm_null\n      IF (layers_3D_C_reduction%rowgrp3D .NE. mp_comm_null) CALL mp_comm_free(layers_3D_C_reduction%rowgrp3D)\n      IF (layers_3D_C_reduction%grp3D .NE. mp_comm_null) CALL mp_comm_free(layers_3D_C_reduction%grp3D)\n      layers_3D_C_reduction%rowgrp3D = mp_comm_null\n      layers_3D_C_reduction%grp3D = mp_comm_null\n      layers_3D_C_reduction%num_layers_3D = 1\n      layers_3D_C_reduction%side3D = HUGE(1)\n\n      IF (PRESENT(release_buffers)) THEN\n         IF (release_buffers .AND. ALLOCATED(layers_3D_C_reduction%data_red3D)) THEN\n            DO ibuff = 1, SIZE(layers_3D_C_reduction%data_red3D)\n               CALL dbcsr_data_release(layers_3D_C_reduction%data_red3D(ibuff))\n            END DO\n            DEALLOCATE (layers_3D_C_reduction%data_red3D)\n         END IF\n      END IF\n   END SUBROUTINE release_layers_3D_C_reduction\n\n   SUBROUTINE multiply_3D(imgdist_left, imgdist_right, &\n                          matrix_left, matrix_right, &\n                          product_matrix, &\n                          retain_sparsity, &\n                          filter_eps, flop, keep_product_data)\n      !! Multiplies two DBCSR matrices (experimental MPI algorithm).\n      !! This algorithm is experimental and it should be not used in\n      !! production runs.\n\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist_left, imgdist_right\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_left, matrix_right\n      TYPE(dbcsr_type), INTENT(INOUT), TARGET            :: product_matrix\n         !! DBCSR product matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity\n         !! retain the sparsity of the existing product matrix; default is no\n      REAL(kind=real_8), INTENT(IN), OPTIONAL            :: filter_eps\n      INTEGER(KIND=int_8), INTENT(OUT)                   :: flop\n         !! effective flop\n      LOGICAL, INTENT(IN)                                :: keep_product_data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'multiply_3D'\n      INTEGER :: blk, data_type, data_type_byte, final_step_k, handle, &\n                 handle1, handle2, icol3D, icol3D_send, ileft_buffer_calc, ileft_buffer_comm, &\n                 iright_buffer_calc, iright_buffer_comm, irow3D, irow3D_send, istep_k_ordered, ithread, &\n                 ivirt_k, last_step_k, left_col_mult, left_col_nimages, left_col_total_nimages, &\n                 left_max_data_size, left_max_meta_size, left_myfirstvcol, left_myfirstvrow, left_mypcol, &\n                 left_myprow, left_npcols, left_nprows, left_row_mult, left_row_nimages, &\n                 leftovers_first_k, leftovers_k, leftovers_shift_k, leftovers_start_k, min_nimages, &\n                 mycol3D, mypcol, myprow\n      INTEGER :: myrank3D, myrow3D, myt, nblkrows_local, nbuffers, nbuffers_norms, ncols3D, &\n                 nranks3D, nrows3D, nthreads, numnodes, nvirt_k, proc3D_recv, proc3D_send, recv_vcol, &\n                 recv_vrow, right_col_mult, right_col_nimages, &\n                 right_max_data_size, right_max_meta_size, right_myfirstvcol, right_myfirstvrow, &\n                 right_mypcol, right_myprow, right_npcols, right_nprows, right_row_mult, &\n                 right_row_nimages, right_row_total_nimages, row, shift3D, shift3D_comm, shift3D_recv, &\n                 size_guess, size_guess_init, start_k, start_k_ordered, v_ki\n      INTEGER(KIND=int_8)                                :: mem\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: left_vrow, product_matrix_epss_displ, &\n                                            product_matrix_epss_size, product_matrix_meta, product_matrix_size_recv, &\n                                            product_matrix_size_send, right_vcol\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: product_matrix_meta_displ, &\n                                                            product_matrix_meta_size\n      TYPE(mp_request_type)                              :: request_epss, request_keep_sparsity\n      TYPE(mp_request_type), DIMENSION(2)                :: requests_reduction_size\n      TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:)   :: requests_reduction\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_sizes2enum, enum2col_blk_sizes, &\n                                                    enum2row_blk_sizes, product_matrix_meta_recv, product_matrix_meta_send, &\n                                                    row_blk_sizes2enum\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: k_sizes\n      INTEGER, DIMENSION(:, :, :), POINTER, CONTIGUOUS   :: left_displ_layers3D, &\n                                                            left_images_size_layers3D, &\n                                                            right_displ_layers3D, &\n                                                            right_images_size_layers3D\n      INTEGER, DIMENSION(dbcsr_slot_nblkrows_total: &\n                         dbcsr_slot_nfullcols_local)                     :: left_global_indices, right_global_indices\n      INTEGER, POINTER                                   :: istep_k_comm\n      INTEGER, TARGET                                    :: istep_k, istep_k_comm_curr\n      LOGICAL                                            :: do_layers3D, do_square_layers3D, &\n                                                            first_k, first_v_k, is_not_comm, &\n                                                            keep_sparsity, otf_filtering\n      LOGICAL, ALLOCATABLE, DIMENSION(:)                 :: do_comm_left, do_comm_right\n      REAL(kind=sp)                                      :: filter_eps_sp\n      REAL(kind=sp), ALLOCATABLE, DIMENSION(:), TARGET   :: row_max_epss\n      REAL(kind=sp), ALLOCATABLE, DIMENSION(:, :)        :: left_norms, right_norms\n      REAL(kind=sp), DIMENSION(:), POINTER, CONTIGUOUS   :: product_matrix_epss\n      TYPE(dbcsr_2d_array_obj)                           :: product_matrix3D\n      TYPE(dbcsr_buffer), ALLOCATABLE, DIMENSION(:), &\n         TARGET                                          :: left_buffers, right_buffers\n      TYPE(dbcsr_buffer), POINTER                        :: left_buffer_p, right_buffer_p\n      TYPE(dbcsr_data_obj)                               :: data_get, data_send\n      TYPE(dbcsr_mm_multrec_type_p), ALLOCATABLE, &\n         DIMENSION(:, :, :)                              :: multrec\n      TYPE(dbcsr_mp_obj)                                 :: left_mp_obj, product_mp_obj, right_mp_obj\n      TYPE(mn_local_sizes), ALLOCATABLE, DIMENSION(:)    :: m_sizes, n_sizes\n      TYPE(mp_comm_type)                                 :: grp_left, grp_right\n\n      CALL timeset(routineN, handle)\n      !\n      NULLIFY (row_blk_sizes2enum, enum2row_blk_sizes)\n      NULLIFY (col_blk_sizes2enum, enum2col_blk_sizes)\n      NULLIFY (k_sizes)\n      !\n      IF (PRESENT(retain_sparsity)) THEN\n         keep_sparsity = retain_sparsity\n      ELSE\n         keep_sparsity = .FALSE.\n      END IF\n      otf_filtering = PRESENT(filter_eps)\n      !\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP SHARED (nthreads)\n!$OMP MASTER\n      nthreads = 1\n!$    nthreads = OMP_GET_NUM_THREADS()\n!$OMP END MASTER\n!$OMP END PARALLEL\n      !\n      ! Dummy checks\n      IF (.NOT. ASSOCIATED(product_matrix%wms)) &\n         DBCSR_ABORT(\"Work matrices do not exist\")\n      IF (SIZE(product_matrix%wms) .NE. nthreads) &\n         DBCSR_ABORT(\"Work matrices not correctly sized.\")\n      IF (.NOT. buffers_win%left%is_valid .OR. &\n          .NOT. buffers_win%right%is_valid .OR. &\n          .NOT. ASSOCIATED(buffers_win%left%meta) .OR. &\n          .NOT. ASSOCIATED(buffers_win%right%meta) .OR. &\n          .NOT. ASSOCIATED(left_images_size) .OR. &\n          .NOT. ASSOCIATED(right_images_size) .OR. &\n          .NOT. ALLOCATED(left_local_images_size) .OR. &\n          .NOT. ALLOCATED(right_local_images_size)) &\n         DBCSR_ABORT(\"No buffers associated for the experimental algo!\")\n      !\n      ! Set up variables\n      flop = 0\n      data_type = dbcsr_get_data_type(product_matrix)\n      data_type_byte = dbcsr_datatype_sizeof(data_type)\n      left_row_nimages = imgdist_left%i%row_decimation\n      left_row_mult = imgdist_left%i%row_multiplicity\n      left_col_nimages = imgdist_left%i%col_decimation\n      left_col_mult = imgdist_left%i%col_multiplicity\n      right_row_nimages = imgdist_right%i%row_decimation\n      right_row_mult = imgdist_right%i%row_multiplicity\n      right_col_nimages = imgdist_right%i%col_decimation\n      right_col_mult = imgdist_right%i%col_multiplicity\n      left_mp_obj = dbcsr_distribution_mp(imgdist_left%i%main)\n      right_mp_obj = dbcsr_distribution_mp(imgdist_right%i%main)\n      product_mp_obj = dbcsr_distribution_mp(product_matrix%dist)\n      numnodes = dbcsr_mp_numnodes(product_mp_obj)\n      myprow = dbcsr_mp_myprow(product_mp_obj)\n      mypcol = dbcsr_mp_mypcol(product_mp_obj)\n      left_nprows = dbcsr_mp_nprows(left_mp_obj)\n      left_npcols = dbcsr_mp_npcols(left_mp_obj)\n      left_myprow = dbcsr_mp_myprow(left_mp_obj)\n      left_mypcol = dbcsr_mp_mypcol(left_mp_obj)\n      left_myfirstvrow = MOD(left_myprow, layers_3D_C_reduction%side3D)*left_row_nimages\n      left_myfirstvcol = MOD(left_mypcol, layers_3D_C_reduction%side3D)*left_col_nimages\n      right_nprows = dbcsr_mp_nprows(right_mp_obj)\n      right_npcols = dbcsr_mp_npcols(right_mp_obj)\n      right_myprow = dbcsr_mp_myprow(right_mp_obj)\n      right_mypcol = dbcsr_mp_mypcol(right_mp_obj)\n      right_myfirstvrow = MOD(right_myprow, layers_3D_C_reduction%side3D)*right_row_nimages\n      right_myfirstvcol = MOD(right_mypcol, layers_3D_C_reduction%side3D)*right_col_nimages\n      left_col_total_nimages = left_npcols*left_col_nimages\n      right_row_total_nimages = right_nprows*right_row_nimages\n      grp_right = buffers_win%right%subgrp\n      grp_left = buffers_win%left%subgrp\n      !\n      do_layers3D = layers_3D_C_reduction%num_layers_3D .GT. 1\n      myrow3D = myprow/layers_3D_C_reduction%side3D + 1\n      mycol3D = mypcol/layers_3D_C_reduction%side3D + 1\n      nrows3D = SIZE(left_images_size, 3)\n      ncols3D = SIZE(right_images_size, 3)\n      myrank3D = get_rank3D(myprow, mypcol, dbcsr_mp_nprows(product_mp_obj), layers_3D_C_reduction%side3D)\n      nranks3D = layers_3D_C_reduction%num_layers_3D\n      myprow = MOD(myprow, layers_3D_C_reduction%side3D)\n      mypcol = MOD(mypcol, layers_3D_C_reduction%side3D)\n      !\n      ! Dummy checks\n      ! subcommunicators\n      IF (.NOT. dbcsr_mp_has_subgroups(right_mp_obj)) &\n         DBCSR_ABORT(\"Experimental algorithm requires rows subcommunicators for right matrix!\")\n      IF (.NOT. dbcsr_mp_has_subgroups(left_mp_obj)) &\n         DBCSR_ABORT(\"Experimental algorithm requires columns subcommunicators for left matrix!\")\n      ! Right col nimages\n      IF (right_col_nimages .NE. 1) &\n         DBCSR_ABORT(\"Col nimages for right matrix is not 1!\")\n      ! Left row nimages\n      IF (left_row_nimages .NE. 1) &\n         DBCSR_ABORT(\"Row nimages for left matrix is not 1!\")\n      ! left/right matching\n      IF (left_col_nimages .NE. right_row_mult) &\n         DBCSR_ABORT(\"Left/Right image mismatch\")\n      IF (left_col_mult .NE. right_row_nimages) &\n         DBCSR_ABORT(\"Left/Right image mismatch\")\n      IF (left_col_nimages*left_npcols .NE. right_row_nimages*right_nprows) &\n         DBCSR_ABORT(\"Left/Right total mismatch\")\n      ! product/left matching\n      IF (left_row_mult*dbcsr_mp_nprows(product_mp_obj) .NE. left_nprows) &\n         DBCSR_ABORT(\"Product/Left total mismatch\")\n      ! product/left matching\n      IF (right_col_mult*dbcsr_mp_npcols(product_mp_obj) .NE. right_npcols) &\n         DBCSR_ABORT(\"Product/Right total mismatch\")\n      ! Check sizes from make_buffers\n      IF (SIZE(left_images_size, 2) .NE. left_col_nimages .OR. &\n          SIZE(right_images_size, 2) .NE. right_row_nimages) &\n         DBCSR_ABORT(\"Mismatch in the sizes\")\n      !\n      dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, left_col_nimages)\n      dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, right_row_nimages)\n      !\n      ! The main transfer loop goes through the virtual rows/columns.\n      ! The number of steps may be smaller if the grid dimension is very\n      ! non-optimal (both left column images and right row images are >\n      ! 1).\n      min_nimages = MIN(left_col_nimages, right_row_nimages)\n      nvirt_k = left_npcols*left_col_nimages\n      !\n      ! Check RMA windows creation for original data\n      CALL win_setup(buffers_win%left, do_win_create_left, requests_win_create(1))\n      CALL win_setup(buffers_win%right, do_win_create_right, requests_win_create(2))\n      !\n      ! Count the maximum possible multiplies per row for on-the-fly filtering\n      ALLOCATE (product_matrix_epss_size(nrows3D), product_matrix_epss_displ(nrows3D))\n      IF (otf_filtering) THEN\n         ! Wait for counts (sent in make_buffers)\n         CALL timeset(routineN//\"_count_rows\", handle1)\n         CALL mp_wait(request_count_rows)\n         !\n         nblkrows_local = SIZE(left_total_row_counts)\n         ALLOCATE (row_max_epss(nblkrows_local))\n         filter_eps_sp = REAL(filter_eps, KIND=KIND(row_max_epss))\n!$OMP PARALLEL DO DEFAULT (NONE) &\n!$OMP SHARED(nblkrows_local,row_max_epss,filter_eps_sp,&\n!$OMP        left_total_row_counts)\n         ! Determine the maximum per-block epsilon\n         DO row = 1, nblkrows_local\n            row_max_epss(row) = &\n               (filter_eps_sp/REAL(MAX(1, left_total_row_counts(row)), KIND=KIND(row_max_epss)))**2\n         END DO\n!$OMP END PARALLEL DO\n         DEALLOCATE (left_total_row_counts)\n         !\n         IF (do_layers3D .AND. nrows3D .GT. 1) THEN\n            CALL mp_allgather(SIZE(row_max_epss), &\n                              product_matrix_epss_size, &\n                              layers_3D_C_reduction%rowgrp3D)\n            size_guess = 0\n            DO irow3D = 1, nrows3D\n               product_matrix_epss_displ(irow3D) = size_guess\n               size_guess = size_guess + product_matrix_epss_size(irow3D)\n            END DO\n            ALLOCATE (product_matrix_epss(size_guess))\n            CALL mp_iallgather(row_max_epss, &\n                               product_matrix_epss, product_matrix_epss_size, product_matrix_epss_displ, &\n                               layers_3D_C_reduction%rowgrp3D, request_epss)\n         ELSE\n            product_matrix_epss_size(nrows3D) = SIZE(row_max_epss)\n            product_matrix_epss_displ(nrows3D) = 0\n            product_matrix_epss => row_max_epss\n         END IF\n         CALL timestop(handle1)\n      ELSE\n         product_matrix_epss_size(:) = 0\n         product_matrix_epss_displ(:) = 0\n         ALLOCATE (product_matrix_epss(0))\n      END IF\n      !\n      ! Exchange 3D meta for C matrix\n      IF (do_layers3D .AND. keep_sparsity) THEN\n         ALLOCATE (product_matrix_meta_size(nrows3D, ncols3D))\n         CALL mp_allgather(product_matrix%index(dbcsr_slot_size), &\n                           product_matrix_meta_size, layers_3D_C_reduction%grp3D)\n         ALLOCATE (product_matrix_meta_displ(nrows3D, ncols3D))\n         size_guess = 0\n         DO icol3D = 1, ncols3D\n            DO irow3D = 1, nrows3D\n               product_matrix_meta_displ(irow3D, icol3D) = size_guess\n               size_guess = size_guess + product_matrix_meta_size(irow3D, icol3D)\n            END DO\n         END DO\n         ALLOCATE (product_matrix_meta(size_guess))\n         product_matrix%index(dbcsr_slot_nblks) = product_matrix%nblks\n         product_matrix%index(dbcsr_slot_nze) = product_matrix%nze\n         CALL mp_iallgather(product_matrix%index(1:product_matrix%index(dbcsr_slot_size)), &\n                            product_matrix_meta, product_matrix_meta_size, product_matrix_meta_displ, &\n                            layers_3D_C_reduction%grp3D, request_keep_sparsity)\n      END IF\n      !\n      ! Wait refs and max norms (sent in make_buffers)\n      CALL timeset(routineN//\"_sizes\", handle1)\n      CALL mp_waitall(requests)\n      CALL timestop(handle1)\n      DEALLOCATE (right_local_images_size, left_local_images_size)\n      !\n      ! Needs to remap refs for virtual coordinates 3D\n      CALL remap_layers3D(left_images_size, left_images_size_layers3D, left_displ_layers3D, &\n                          left_max_data_size, left_max_meta_size)\n      CALL remap_layers3D(right_images_size, right_images_size_layers3D, right_displ_layers3D, &\n                          right_max_data_size, right_max_meta_size)\n      left_max_meta_size = left_max_meta_size + dbcsr_num_slots\n      right_max_meta_size = right_max_meta_size + dbcsr_num_slots\n      !\n      do_square_layers3D = .FALSE.\n      nbuffers_norms = 1\n      IF (nvirt_k .EQ. 1) THEN\n         nbuffers = 1\n      ELSEIF (nrows3D .NE. ncols3D .OR. nranks3D .EQ. 1) THEN\n         nbuffers = 2\n      ELSE\n         ! Note that nrows3D==ncols3D >= 2\n         ! Last buffer is used as temporary for communications\n         nbuffers = nrows3D + 1\n         nbuffers_norms = nrows3D\n         do_square_layers3D = .TRUE.\n      END IF\n      !\n      ! update capacity of memory-pools\n      IF (ASSOCIATED(memtype_abpanel_1%pool)) &\n         CALL dbcsr_mempool_limit_capacity(memtype_abpanel_1%pool, &\n                                           capacity=2)\n      IF (ASSOCIATED(memtype_abpanel_2%pool)) &\n         CALL dbcsr_mempool_limit_capacity(memtype_abpanel_2%pool, &\n                                           capacity=2)\n      IF (use_acc()) THEN\n         ! enumerate the blocksizes to keep the following 2D-arrays small.\n         CALL enumerate_blk_sizes(matrix_right%row_blk_size%low%data, &\n                                  dbcsr_max_row_size(matrix_right), &\n                                  row_blk_sizes2enum, enum2row_blk_sizes)\n         CALL enumerate_blk_sizes(matrix_right%col_blk_size%low%data, &\n                                  dbcsr_max_col_size(matrix_right), &\n                                  col_blk_sizes2enum, enum2col_blk_sizes)\n      END IF\n      IF (nranks3D .GT. 1) THEN\n         CALL dbcsr_mempool_limit_capacity(memtype_mpi_product%pool, &\n                                           capacity=nranks3D - 1)\n      END IF\n      !\n      ! Prepare buffers for computation\n      IF (nvirt_k .GT. 1) THEN\n         ! Right\n         CALL buffer_init(buffers_2%right, data_type, &\n                          right_max_data_size, &\n                          right_max_meta_size, &\n                          num_data=(nbuffers/2), &\n                          data_memory_type=memtype_abpanel_2, &\n                          trs_memory_type=memtype_trsbuffer_2)\n         ! Left\n         CALL buffer_init(buffers_2%left, data_type, &\n                          left_max_data_size, &\n                          left_max_meta_size, &\n                          num_data=(nbuffers/2), &\n                          data_memory_type=memtype_abpanel_2)\n      END IF\n      !\n      ! Prepare buffers for communication\n      ! Right\n      CALL buffer_init(buffers_1%right, data_type, &\n                       right_max_data_size, &\n                       right_max_meta_size, &\n                       num_data=(nbuffers - nbuffers/2), &\n                       data_memory_type=memtype_abpanel_1, &\n                       trs_memory_type=memtype_trsbuffer_1)\n      ! Left\n      CALL buffer_init(buffers_1%left, data_type, &\n                       left_max_data_size, &\n                       left_max_meta_size, &\n                       num_data=(nbuffers - nbuffers/2), &\n                       data_memory_type=memtype_abpanel_1)\n      !\n      CALL setup_buffers(buffers_1%right, buffers_2%right, &\n                         right_buffers, nbuffers, &\n                         right_max_data_size, &\n                         right_max_meta_size, &\n                         matrix_right, imgdist_right)\n      CALL setup_buffers(buffers_1%left, buffers_2%left, &\n                         left_buffers, nbuffers, &\n                         left_max_data_size, &\n                         left_max_meta_size, &\n                         matrix_left, imgdist_left)\n      !\n      ! Setup the receive data pointers\n      CALL dbcsr_data_init(data_get)\n      CALL dbcsr_data_new(data_get, data_type)\n      IF (do_layers3D) THEN\n         CALL dbcsr_data_init(data_send)\n         CALL dbcsr_data_new(data_send, data_type)\n         ! Prepare buffers for 3D reduction\n         IF (ALLOCATED(layers_3D_C_reduction%data_red3D)) THEN\n            IF (SIZE(layers_3D_C_reduction%data_red3D) .LT. nthreads .OR. &\n                layers_3D_C_reduction%data_type .NE. data_type) THEN\n               DO myt = 1, SIZE(layers_3D_C_reduction%data_red3D)\n                  CALL dbcsr_data_release(layers_3D_C_reduction%data_red3D(myt))\n               END DO\n               DEALLOCATE (layers_3D_C_reduction%data_red3D)\n               layers_3D_C_reduction%data_type = 0\n            END IF\n         END IF\n         IF (.NOT. ALLOCATED(layers_3D_C_reduction%data_red3D)) THEN\n            ALLOCATE (layers_3D_C_reduction%data_red3D(nthreads))\n            DO myt = 1, nthreads\n               CALL dbcsr_data_init(layers_3D_C_reduction%data_red3D(myt))\n               CALL dbcsr_data_new(layers_3D_C_reduction%data_red3D(myt), data_type)\n            END DO\n            layers_3D_C_reduction%data_type = data_type\n         END IF\n         ALLOCATE (product_matrix_size_send(nthreads + 1), product_matrix_size_recv(nthreads + 1))\n         ALLOCATE (requests_reduction((nthreads + 1)*2))\n      END IF\n      !\n      ! These values for meta data are used for global values\n      right_global_indices(dbcsr_slot_nblkrows_total:dbcsr_slot_nfullcols_local) = &\n         (/ &\n         dbcsr_nblkrows_total(matrix_right), &\n         dbcsr_nblkcols_total(matrix_right), &\n         dbcsr_nfullrows_total(matrix_right), &\n         dbcsr_nfullcols_total(matrix_right), &\n         0, 0, &\n         dbcsr_nfullrows_local(matrix_right), &\n         dbcsr_nfullcols_local(matrix_right)/)\n      left_global_indices(dbcsr_slot_nblkrows_total:dbcsr_slot_nfullcols_local) = &\n         (/ &\n         dbcsr_nblkrows_total(matrix_left), &\n         dbcsr_nblkcols_total(matrix_left), &\n         dbcsr_nfullrows_total(matrix_left), &\n         dbcsr_nfullcols_total(matrix_left), &\n         0, 0, &\n         dbcsr_nfullrows_local(matrix_left), &\n         dbcsr_nfullcols_local(matrix_left)/)\n      !\n      ! Evaluate sizes for workspaces\n      size_guess_init = 1\n      IF (.NOT. keep_sparsity .AND. use_acc()) THEN\n         size_guess_init = product_matrix_size_guess(matrix_left, matrix_right, product_matrix, &\n                                                     left_max_data_size, right_max_data_size, &\n                                                     left_col_nimages, right_row_nimages, &\n                                                     nthreads)\n      END IF\n      !\n      ! Preallocate norms arrays\n      IF (otf_filtering) THEN\n         ALLOCATE (right_norms(right_max_meta_size/3, nbuffers_norms))\n         ALLOCATE (left_norms(left_max_meta_size/3, nbuffers_norms))\n         IF (do_layers3D .AND. nrows3D .GT. 1) THEN\n            CALL mp_wait(request_epss)\n            DEALLOCATE (row_max_epss)\n         END IF\n      ELSE\n         ! The array must be valid when passed to called subroutines.\n         ALLOCATE (right_norms(0, nbuffers_norms))\n         ALLOCATE (left_norms(0, nbuffers_norms))\n      END IF\n      !\n      IF (do_layers3D .AND. keep_sparsity) CALL mp_wait(request_keep_sparsity)\n      !\n      ALLOCATE (product_matrix3D%mats(nrows3D, ncols3D))\n      DO icol3D = 1, ncols3D\n         DO irow3D = 1, nrows3D\n            NULLIFY (product_matrix3D%mats(irow3D, icol3D)%matrix)\n         END DO\n      END DO\n      ALLOCATE (multrec(0:nthreads - 1, nrows3D, ncols3D))\n      !\n      ! Here is the main loop\n      ! 3D multiplication\n      !\n      CALL timeset(routineN//\"_loop\", handle1)\n      ! Take into account when ticks are not multiple of 3D layers\n      leftovers_k = MOD(nvirt_k, nranks3D)\n      leftovers_first_k = leftovers_k*myrank3D\n      leftovers_start_k = 0\n      leftovers_shift_k = 0\n      IF (leftovers_k .GT. 0) THEN\n         ! This is only for nrows3D==ncols3D\n         leftovers_start_k = (nvirt_k/nrows3D - 1)*(myrank3D/nrows3D) - &\n                             (leftovers_k/nrows3D - 1)*(myrank3D/nrows3D)\n         leftovers_shift_k = nranks3D*(leftovers_k/nrows3D) - leftovers_k*(MOD(myrank3D, nrows3D) + 1)\n      END IF\n      ! Ticks bounds\n      start_k = (nvirt_k/nranks3D)*myrank3D\n      last_step_k = nvirt_k + leftovers_first_k\n      final_step_k = last_step_k - nranks3D\n      ! Shift layers to keep local layer as the last one in computation\n      shift3D = (mycol3D - 1)*nrows3D + &\n                (nrows3D - myrow3D + 1)*(1 - MOD(mycol3D, 2)) + myrow3D*MOD(mycol3D, 2)\n      iright_buffer_comm = 0\n      ileft_buffer_comm = 0\n      ALLOCATE (do_comm_right(ncols3D), do_comm_left(nrows3D))\n      ALLOCATE (right_vcol(ncols3D), left_vrow(nrows3D))\n      ALLOCATE (m_sizes(nrows3D), n_sizes(ncols3D))\n      irow3D_send = 0\n      icol3D_send = 0\n      first_k = .TRUE.\n      first_v_k = .TRUE.\n      istep_k_comm_curr = leftovers_first_k\n      istep_k_comm => istep_k_comm_curr\n      grouped_steps_index: DO istep_k = leftovers_first_k, last_step_k\n         !\n         ! Wait data.  Exclude the first iteration.\n         wait: IF (istep_k .GT. leftovers_first_k) THEN\n            IF (debug_mod) WRITE (*, '(1X,A)') routineN//\" waiting for right and left\"\n            right_buffer_p => right_buffers(iright_buffer_calc)\n            left_buffer_p => left_buffers(ileft_buffer_calc)\n            IF (right_buffer_p%is_comm .AND. left_buffer_p%is_comm) THEN\n               ! check if right matrix was already initialized\n               IF (.NOT. right_buffer_p%matrix%valid) THEN\n                  CALL timeset(routineN//\"_comm_right\", handle2)\n                  CALL mp_waitall(right_buffer_p%get_requests(:))\n                  CALL timestop(handle2)\n               END IF\n               ! check if left matrix was already initialized\n               IF (.NOT. left_buffer_p%matrix%valid) THEN\n                  CALL timeset(routineN//\"_comm_left\", handle2)\n                  CALL mp_waitall(left_buffer_p%get_requests(:))\n                  CALL timestop(handle2)\n               END IF\n            END IF\n         END IF wait\n         !\n         ! Matrix transfer. Transfer in all but the last loop iteration.\n         shift3D_comm = shift3D\n         xfer: DO WHILE (istep_k_comm .LT. last_step_k)\n            start_k_ordered = start_k\n            istep_k_ordered = istep_k_comm\n            ! Put leftovers ticks always first\n            IF (leftovers_k .GT. 0) THEN\n               IF (istep_k_comm .LT. leftovers_first_k + leftovers_k) THEN\n                  start_k_ordered = leftovers_start_k\n               ELSE\n                  istep_k_ordered = istep_k_comm + leftovers_shift_k\n               END IF\n            END IF\n            first_k = MOD(istep_k_ordered, nranks3D) .EQ. 0\n            ivirt_k = istep_k_ordered/nranks3D\n            IF (istep_k_comm .LT. leftovers_first_k + leftovers_k) THEN\n               CALL row_col_3D_reflected(irow3D, icol3D, nrows3D, ncols3D, istep_k_ordered)\n            ELSE\n               CALL row_col_3D_reflected(irow3D, icol3D, nrows3D, ncols3D, shift3D)\n               shift3D = shift3D + 1\n            END IF\n            !\n            v_ki = MOD(ivirt_k, min_nimages)\n            ! Reset communication flags at the first layer\n            IF ((first_k .OR. istep_k_comm .EQ. leftovers_first_k) .AND. &\n                istep_k_comm .EQ. istep_k_comm_curr) THEN\n               do_comm_right(:) = .TRUE.\n               do_comm_left(:) = .TRUE.\n            END IF\n            ! Take first image global virtual coordinates\n            IF (v_ki .EQ. 0) THEN\n               IF (istep_k_comm .GE. leftovers_first_k + leftovers_k) first_v_k = .FALSE.\n               start_k_ordered = start_k_ordered + ivirt_k\n            END IF\n            IF (v_ki .EQ. 0 .OR. (first_v_k .AND. min_nimages .GT. 1)) THEN\n               CALL image_calculator(imgdist_right, &\n                                     vprow=recv_vrow, &\n                                     vpcol=right_vcol(icol3D), &\n                                     mypcol=mypcol, &\n                                     myvprow=right_myfirstvrow, &\n                                     myvpcol=right_myfirstvcol + (icol3D - 1)*layers_3D_C_reduction%side3D, &\n                                     vprow_shift=start_k_ordered, &\n                                     shifting='R')\n               CALL image_calculator(imgdist_left, &\n                                     vprow=left_vrow(irow3D), &\n                                     vpcol=recv_vcol, &\n                                     myprow=myprow, &\n                                     myvprow=left_myfirstvrow + (irow3D - 1)*layers_3D_C_reduction%side3D, &\n                                     myvpcol=left_myfirstvcol, &\n                                     vpcol_shift=start_k_ordered, &\n                                     shifting='L')\n            END IF\n            !\n            ! Set coordinates\n            IF (do_square_layers3D) THEN\n               ! Use the temporary buffers for the communication of the first tick\n               IF (first_k) THEN\n                  iright_buffer_comm = nbuffers\n                  ileft_buffer_comm = nbuffers\n               ELSE\n                  iright_buffer_comm = icol3D\n                  ileft_buffer_comm = irow3D\n               END IF\n            ELSE\n               IF (do_comm_right(icol3D)) THEN\n                  iright_buffer_comm = MOD(iright_buffer_comm, nbuffers) + 1\n               END IF\n               IF (do_comm_left(irow3D)) THEN\n                  ileft_buffer_comm = MOD(ileft_buffer_comm, nbuffers) + 1\n               END IF\n            END IF\n            !\n            ! Exit if data are already communicated\n            IF (istep_k_comm .NE. istep_k_comm_curr) EXIT\n            !\n            right_buffer_p => right_buffers(iright_buffer_comm)\n            left_buffer_p => left_buffers(ileft_buffer_comm)\n            right_buffer_p%coord3D = icol3D\n            left_buffer_p%coord3D = irow3D\n            !\n            ! First row, communicate right matrix\n            IF (do_comm_right(icol3D)) THEN\n               right_buffer_p%vprow = MOD(recv_vrow + v_ki, right_row_total_nimages)\n               right_buffer_p%vpcol = right_vcol(icol3D)\n               right_buffer_p%is_comm = .FALSE.\n            END IF\n            !\n            is_not_comm = .TRUE.\n            IF (right_images_size_layers3D(imeta, icol3D, right_buffer_p%vprow) .NE. 0) THEN\n               ! First col, communicate left matrix\n               IF (do_comm_left(irow3D)) THEN\n                  left_buffer_p%vprow = left_vrow(irow3D)\n                  left_buffer_p%vpcol = MOD(recv_vcol + v_ki, left_col_total_nimages)\n                  left_buffer_p%is_comm = .FALSE.\n               END IF\n               !\n               IF (left_images_size_layers3D(imeta, irow3D, left_buffer_p%vpcol) .NE. 0) THEN\n                  ! Check if data is already communicated\n                  is_not_comm = do_comm_right(icol3D) .OR. do_comm_left(irow3D)\n                  IF (is_not_comm) THEN\n                     ! Right\n                     IF (do_comm_right(icol3D)) THEN\n                        IF (use_acc()) THEN\n                           CALL timeset(routineN//\"_acc_sync_right\", handle2)\n                           CALL acc_event_synchronize(right_buffer_p%data%d%acc_ready)\n                           CALL timestop(handle2)\n                        END IF\n                        !\n                        do_comm_right(icol3D) = .FALSE.\n                        CALL rma_transfer(right_buffer_p%vprow, right_row_nimages, &\n                                          right_images_size_layers3D(:, icol3D, right_buffer_p%vprow), &\n                                          right_displ_layers3D(:, icol3D, right_buffer_p%vprow), &\n                                          right_buffer_p, &\n                                          buffers_win%right%meta_win, buffers_win%right%data_win, &\n                                          data_get, data_type_byte, buffers_win%right, icol3D, ncols3D)\n                     END IF\n                     ! Left\n                     IF (do_comm_left(irow3D)) THEN\n                        IF (use_acc()) THEN\n                           CALL timeset(routineN//\"_acc_sync_left\", handle2)\n                           CALL acc_event_synchronize(left_buffer_p%data%d%acc_ready)\n                           CALL timestop(handle2)\n                        END IF\n                        !\n                        do_comm_left(irow3D) = .FALSE.\n                        CALL rma_transfer(left_buffer_p%vpcol, left_col_nimages, &\n                                          left_images_size_layers3D(:, irow3D, left_buffer_p%vpcol), &\n                                          left_displ_layers3D(:, irow3D, left_buffer_p%vpcol), &\n                                          left_buffer_p, &\n                                          buffers_win%left%meta_win, buffers_win%left%data_win, &\n                                          data_get, data_type_byte, buffers_win%left, irow3D, nrows3D)\n                     END IF\n                  END IF\n               END IF\n            END IF\n            !\n            istep_k_comm_curr = istep_k_comm_curr + 1\n            ! Stop looping when data is communicated\n            ! Only works for 4 layers\n            IF (is_not_comm .OR. nranks3D .NE. 4) THEN\n               istep_k_comm => istep_k\n               IF ((istep_k_comm + 1) .EQ. istep_k_comm_curr) EXIT\n               ! Restore coordinates by looping once again\n               shift3D = shift3D_comm\n               CYCLE\n            END IF\n            ! Keep looping until it starts a new communication (only for 4 layers)\n            istep_k_comm => istep_k_comm_curr\n         END DO xfer\n         !\n         ! Create matrices and multrec's, only the first occurrence\n         IF (.NOT. ASSOCIATED(product_matrix3D%mats(irow3D, icol3D)%matrix)) THEN\n            IF (irow3D .EQ. myrow3D .AND. icol3D .EQ. mycol3D) THEN\n               product_matrix3D%mats(irow3D, icol3D)%matrix => product_matrix\n            ELSE\n               ALLOCATE (product_matrix3D%mats(irow3D, icol3D)%matrix)\n               IF (keep_sparsity) THEN\n                  size_guess = product_matrix_meta(product_matrix_meta_displ(irow3D, icol3D) + &\n                                                   dbcsr_slot_nze)\n                  CALL setup_buffer_matrix(product_matrix3D%mats(irow3D, icol3D)%matrix, &\n                                           product_matrix, product_matrix_meta_size(irow3D, icol3D), &\n                                           data_size=size_guess, &\n                                           data_memory_type=memtype_mpi_product)\n                  product_matrix3D%mats(irow3D, icol3D)% &\n                     matrix%index(1:product_matrix_meta_size(irow3D, icol3D)) = &\n                     product_matrix_meta(product_matrix_meta_displ(irow3D, icol3D) + 1: &\n                                         product_matrix_meta_displ(irow3D, icol3D) + &\n                                         product_matrix_meta_size(irow3D, icol3D))\n                  CALL dbcsr_data_clear(product_matrix3D%mats(irow3D, icol3D)%matrix%data_area, &\n                                        ub=size_guess)\n               ELSE\n                  CALL setup_buffer_matrix(product_matrix3D%mats(irow3D, icol3D)%matrix, &\n                                           product_matrix, data_memory_type=memtype_mpi_product)\n               END IF\n               product_matrix3D%mats(irow3D, icol3D)%matrix%index(dbcsr_slot_home_prow) = &\n                  (irow3D - 1)*layers_3D_C_reduction%side3D + myprow\n               product_matrix3D%mats(irow3D, icol3D)%matrix%index(dbcsr_slot_home_pcol) = &\n                  (icol3D - 1)*layers_3D_C_reduction%side3D + mypcol\n               CALL dbcsr_reset_locals(product_matrix3D%mats(irow3D, icol3D)%matrix)\n               product_matrix3D%mats(irow3D, icol3D)%matrix%nblks = 0\n               CALL dbcsr_repoint_index(product_matrix3D%mats(irow3D, icol3D)%matrix)\n            END IF\n            !\n            IF (.NOT. ASSOCIATED(m_sizes(irow3D)%sizes)) THEN\n               ALLOCATE (m_sizes(irow3D)%sizes(dbcsr_nblkrows_local(product_matrix3D%mats(irow3D, icol3D)%matrix)))\n               CALL local_filter(array_data(product_matrix3D%mats(irow3D, icol3D)%matrix%row_blk_size), &\n                                 array_size(product_matrix3D%mats(irow3D, icol3D)%matrix%local_rows), &\n                                 array_data(product_matrix3D%mats(irow3D, icol3D)%matrix%local_rows), &\n                                 m_sizes(irow3D)%sizes)\n            END IF\n            IF (.NOT. ASSOCIATED(n_sizes(icol3D)%sizes)) THEN\n               ALLOCATE (n_sizes(icol3D)%sizes(dbcsr_nblkcols_local(product_matrix3D%mats(irow3D, icol3D)%matrix)))\n               CALL local_filter(array_data(product_matrix3D%mats(irow3D, icol3D)%matrix%col_blk_size), &\n                                 array_size(product_matrix3D%mats(irow3D, icol3D)%matrix%local_cols), &\n                                 array_data(product_matrix3D%mats(irow3D, icol3D)%matrix%local_cols), &\n                                 n_sizes(icol3D)%sizes)\n            END IF\n            !\n!$OMP PARALLEL DEFAULT(NONE) &\n!$OMP          PRIVATE (size_guess, ithread) &\n!$OMP          SHARED (product_matrix3D, multrec, &\n!$OMP                  keep_sparsity, filter_eps, &\n!$OMP                  product_matrix_epss, &\n!$OMP                  matrix_right, matrix_left, nthreads, &\n!$OMP                  irow3D, icol3D, myrow3D, mycol3D, keep_product_data, &\n!$OMP                  product_matrix_epss_displ, product_matrix_epss_size, &\n!$OMP                  memtype_product_wm, size_guess_init, nranks3D, m_sizes, n_sizes)\n            !\n            ! Setup product work areas\n            !\n            ithread = 0\n!$          ithread = OMP_GET_THREAD_NUM()\n            !\n            IF (irow3D .NE. myrow3D .OR. icol3D .NE. mycol3D) THEN\n               IF (keep_product_data) THEN\n                  CALL dbcsr_add_wm_from_matrix(product_matrix3D%mats(irow3D, icol3D)%matrix)\n               ELSE\n                  CALL dbcsr_work_create(product_matrix3D%mats(irow3D, icol3D)%matrix, &\n                                         work_mutable=.FALSE., memory_type=memtype_product_wm(ithread)%p)\n               END IF\n!$OMP BARRIER\n            END IF\n            ! The work arrays have to be setup\n            size_guess = product_matrix3D%mats(irow3D, icol3D)%matrix%wms(ithread + 1)%datasize ! Should be minimal\n            IF (.NOT. keep_sparsity) THEN\n               size_guess = MAX(size_guess, size_guess_init)\n            END IF\n            CALL dbcsr_data_ensure_size(product_matrix3D%mats(irow3D, icol3D)% &\n                                        matrix%wms(ithread + 1)%data_area, &\n                                        size_guess)\n            CALL dbcsr_data_set_size_referenced(product_matrix3D%mats(irow3D, icol3D)% &\n                                                matrix%wms(ithread + 1)%data_area, &\n                                                product_matrix3D%mats(irow3D, icol3D)% &\n                                                matrix%wms(ithread + 1)%datasize)\n            CALL ensure_array_size(product_matrix3D%mats(irow3D, icol3D)% &\n                                   matrix%wms(ithread + 1)%row_i, ub=1)\n            CALL ensure_array_size(product_matrix3D%mats(irow3D, icol3D)% &\n                                   matrix%wms(ithread + 1)%col_i, ub=1)\n            CALL ensure_array_size(product_matrix3D%mats(irow3D, icol3D)% &\n                                   matrix%wms(ithread + 1)%blk_p, ub=1)\n            ALLOCATE (multrec(ithread, irow3D, icol3D)%p)\n            CALL dbcsr_mm_multrec_init(multrec(ithread, irow3D, icol3D)%p, &\n                                       product=product_matrix3D%mats(irow3D, icol3D)%matrix, &\n                                       keep_sparsity=keep_sparsity, &\n                                       eps=filter_eps, &\n                                       row_max_epss=product_matrix_epss(product_matrix_epss_displ(irow3D) + 1: &\n                                                                        product_matrix_epss_displ(irow3D) + &\n                                                                        product_matrix_epss_size(irow3D)), &\n                                       block_estimate=0, &\n                                       right_row_blk_size=dbcsr_row_block_sizes(matrix_right), &\n                                       m_sizes=m_sizes(irow3D)%sizes, n_sizes=n_sizes(icol3D)%sizes, &\n                                       nlayers=nranks3D, &\n                                       keep_product_data=keep_product_data)\n!$OMP END PARALLEL\n            !\n            product_matrix3D%mats(irow3D, icol3D)%matrix%nblks = 0\n            product_matrix3D%mats(irow3D, icol3D)%matrix%nze = 0\n            product_matrix3D%mats(irow3D, icol3D)%matrix%row_p(:) = 0\n            CALL dbcsr_data_set_size_referenced(product_matrix3D%mats(irow3D, icol3D)%matrix%data_area, 0)\n            product_matrix3D%mats(irow3D, icol3D)%matrix%valid = .FALSE.\n         END IF\n         !\n         ! Do the multiplication.  Exclude the first iteration.\n         calc: IF (istep_k .GT. leftovers_first_k) THEN\n            right_buffer_p => right_buffers(iright_buffer_calc)\n            left_buffer_p => left_buffers(ileft_buffer_calc)\n            irow3D = left_buffer_p%coord3D\n            icol3D = right_buffer_p%coord3D\n            IF (istep_k .GT. final_step_k) THEN\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP SHARED (multrec, irow3D, icol3D, irow3D_send, icol3D_send, &\n!$OMP         istep_k, final_step_k, product_matrix3D, &\n!$OMP         handle2, requests_reduction_size, nthreads, &\n!$OMP         product_matrix_meta_send, product_matrix_meta_recv, &\n!$OMP         product_matrix_size_send, product_matrix_size_recv, &\n!$OMP         buffers_win, data_send, data_get, proc3D_send, proc3D_recv, &\n!$OMP         layers_3D_C_reduction, requests_reduction, &\n!$OMP         dbcsr_mpi_statistics, data_type_byte) &\n!$OMP PRIVATE (ithread)\n               ithread = 0\n!$             ithread = omp_get_thread_num()\n               ! Prepare data to send for 3D layer\n               IF (istep_k .GT. final_step_k + 1) THEN\n                  CALL dbcsr_mm_multrec_finalize( &\n                     multrec(ithread, irow3D_send, icol3D_send)%p, &\n                     buffers_win%left%meta_red3D)\n!$OMP BARRIER\n!$OMP MASTER\n                  CALL timeset(routineN//\"_red3D_size\", handle2)\n                  CALL mp_waitall(requests_reduction_size)\n                  CALL timestop(handle2)\n                  CALL ensure_array_size(buffers_win%right%meta_red3D, &\n                                         ub=product_matrix_size_recv(1), &\n                                         nocopy=.TRUE.)\n                  product_matrix_meta_send => &\n                     buffers_win%left%meta_red3D(1:product_matrix_size_send(1))\n                  product_matrix_meta_recv => &\n                     buffers_win%right%meta_red3D(1:product_matrix_size_recv(1))\n                  CALL mp_isendrecv(product_matrix_meta_send, proc3D_send, &\n                                    product_matrix_meta_recv, proc3D_recv, &\n                                    layers_3D_C_reduction%grp3D, &\n                                    requests_reduction(1), requests_reduction(2))\n                  DO myt = 1, nthreads\n                     CALL dbcsr_data_ensure_size(layers_3D_C_reduction%data_red3D(myt), &\n                                                 product_matrix_size_recv(myt + 1), &\n                                                 nocopy=.TRUE.)\n                     CALL dbcsr_data_set_pointer( &\n                        area=data_send, &\n                        rsize=product_matrix_size_send(myt + 1), &\n                        csize=1, &\n                        pointee=product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%wms(myt)%data_area)\n                     CALL dbcsr_data_set_pointer( &\n                        area=data_get, &\n                        rsize=product_matrix_size_recv(myt + 1), &\n                        csize=1, &\n                        pointee=layers_3D_C_reduction%data_red3D(myt))\n                     CALL dbcsr_isendrecv_any(data_send, proc3D_send, &\n                                              data_get, proc3D_recv, &\n                                              layers_3D_C_reduction%grp3D, &\n                                              requests_reduction(3 + (myt - 1)*2), &\n                                              requests_reduction(4 + (myt - 1)*2))\n                     CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(1, :), &\n                                               product_matrix_size_send(myt + 1), &\n                                               data_type_byte, &\n                                               dbcsr_mpi_statistics%data_size_breakdown(:, :, 1))\n                  END DO\n!$OMP END MASTER\n               END IF\n!$OMP END PARALLEL\n            END IF\n            !\n            IF (right_buffer_p%is_comm .AND. left_buffer_p%is_comm) THEN\n               iright_buffer_calc = MIN(iright_buffer_calc, nbuffers_norms)\n               ileft_buffer_calc = MIN(ileft_buffer_calc, nbuffers_norms)\n               ! check if right matrix was already initialized\n               IF (.NOT. right_buffer_p%matrix%valid) THEN\n                  IF (use_acc()) CALL dbcsr_data_host2dev(right_buffer_p%data)\n                  ! Repoint indices of matrices\n                  CALL make_meta(right_buffer_p, &\n                                 right_row_total_nimages, &\n                                 right_buffer_p%vprow, &\n                                 right_buffer_p%vpcol, &\n                                 imgdist=imgdist_right, do_merge_rows=.FALSE., &\n                                 global_indices=right_global_indices)\n                  CALL ensure_array_size(k_sizes, ub=array_size(right_buffer_p%matrix%local_rows))\n                  CALL local_filter(array_data(right_buffer_p%matrix%row_blk_size), &\n                                    array_size(right_buffer_p%matrix%local_rows), &\n                                    array_data(right_buffer_p%matrix%local_rows), &\n                                    k_sizes)\n                  IF (otf_filtering) THEN\n                     CALL calculate_norms(right_buffer_p%matrix, &\n                                          right_norms(:, iright_buffer_calc), &\n                                          k_sizes, n_sizes(icol3D)%sizes)\n                  END IF\n                  IF (use_acc()) THEN\n                     CALL acc_transpose_blocks(right_buffer_p%matrix, &\n                                               right_buffer_p%trs_stackbuf, &\n                                               k_sizes, n_sizes(icol3D)%sizes, &\n                                               row_blk_sizes2enum, enum2row_blk_sizes, &\n                                               col_blk_sizes2enum, enum2col_blk_sizes, &\n                                               noresize=.TRUE.)\n                  END IF\n               END IF\n               ! check if left matrix was already initialized\n               IF (.NOT. left_buffer_p%matrix%valid) THEN\n                  IF (use_acc()) CALL dbcsr_data_host2dev(left_buffer_p%data)\n                  ! Repoint indices of matrices\n                  CALL make_meta(left_buffer_p, &\n                                 left_col_total_nimages, &\n                                 left_buffer_p%vprow, &\n                                 left_buffer_p%vpcol, &\n                                 imgdist=imgdist_left, do_merge_rows=.TRUE., &\n                                 global_indices=left_global_indices, &\n                                 nthreads=nthreads)\n                  IF (otf_filtering) THEN\n                     CALL calculate_norms(left_buffer_p%matrix, &\n                                          left_norms(:, ileft_buffer_calc), &\n                                          m_sizes(irow3D)%sizes, k_sizes)\n                  END IF\n               END IF\n               !  Wait for left and right buffers transfer to device before proceeding\n               IF (use_acc()) THEN\n                  CALL timeset(routineN//\"_sync_h2d\", handle2)\n                  CALL acc_device_synchronize()\n                  CALL timestop(handle2)\n               END IF\n               !\n               CALL timeset(routineN//\"_multrec\", handle2)\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP SHARED (left_buffer_p, ileft_buffer_calc, &\n!$OMP         right_buffer_p, iright_buffer_calc, &\n!$OMP         left_norms,right_norms, &\n!$OMP         multrec, irow3D, icol3D, handle2, k_sizes) &\n!$OMP PRIVATE (ithread) &\n!$OMP REDUCTION (+: flop)\n               ithread = 0\n!$             ithread = omp_get_thread_num()\n               CALL dbcsr_mm_multrec_multiply(multrec(ithread, irow3D, icol3D)%p, &\n                                              left=left_buffer_p%matrix, &\n                                              right=right_buffer_p%matrix, &\n                                              flop=flop, &\n                                              a_norms=left_norms(:, ileft_buffer_calc), &\n                                              b_norms=right_norms(:, iright_buffer_calc), &\n                                              k_sizes=k_sizes)\n!$OMP END PARALLEL\n               CALL timestop(handle2)\n            END IF\n            ! Reduce 3D layers and finalize the local layer\n            IF (istep_k .GT. final_step_k) THEN\n               ! Wait for the other 3D layers to reduce\n               IF (istep_k .GT. final_step_k + 1) THEN\n                  CALL timeset(routineN//\"_red3D_data\", handle2)\n                  CALL mp_waitall(requests_reduction)\n                  CALL timestop(handle2)\n                  DO myt = 0, nthreads - 1\n                     DEALLOCATE (multrec(myt, irow3D_send, icol3D_send)%p)\n                     CALL dbcsr_work_destroy( &\n                        product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%wms(myt + 1))\n                  END DO\n                  DEALLOCATE (product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%wms)\n                  CALL dbcsr_release(product_matrix3D%mats(irow3D_send, icol3D_send)%matrix)\n               END IF\n               irow3D_send = irow3D\n               icol3D_send = icol3D\n               ! Store the initial shift for the recv node\n               IF (istep_k .EQ. final_step_k + 1) THEN\n                  shift3D_recv = shift3D - 4\n               END IF\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP SHARED (multrec, irow3D, icol3D, product_matrix3D, &\n!$OMP         memtype_mpi_buffer, nthreads, myt, istep_k, &\n!$OMP         irow3D_send, icol3D_send, myrow3D, mycol3D, &\n!$OMP         last_step_k, proc3D_send, proc3D_recv, &\n!$OMP         product_matrix_size_send, product_matrix_size_recv, &\n!$OMP         nrows3D, ncols3D, shift3D_recv, myrank3D, &\n!$OMP         layers_3D_C_reduction, requests_reduction_size, &\n!$OMP         final_step_k, handle2, buffers_win, g2l_map_rows, g2l_map_cols) &\n!$OMP PRIVATE (ithread) &\n!$OMP REDUCTION (+: flop)\n               ithread = 0\n!$             ithread = omp_get_thread_num()\n               !\n               ! Evaluate the size of layers to send and set the buffers\n               IF (irow3D .NE. myrow3D .OR. &\n                   icol3D .NE. mycol3D) THEN\n                  CALL dbcsr_mm_multrec_dev2host_init(multrec(ithread, irow3D, icol3D)%p)\n!$OMP ATOMIC\n                  product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%nblks = &\n                     product_matrix3D%mats(irow3D_send, icol3D_send)%matrix%nblks + &\n                     dbcsr_mm_multrec_get_nblks(multrec(ithread, irow3D_send, icol3D_send)%p)\n!$OMP BARRIER\n!$OMP MASTER\n                  ! First (nthreads+1) positions are reserved for\n                  ! the offset sizes of each thread for meta\n                  CALL ensure_array_size(buffers_win%left%meta_red3D, &\n                                         ub=product_matrix3D%mats(irow3D_send, icol3D_send)% &\n                                         matrix%nblks*3 + (nthreads + 1), &\n                                         nocopy=.TRUE.)\n                  ! Set the offsets\n                  buffers_win%left%meta_red3D(1) = nthreads + 1\n                  DO myt = 0, nthreads - 1\n                     buffers_win%left%meta_red3D(myt + 2) = &\n                        buffers_win%left%meta_red3D(myt + 1) + &\n                        dbcsr_mm_multrec_get_nblks(multrec(myt, irow3D_send, icol3D_send)%p)*3\n                     product_matrix_size_send(myt + 2) = &\n                        dbcsr_mm_multrec_get_nze(multrec(myt, irow3D_send, icol3D_send)%p)\n                  END DO\n                  ! Send/recv data and meta sizes\n                  product_matrix_size_send(1) = &\n                     buffers_win%left%meta_red3D(nthreads + 1)\n                  proc3D_send = (icol3D_send - 1)*nrows3D + irow3D_send - 1\n                  !\n                  CALL row_col_3D_reflected(irow3D, icol3D, nrows3D, ncols3D, shift3D_recv)\n                  shift3D_recv = shift3D_recv - 1\n                  proc3D_recv = (icol3D - 1)*nrows3D + irow3D - 1\n                  CALL mp_isendrecv(product_matrix_size_send, proc3D_send, &\n                                    product_matrix_size_recv, proc3D_recv, &\n                                    layers_3D_C_reduction%grp3D, &\n                                    requests_reduction_size(1), &\n                                    requests_reduction_size(2))\n!$OMP END MASTER\n               ELSE\n                  IF (istep_k .NE. last_step_k) &\n                     DBCSR_ABORT(\"Last layer does not correspond to local layer\")\n               END IF\n               ! Reduce to the local layer\n               IF (istep_k .GT. final_step_k + 1) THEN\n                  IF (dbcsr_data_get_size_referenced(layers_3D_C_reduction%data_red3D(ithread + 1)) .GT. 0) THEN\n                     CALL timeset(routineN//\"_red3D\", handle2)\n                     CALL dbcsr_mm_multrec_red3D(multrec(ithread, myrow3D, mycol3D)%p, &\n                                                 buffers_win%right%meta_red3D, &\n                                                 layers_3D_C_reduction%data_red3D(ithread + 1), &\n                                                 flop, g2l_map_rows, g2l_map_cols)\n                     CALL timestop(handle2)\n                  END IF\n               END IF\n!$OMP END PARALLEL\n            END IF\n         END IF calc\n         !\n         ! Swap temporary buffers for the first tick\n         IF (do_square_layers3D .AND. first_k .AND. &\n             istep_k .LT. last_step_k) THEN\n            iright_buffer_comm = right_buffers(iright_buffer_comm)%coord3D\n            ileft_buffer_comm = left_buffers(ileft_buffer_comm)%coord3D\n            CALL swap_buffers(right_buffers(iright_buffer_comm), right_buffers(nbuffers))\n            CALL swap_buffers(left_buffers(ileft_buffer_comm), left_buffers(nbuffers))\n         END IF\n         !\n         iright_buffer_calc = iright_buffer_comm\n         ileft_buffer_calc = ileft_buffer_comm\n      END DO grouped_steps_index\n      !\n      CALL timestop(handle1)\n      !\n      CALL m_memory(mem)\n      max_memory = MAX(max_memory, REAL(mem))\n      !\n      IF (do_layers3D .AND. keep_sparsity) THEN\n         DEALLOCATE (product_matrix_meta_size, product_matrix_meta_displ)\n         DEALLOCATE (product_matrix_meta)\n      END IF\n      DEALLOCATE (right_norms, left_norms)\n      DEALLOCATE (product_matrix_epss_size, product_matrix_epss_displ)\n      IF (.NOT. otf_filtering .OR. (do_layers3D .AND. nrows3D .GT. 1)) THEN\n         DEALLOCATE (product_matrix_epss)\n      ELSE\n         DEALLOCATE (row_max_epss)\n      END IF\n      !\n      DEALLOCATE (left_images_size, right_images_size)\n      NULLIFY (left_images_size, right_images_size)\n      DEALLOCATE (left_images_size_layers3D, left_displ_layers3D)\n      DEALLOCATE (right_images_size_layers3D, right_displ_layers3D)\n      !\n      ! Deallocate 3D layers\n      IF (do_layers3D) THEN\n         DEALLOCATE (product_matrix_size_send, product_matrix_size_recv)\n         DEALLOCATE (requests_reduction)\n         DO icol3D = 1, ncols3D\n            DO irow3D = 1, nrows3D\n               IF (irow3D .NE. myrow3D .OR. icol3D .NE. mycol3D) THEN\n                  DEALLOCATE (product_matrix3D%mats(irow3D, icol3D)%matrix)\n               END IF\n            END DO\n         END DO\n         CALL dbcsr_data_clear_pointer(data_send)\n         CALL dbcsr_data_release(data_send)\n      END IF\n      DEALLOCATE (product_matrix3D%mats)\n      ! Finalize local layer\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP SHARED (multrec, myrow3D, mycol3D) &\n!$OMP PRIVATE (ithread)\n      ithread = 0\n!$    ithread = omp_get_thread_num()\n      CALL dbcsr_mm_multrec_finalize(multrec(ithread, myrow3D, mycol3D)%p)\n      DEALLOCATE (multrec(ithread, myrow3D, mycol3D)%p)\n!$OMP END PARALLEL\n      DEALLOCATE (multrec)\n      DEALLOCATE (g2l_map_rows, g2l_map_cols)\n      CALL dbcsr_finalize(product_matrix, reshuffle=PRESENT(filter_eps) .AND. .NOT. keep_sparsity)\n      !\n      DO irow3D = 1, nrows3D\n         DEALLOCATE (m_sizes(irow3D)%sizes)\n      END DO\n      DEALLOCATE (m_sizes)\n      DO icol3D = 1, ncols3D\n         DEALLOCATE (n_sizes(icol3D)%sizes)\n      END DO\n      DEALLOCATE (n_sizes)\n      IF (ASSOCIATED(k_sizes)) DEALLOCATE (k_sizes)\n      !\n      CALL dbcsr_data_clear_pointer(data_get)\n      CALL dbcsr_data_release(data_get)\n      !\n      ! clean-up of communication buffers\n      DO v_ki = 1, nbuffers\n         CALL dbcsr_data_clear_pointer(left_buffers(v_ki)%data)\n         IF (left_buffers(v_ki)%data%d%memory_type%acc_devalloc) THEN\n            CALL acc_event_destroy(left_buffers(v_ki)%data%d%acc_ready)\n         END IF\n         CALL dbcsr_data_release(left_buffers(v_ki)%data)\n         NULLIFY (left_buffers(v_ki)%matrix%index)\n         CALL dbcsr_release(left_buffers(v_ki)%matrix)\n         !\n         CALL dbcsr_data_clear_pointer(right_buffers(v_ki)%data)\n         IF (right_buffers(v_ki)%data%d%memory_type%acc_devalloc) THEN\n            CALL acc_event_destroy(right_buffers(v_ki)%data%d%acc_ready)\n         END IF\n         CALL dbcsr_data_release(right_buffers(v_ki)%data)\n         NULLIFY (right_buffers(v_ki)%matrix%index)\n         CALL dbcsr_release(right_buffers(v_ki)%matrix)\n         IF (use_acc()) THEN\n            CALL dbcsr_data_clear_pointer(right_buffers(v_ki)%trs_stackbuf)\n            IF (right_buffers(v_ki)%trs_stackbuf%d%memory_type%acc_devalloc) THEN\n               CALL acc_event_destroy(right_buffers(v_ki)%trs_stackbuf%d%acc_ready)\n            END IF\n            CALL dbcsr_data_release(right_buffers(v_ki)%trs_stackbuf)\n         END IF\n      END DO\n      DEALLOCATE (left_buffers, right_buffers)\n      DEALLOCATE (do_comm_left, do_comm_right)\n      DEALLOCATE (right_vcol, left_vrow)\n      IF (use_acc()) THEN\n         DEALLOCATE (row_blk_sizes2enum, enum2row_blk_sizes)\n         DEALLOCATE (col_blk_sizes2enum, enum2col_blk_sizes)\n      END IF\n      !\n      IF (debug_mod) THEN\n         v_ki = 0\n         DO blk = 1, SIZE(product_matrix%blk_p)\n            v_ki = MAX(v_ki, ABS(product_matrix%blk_p(blk)))\n         END DO\n         WRITE (*, *) routineN//\" Actual final size\", &\n            LOG(REAL(dbcsr_data_get_size(product_matrix%data_area)))/LOG(10.0), &\n            LOG(REAL(v_ki))/LOG(10.0)\n      END IF\n      !\n      CALL timestop(handle)\n   END SUBROUTINE multiply_3D\n\n   SUBROUTINE win_setup(buffer, do_win_create, request)\n      TYPE(dbcsr_buffer), INTENT(INOUT)                  :: buffer\n      LOGICAL, DIMENSION(:), INTENT(INOUT)               :: do_win_create\n      TYPE(mp_request_type), INTENT(INOUT)               :: request\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'win_setup'\n      INTEGER                                            :: handle, handle1, myproc\n\n      CALL timeset(routineN, handle)\n\n      IF (buffer%has_rma_win) THEN\n         CALL timeset(routineN//\"_win_check\", handle1)\n         CALL mp_wait(request)\n         CALL timestop(handle1)\n         IF (do_win_create(1)) THEN\n            CALL mp_win_unlock_all(buffer%data_win)\n            CALL mp_win_free(buffer%data_win)\n         END IF\n         IF (do_win_create(2)) THEN\n            CALL mp_win_unlock_all(buffer%meta_win)\n            CALL mp_win_free(buffer%meta_win)\n         END IF\n      END IF\n      CALL dbcsr_data_release(buffer%data_before_resize)\n      IF (ASSOCIATED(buffer%meta_before_resize)) THEN\n         CALL memory_deallocate(buffer%meta_before_resize, memtype_mpi_buffer)\n         NULLIFY (buffer%meta_before_resize)\n      END IF\n      !\n      CALL mp_environ(taskid=myproc, groupid=buffer%subgrp)\n      buffer%myproc = myproc\n      IF (do_win_create(1)) THEN\n         CALL dbcsr_win_create_any(buffer%data, buffer%subgrp, buffer%data_win)\n         CALL mp_win_lock_all(buffer%data_win)\n      END IF\n      IF (do_win_create(2)) THEN\n         CALL mp_win_create(buffer%meta, buffer%subgrp, buffer%meta_win)\n         CALL mp_win_lock_all(buffer%meta_win)\n      END IF\n      !\n      buffer%has_rma_win = .TRUE.\n      CALL timestop(handle)\n   END SUBROUTINE win_setup\n\n   SUBROUTINE row_col_3D_reflected(irow3D, icol3D, nrows3D, ncols3D, shift3D)\n      !! Apply reflected order, i.e. row increasing value for odd col value,\n      !! row decreasing value for even col value\n\n      INTEGER, INTENT(INOUT)                             :: irow3D, icol3D\n      INTEGER, INTENT(IN)                                :: nrows3D, ncols3D, shift3D\n\n      INTEGER                                            :: odd_or_even\n\n      icol3D = MOD(shift3D/nrows3D, ncols3D) + 1\n      irow3D = MOD(shift3D, nrows3D)\n      odd_or_even = MOD(icol3D, 2)\n      irow3D = (nrows3D - irow3D)*(1 - odd_or_even) + (irow3D + 1)*odd_or_even\n   END SUBROUTINE row_col_3D_reflected\n\n   SUBROUTINE setup_buffers(buffer_1, buffer_2, buffers, nbuffers, data_size, meta_size, matrix, imgdist)\n      TYPE(dbcsr_buffer), INTENT(INOUT), TARGET          :: buffer_1, buffer_2\n      TYPE(dbcsr_buffer), ALLOCATABLE, DIMENSION(:), &\n         INTENT(INOUT)                                   :: buffers\n      INTEGER, INTENT(IN)                                :: nbuffers, data_size, meta_size\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n\n      INTEGER                                            :: ibuffer, jbuffer\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: meta_p\n      LOGICAL                                            :: has_trs_stackbuf\n      TYPE(dbcsr_buffer), POINTER                        :: buffer_p\n\n      ALLOCATE (buffers(nbuffers))\n      has_trs_stackbuf = dbcsr_data_valid(buffer_1%trs_stackbuf) .OR. dbcsr_data_valid(buffer_2%trs_stackbuf)\n      DO ibuffer = 1, nbuffers\n         jbuffer = (ibuffer - 1)/2\n         IF (MOD(ibuffer, 2) .EQ. 1) THEN\n            buffer_p => buffer_1\n         ELSE\n            buffer_p => buffer_2\n         END IF\n         ! Use slices for the 3D buffers\n         CALL dbcsr_data_init(buffers(ibuffer)%data)\n         CALL dbcsr_data_new(buffers(ibuffer)%data, dbcsr_data_get_type(buffer_p%data), &\n                             memory_type=dbcsr_data_get_memory_type(buffer_p%data))\n         IF (buffers(ibuffer)%data%d%memory_type%acc_devalloc) THEN\n            CALL acc_event_create(buffers(ibuffer)%data%d%acc_ready)\n         END IF\n         CALL dbcsr_data_set_pointer( &\n            area=buffers(ibuffer)%data, &\n            rsize=data_size, &\n            csize=1, &\n            pointee=buffer_p%data, &\n            source_lb=data_size*jbuffer + 1)\n         ! Use meta_p pointer to avoid warning target-lifetime\n         meta_p => buffer_p%meta(meta_size*jbuffer + 1: &\n                                 meta_size*(jbuffer + 1))\n         buffers(ibuffer)%meta => meta_p\n         IF (has_trs_stackbuf) THEN\n            CALL dbcsr_data_init(buffers(ibuffer)%trs_stackbuf)\n            CALL dbcsr_data_new(buffers(ibuffer)%trs_stackbuf, dbcsr_data_get_type(buffer_p%trs_stackbuf), &\n                                memory_type=dbcsr_data_get_memory_type(buffer_p%trs_stackbuf))\n            IF (buffers(ibuffer)%trs_stackbuf%d%memory_type%acc_devalloc) THEN\n               CALL acc_event_create(buffers(ibuffer)%trs_stackbuf%d%acc_ready)\n            END IF\n            CALL dbcsr_data_set_pointer( &\n               area=buffers(ibuffer)%trs_stackbuf, &\n               rsize=meta_size/3, &\n               csize=1, &\n               pointee=buffer_p%trs_stackbuf, &\n               source_lb=(meta_size/3)*jbuffer + 1)\n         END IF\n         CALL setup_buffer_matrix_image(buffers(ibuffer)%matrix, imgdist, matrix, &\n                                        buffers(ibuffer)%data, &\n                                        buffers(ibuffer)%meta)\n      END DO\n   END SUBROUTINE setup_buffers\n\n   SUBROUTINE setup_buffer_matrix_image(matrix, imgdist, &\n                                        template_matrix, data_buffer, &\n                                        meta_buffer)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n      TYPE(dbcsr_type), INTENT(IN)                       :: template_matrix\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: data_buffer\n      INTEGER, DIMENSION(:), INTENT(IN), TARGET, CONTIGUOUS :: meta_buffer\n\n      matrix = dbcsr_type()\n      CALL dbcsr_create(matrix, &\n                        \"Buffer image of \"//template_matrix%name, &\n                        imgdist%i%main, &\n                        dbcsr_type_no_symmetry, &\n                        row_blk_size_obj=template_matrix%row_blk_size, &\n                        col_blk_size_obj=template_matrix%col_blk_size, &\n                        data_type=dbcsr_data_get_type(data_buffer), &\n                        data_buffer=data_buffer, &\n                        max_rbs=template_matrix%max_rbs, max_cbs=template_matrix%max_cbs, &\n                        row_blk_offset=template_matrix%row_blk_offset, &\n                        col_blk_offset=template_matrix%col_blk_offset, &\n                        index_memory_type=memtype_mpi_buffer, &\n                        make_index=.FALSE.)\n      matrix%index => meta_buffer\n      matrix%negate_real = template_matrix%negate_real\n      matrix%negate_imaginary = template_matrix%negate_imaginary\n      matrix%local_indexing = .TRUE.\n      matrix%list_indexing = .TRUE.\n   END SUBROUTINE setup_buffer_matrix_image\n\n   SUBROUTINE swap_buffers(buffers_1, buffers_2)\n      TYPE(dbcsr_buffer), INTENT(INOUT)                  :: buffers_1, buffers_2\n\n      TYPE(dbcsr_buffer)                                 :: tmp\n\n      tmp = buffers_1\n      buffers_1 = buffers_2\n      buffers_2 = tmp\n   END SUBROUTINE swap_buffers\n\n   SUBROUTINE rma_transfer(recv_vproc, nimages, &\n                           size_layers3D, displ_layers3D, &\n                           buffer, &\n                           meta_win, data_win, &\n                           data_get, data_type_byte, &\n                           buffer_win, layer3D, nlayers3D)\n      INTEGER, INTENT(IN)                                :: recv_vproc, nimages\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: size_layers3D, displ_layers3D\n      TYPE(dbcsr_buffer), INTENT(INOUT)                  :: buffer\n      TYPE(mp_win_type), INTENT(IN)                      :: meta_win, data_win\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: data_get\n      INTEGER, INTENT(IN)                                :: data_type_byte\n      TYPE(dbcsr_buffer), INTENT(IN)                     :: buffer_win\n      INTEGER, INTENT(IN)                                :: layer3D, nlayers3D\n\n      INTEGER                                            :: recv_proc\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: meta_get\n\n      buffer%is_comm = .TRUE.\n      buffer%get_requests(:) = mp_request_null\n      recv_proc = (recv_vproc/nimages)*nlayers3D + layer3D - 1\n      !\n      meta_get => buffer%meta(dbcsr_num_slots + 1:dbcsr_num_slots + size_layers3D(imeta))\n      buffer%meta_size = size_layers3D(imeta)\n      CALL mp_rget(meta_get, recv_proc, &\n                   meta_win, &\n                   buffer_win%meta, &\n                   buffer_win%myproc, &\n                   disp=displ_layers3D(imeta), &\n                   request=buffer%get_requests(1))\n      CALL dbcsr_data_set_pointer( &\n         area=data_get, &\n         rsize=size_layers3D(idata), &\n         csize=1, &\n         pointee=buffer%data, &\n         source_lb=1)\n      CALL dbcsr_rget_any(data_get, recv_proc, &\n                          data_win, &\n                          buffer_win%data, &\n                          buffer_win%myproc, &\n                          disp=displ_layers3D(idata), &\n                          request=buffer%get_requests(2))\n      CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(1, :), &\n                                size_layers3D(idata), &\n                                data_type_byte, &\n                                dbcsr_mpi_statistics%data_size_breakdown(:, :, 1))\n      dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1\n      !\n      ! Set the referenced sizes to the actual data moved via MPI\n      CALL dbcsr_data_set_size_referenced(buffer%data, size_layers3D(idata))\n      buffer%matrix%valid = .FALSE.\n   END SUBROUTINE rma_transfer\n\n   SUBROUTINE setup_rec_index_images(meta_buffer, img_nblks_rows, img_nblks_cols, &\n                                     refs_size, refs_displ, size_index, has_threads)\n      INTEGER, DIMENSION(:), INTENT(INOUT)               :: meta_buffer\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: img_nblks_rows, img_nblks_cols, &\n                                                            refs_size, refs_displ\n      INTEGER, INTENT(IN)                                :: size_index\n      LOGICAL, INTENT(IN)                                :: has_threads\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'setup_rec_index_images'\n\n      INTEGER                                            :: handle, in, nblkcols_local, &\n                                                            nblkrows_local, t_f, t_l, t_size\n\n!$    INTEGER                           :: ithread\n\n      CALL timeset(routineN, handle)\n      IF (has_threads) THEN\n         nblkrows_local = img_nblks_rows(1)\n      ELSE\n         nblkcols_local = img_nblks_cols(1)\n      END IF\n      !\n      DO in = 1, SIZE(refs_size)\n         IF (refs_size(in) .EQ. 0) CYCLE\n         ! Number of blocks\n         t_size = (refs_size(in) - size_index)/3\n         IF (has_threads) THEN\n            nblkcols_local = img_nblks_cols(in)\n         ELSE\n            nblkrows_local = img_nblks_rows(in)\n         END IF\n         t_f = 1\n         t_l = t_size\n!$OMP    PARALLEL IF (has_threads) DEFAULT (NONE) &\n!$OMP    PRIVATE (ithread) &\n!$OMP    FIRSTPRIVATE (t_f, t_l, t_size) &\n!$OMP    SHARED (meta_buffer, in, has_threads, refs_displ, &\n!$OMP            size_index, nblkrows_local, nblkcols_local)\n!$       ithread = OMP_GET_THREAD_NUM() + 1\n!$       IF (has_threads) THEN\n!$          t_f = meta_buffer(refs_displ(in) + ithread) + 1\n!$          t_l = meta_buffer(refs_displ(in) + ithread + 1)\n!$       END IF\n         t_size = t_l - t_f + 1\n         IF (t_size .GT. 0) THEN\n            CALL rec_sort_index(1, nblkrows_local, &\n                                1, nblkcols_local, &\n                                t_size, &\n                                meta_buffer(refs_displ(in) + size_index + t_f*3 - 2: &\n                                            refs_displ(in) + size_index + t_l*3), &\n                                0)\n         END IF\n!$OMP    END PARALLEL\n      END DO\n      CALL timestop(handle)\n   END SUBROUTINE setup_rec_index_images\n\n   SUBROUTINE buffer_init(buffer, data_type, &\n      !! Init buffer\n                          data_size, meta_size, &\n                          num_data, &\n                          data_memory_type, trs_memory_type)\n      TYPE(dbcsr_buffer), INTENT(INOUT)                  :: buffer\n      INTEGER, INTENT(IN)                                :: data_type, data_size, meta_size\n      INTEGER, INTENT(IN), OPTIONAL                      :: num_data\n      TYPE(dbcsr_memtype_type), INTENT(IN)               :: data_memory_type\n      TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL     :: trs_memory_type\n\n      INTEGER                                            :: my_num_data\n      LOGICAL                                            :: new_trs_stackbuf\n\n      my_num_data = 1\n      IF (PRESENT(num_data)) THEN\n         my_num_data = num_data\n      ELSE\n         IF (dbcsr_data_valid(buffer%data_before_resize) .OR. ASSOCIATED(buffer%meta_before_resize)) &\n            DBCSR_ABORT(\"Previous data area already initialized.\")\n         CALL dbcsr_data_init(buffer%data_before_resize)\n         CALL dbcsr_data_new(buffer%data_before_resize, data_type, memory_type=data_memory_type)\n      END IF\n      new_trs_stackbuf = PRESENT(trs_memory_type) .AND. use_acc()\n      !\n      IF (buffer%is_valid) THEN\n         ! Invalid buffers if data_type is different\n         IF (dbcsr_data_get_type(buffer%data) .NE. data_type) THEN\n            CALL dbcsr_data_release(buffer%data)\n            IF (new_trs_stackbuf) THEN\n               CALL dbcsr_data_release(buffer%trs_stackbuf)\n            END IF\n            buffer%is_valid = .FALSE.\n         END IF\n      END IF\n      !\n      IF (.NOT. buffer%is_valid) THEN\n         ! First initialization\n         CALL dbcsr_data_init(buffer%data)\n         CALL dbcsr_data_new(buffer%data, data_type=data_type, &\n                             data_size=data_size*my_num_data, memory_type=data_memory_type)\n         CALL dbcsr_data_set_size_referenced(buffer%data, data_size*my_num_data)\n         IF (new_trs_stackbuf) THEN\n            CALL dbcsr_data_init(buffer%trs_stackbuf)\n            CALL dbcsr_data_new(buffer%trs_stackbuf, &\n                                data_type=dbcsr_type_int_4, data_size=(meta_size/3)*my_num_data, &\n                                memory_type=trs_memory_type)\n         END IF\n         buffer%is_valid = .TRUE.\n      ELSE\n         IF (PRESENT(num_data)) THEN\n            CALL dbcsr_data_ensure_size(buffer%data, data_size*my_num_data, nocopy=.TRUE.)\n            IF (new_trs_stackbuf) THEN\n               CALL dbcsr_data_ensure_size(buffer%trs_stackbuf, (meta_size/3)*my_num_data, nocopy=.TRUE.)\n            END IF\n         ELSE\n            ! Case for MPI windows\n            ! data_before_resize keeps the pointer to previous data in the case of reallocation\n            CALL dbcsr_data_ensure_size(buffer%data, data_size, nocopy=.TRUE., &\n                                        area_resize=buffer%data_before_resize)\n         END IF\n      END IF\n      !\n      IF (PRESENT(num_data)) THEN\n         CALL ensure_array_size(buffer%meta, ub=meta_size*my_num_data, nocopy=.TRUE., &\n                                memory_type=memtype_mpi_buffer)\n      ELSE\n         ! Case for MPI windows\n         ! meta_before_resize keeps the pointer to previous meta in the case of reallocation\n         CALL ensure_array_size(buffer%meta, array_resize=buffer%meta_before_resize, &\n                                ub=meta_size, nocopy=.TRUE., &\n                                memory_type=memtype_mpi_buffer)\n      END IF\n      !\n      buffer%is_comm = .FALSE.\n   END SUBROUTINE buffer_init\n\n   SUBROUTINE buffers_release()\n      !! Release all buffers\n      IF (request_sync_mult .NE. mp_request_null) CALL mp_wait(request_sync_mult)\n      request_sync_mult = mp_request_null\n      CALL buffer_release(buffers_1%right)\n      CALL buffer_release(buffers_1%left)\n      CALL buffer_release(buffers_2%right)\n      CALL buffer_release(buffers_2%left)\n      CALL buffer_release(buffers_win%right)\n      CALL buffer_release(buffers_win%left)\n      !\n      IF (dbcsr_data_valid(make_buffers_data_send)) CALL dbcsr_data_release(make_buffers_data_send)\n      IF (dbcsr_data_valid(make_buffers_data_recv)) CALL dbcsr_data_release(make_buffers_data_recv)\n      IF (ASSOCIATED(make_buffers_meta_send)) CALL memory_deallocate(make_buffers_meta_send, memtype_mpi_buffer)\n      IF (ASSOCIATED(make_buffers_meta_recv)) CALL memory_deallocate(make_buffers_meta_recv, memtype_mpi_buffer)\n   END SUBROUTINE buffers_release\n\n   SUBROUTINE buffer_release(buffer)\n      !! Release buffer\n      TYPE(dbcsr_buffer), INTENT(INOUT)                  :: buffer\n\n      IF (buffer%has_rma_win) THEN\n         CALL mp_win_unlock_all(buffer%data_win)\n         CALL mp_win_free(buffer%data_win)\n         CALL mp_win_unlock_all(buffer%meta_win)\n         CALL mp_win_free(buffer%meta_win)\n         buffer%has_rma_win = .FALSE.\n         buffer%grp = mp_comm_null\n         IF (buffer%subgrp .NE. mp_comm_null .AND. buffer%num_layers_3D .GT. 1) &\n            CALL mp_comm_free(buffer%subgrp)\n         buffer%subgrp = mp_comm_null\n         buffer%num_layers_3D = 1\n      END IF\n      !\n      IF (buffer%is_valid) THEN\n         CALL dbcsr_data_release(buffer%data)\n         IF (dbcsr_data_valid(buffer%trs_stackbuf)) THEN\n            CALL dbcsr_data_release(buffer%trs_stackbuf)\n         END IF\n         IF (dbcsr_data_valid(buffer%data_before_resize)) THEN\n            CALL dbcsr_data_release(buffer%data_before_resize)\n         END IF\n         buffer%is_valid = .FALSE.\n      END IF\n      IF (ASSOCIATED(buffer%meta)) THEN\n         CALL memory_deallocate(buffer%meta, memtype_mpi_buffer)\n         NULLIFY (buffer%meta)\n      END IF\n      IF (ASSOCIATED(buffer%meta_before_resize)) THEN\n         CALL memory_deallocate(buffer%meta_before_resize, memtype_mpi_buffer)\n         NULLIFY (buffer%meta_before_resize)\n      END IF\n      IF (ASSOCIATED(buffer%meta_red3D)) THEN\n         CALL memory_deallocate(buffer%meta_red3D, memtype_mpi_buffer)\n         NULLIFY (buffer%meta_red3D)\n      END IF\n   END SUBROUTINE buffer_release\n\n   SUBROUTINE make_meta(buffer, ntotal_images, &\n      !! Create meta indices\n                        vprow, vpcol, &\n                        imgdist, do_merge_rows, &\n                        global_indices, &\n                        nthreads)\n      TYPE(dbcsr_buffer), INTENT(INOUT)                  :: buffer\n      INTEGER, INTENT(IN)                                :: ntotal_images, vprow, vpcol\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n      LOGICAL, INTENT(IN)                                :: do_merge_rows\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: global_indices\n      INTEGER, INTENT(IN), OPTIONAL                      :: nthreads\n\n      INTEGER                                            :: size_index\n\n      buffer%matrix%index(dbcsr_slot_size) = &\n         buffer%meta_size + dbcsr_num_slots\n      size_index = 0\n      IF (PRESENT(nthreads)) THEN\n!$       size_index = nthreads + 1\n      END IF\n      buffer%matrix%index(dbcsr_slot_nblks) = &\n         (buffer%meta_size - size_index)/3\n      buffer%matrix%index(dbcsr_slot_nze) = &\n         dbcsr_data_get_size_referenced(buffer%data)\n      buffer%matrix%index(dbcsr_slot_dense) = 0\n      buffer%matrix%index(dbcsr_slot_nblkrows_total:dbcsr_slot_nfullcols_local) = &\n         global_indices(:)\n      buffer%matrix%index(dbcsr_slot_type:dbcsr_num_slots) = 0\n      ! Virtual coords\n      IF (do_merge_rows) THEN\n         buffer%matrix%index(dbcsr_slot_home_vprow) = vprow\n         buffer%matrix%index(dbcsr_slot_home_vpcol) = MOD(vpcol, ntotal_images)\n      ELSE\n         buffer%matrix%index(dbcsr_slot_home_vprow) = MOD(vprow, ntotal_images)\n         buffer%matrix%index(dbcsr_slot_home_vpcol) = vpcol\n      END IF\n      buffer%matrix%index(dbcsr_slot_row_p) = 1\n      buffer%matrix%index(dbcsr_slot_col_i) = 1\n      buffer%matrix%index(dbcsr_slot_blk_p) = 1\n      ! thr_c\n      size_index = dbcsr_num_slots\n!$    IF (PRESENT(nthreads)) THEN\n!$       size_index = size_index + nthreads + 1\n!$       buffer%matrix%index(dbcsr_slot_thr_c) = dbcsr_num_slots + 1\n!$       buffer%matrix%index(dbcsr_slot_thr_c + 1) = size_index\n!$    END IF\n      buffer%matrix%index(dbcsr_slot_coo_l) = size_index + 1\n      buffer%matrix%index(dbcsr_num_slots) = buffer%matrix%index(dbcsr_slot_size)\n      !\n      ! Reset\n      CALL dbcsr_reset_vlocals(buffer%matrix, imgdist)\n      !\n      ! Repoint index\n      buffer%matrix%nblks = 0\n      buffer%matrix%nze = 0\n      CALL dbcsr_repoint_index(buffer%matrix)\n      buffer%matrix%valid = .TRUE.\n   END SUBROUTINE make_meta\n\n   SUBROUTINE remap_layers3D(refs_size, refs_size_layers3D, refs_displ_layers3D, &\n      !! Remap the 4-rank array in a 3-rank array by introducing the virtual coordinate\n                             data_size, meta_size)\n      INTEGER, DIMENSION(:, :, :, :), INTENT(IN), &\n         CONTIGUOUS, POINTER                             :: refs_size\n      INTEGER, DIMENSION(:, :, :), INTENT(OUT), &\n         CONTIGUOUS, POINTER                             :: refs_size_layers3D, refs_displ_layers3D\n      INTEGER, INTENT(OUT)                               :: data_size, meta_size\n\n      INTEGER                                            :: ilayer, image, iproc, nimages, &\n                                                            nlayers3D, nprocs\n\n      nimages = SIZE(refs_size, 2)\n      nlayers3D = SIZE(refs_size, 3)\n      nprocs = SIZE(refs_size, 4)\n      !\n      ALLOCATE (refs_size_layers3D(idata:imeta, nlayers3D, 0:nimages*nprocs - 1))\n      ALLOCATE (refs_displ_layers3D(idata:imeta, nlayers3D, 0:nimages*nprocs - 1))\n      data_size = 0; meta_size = 0\n      !\n!$OMP PARALLEL DO DEFAULT (NONE) &\n!$OMP SHARED (nprocs, nimages, nlayers3D, &\n!$OMP         refs_size_layers3D, refs_displ_layers3D, refs_size) &\n!$OMP PRIVATE (iproc,image,ilayer) &\n!$OMP REDUCTION (MAX : data_size, meta_size)\n      DO iproc = 0, nprocs - 1\n         DO ilayer = 1, nlayers3D\n            DO image = 1, nimages\n               refs_size_layers3D(:, ilayer, image + iproc*nimages - 1) = refs_size(:, image, ilayer, iproc)\n               data_size = MAX(data_size, refs_size(idata, image, ilayer, iproc))\n               meta_size = MAX(meta_size, refs_size(imeta, image, ilayer, iproc))\n            END DO\n            refs_displ_layers3D(:, ilayer, iproc*nimages) = 0\n            DO image = 1, nimages - 1\n               refs_displ_layers3D(:, ilayer, image + iproc*nimages) = &\n                  refs_displ_layers3D(:, ilayer, image + iproc*nimages - 1) + refs_size(:, image, ilayer, iproc)\n            END DO\n         END DO\n      END DO\n!$OMP END PARALLEL DO\n   END SUBROUTINE remap_layers3D\n\n   PURE FUNCTION get_max_layers_3D()\n      INTEGER                                            :: get_max_layers_3D\n\n      get_max_layers_3D = layers_3D_C_reduction%max_num_layers_3D\n\n   END FUNCTION get_max_layers_3D\n\nEND MODULE dbcsr_mm_3d\n"
  },
  {
    "path": "src/mm/dbcsr_mm_accdrv.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_accdrv\n   !! Fourth layer of the dbcsr matrix-matrix multiplication.\n   !! It hides the differences between performing calculations on the\n   !! accelerator device or on the CPU.\n   !! <b>Modification history:</b>\n   !! - 2010-02-23 Moved from dbcsr_operations\n   !! - 2011-11    Moved parameter-stack processing routines to\n   !! dbcsr_mm_methods.\n   !! - 2013-01    extensive refactoring (Ole Schuett)\n   !! - 2014-04    generalized into acc-framework (Ole Schuett)\n\n   USE dbcsr_acc_devmem, ONLY: acc_devmem_allocate_bytes, &\n                               acc_devmem_allocated, &\n                               acc_devmem_deallocate, &\n                               acc_devmem_host2dev, &\n                               acc_devmem_setzero_bytes, &\n                               acc_devmem_type\n   USE dbcsr_acc_event, ONLY: acc_event_create, &\n                              acc_event_destroy, &\n                              acc_event_query, &\n                              acc_event_record, &\n                              acc_event_type, &\n                              acc_stream_wait_event\n   USE dbcsr_acc_hostmem, ONLY: acc_hostmem_allocate, &\n                                acc_hostmem_deallocate\n   USE dbcsr_acc_operations, ONLY: dbcsr_acc_do_mm_stack\n   USE dbcsr_acc_stream, ONLY: acc_stream_associated, &\n                               acc_stream_create, &\n                               acc_stream_destroy, &\n                               acc_stream_synchronize, &\n                               acc_stream_type\n   USE dbcsr_block_operations, ONLY: block_add\n   USE dbcsr_config, ONLY: dbcsr_cfg, &\n                           default_resize_factor\n   USE dbcsr_data_methods, ONLY: dbcsr_data_dev2host, &\n                                 dbcsr_data_ensure_size, &\n                                 dbcsr_data_get_size, &\n                                 dbcsr_data_get_type, &\n                                 dbcsr_data_new, &\n                                 dbcsr_data_release\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          int_4, &\n                          int_4_size, &\n                          int_8\n   USE dbcsr_mem_methods, ONLY: dbcsr_mempool_destruct, &\n                                dbcsr_mempool_limit_capacity, &\n                                dbcsr_memtype_setup\n   USE dbcsr_mm_types, ONLY: dbcsr_ps_acc_width, &\n                             dbcsr_ps_width, &\n                             stack_descriptor_type\n   USE dbcsr_toollib, ONLY: sort\n   USE dbcsr_types, ONLY: dbcsr_data_area_type, &\n                          dbcsr_data_obj, &\n                          dbcsr_memtype_type, &\n                          dbcsr_type, &\n                          dbcsr_work_type\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_accdrv'\n\n   LOGICAL, PARAMETER, PRIVATE :: careful_mod = .FALSE.\n\n! **************************************************************************************************\n   TYPE dbcsr_mm_accdrv_type\n      PRIVATE\n      TYPE(dbcsr_work_type), POINTER           :: product_wm => Null()\n      TYPE(dbcsr_data_obj)                     :: c_buffer = dbcsr_data_obj()\n      LOGICAL                                  :: c_area_copy = .TRUE.\n      LOGICAL                                  :: keep_product_data = .TRUE.\n      LOGICAL                                  :: do_gpu_c_redux = .FALSE.\n      INTEGER                                  :: nlayers = 1\n   END TYPE dbcsr_mm_accdrv_type\n\n! **************************************************************************************************\n\n   PUBLIC :: dbcsr_mm_accdrv_type\n   PUBLIC :: dbcsr_mm_accdrv_lib_init, dbcsr_mm_accdrv_lib_finalize\n   PUBLIC :: dbcsr_mm_accdrv_barrier\n   PUBLIC :: dbcsr_mm_accdrv_init, dbcsr_mm_accdrv_finalize\n   PUBLIC :: dbcsr_mm_accdrv_process\n   PUBLIC :: dbcsr_mm_accdrv_dev2host_init\n\n   ! ===== Global Accelerator Memory =====\n   ! Allocating memory on the device and host-pinned is slow.\n   ! Therefore, the memory is allocated once and stored in global variables.\n\n   TYPE stack_buffer_type\n      TYPE(acc_devmem_type)                  :: devmem = acc_devmem_type()\n      INTEGER, DIMENSION(:, :), POINTER       :: hostmem => Null()\n      TYPE(acc_event_type)                   :: ready = acc_event_type()\n      TYPE(acc_event_type)                   :: calculated = acc_event_type()\n      TYPE(acc_stream_type)                  :: stream = acc_stream_type()\n   END TYPE stack_buffer_type\n\n   TYPE thread_private_type\n      TYPE(stack_buffer_type), DIMENSION(:), POINTER     :: stack_buffers => Null()\n      TYPE(dbcsr_memtype_type)                           :: memtype_cbuffer = dbcsr_memtype_type()\n      ! ensure that array-elements are on different cache lines\n      INTEGER(kind=int_4), DIMENSION(64)                 :: padding = -1_int_4\n   END TYPE thread_private_type\n\n   TYPE(thread_private_type), SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: all_thread_privates\n   TYPE(acc_stream_type), SAVE, DIMENSION(:), POINTER     :: thread_streams => Null()\n\nCONTAINS\n\n   SUBROUTINE dbcsr_mm_accdrv_lib_init()\n      !! Initialize the library\n      INTEGER                                            :: nthreads\n\n      nthreads = 1\n!$    nthreads = OMP_GET_NUM_THREADS()\n\n!$OMP     MASTER\n      ALLOCATE (all_thread_privates(0:nthreads - 1))\n!$OMP     END MASTER\n!$OMP     BARRIER\n   END SUBROUTINE dbcsr_mm_accdrv_lib_init\n\n   SUBROUTINE dbcsr_mm_accdrv_lib_finalize()\n      !! Finalize the library\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_accdrv_lib_finalize'\n\n      INTEGER                                            :: error_handle, ithread\n      TYPE(thread_private_type), POINTER                 :: thread_privates\n\n      CALL timeset(routineN, error_handle)\n\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      thread_privates => all_thread_privates(ithread)\n\n      IF (ASSOCIATED(thread_privates%stack_buffers)) &\n         CALL deallocate_stackbuffers()\n\n      IF (ASSOCIATED(thread_privates%memtype_cbuffer%pool)) &\n         CALL dbcsr_mempool_destruct(thread_privates%memtype_cbuffer%pool)\n\n!$OMP     BARRIER\n!$OMP     MASTER\n      DEALLOCATE (all_thread_privates)\n!$OMP     END MASTER\n\n      !How much memory is still allocated on the card?\n      !istat = dbcsr_acc_dev_mem_info(mem_free, mem_avail)\n      !WRITE (*,*) \"after finalize acc mem: \",mem_free, mem_avail, istat\n\n      CALL deallocate_streams()\n\n      CALL timestop(error_handle)\n\n   END SUBROUTINE dbcsr_mm_accdrv_lib_finalize\n\n   SUBROUTINE dbcsr_mm_accdrv_init(this, product_wm, nlayers, keep_product_data)\n      !! Initializes a multiplication cycle for new set of C-blocks.\n      TYPE(dbcsr_mm_accdrv_type), INTENT(INOUT)          :: this\n      TYPE(dbcsr_work_type), POINTER                     :: product_wm\n      INTEGER, OPTIONAL                                  :: nlayers\n      LOGICAL, INTENT(IN)                                :: keep_product_data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_accdrv_init'\n\n      INTEGER                                            :: handle, ithread, my_nlayers\n      TYPE(dbcsr_data_obj)                               :: c_area\n      TYPE(thread_private_type), POINTER                 :: thread_privates\n\n      CALL timeset(routineN, handle)\n\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      thread_privates => all_thread_privates(ithread)\n\n      ! Setup global data which is reused in between multiplications\n      !------------------------------------------------------------------------\n      CALL setup_streams()\n      CALL setup_stackbuffers()\n\n      !Each thread has its own memtype with its own mempool\n      CALL dbcsr_memtype_setup(thread_privates%memtype_cbuffer, has_pool=.TRUE., acc_hostalloc=.TRUE., &\n                               acc_devalloc=.TRUE., acc_stream=thread_streams(ithread + 1))\n      my_nlayers = 1\n      IF (PRESENT(nlayers)) my_nlayers = nlayers\n      this%nlayers = my_nlayers\n      CALL dbcsr_mempool_limit_capacity(thread_privates%memtype_cbuffer%pool, capacity=my_nlayers)\n\n      ! Setup things for this particular multiplication\n      !------------------------------------------------------------------------\n      this%keep_product_data = keep_product_data\n      this%do_gpu_c_redux = .FALSE.\n      this%product_wm => product_wm\n      c_area = this%product_wm%data_area\n\n      CALL dbcsr_data_new(this%c_buffer, data_type=dbcsr_data_get_type(c_area), &\n                          data_size=dbcsr_data_get_size(c_area), memory_type=thread_privates%memtype_cbuffer)\n\n      CALL acc_devmem_setzero_bytes(this%c_buffer%d%acc_devmem, &\n                                    stream=this%c_buffer%d%memory_type%acc_stream)\n\n      CALL acc_event_record(this%c_buffer%d%acc_ready, &\n                            stream=this%c_buffer%d%memory_type%acc_stream)\n\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_mm_accdrv_init\n\n   SUBROUTINE setup_streams()\n      !! Helper routine used by dbcsr_mm_accdrv_init()\n      INTEGER :: nthreads\n\n      nthreads = 1\n!$    nthreads = OMP_GET_MAX_THREADS()\n\n!$OMP MASTER\n      CALL stream_array_force_size(thread_streams, \"Calc stream\", n=nthreads)\n!$OMP END MASTER\n! Other threads have to wait until streams are created\n!$OMP BARRIER\n\n   END SUBROUTINE setup_streams\n\n   SUBROUTINE deallocate_streams()\n      !! Helper routine used by setup_streams() and dbcsr_mm_accdrv_lib_finalize()\n\n!$OMP MASTER\n      CALL stream_array_force_size(thread_streams, \"Calc stream\", n=0)\n!$OMP END MASTER\n\n   END SUBROUTINE deallocate_streams\n\n   SUBROUTINE stream_array_force_size(streams, basename, n, events, priority)\n      !! Helper routine\n      TYPE(acc_stream_type), DIMENSION(:), POINTER       :: streams\n      CHARACTER(len=*), INTENT(IN)                       :: basename\n      INTEGER, INTENT(IN)                                :: n\n      TYPE(acc_event_type), DIMENSION(:), OPTIONAL, &\n         POINTER                                         :: events\n      INTEGER, INTENT(IN), OPTIONAL                      :: priority\n\n      CHARACTER(len=default_string_length)               :: name\n      INTEGER                                            :: i\n\n      IF (ASSOCIATED(streams)) THEN\n         IF (SIZE(streams) /= n) THEN\n            DO i = 1, SIZE(streams)\n               CALL acc_stream_destroy(streams(i))\n               IF (PRESENT(events)) CALL acc_event_destroy(events(i))\n            END DO\n            DEALLOCATE (streams)\n            IF (PRESENT(events)) DEALLOCATE (events)\n         END IF\n      END IF\n\n      IF (.NOT. ASSOCIATED(streams) .AND. n > 0) THEN\n         ALLOCATE (streams(n))\n         IF (PRESENT(events)) ALLOCATE (events(n))\n         DO i = 1, SIZE(streams)\n            WRITE (name, \"(A,I3)\") TRIM(basename), i\n            CALL acc_stream_create(streams(i), name=TRIM(name), priority=priority)\n            IF (PRESENT(events)) CALL acc_event_create(events(i))\n         END DO\n      END IF\n   END SUBROUTINE stream_array_force_size\n\n   SUBROUTINE setup_stackbuffers()\n      !! Helper routine used by dbcsr_mm_accdrv_init()\n      INTEGER                                            :: i, ithread, &\n                                                            my_thread_buffers\n      TYPE(thread_private_type), POINTER                 :: thread_privates\n\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      thread_privates => all_thread_privates(ithread)\n      my_thread_buffers = dbcsr_cfg%accdrv_thread_buffers%val\n\n      IF (ASSOCIATED(thread_privates%stack_buffers)) THEN\n         IF (SIZE(thread_privates%stack_buffers) /= my_thread_buffers) &\n            CALL deallocate_stackbuffers()\n      END IF\n\n      IF (.NOT. ASSOCIATED(thread_privates%stack_buffers)) THEN\n         ALLOCATE (thread_privates%stack_buffers(my_thread_buffers))\n         DO i = 1, my_thread_buffers\n            CALL acc_devmem_allocate_bytes(thread_privates%stack_buffers(i)%devmem, &\n                                           int_4_size*dbcsr_ps_acc_width*dbcsr_cfg%mm_stack_size%val)\n            thread_privates%stack_buffers(i)%stream = thread_streams(ithread + 1)\n            CALL acc_hostmem_allocate(thread_privates%stack_buffers(i)%hostmem, &\n                                      dbcsr_ps_acc_width, dbcsr_cfg%mm_stack_size%val, thread_privates%stack_buffers(i)%stream)\n            CALL acc_event_create(thread_privates%stack_buffers(i)%ready)\n            CALL acc_event_create(thread_privates%stack_buffers(i)%calculated)\n         END DO\n      END IF\n   END SUBROUTINE setup_stackbuffers\n\n   SUBROUTINE deallocate_stackbuffers()\n      !! Helper routine used by setup_stackbuffers() and dbcsr_mm_accdrv_lib_finalize()\n\n      INTEGER                                            :: i, ithread\n      TYPE(stack_buffer_type), DIMENSION(:), POINTER     :: stack_buffers\n\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      stack_buffers => all_thread_privates(ithread)%stack_buffers\n\n      DO i = 1, SIZE(stack_buffers)\n         CALL acc_devmem_deallocate(stack_buffers(i)%devmem)\n         CALL acc_hostmem_deallocate(stack_buffers(i)%hostmem, stack_buffers(i)%stream)\n         CALL acc_event_destroy(stack_buffers(i)%ready)\n         CALL acc_event_destroy(stack_buffers(i)%calculated)\n      END DO\n      DEALLOCATE (stack_buffers)\n   END SUBROUTINE deallocate_stackbuffers\n\n   SUBROUTINE dbcsr_mm_accdrv_dev2host_init(this)\n      !! Finalizes a multiplication cycle for a set of C-blocks.\n      TYPE(dbcsr_mm_accdrv_type), INTENT(INOUT)          :: this\n\n! Transfer C-data from device to host and adding it to host's result\n\n      IF (this%c_area_copy) THEN\n         CALL dbcsr_data_dev2host(this%c_buffer)\n         this%c_area_copy = .FALSE.\n      END IF\n   END SUBROUTINE dbcsr_mm_accdrv_dev2host_init\n\n   SUBROUTINE dbcsr_mm_accdrv_finalize(this)\n      !! Finalizes a multiplication cycle for a set of C-blocks.\n      TYPE(dbcsr_mm_accdrv_type), INTENT(INOUT)          :: this\n\n      TYPE(dbcsr_data_obj)                               :: c_area\n\n! Transfer C-data from device to host and adding it to host's result\n\n      IF (this%c_area_copy) THEN\n         CALL dbcsr_data_dev2host(this%c_buffer)\n      END IF\n      CALL acc_stream_synchronize(this%c_buffer%d%memory_type%acc_stream)\n\n      c_area = this%product_wm%data_area\n      IF (this%keep_product_data .OR. this%do_gpu_c_redux .OR. this%nlayers .GT. 1) THEN\n         CALL block_add(c_area, this%c_buffer)\n         CALL dbcsr_data_release(this%c_buffer)\n      ELSE\n         CALL dbcsr_data_release(this%product_wm%data_area)\n         this%product_wm%data_area = this%c_buffer\n      END IF\n\n   END SUBROUTINE dbcsr_mm_accdrv_finalize\n\n   SUBROUTINE stack_sort(params_in, params_out, stack_size)\n      !! Sort stack entries with respect to the c_id.\n      INTEGER, INTENT(IN)                                :: stack_size\n      INTEGER, &\n         DIMENSION(dbcsr_ps_acc_width, stack_size), &\n         INTENT(OUT)                                     :: params_out\n      INTEGER, DIMENSION(dbcsr_ps_width, stack_size), &\n         INTENT(IN)                                      :: params_in\n\n      INTEGER                                            :: i\n      INTEGER, DIMENSION(stack_size)                     :: c_sort, c_sort_ind\n\n! sort by the C-blocks\n\n      c_sort = params_in(6, :stack_size)\n      CALL sort(c_sort, stack_size, c_sort_ind)\n      DO i = 1, stack_size\n         params_out(1:3, i) = params_in(4:6, c_sort_ind(i))\n      END DO\n\n   END SUBROUTINE stack_sort\n\n   SUBROUTINE stack_binning(params_in, params_out, stack_size)\n      !! Roughly order stacks with a cheaper Binning-scheme by Peter Messmer\n      INTEGER, INTENT(IN)                                :: stack_size\n      INTEGER, &\n         DIMENSION(dbcsr_ps_acc_width, stack_size), &\n         INTENT(OUT)                                     :: params_out\n      INTEGER, DIMENSION(dbcsr_ps_width, stack_size), &\n         INTENT(IN)                                      :: params_in\n\n      INTEGER                                            :: bin_id, i, top\n      INTEGER, DIMENSION(dbcsr_cfg%accdrv_binning_nbins%val) :: bin_top\n      INTEGER, DIMENSION(dbcsr_ps_acc_width)             :: val\n      INTEGER, DIMENSION(dbcsr_ps_acc_width, dbcsr_cfg% &\n                         accdrv_binning_binsize%val, dbcsr_cfg% &\n                         accdrv_binning_nbins%val)                           :: bin_arr\n\n      bin_top = 1\n      top = 1\n      DO i = 1, stack_size\n         val(1:3) = params_in(4:6, i)\n         bin_id = 1 + INT(MODULO(INT(val(3)*(val(3) + 3), KIND=int_8), &\n                                 INT(dbcsr_cfg%accdrv_binning_nbins%val, KIND=int_8)))\n         IF (bin_top(bin_id) > dbcsr_cfg%accdrv_binning_binsize%val) THEN\n            params_out(1:3, top:top + bin_top(bin_id) - 2) = bin_arr(1:3, 1:bin_top(bin_id) - 1, bin_id)\n            top = top + bin_top(bin_id) - 1\n            bin_top(bin_id) = 1\n         END IF\n         bin_arr(1:3, bin_top(bin_id), bin_id) = val(1:3)\n         bin_top(bin_id) = bin_top(bin_id) + 1\n      END DO\n      DO i = 1, dbcsr_cfg%accdrv_binning_nbins%val\n         IF (bin_top(i) > 1) THEN\n            params_out(1:3, top:top + bin_top(i) - 2) = bin_arr(1:3, 1:bin_top(i) - 1, i)\n            top = top + bin_top(i) - 1\n         END IF\n      END DO\n\n   END SUBROUTINE stack_binning\n\n   SUBROUTINE dbcsr_mm_accdrv_barrier()\n      INTEGER                                            :: ithread\n\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      CALL acc_stream_synchronize(thread_streams(ithread + 1))\n   END SUBROUTINE dbcsr_mm_accdrv_barrier\n\n   SUBROUTINE dbcsr_mm_accdrv_process(this, left, right, params, stack_size, &\n      !! Processes a given stack using accelerator\n                                      stack_descr, success, generated_acc_untuned)\n      TYPE(dbcsr_mm_accdrv_type), INTENT(INOUT)          :: this\n      TYPE(dbcsr_type), INTENT(IN)                       :: left, right\n      INTEGER, INTENT(IN)                                :: stack_size\n      INTEGER, DIMENSION(dbcsr_ps_width, stack_size), &\n         INTENT(INOUT)                                   :: params\n      TYPE(stack_descriptor_type), INTENT(IN)            :: stack_descr\n      LOGICAL, INTENT(OUT)                               :: success, generated_acc_untuned\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_accdrv_process'\n\n      INTEGER                                            :: error_handle, error_handle2, &\n                                                            flop_per_entry, i, ithread, &\n                                                            stacked_datasize\n      INTEGER, DIMENSION(:, :), POINTER                  :: stackbuf_hostmem_cropped\n      TYPE(dbcsr_data_area_type), POINTER                :: a_area, b_area, c_area\n      TYPE(stack_buffer_type), DIMENSION(:), POINTER     :: stack_buffers\n      TYPE(stack_buffer_type), POINTER                   :: stackbuf\n\n      NULLIFY (stackbuf, stackbuf_hostmem_cropped, stack_buffers)\n\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      stack_buffers => all_thread_privates(ithread)%stack_buffers\n\n      CALL timeset(routineN, error_handle)\n\n      DO WHILE (.NOT. ASSOCIATED(stackbuf))\n         DO i = 1, SIZE(stack_buffers)\n            IF (acc_event_query(stack_buffers(i)%calculated)) THEN\n               stackbuf => stack_buffers(i)\n               EXIT\n            END IF\n         END DO\n      END DO\n\n      stacked_datasize = this%product_wm%datasize\n      CALL dbcsr_data_ensure_size(this%c_buffer, stacked_datasize, &\n                                  factor=default_resize_factor, zero_pad=.TRUE.)\n\n      !===========================================================================\n      ! sort the stack. Since this costs CPU time, only a good idea if the CPUs\n      ! are not too busy, or device gain is very large\n      CALL timeset(routineN//\"_sort\", error_handle2)\n      flop_per_entry = 2*stack_descr%max_m*stack_descr%max_n*stack_descr%max_k\n\n      IF (dbcsr_cfg%accdrv_stack_sort%val) THEN\n         IF (flop_per_entry > dbcsr_cfg%accdrv_min_flop_sort%val) THEN\n            CALL stack_sort(params, stackbuf%hostmem, stack_size)\n         ELSE\n            CALL stack_binning(params, stackbuf%hostmem, stack_size)\n         END IF\n      ELSE\n         DO i = 1, stack_size\n            stackbuf%hostmem(1:3, i) = params(4:6, i)\n         END DO\n      END IF\n\n      CALL timestop(error_handle2)\n\n      a_area => left%data_area%d\n      b_area => right%data_area%d\n      c_area => this%c_buffer%d\n\n      !WRITE (*,*) \"dbcsr_mm_accdrv_process: a_area%memory_type \", a_area%memory_type\n      !WRITE (*,*) \"dbcsr_mm_accdrv_process: b_area%memory_type \", b_area%memory_type\n      !WRITE (*,*) \"dbcsr_mm_accdrv_process: c_area%memory_type \", c_area%memory_type\n\n      IF (.NOT. acc_devmem_allocated(a_area%acc_devmem)) &\n         DBCSR_ABORT(\"dbcsr_mm_accdrv_process: a_area%acc_devmem not allocated\")\n      IF (.NOT. acc_devmem_allocated(b_area%acc_devmem)) &\n         DBCSR_ABORT(\"dbcsr_mm_accdrv_process: b_area%acc_devmem not allocated\")\n      IF (.NOT. acc_devmem_allocated(c_area%acc_devmem)) &\n         DBCSR_ABORT(\"dbcsr_mm_accdrv_process: c_area%acc_devmem not allocated\")\n\n      ! start uploading stacks; a, b, and c are ready by now\n      stackbuf_hostmem_cropped => stackbuf%hostmem(:, 1:stack_size)\n      CALL acc_devmem_host2dev(stackbuf%devmem, hostmem=stackbuf_hostmem_cropped, stream=stackbuf%stream)\n      CALL acc_event_record(stackbuf%ready, stream=stackbuf%stream)\n\n      ! We have to sync for the C area for the cuBLAS dgemm, used for large kernels\n      CALL acc_stream_wait_event(c_area%memory_type%acc_stream, stackbuf%ready)\n\n      CALL dbcsr_acc_do_mm_stack(params, stackbuf%devmem, stack_size, c_area%data_type, &\n                                 a_data=a_area%acc_devmem, &\n                                 b_data=b_area%acc_devmem, &\n                                 c_data=c_area%acc_devmem, &\n                                 m_max=stack_descr%max_m, &\n                                 n_max=stack_descr%max_n, &\n                                 k_max=stack_descr%max_k, &\n                                 def_mnk=stack_descr%defined_mnk, &\n                                 stack_stream=stackbuf%stream, &\n                                 c_stream=c_area%memory_type%acc_stream, &\n                                 success=success, &\n                                 generated_acc_untuned=generated_acc_untuned)\n\n      IF (success) THEN\n         CALL acc_event_record(stackbuf%calculated, stream=stackbuf%stream)\n      ELSE\n         IF (dbcsr_cfg%use_acc_g2g%val) THEN\n            DBCSR_ABORT(\"MPI G2G requires all kernels to be evaluated on the GPU!\")\n         END IF\n         this%do_gpu_c_redux = .TRUE.\n      END IF\n\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_mm_accdrv_process\n\nEND MODULE dbcsr_mm_accdrv\n"
  },
  {
    "path": "src/mm/dbcsr_mm_cannon.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved                            !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_cannon\n   !! First layer of the dbcsr matrix-matrix multiplication.\n   !! It performs the MPI parallelization according to Cannon's algorithm.\n   !! <b>Modification history:</b>\n   !! - 2010-02-23 Moved from dbcsr_operations\n   !! - 2011-11    Moved parameter-stack processing routines to\n   !! dbcsr_mm_methods.\n   !! - 2013-01    reorganized code (Ole Schuett)\n\n   USE dbcsr_acc_event, ONLY: acc_event_synchronize\n   USE dbcsr_acc_device, ONLY: acc_device_synchronize\n   USE dbcsr_acc_stream, ONLY: acc_stream_synchronize\n   USE dbcsr_acc_devmem, ONLY: acc_devmem_cptr\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_exists, &\n                                array_i1d_obj, &\n                                array_size\n   USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, &\n                                     dbcsr_block_copy_aa, &\n                                     dbcsr_block_real_neg, &\n                                     dbcsr_block_scale, &\n                                     dbcsr_block_transpose_aa, &\n                                     dbcsr_block_transpose\n   USE dbcsr_config, ONLY: dbcsr_cfg, &\n                           use_acc\n   USE dbcsr_data_methods, ONLY: &\n      dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_get_size, &\n      dbcsr_data_get_size_referenced, dbcsr_data_hold, dbcsr_data_host2dev, dbcsr_data_init, &\n      dbcsr_data_new, dbcsr_data_release, dbcsr_data_set_pointer, &\n      dbcsr_data_set_size_referenced, dbcsr_scalar_are_equal, dbcsr_scalar_negative, &\n      dbcsr_scalar_one, dbcsr_get_data_p_s, dbcsr_get_data_p_d, dbcsr_get_data_p_c, dbcsr_get_data_p_z\n   USE dbcsr_data_types, ONLY: dbcsr_datatype_sizeof\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, &\n                                 dbcsr_distribution_has_threads, &\n                                 dbcsr_distribution_max_col_dist, &\n                                 dbcsr_distribution_max_row_dist, &\n                                 dbcsr_distribution_mp, &\n                                 dbcsr_distribution_row_dist\n   USE dbcsr_index_operations, ONLY: dbcsr_count_row_index, &\n                                     dbcsr_has_local_row_index, &\n                                     dbcsr_index_prune_deleted, &\n                                     dbcsr_make_index_list, &\n                                     dbcsr_make_index_local_row, &\n                                     dbcsr_repoint_index\n   USE dbcsr_io, ONLY: dbcsr_print\n   USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, &\n                                        dbcsr_iterator_next_block, &\n                                        dbcsr_iterator_start, &\n                                        dbcsr_iterator_stop\n   USE dbcsr_mem_methods, ONLY: dbcsr_mempool_limit_capacity\n   USE dbcsr_methods, ONLY: &\n      dbcsr_destroy_array, dbcsr_distribution, dbcsr_get_data_type, dbcsr_get_index_memory_type, &\n      dbcsr_has_symmetry, dbcsr_image_dist_hold, dbcsr_image_dist_init, &\n      dbcsr_image_dist_release, dbcsr_max_col_size, dbcsr_max_row_size, dbcsr_nblkcols_local, &\n      dbcsr_nblkrows_local, dbcsr_nblkrows_total, dbcsr_release, dbcsr_valid_index\n   USE dbcsr_mm_common, ONLY: &\n      acc_transpose_blocks, calculate_norms, count_mpi_statistics, dbcsr_mm_multrec_type_p, &\n      dbcsr_mpi_statistics, enumerate_blk_sizes, huge_norm, local_filter, max_memory, &\n      memtype_abpanel_1, memtype_abpanel_2, memtype_mpi_buffer, memtype_trsbuffer_1, &\n      memtype_normsbuf, memtype_offsetsbuf, memtype_nelemsbuf, acc_calculate_norms, &\n      memtype_trsbuffer_2, product_matrix_size_guess, rec_sort_index, setup_buffer_matrix\n   USE dbcsr_mm_dist_operations, ONLY: dbcsr_get_local_vcols, &\n                                       dbcsr_get_local_vrows, &\n                                       dbcsr_reset_vlocals, &\n                                       image_calculator\n   USE dbcsr_mm_multrec, ONLY: dbcsr_mm_multrec_finalize, &\n                               dbcsr_mm_multrec_init, &\n                               dbcsr_mm_multrec_multiply\n   USE dbcsr_mp_methods, ONLY: &\n      dbcsr_mp_grid_setup, dbcsr_mp_group, dbcsr_mp_has_subgroups, dbcsr_mp_my_col_group, &\n      dbcsr_mp_my_row_group, dbcsr_mp_mynode, dbcsr_mp_mypcol, dbcsr_mp_myprow, dbcsr_mp_npcols, &\n      dbcsr_mp_nprows, dbcsr_mp_numnodes, dbcsr_mp_pgrid\n   USE dbcsr_mp_operations, ONLY: dbcsr_irecv_any, &\n                                  dbcsr_isend_any, &\n                                  hybrid_alltoall_any, &\n                                  hybrid_alltoall_i1\n   USE dbcsr_operations, ONLY: dbcsr_copy, &\n                               dbcsr_crop_matrix\n   USE dbcsr_ptr_util, ONLY: ensure_array_size\n   USE dbcsr_transformations, ONLY: dbcsr_make_dense_low\n   USE dbcsr_types, ONLY: &\n      dbcsr_2d_array_type, dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_imagedistribution_obj, &\n      dbcsr_iterator, dbcsr_memtype_type, dbcsr_meta_size, dbcsr_mp_obj, dbcsr_scalar_type, &\n      dbcsr_slot_home_coli, dbcsr_slot_home_pcol, dbcsr_slot_home_prow, dbcsr_slot_home_rowi, &\n      dbcsr_slot_home_vpcol, dbcsr_slot_home_vprow, dbcsr_slot_size, dbcsr_type, &\n      dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_int_4, dbcsr_type_no_symmetry, &\n      dbcsr_type_real_4, dbcsr_type_real_8\n   USE dbcsr_dist_util, ONLY: count_bins, &\n                              dbcsr_checksum\n   USE dbcsr_work_operations, ONLY: dbcsr_create, &\n                                    dbcsr_special_finalize, &\n                                    dbcsr_work_create\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_8, &\n                          real_4, &\n                          real_8, &\n                          sp\n   USE dbcsr_machine, ONLY: default_output_unit, &\n                            m_memory\n   USE dbcsr_mpiwrap, ONLY: mp_allgather, &\n                            mp_alltoall, &\n                            mp_environ, &\n                            mp_irecv, &\n                            mp_isend, &\n                            mp_request_null, &\n                            mp_sum, &\n                            mp_testany, &\n                            mp_waitall, &\n                            mp_comm_type, &\n                            mp_request_type\n\n   USE ISO_C_BINDING, ONLY: C_F_POINTER\n\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_cannon'\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   INTERFACE dbcsr_switch\n      MODULE PROCEDURE dbcsr_switch_sets\n      MODULE PROCEDURE dbcsr_switch_d_ptrs\n   END INTERFACE\n\n   PUBLIC :: multiply_cannon, make_m2s, &\n             multiply_cannon_g2g\n\nCONTAINS\n\n   SUBROUTINE make_m2s(matrix, m2s, rdist, dense_rdist, &\n      !! Make images from the matrix (left or right)\n                       use_dense_mult, ab_dense, predistribute, &\n                       f_k, l_k, f_row, l_row, f_col, l_col, &\n                       row_blk_size, col_blk_size, &\n                       k_vmap, m_map, n_map, &\n                       alpha)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      TYPE(dbcsr_2d_array_type), INTENT(OUT), POINTER    :: m2s\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: rdist, dense_rdist\n      LOGICAL, INTENT(IN)                                :: use_dense_mult, ab_dense\n      CHARACTER, INTENT(IN)                              :: predistribute\n      INTEGER, INTENT(IN)                                :: f_k, l_k, f_row, l_row, f_col, l_col\n      TYPE(array_i1d_obj), INTENT(INOUT)                 :: row_blk_size, col_blk_size\n      TYPE(array_i1d_obj), INTENT(IN)                    :: k_vmap, m_map, n_map\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: alpha\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'make_m2s'\n      INTEGER                                            :: handle, i, im, j, jm\n      INTEGER, DIMENSION(4)                              :: f_crop\n      LOGICAL                                            :: do_scale, thread_redist\n      TYPE(array_i1d_obj)                                :: col_map, row_map\n      TYPE(dbcsr_type)                                   :: dense_template, matrix_tmp\n\n      CALL timeset(routineN, handle)\n      ALLOCATE (m2s)\n      do_scale = .FALSE.\n      IF (PRESENT(alpha)) THEN\n         IF (.NOT. dbcsr_scalar_are_equal(alpha, dbcsr_scalar_one(alpha%data_type))) THEN\n            do_scale = .TRUE.\n         END IF\n      END IF\n\n      IF (do_scale) THEN\n         ! Copy and scale matrix if alpha is not 1.\n         CALL dbcsr_make_images(matrix, m2s, rdist, &\n                                predistribute=predistribute, &\n                                no_copy_data=use_dense_mult, scale_value=alpha)\n      ELSE\n         CALL dbcsr_make_images(matrix, m2s, rdist, &\n                                predistribute=predistribute, &\n                                no_copy_data=use_dense_mult)\n      END IF\n\n      im = SIZE(m2s%mats, 1)\n      jm = SIZE(m2s%mats, 2)\n      SELECT CASE (predistribute)\n      CASE ('L')\n         f_crop = (/f_row, l_row, f_k, l_k/)\n         row_map = m_map\n         col_map = k_vmap\n         thread_redist = .TRUE.\n      CASE default\n         f_crop = (/f_k, l_k, f_col, l_col/)\n         row_map = k_vmap\n         col_map = n_map\n         thread_redist = .FALSE.\n      END SELECT\n\n      ! Post-processing of images.\n      DO i = 1, im\n         DO j = 1, jm\n            CALL dbcsr_reset_vlocals(m2s%mats(i, j), rdist)\n            ! Crop if necessary\n            IF (ANY(f_crop .NE. 0)) THEN\n               matrix_tmp = dbcsr_type()\n               CALL dbcsr_crop_matrix(matrix_tmp, m2s%mats(i, j), &\n                                      full_row_bounds=f_crop(1:2), &\n                                      full_column_bounds=f_crop(3:4), &\n                                      shallow_data=.FALSE.)\n               CALL dbcsr_release(m2s%mats(i, j))\n               CALL dbcsr_copy(m2s%mats(i, j), matrix_tmp, shallow_data=.TRUE.)\n               CALL dbcsr_release(matrix_tmp)\n               CALL dbcsr_reset_vlocals(m2s%mats(i, j), rdist)\n            END IF\n         END DO\n      END DO\n\n      IF (ab_dense) THEN\n         dense_template = dbcsr_type()\n         CALL dbcsr_create(dense_template, template=matrix, &\n                           dist=dense_rdist%i%main, &\n                           row_blk_size_obj=row_blk_size, col_blk_size_obj=col_blk_size)\n         CALL dbcsr_make_images_dense(m2s, dense_rdist, &\n                                      row_map=row_map, col_map=col_map, &\n                                      join_cols=use_dense_mult, join_rows=ab_dense, &\n                                      new_template=dense_template)\n         CALL dbcsr_image_dist_release(rdist)\n         rdist = dense_rdist\n         CALL dbcsr_image_dist_hold(rdist)\n         DO i = 1, im\n            DO j = 1, jm\n               CALL dbcsr_reset_vlocals(m2s%mats(i, j), rdist)\n            END DO\n         END DO\n      END IF\n\n      DO i = 1, im\n         DO j = 1, jm\n            ! Convert to local-row index\n            CALL dbcsr_make_index_local_row(m2s%mats(i, j))\n            ! Convert to list index\n            CALL dbcsr_make_index_list(m2s%mats(i, j), thread_redist=thread_redist)\n         END DO\n      END DO\n\n      IF (ab_dense) THEN\n         CALL dbcsr_image_dist_release(dense_rdist)\n         CALL dbcsr_release(dense_template)\n      END IF\n\n      CALL timestop(handle)\n   END SUBROUTINE make_m2s\n\n   SUBROUTINE dbcsr_make_images(source, normalized, target_image_dist, &\n                                predistribute, no_copy_data, scale_value)\n      !! Creates row and column images of a matrix.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: source\n         !! input matrix\n      TYPE(dbcsr_2d_array_type), INTENT(OUT)             :: normalized\n         !! image array of the normalized matrix\n      TYPE(dbcsr_imagedistribution_obj), INTENT(IN)      :: target_image_dist\n         !! normalize to this image distribution\n      CHARACTER, INTENT(IN), OPTIONAL                    :: predistribute\n         !! predistribute data for multiplication\n      LOGICAL, INTENT(IN), OPTIONAL                      :: no_copy_data\n         !! try to not merge data at the end\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: scale_value\n         !! scale with this value\n\n!   ---------------------------------------------------------------------------\n\n      IF (dbcsr_cfg%use_mpi_rma%val) &\n         DBCSR_ABORT(\"RMA algo not supported here!\")\n      IF (.NOT. dbcsr_valid_index(source)) &\n         DBCSR_ABORT(\"Matrix not initialized.\")\n      CALL make_images(source, normalized, &\n                       target_image_dist, desymmetrize=dbcsr_has_symmetry(source), &\n                       predistribute=predistribute, &\n                       no_copy_data=no_copy_data, &\n                       scale_value=scale_value)\n      normalized%image_dist = target_image_dist\n      CALL dbcsr_image_dist_hold(normalized%image_dist)\n   END SUBROUTINE dbcsr_make_images\n\n   SUBROUTINE make_images(ism, ums, target_imgdist, desymmetrize, predistribute, &\n                          no_copy_data, scale_value)\n      !! Makes column-based and row-based images of a matrix.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: ism\n         !! input symmetric matrix\n      TYPE(dbcsr_2d_array_type), INTENT(OUT)             :: ums\n         !! normalized matrices\n      TYPE(dbcsr_imagedistribution_obj), INTENT(IN)      :: target_imgdist\n         !! image distribution to normalize to\n      LOGICAL, INTENT(IN), OPTIONAL                      :: desymmetrize\n         !! desymmetrize a symmetric matrix\n      CHARACTER, INTENT(IN), OPTIONAL                    :: predistribute\n         !! predistribute data for multiplication\n      LOGICAL, INTENT(IN), OPTIONAL                      :: no_copy_data\n         !! try to not merge data at the end\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: scale_value\n         !! scale with this value\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'make_images'\n      INTEGER, PARAMETER                                 :: metalen = 5\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      CHARACTER                                          :: predist_type, predist_type_fwd\n      INTEGER :: blk, blk_l, blk_p, bp, col, col_img, col_size, coli, data_type, dst_p, handle, &\n                 handle2, ithread, ncol_images, nrow_images, nsymmetries, nthreads, numproc, &\n                 nze, pcol, prow, row, row_img, row_size, rowi, sd_pos, sm_pos, src_p, stored_blk_p, &\n                 stored_col, stored_row, symmetry_i, tr_col_size, tr_row_size, vcol, vrow\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: myt_sdp, myt_smp, rd_disp, recv_meta, &\n                                                            rm_disp, sd_disp, sdp, send_meta, &\n                                                            sm_disp, smp\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: all_total_send_offset, blk_ps, blks, &\n                                                            myt_total_send_count, &\n                                                            total_recv_count, total_send_count\n      INTEGER, ALLOCATABLE, DIMENSION(:, :, :, :)        :: myt_send_count, recv_count, send_count\n      INTEGER, DIMENSION(:), CONTIGUOUS, POINTER         :: col_blk_size, col_dist, col_img_dist, &\n                                                            row_blk_size, row_dist, row_img_dist\n      INTEGER, DIMENSION(:, :), CONTIGUOUS, POINTER      :: blacs2mpi\n      LOGICAL                                            :: nocopy, tr\n      TYPE(dbcsr_data_obj)                               :: received_data_area, recv_data_area, &\n                                                            send_data_area\n      TYPE(dbcsr_distribution_obj)                       :: old_dist, target_dist\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_memtype_type)                           :: data_memory_type\n      TYPE(dbcsr_mp_obj)                                 :: mp_obj\n      TYPE(dbcsr_scalar_type)                            :: scale_neg_one\n      TYPE(dbcsr_type)                                   :: sm\n      TYPE(mp_comm_type)                                 :: mp_group\n\n!   ---------------------------------------------------------------------------\n! Check input matrix\n! Set convenient variables to access input matrix info\n!\n\n      CALL timeset(routineN, handle)\n      nocopy = .FALSE.\n      IF (PRESENT(no_copy_data)) nocopy = no_copy_data\n      sm = ism\n      nsymmetries = 1\n      IF (PRESENT(desymmetrize)) THEN\n         IF (desymmetrize .AND. sm%symmetry) THEN\n            nsymmetries = 2\n         END IF\n      END IF\n      SELECT CASE (predistribute)\n      CASE ('L', 'l')\n         predist_type = 'L'\n         predist_type_fwd = 'l'\n      CASE ('R', 'r')\n         predist_type = 'R'\n         predist_type_fwd = 'r'\n      CASE default\n         DBCSR_ABORT(\"Incorrect pre-shift specifier.\")\n      END SELECT\n      data_type = sm%data_type\n      IF (data_type .NE. dbcsr_type_real_8 .AND. &\n          data_type .NE. dbcsr_type_real_4 .AND. &\n          data_type .NE. dbcsr_type_complex_8 .AND. &\n          data_type .NE. dbcsr_type_complex_4) &\n         DBCSR_ABORT(\"Invalid data type.\")\n      scale_neg_one = dbcsr_scalar_negative(dbcsr_scalar_one(data_type))\n      row_blk_size => array_data(sm%row_blk_size)\n      col_blk_size => array_data(sm%col_blk_size)\n      old_dist = dbcsr_distribution(ism)\n      target_dist = target_imgdist%i%main\n      row_dist => dbcsr_distribution_row_dist(target_dist)\n      col_dist => dbcsr_distribution_col_dist(target_dist)\n      IF (sm%symmetry) THEN\n         IF (SIZE(row_dist) .NE. SIZE(col_dist)) &\n            DBCSR_WARN('Unequal row and column distributions for symmetric matrix.')\n      END IF\n      nrow_images = target_imgdist%i%row_decimation\n      IF (nrow_images .GT. 1) THEN\n         row_img_dist => array_data(target_imgdist%i%row_image)\n      ELSE\n         NULLIFY (row_img_dist)\n      END IF\n      ncol_images = target_imgdist%i%col_decimation\n      IF (ncol_images .GT. 1) THEN\n         col_img_dist => array_data(target_imgdist%i%col_image)\n      ELSE\n         NULLIFY (col_img_dist)\n      END IF\n      mp_obj = dbcsr_distribution_mp(target_dist)\n      blacs2mpi => dbcsr_mp_pgrid(mp_obj)\n      numproc = dbcsr_mp_numnodes(mp_obj)\n      mp_group = dbcsr_mp_group(mp_obj)\n      IF (dbcsr_distribution_max_row_dist(old_dist) .GT. UBOUND(blacs2mpi, 1)) &\n         DBCSR_ABORT('Row distribution references unexistent processor rows')\n      IF (dbg) THEN\n         IF (dbcsr_distribution_max_row_dist(old_dist) .NE. UBOUND(blacs2mpi, 1)) &\n            DBCSR_WARN('Range of row distribution not equal to processor rows')\n      END IF\n      IF (dbcsr_distribution_max_col_dist(old_dist) .GT. UBOUND(blacs2mpi, 2)) &\n         DBCSR_ABORT('Col distribution references unexistent processor cols')\n      IF (dbg) THEN\n         IF (dbcsr_distribution_max_col_dist(old_dist) .NE. UBOUND(blacs2mpi, 2)) &\n            DBCSR_WARN('Range of col distribution not equal to processor cols')\n      END IF\n\n      ! Check threads configuration\n!$    IF (.NOT. dbcsr_distribution_has_threads(old_dist)) &\n!$       DBCSR_ABORT(\"Thread distribution not defined\")\n\n      ! Allocate shared temporary buffers\n      !\n      ALLOCATE (send_count(2, nrow_images, ncol_images, 0:numproc - 1)); send_count = 0\n      ALLOCATE (recv_count(2, nrow_images, ncol_images, 0:numproc - 1))\n      ALLOCATE (total_send_count(2, 0:numproc - 1)); total_send_count = 0\n      ALLOCATE (total_recv_count(2, 0:numproc - 1))\n      ALLOCATE (sdp(0:numproc - 1))\n      ALLOCATE (smp(0:numproc - 1))\n      ALLOCATE (sd_disp(0:numproc - 1)); sd_disp(0) = 1\n      ALLOCATE (sm_disp(0:numproc - 1)); sm_disp(0) = 1\n      ALLOCATE (rd_disp(0:numproc - 1)); rd_disp(0) = 1\n      ALLOCATE (rm_disp(0:numproc - 1)); rm_disp(0) = 1\n      ALLOCATE (all_total_send_offset(2, 0:numproc - 1))\n      ALLOCATE (blk_ps(nrow_images, ncol_images)); blk_ps = 1\n      ALLOCATE (blks(nrow_images, ncol_images)); blks = 1\n      !\n      ! Allocate and init mats\n      !\n      ALLOCATE (ums%mats(nrow_images, ncol_images))\n      data_memory_type = memtype_abpanel_1\n      DO row_img = 1, nrow_images\n         DO col_img = 1, ncol_images\n            ums%mats(row_img, col_img) = dbcsr_type()\n            CALL dbcsr_create(ums%mats(row_img, col_img), \"imaged \"//sm%name, &\n                              target_dist, &\n                              dbcsr_type_no_symmetry, &\n                              row_blk_size_obj=sm%row_blk_size, col_blk_size_obj=sm%col_blk_size, &\n                              nze=0, data_type=data_type, &\n                              max_rbs=sm%max_rbs, max_cbs=sm%max_cbs, &\n                              row_blk_offset=sm%row_blk_offset, col_blk_offset=sm%col_blk_offset, &\n                              thread_dist=sm%dist, &\n                              data_memory_type=data_memory_type, &\n                              index_memory_type=memtype_mpi_buffer)\n            ums%mats(row_img, col_img)%negate_real = sm%negate_real\n            ums%mats(row_img, col_img)%negate_imaginary = sm%negate_imaginary\n         END DO\n      END DO\n\n      nthreads = 1\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP PRIVATE (ithread, symmetry_i, row_img, col_img, &\n!$OMP          myt_send_count, myt_total_send_count, &\n!$OMP          iter, row, col, blk, row_size, col_size, stored_row, stored_col, &\n!$OMP          prow, pcol, rowi, coli, vrow, vcol, dst_p, nze, myt_smp, myt_sdp, &\n!$OMP          blk_p, bp, sd_pos, sm_pos,tr, &\n!$OMP          tr_row_size, tr_col_size) &\n!$OMP SHARED (nthreads, nsymmetries, row_img_dist, col_img_dist, &\n!$OMP         nrow_images, ncol_images, numproc, scale_value, &\n!$OMP         ums, sm, ism, target_imgdist, row_dist, col_dist,&\n!$OMP         predist_type_fwd, blacs2mpi, row_blk_size, col_blk_size, &\n!$OMP         send_count, recv_count, handle2,mp_group, &\n!$OMP         total_send_count, total_recv_count, recv_data_area, nocopy, &\n!$OMP         data_type, recv_meta, send_data_area, send_meta, &\n!$OMP         sd_disp, sm_disp, rd_disp, rm_disp, all_total_send_offset, blk_ps, blks, &\n!$OMP         received_data_area, scale_neg_one, memtype_abpanel_1)\n      ithread = 0\n!$    ithread = omp_get_thread_num()\n!$OMP MASTER\n!$    nthreads = omp_get_num_threads()\n!$OMP END MASTER\n\n      ! Allocate thread private data\n      !\n      ALLOCATE (myt_send_count(2, nrow_images, ncol_images, 0:numproc - 1)); myt_send_count(:, :, :, :) = 0\n      ALLOCATE (myt_total_send_count(2, 0:numproc - 1))\n      ! Thread-local pointers of the current adding position into the send buffers\n      ALLOCATE (myt_smp(0:numproc - 1), myt_sdp(0:numproc - 1))\n\n      ! Count sizes for sending\n      !\n      CALL dbcsr_iterator_start(iter, ism, shared=.TRUE.)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, blk, &\n                                        row_size=row_size, col_size=col_size)\n         nze = row_size*col_size\n         IF (nze .EQ. 0) CYCLE\n         DO symmetry_i = 1, nsymmetries\n            IF (symmetry_i .EQ. 1) THEN\n               stored_row = row; stored_col = col\n            ELSE\n               IF (row .EQ. col) CYCLE\n               stored_row = col; stored_col = row\n            END IF\n            ! Where do we send this block?\n            row_img = 1\n            IF (nrow_images .GT. 1) row_img = row_img_dist(stored_row)\n            col_img = 1\n            IF (ncol_images .GT. 1) col_img = col_img_dist(stored_col)\n            CALL image_calculator(target_imgdist, &\n                                  prow=prow, rowi=rowi, &\n                                  pcol=pcol, coli=coli, &\n                                  vprow=vrow, vpcol=vcol, &\n                                  myprow=row_dist(stored_row), myrowi=row_img, &\n                                  mypcol=col_dist(stored_col), mycoli=col_img, &\n                                  shifting=predist_type_fwd)\n            dst_p = blacs2mpi(prow, pcol)\n            ! These counts are meant for the thread that processes this row.\n            myt_send_count(1, rowi, coli, dst_p) = &\n               myt_send_count(1, rowi, coli, dst_p) + 1\n            myt_send_count(2, rowi, coli, dst_p) = &\n               myt_send_count(2, rowi, coli, dst_p) + nze\n         END DO ! symmetry_i\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      DO dst_p = 0, numproc - 1\n         myt_total_send_count(1, dst_p) = SUM(myt_send_count(1, :, :, dst_p))\n         myt_total_send_count(2, dst_p) = SUM(myt_send_count(2, :, :, dst_p))\n      END DO\n      ! Merge the send counts\n!$OMP CRITICAL\n      send_count(:, :, :, :) = send_count(:, :, :, :) + myt_send_count(:, :, :, :)\n      total_send_count(:, :) = total_send_count(:, :) + myt_total_send_count(:, :)\n!$OMP END CRITICAL\n!$OMP BARRIER\n!$OMP MASTER\n      CALL timeset(routineN//\"_sizes\", handle2)\n      CALL mp_alltoall(send_count, recv_count, 2*nrow_images*ncol_images, &\n                       mp_group)\n      CALL timestop(handle2)\n!$OMP END MASTER\n!$OMP BARRIER\n      ! Fill in the meta data structures and copy the data.\n!$OMP DO\n      DO dst_p = 0, numproc - 1\n         total_recv_count(1, dst_p) = SUM(recv_count(1, :, :, dst_p))\n         total_recv_count(2, dst_p) = SUM(recv_count(2, :, :, dst_p))\n      END DO\n!$OMP MASTER\n      ! Allocate data structures needed for data exchange.\n      CALL dbcsr_data_init(recv_data_area)\n      CALL dbcsr_data_init(send_data_area)\n      IF (nrow_images .EQ. 1 .AND. ncol_images .EQ. 1 .OR. nocopy) THEN\n         ! For some cases the faster dbcsr_special_finalize(reshuffle=.FALSE.) can be used.\n         ! This basically makes this working matrix the actual data-area.\n         ! Hence, for those cases we have to use data_memory_type already here.\n         CALL dbcsr_data_new(recv_data_area, data_type, SUM(total_recv_count(2, :)), memory_type=memtype_abpanel_1)\n         ! Some MPI implementations have high overhead when encountering a new buffer.\n         ! Therefore we also use the memory pool for the send buffer.\n         CALL dbcsr_data_new(send_data_area, data_type, SUM(total_send_count(2, :)), memory_type=memtype_abpanel_1)\n      ELSE\n         CALL dbcsr_data_new(recv_data_area, data_type, SUM(total_recv_count(2, :)))\n         CALL dbcsr_data_new(send_data_area, data_type, SUM(total_send_count(2, :)))\n      END IF\n      ALLOCATE (recv_meta(metalen*SUM(total_recv_count(1, :))))\n      ALLOCATE (send_meta(metalen*SUM(total_send_count(1, :))))\n      ! Calculate displacements for processors needed for the exchanges.\n      DO dst_p = 1, numproc - 1\n         sm_disp(dst_p) = sm_disp(dst_p - 1) &\n                          + metalen*total_send_count(1, dst_p - 1)\n         sd_disp(dst_p) = sd_disp(dst_p - 1) &\n                          + total_send_count(2, dst_p - 1)\n         rm_disp(dst_p) = rm_disp(dst_p - 1) &\n                          + metalen*total_recv_count(1, dst_p - 1)\n         rd_disp(dst_p) = rd_disp(dst_p - 1) &\n                          + total_recv_count(2, dst_p - 1)\n      END DO\n      myt_smp(:) = sm_disp(:)\n      myt_sdp(:) = sd_disp(:)\n      IF (nthreads .GT. 1) THEN\n         all_total_send_offset(1, :) = myt_smp(:) + metalen*myt_total_send_count(1, :)\n         all_total_send_offset(2, :) = myt_sdp(:) + myt_total_send_count(2, :)\n      END IF\n!$OMP END MASTER\n!$OMP BARRIER\n      IF (ithread .GT. 0) THEN\n!$OMP CRITICAL\n         myt_smp(:) = all_total_send_offset(1, :)\n         myt_sdp(:) = all_total_send_offset(2, :)\n         all_total_send_offset(1, :) &\n            = all_total_send_offset(1, :) + metalen*myt_total_send_count(1, :)\n         all_total_send_offset(2, :) &\n            = all_total_send_offset(2, :) + myt_total_send_count(2, :)\n!$OMP END CRITICAL\n      ELSE\n         CALL dbcsr_data_init(received_data_area)\n         received_data_area = recv_data_area\n         CALL dbcsr_data_hold(received_data_area)\n         DO row_img = 1, nrow_images\n            DO col_img = 1, ncol_images\n               CALL dbcsr_work_create(ums%mats(row_img, col_img), &\n                                      SUM(recv_count(1, row_img, col_img, :)), n=1)\n               CALL dbcsr_data_hold(received_data_area)\n               CALL dbcsr_data_release(ums%mats(row_img, col_img)%wms(1)%data_area)\n               ums%mats(row_img, col_img)%wms(1)%data_area = received_data_area\n            END DO\n         END DO\n      END IF\n!$OMP BARRIER\n      ! Add timing call to the packing of the send buffers\n      !\n      CALL timeset(routineN//\"_pack\", handle2)\n      ! Copies metadata and actual data to be sent into the send buffers.\n      CALL dbcsr_iterator_start(iter, ism, shared=.TRUE.)\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         CALL prepare_buffers_s(sm%negate_real, sm%negate_imaginary, &\n                                iter, row, col, blk, blk_p, bp, &\n                                row_size, col_size, nze, nsymmetries, symmetry_i, &\n                                stored_row, stored_col, tr_row_size, tr_col_size, tr, &\n                                row_img, col_img, nrow_images, ncol_images, &\n                                row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, &\n                                target_imgdist, prow, pcol, rowi, coli, &\n                                row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, &\n                                sd_pos, myt_sdp, send_meta, sd_disp, &\n                                dbcsr_get_data_p_s(sm%data_area), &\n                                send_data_area, scale_neg_one, scale_value)\n      CASE (dbcsr_type_real_8)\n         CALL prepare_buffers_d(sm%negate_real, sm%negate_imaginary, &\n                                iter, row, col, blk, blk_p, bp, &\n                                row_size, col_size, nze, nsymmetries, symmetry_i, &\n                                stored_row, stored_col, tr_row_size, tr_col_size, tr, &\n                                row_img, col_img, nrow_images, ncol_images, &\n                                row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, &\n                                target_imgdist, prow, pcol, rowi, coli, &\n                                row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, &\n                                sd_pos, myt_sdp, send_meta, sd_disp, &\n                                dbcsr_get_data_p_d(sm%data_area), &\n                                send_data_area, scale_neg_one, scale_value)\n      CASE (dbcsr_type_complex_4)\n         CALL prepare_buffers_c(sm%negate_real, sm%negate_imaginary, &\n                                iter, row, col, blk, blk_p, bp, &\n                                row_size, col_size, nze, nsymmetries, symmetry_i, &\n                                stored_row, stored_col, tr_row_size, tr_col_size, tr, &\n                                row_img, col_img, nrow_images, ncol_images, &\n                                row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, &\n                                target_imgdist, prow, pcol, rowi, coli, &\n                                row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, &\n                                sd_pos, myt_sdp, send_meta, sd_disp, &\n                                dbcsr_get_data_p_c(sm%data_area), &\n                                send_data_area, scale_neg_one, scale_value)\n      CASE (dbcsr_type_complex_8)\n         CALL prepare_buffers_z(sm%negate_real, sm%negate_imaginary, &\n                                iter, row, col, blk, blk_p, bp, &\n                                row_size, col_size, nze, nsymmetries, symmetry_i, &\n                                stored_row, stored_col, tr_row_size, tr_col_size, tr, &\n                                row_img, col_img, nrow_images, ncol_images, &\n                                row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, &\n                                target_imgdist, prow, pcol, rowi, coli, &\n                                row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, &\n                                sd_pos, myt_sdp, send_meta, sd_disp, &\n                                dbcsr_get_data_p_z(sm%data_area), &\n                                send_data_area, scale_neg_one, scale_value)\n      END SELECT\n      CALL dbcsr_iterator_stop(iter)\n\n      ! Deallocate thread private data\n      !\n      DEALLOCATE (myt_send_count)\n      DEALLOCATE (myt_total_send_count)\n      DEALLOCATE (myt_smp, myt_sdp)\n\n      CALL timestop(handle2)\n!$OMP END PARALLEL\n\n      ! Exchange the data and metadata structures. In the interesting cases (square grids, row col distribution same),\n      ! there are only very few processors that need to exchange data.\n      ! The hybrid_alltoall deals with this by doing point to point communication\n      CALL timeset(routineN//\"_data\", handle2)\n      CALL hybrid_alltoall_any(send_data_area, total_send_count(2, :), sd_disp(:) - 1, &\n                               recv_data_area, total_recv_count(2, :), rd_disp(:) - 1, &\n                               mp_obj, &\n                               most_ptp=.TRUE., remainder_ptp=.TRUE., no_hybrid=.FALSE.)\n      CALL hybrid_alltoall_i1( &\n         send_meta(:), metalen*total_send_count(1, :), sm_disp(:) - 1, &\n         recv_meta(:), metalen*total_recv_count(1, :), rm_disp(:) - 1, &\n         most_ptp=.TRUE., remainder_ptp=.TRUE., no_hybrid=.FALSE., &\n         mp_env=mp_obj)\n      CALL timestop(handle2)\n\n      ! Now create the work index and/or copy the relevant data from the\n      ! receive buffer into the local indices.\n      !\n      DO src_p = 0, numproc - 1\n         DO blk_l = 1, total_recv_count(1, src_p)\n            stored_row = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1))\n            stored_col = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 1)\n            stored_blk_p = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 2)\n            row_img = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 3)\n            col_img = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 4)\n            nze = row_blk_size(stored_row)*col_blk_size(stored_col)\n            blk = blks(row_img, col_img)\n            blks(row_img, col_img) = blks(row_img, col_img) + 1\n            blk_ps(row_img, col_img) = blk_ps(row_img, col_img) + nze\n            ums%mats(row_img, col_img)%wms(1)%row_i(blk) = stored_row\n            ums%mats(row_img, col_img)%wms(1)%col_i(blk) = stored_col\n            ums%mats(row_img, col_img)%wms(1)%blk_p(blk) = &\n               SIGN(rd_disp(src_p) + ABS(stored_blk_p) - 1, stored_blk_p)\n         END DO\n      END DO\n\n      ! Finalize the actual imaged matrices from the work matrices\n      !\n      DO row_img = 1, nrow_images\n         DO col_img = 1, ncol_images\n            ums%mats(row_img, col_img)%wms(1)%lastblk = blks(row_img, col_img) - 1\n            ums%mats(row_img, col_img)%wms(1)%datasize = blk_ps(row_img, col_img) - 1\n            !\n            CALL dbcsr_data_set_size_referenced( &\n               ums%mats(row_img, col_img)%wms(1)%data_area, &\n               ums%mats(row_img, col_img)%wms(1)%datasize)\n            IF (nrow_images .EQ. 1 .AND. ncol_images .EQ. 1 .OR. nocopy) THEN\n               CALL dbcsr_special_finalize(ums%mats(row_img, col_img), reshuffle=.FALSE.)\n            ELSE\n               CALL dbcsr_special_finalize(ums%mats(row_img, col_img), reshuffle=.TRUE.)\n            END IF\n\n            ! Save the home process and image row and column\n            CALL image_calculator(target_imgdist, &\n                                  ums%mats(row_img, col_img)%index(dbcsr_slot_home_prow), &\n                                  ums%mats(row_img, col_img)%index(dbcsr_slot_home_rowi), &\n                                  ums%mats(row_img, col_img)%index(dbcsr_slot_home_pcol), &\n                                  ums%mats(row_img, col_img)%index(dbcsr_slot_home_coli), &\n                                  vprow=ums%mats(row_img, col_img)%index(dbcsr_slot_home_vprow), &\n                                  vpcol=ums%mats(row_img, col_img)%index(dbcsr_slot_home_vpcol), &\n                                  myrowi=row_img, mycoli=col_img, &\n                                  shifting=predist_type)\n         END DO\n      END DO\n\n      ! Deallocate shared temporary buffers\n      !\n      DEALLOCATE (send_count, recv_count)\n      DEALLOCATE (total_send_count, total_recv_count)\n      DEALLOCATE (sdp, smp, sd_disp, sm_disp)\n      DEALLOCATE (rd_disp, rm_disp)\n      DEALLOCATE (all_total_send_offset)\n      DEALLOCATE (blk_ps, blks)\n      DEALLOCATE (recv_meta, send_meta)\n\n      CALL dbcsr_data_release(send_data_area)\n      CALL dbcsr_data_release(received_data_area)\n      CALL dbcsr_data_release(recv_data_area)\n\n      CALL timestop(handle)\n   END SUBROUTINE make_images\n\n   SUBROUTINE dbcsr_make_images_dense(images, new_rdist, &\n                                      row_map, col_map, join_cols, join_rows, new_template)\n      !! Makes dense matrices for the image matrices.\n      !! @note\n      !! Used for making matrices dense/undense\n      !! @endnote\n\n      TYPE(dbcsr_2d_array_type), INTENT(INOUT)           :: images\n         !! current (undense) matrix images, output is the dense matrix images\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: new_rdist\n         !! the new image distribution for dense matrices\n      TYPE(array_i1d_obj), INTENT(IN)                    :: row_map, col_map\n         !! mapping of current (undense) rows to dense rows\n         !! mapping of current (undense) columns to dense columns\n      LOGICAL, INTENT(IN)                                :: join_cols, join_rows\n         !! make columns dense, default is yes\n         !! make rows dense, default is yes\n      TYPE(dbcsr_type), INTENT(IN)                       :: new_template\n         !! template dense matrix for creating image matrices\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_images_dense'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: handle, mat_col, mat_row, mat_vpcol, &\n                                                            mat_vprow\n      INTEGER, DIMENSION(:), CONTIGUOUS, POINTER         :: und_col_blk_offsets, und_row_blk_offsets\n      INTEGER, DIMENSION(dbcsr_meta_size)                :: old_meta\n      REAL(kind=dp)                                      :: cs\n      TYPE(array_i1d_obj)                                :: dense_local_vcols, dense_local_vrows, &\n                                                            und_local_vcols, und_local_vrows\n      TYPE(dbcsr_imagedistribution_obj)                  :: old_rdist\n      TYPE(dbcsr_type)                                   :: tmp_mat\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      old_rdist = images%image_dist\n      !\n      DO mat_row = 1, images%image_dist%i%row_decimation\n         DO mat_col = 1, images%image_dist%i%col_decimation\n            IF (dbg) THEN\n               cs = dbcsr_checksum(images%mats(mat_row, mat_col))\n               WRITE (*, *) routineN//\" cs pre\", cs\n            END IF\n            mat_vprow = images%mats(mat_row, mat_col)%index(dbcsr_slot_home_vprow)\n            mat_vpcol = images%mats(mat_row, mat_col)%index(dbcsr_slot_home_vpcol)\n            und_row_blk_offsets => array_data(images%mats(mat_row, mat_col)%row_blk_offset)\n            und_col_blk_offsets => array_data(images%mats(mat_row, mat_col)%col_blk_offset)\n            CALL dbcsr_get_local_vrows(old_rdist, und_local_vrows, mat_vprow)\n            CALL dbcsr_get_local_vcols(old_rdist, und_local_vcols, mat_vpcol)\n\n            CALL dbcsr_get_local_vrows(new_rdist, dense_local_vrows, mat_vprow)\n            CALL dbcsr_get_local_vcols(new_rdist, dense_local_vcols, mat_vpcol)\n            ! The old matrix has to be remembered so it is copied to\n            ! tmp_mat.\n            old_meta(:) = images%mats(mat_row, mat_col)%index(1:dbcsr_meta_size)\n            tmp_mat = dbcsr_type()\n            tmp_mat = images%mats(mat_row, mat_col)\n            images%mats(mat_row, mat_col) = dbcsr_type()\n            CALL dbcsr_create(images%mats(mat_row, mat_col), template=new_template)\n            images%mats(mat_row, mat_col)%index(dbcsr_slot_home_prow &\n                                                :dbcsr_slot_home_vpcol) = &\n               old_meta(dbcsr_slot_home_prow:dbcsr_slot_home_vpcol)\n            CALL dbcsr_make_dense_low(tmp_mat, images%mats(mat_row, mat_col), &\n                                      array_data(und_local_vrows), array_data(und_local_vcols), &\n                                      und_row_blk_offsets, und_col_blk_offsets, &\n                                      array_data(dense_local_vrows), &\n                                      array_data(dense_local_vcols), &\n                                      array_data(new_template%row_blk_offset), &\n                                      array_data(new_template%col_blk_offset), &\n                                      array_data(row_map), array_data(col_map), join_rows, join_cols)\n            !\n            CALL dbcsr_index_prune_deleted(images%mats(mat_row, mat_col))\n            !\n            CALL dbcsr_release(tmp_mat)\n            IF (dbg) THEN\n               cs = dbcsr_checksum(images%mats(mat_row, mat_col))\n               WRITE (*, *) routineN//\" cs pst\", cs\n            END IF\n         END DO\n      END DO\n      CALL dbcsr_image_dist_release(images%image_dist)\n      images%image_dist = new_rdist\n      CALL dbcsr_image_dist_hold(images%image_dist)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_make_images_dense\n\n   SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, &\n                              retain_sparsity, &\n                              filter_eps, flop, keep_product_data)\n      !! Multiplies two DBCSR matrices\n\n      TYPE(dbcsr_2d_array_type), POINTER                 :: left_set, right_set\n         !! set of imaged left matrices\n         !! set of imaged right matrices\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: product_matrix\n         !! DBCSR product matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity\n         !! retain the sparsity of the existing product matrix; default is no\n      REAL(kind=real_8), INTENT(in), OPTIONAL            :: filter_eps\n      INTEGER(KIND=int_8), INTENT(OUT)                   :: flop\n         !! effective flop\n      LOGICAL, INTENT(IN)                                :: keep_product_data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'multiply_cannon'\n      INTEGER, PARAMETER                                 :: idata = 1, ileft = 0, imeta = 2, &\n                                                            iright = 2\n\n      INTEGER :: data_type, data_type_byte, handle, handle1, handle2, handle3, i, ithread, &\n                 left_col_image, left_col_mult, left_col_nimages, left_dst_icol, left_dst_irow, &\n                 left_dst_p, left_dst_pcol, left_dst_prow, left_dst_vcol, left_dst_vrow, left_max_nblks, &\n                 left_max_nze, left_myfirstvcol, left_myfirstvrow, left_mypcol, left_myprow, left_npcols, &\n                 left_nprows, left_recv_icol, left_recv_irow, left_recv_p, left_recv_pcol, left_recv_prow, &\n                 left_recv_vcol, left_recv_vrow, left_row_image, left_row_mult, left_row_nimages, &\n                 left_send_icol, left_send_irow, left_send_p, left_send_pcol, left_send_prow\n      INTEGER :: left_send_vcol, left_send_vrow, left_src_icol, left_src_irow, left_src_p, &\n                 left_src_pcol, left_src_prow, left_src_vcol, left_src_vrow, metronome, min_nimages, &\n                 mynode, nblkrows_used, nsteps_k, nthreads, numnodes, nvirt_k, &\n                 output_unit, right_col_image, right_col_mult, right_col_nimages, right_dst_icol, &\n                 right_dst_irow, right_dst_p, right_dst_pcol, right_dst_prow, right_dst_vcol, &\n                 right_dst_vrow, right_max_nblks, right_max_nze, right_myfirstvcol, right_myfirstvrow, &\n                 right_mypcol, right_myprow, right_npcols, right_nprows, right_recv_icol, right_recv_irow\n      INTEGER :: right_recv_p, right_recv_pcol, right_recv_prow, right_recv_vcol, right_recv_vrow, &\n                 right_row_image, right_row_mult, right_row_nimages, right_send_icol, right_send_irow, &\n                 right_send_p, right_send_pcol, right_send_prow, right_send_vcol, right_send_vrow, &\n                 right_src_icol, right_src_irow, right_src_p, right_src_pcol, right_src_prow, &\n                 right_src_vcol, right_src_vrow, row, size_guess, size_guess_init, stat, threads_finished, &\n                 threads_finished_read, v_ki, v_ki_left, v_ki_right\n      INTEGER(KIND=int_8)                                :: flop_single, flop_total, mem\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: row_counts, total_row_counts\n      INTEGER, ALLOCATABLE, DIMENSION(:, :, :)           :: left_sizes, my_sizes, right_sizes\n      INTEGER, ALLOCATABLE, DIMENSION(:, :, :, :)        :: all_sizes\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_sizes2enum, enum2col_blk_sizes, &\n                                                    enum2row_blk_sizes, &\n                                                    left_index_rp, left_index_sp, m_sizes, n_sizes, &\n                                                    right_index_rp, right_index_sp, &\n                                                    row_blk_sizes2enum\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: k_sizes\n      INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS      :: left_pgrid, product_pgrid, right_pgrid\n      INTEGER, SAVE                                      :: mult_id = 0\n      LOGICAL                                            :: keep_sparsity, list_indexing, &\n                                                            otf_filtering\n\n      REAL(kind=sp), ALLOCATABLE, DIMENSION(:) :: left_norms, right_norms, &\n                                                  row_max_epss\n      REAL(kind=sp)                            :: filter_eps_sp\n      TYPE(dbcsr_2d_array_type), POINTER :: left_buffer_2, left_buffer_calc, &\n                                            left_buffer_comm, right_buffer_2, right_buffer_calc, right_buffer_comm\n      TYPE(dbcsr_data_obj)                     :: left_data_rp, left_data_sp, &\n                                                  right_data_rp, right_data_sp\n      TYPE(dbcsr_data_obj), POINTER            :: trs_stackbuf_calc, &\n                                                  trs_stackbuf_comm\n      TYPE(dbcsr_data_obj), TARGET             :: trs_stackbuf_1, trs_stackbuf_2\n      TYPE(dbcsr_mm_multrec_type_p), DIMENSION(:), ALLOCATABLE :: multrec\n      TYPE(dbcsr_mp_obj)                       :: left_mp_obj, product_mp_obj, &\n                                                  right_mp_obj\n      TYPE(mp_comm_type)                       :: grp, mp_group\n      TYPE(mp_request_type), DIMENSION(:), ALLOCATABLE :: left_data_rr, left_data_sr, left_index_rr, &\n                                                         left_index_sr, right_data_rr, right_data_sr, right_index_rr, right_index_sr\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      NULLIFY (trs_stackbuf_calc, trs_stackbuf_comm)\n      NULLIFY (row_blk_sizes2enum, enum2row_blk_sizes)\n      NULLIFY (col_blk_sizes2enum, enum2col_blk_sizes)\n      NULLIFY (k_sizes)\n      !\n      ALLOCATE (left_buffer_2, right_buffer_2)\n      mult_id = mult_id + 1\n\n      IF (PRESENT(retain_sparsity)) THEN\n         keep_sparsity = retain_sparsity\n      ELSE\n         keep_sparsity = .FALSE.\n      END IF\n      otf_filtering = PRESENT(filter_eps)\n\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP SHARED (multrec, nthreads, product_matrix)\n!$OMP MASTER\n      nthreads = 1\n!$    nthreads = OMP_GET_NUM_THREADS()\n      IF (.NOT. ASSOCIATED(product_matrix%wms)) &\n         DBCSR_ABORT(\"Work matrices do not exist\")\n      IF (SIZE(product_matrix%wms) .NE. nthreads) &\n         DBCSR_ABORT(\"Work matrices not correctly sized.\")\n      ALLOCATE (multrec(0:nthreads - 1))\n!$OMP END MASTER\n!$OMP END PARALLEL\n\n      output_unit = default_output_unit\n      flop_total = 0\n      ! Set up variables\n      data_type = dbcsr_get_data_type(product_matrix)\n      data_type_byte = dbcsr_datatype_sizeof(data_type)\n      left_row_nimages = left_set%image_dist%i%row_decimation\n      left_row_mult = left_set%image_dist%i%row_multiplicity\n      left_col_nimages = left_set%image_dist%i%col_decimation\n      left_col_mult = left_set%image_dist%i%col_multiplicity\n      right_row_nimages = right_set%image_dist%i%row_decimation\n      right_row_mult = right_set%image_dist%i%row_multiplicity\n      right_col_nimages = right_set%image_dist%i%col_decimation\n      right_col_mult = right_set%image_dist%i%col_multiplicity\n      left_mp_obj = dbcsr_distribution_mp(left_set%image_dist%i%main)\n      right_mp_obj = dbcsr_distribution_mp(right_set%image_dist%i%main)\n      product_mp_obj = dbcsr_distribution_mp(product_matrix%dist)\n      numnodes = dbcsr_mp_numnodes(product_mp_obj)\n      mynode = dbcsr_mp_mynode(product_mp_obj)\n      left_nprows = dbcsr_mp_nprows(left_mp_obj)\n      left_npcols = dbcsr_mp_npcols(left_mp_obj)\n      left_myprow = dbcsr_mp_myprow(left_mp_obj)\n      left_mypcol = dbcsr_mp_mypcol(left_mp_obj)\n      left_myfirstvrow = dbcsr_mp_myprow(left_mp_obj)*left_row_nimages\n      left_myfirstvcol = dbcsr_mp_mypcol(left_mp_obj)*left_col_nimages\n      right_nprows = dbcsr_mp_nprows(right_mp_obj)\n      right_npcols = dbcsr_mp_npcols(right_mp_obj)\n      right_myprow = dbcsr_mp_myprow(right_mp_obj)\n      right_mypcol = dbcsr_mp_mypcol(right_mp_obj)\n      right_myfirstvrow = dbcsr_mp_myprow(right_mp_obj)*right_row_nimages\n      right_myfirstvcol = dbcsr_mp_mypcol(right_mp_obj)*right_col_nimages\n      mp_group = dbcsr_mp_group(product_mp_obj)\n      left_pgrid => dbcsr_mp_pgrid(left_mp_obj)\n      right_pgrid => dbcsr_mp_pgrid(right_mp_obj)\n      product_pgrid => dbcsr_mp_pgrid(product_mp_obj)\n      CALL dbcsr_mp_grid_setup(product_mp_obj)\n      CALL dbcsr_mp_grid_setup(left_mp_obj)\n      CALL dbcsr_mp_grid_setup(right_mp_obj)\n      !\n      ! Dummy checks\n      ! left/right matching\n      IF (left_col_nimages .NE. right_row_mult) &\n         DBCSR_ABORT(\"Left/Right image mismatch\")\n      IF (left_col_mult .NE. right_row_nimages) &\n         DBCSR_ABORT(\"Left/Right image mismatch\")\n      IF (left_col_nimages*left_npcols .NE. right_row_nimages*right_nprows) &\n         DBCSR_ABORT(\"Left/Right total mismatch\")\n      ! product/left matching\n      IF (left_row_mult*dbcsr_mp_nprows(product_mp_obj) .NE. left_row_nimages*left_nprows) &\n         DBCSR_ABORT(\"Product/Left total mismatch\")\n      ! product/left matching\n      IF (right_col_mult*dbcsr_mp_npcols(product_mp_obj) .NE. right_col_nimages*right_npcols) &\n         DBCSR_ABORT(\"Product/Right total mismatch\")\n      ! Limitations\n      IF (left_row_nimages .NE. 1) &\n         DBCSR_ABORT(\"Product/Left matrix process grid mismatch\")\n      IF (left_row_mult .NE. 1) &\n         DBCSR_ABORT(\"Product/Left matrix process grid mismatch\")\n      IF (right_col_nimages .NE. 1) &\n         DBCSR_ABORT(\"Product/Right matrix process grid mismatch\")\n      IF (right_col_mult .NE. 1) &\n         DBCSR_ABORT(\"Product/Right matrix process grid mismatch\")\n\n      dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, left_row_nimages*left_col_nimages)\n      dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, right_row_nimages*right_col_nimages)\n      !\n      ! Exchange size data\n      ALLOCATE (my_sizes(4, MAX(left_row_nimages, right_row_nimages), &\n                         MAX(left_col_nimages, right_col_nimages)))\n      my_sizes(:, :, :) = 0\n      DO left_row_image = 1, left_row_nimages\n         DO left_col_image = 1, left_col_nimages\n            my_sizes(idata + ileft, left_row_image, left_col_image) &\n               = dbcsr_data_get_size_referenced( &\n                 left_set%mats(left_row_image, left_col_image)%data_area)\n            my_sizes(imeta + ileft, left_row_image, left_col_image) = &\n               left_set%mats(left_row_image, left_col_image)%index &\n               (dbcsr_slot_size)\n         END DO\n      END DO\n\n      DO right_row_image = 1, right_row_nimages\n         DO right_col_image = 1, right_col_nimages\n            my_sizes(idata + iright, right_row_image, right_col_image) &\n               = dbcsr_data_get_size_referenced( &\n                 right_set%mats(right_row_image, right_col_image)%data_area)\n            my_sizes(imeta + iright, right_row_image, right_col_image) = &\n               right_set%mats(right_row_image, right_col_image)%index &\n               (dbcsr_slot_size)\n         END DO\n      END DO\n\n      ALLOCATE (all_sizes(4, LBOUND(my_sizes, 2):UBOUND(my_sizes, 2), &\n                          LBOUND(my_sizes, 3):UBOUND(my_sizes, 3), 0:numnodes - 1))\n      CALL mp_allgather(my_sizes, all_sizes, mp_group)\n      !\n      ! Count the maximum possible multiplies per row for on-the-fly\n      ! filtering.\n      per_row_eps: IF (.NOT. otf_filtering) THEN\n         ! These arrays must be valid when passed to called subroutines.\n         ALLOCATE (left_norms(0), right_norms(0), row_max_epss(0), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory\")\n      ELSE\n         IF (careful_mod) THEN\n            IF (left_set%mats(1, 1)%bcsc) &\n               DBCSR_ABORT(\"Can not do on-the-fly filtering with CSC-indexed matrices.\")\n         END IF\n         IF (dbcsr_has_local_row_index(left_set%mats(1, 1))) THEN\n            nblkrows_used = dbcsr_nblkrows_local(left_set%mats(1, 1))\n         ELSE\n            nblkrows_used = dbcsr_nblkrows_total(left_set%mats(1, 1))\n         END IF\n         ALLOCATE (row_max_epss(nblkrows_used), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory for left epsilons\")\n         ALLOCATE (row_counts(nblkrows_used), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory for left row counts\")\n         ! The summation could be done prow-locally but it would\n         ! complicate the pre-row eps calculation.\n         ALLOCATE (total_row_counts(nblkrows_used), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory for left row counts\")\n         ! Each prow member matrix (npcols * row_images) counts the\n         ! blocks present in each of its rows.\n         total_row_counts(:) = 0\n         DO left_row_image = 1, left_row_nimages\n            DO left_col_image = 1, left_col_nimages\n               list_indexing = &\n                  left_set%mats(left_row_image, left_col_image)%list_indexing\n               IF (careful_mod) THEN\n                  IF (list_indexing) THEN\n                     IF ((left_set%mats(left_row_image, left_col_image)%nblks)*3 .NE. &\n                         SIZE(left_set%mats(left_row_image, left_col_image)%coo_l)) &\n                        DBCSR_ABORT(\"Row count mismatch\")\n                  ELSE\n                     IF (nblkrows_used + 1 .NE. SIZE(left_set%mats(left_row_image, left_col_image)%row_p)) &\n                        DBCSR_ABORT(\"Row count mismatch\")\n                  END IF\n               END IF\n               IF (list_indexing) THEN\n                  CALL count_bins( &\n                     left_set%mats(left_row_image, left_col_image)%nblks, &\n                     left_set%mats(left_row_image, left_col_image)%coo_l(1::3), &\n                     nblkrows_used, row_counts)\n               ELSE\n                  CALL dbcsr_count_row_index( &\n                     left_set%mats(left_row_image, left_col_image)%row_p, &\n                     row_counts, nblkrows_used)\n               END IF\n               total_row_counts(:) = total_row_counts(:) &\n                                     + row_counts(:)\n            END DO\n         END DO\n         ! The counted blocks are then summed up\n         CALL mp_sum(total_row_counts, dbcsr_mp_my_row_group(product_mp_obj))\n         ! and used to determine the maximum per-block epsilon.\n         filter_eps_sp = REAL(filter_eps, KIND=KIND(row_max_epss))\n!$OMP PARALLEL DO DEFAULT (NONE) &\n!$OMP SHARED(nblkrows_used,row_max_epss,filter_eps_sp,&\n!$OMP        total_row_counts)\n         DO row = 1, nblkrows_used\n            row_max_epss(row) &\n               = (filter_eps_sp &\n                  /REAL(MAX(1, total_row_counts(row)), KIND=KIND(row_max_epss)))**2\n         END DO\n!$OMP END PARALLEL DO\n         !\n         DEALLOCATE (row_counts)\n         DEALLOCATE (total_row_counts)\n      END IF per_row_eps\n      !\n      ! The main transfer loop goes through the virtual rows/columns.\n      ! The number of steps may be smaller if the grid dimension is very\n      ! non-optimal (both left column images and right row images are >\n      ! 1).\n      min_nimages = MIN(left_col_nimages, right_row_nimages)\n      nvirt_k = left_npcols*left_col_nimages\n      nsteps_k = nvirt_k/min_nimages\n      !\n      ! Translate the all_sizes to account for pre-distribution.  This\n      ! is just done to simplify lookups.\n      ALLOCATE (left_sizes(2, 0:left_nprows*left_row_nimages - 1, 0:nvirt_k - 1))\n      left_sizes = -1\n      DO left_src_vcol = 0, left_col_nimages*left_npcols - 1\n         DO left_src_vrow = 0, left_row_nimages*left_nprows - 1\n            ! Calculate what was shifted.  The left_src_v{row,col} are\n            ! the \"source\" rows/columns; the left_dst are the shifted\n            ! targets where the data was placed in make_images.\n            CALL image_calculator(left_set%image_dist, &\n                                  prow=left_dst_prow, pcol=left_dst_pcol, &\n                                  rowi=left_dst_irow, coli=left_dst_icol, &\n                                  myvprow=left_src_vrow, myvpcol=left_src_vcol, &\n                                  shifting='l')\n            left_dst_p = left_pgrid(left_dst_prow, left_dst_pcol)\n            left_sizes(idata, left_src_vrow, left_src_vcol) = &\n               all_sizes( &\n               idata + ileft, left_dst_irow, left_dst_icol, left_dst_p)\n            left_sizes(imeta, left_src_vrow, left_src_vcol) = &\n               all_sizes( &\n               imeta + ileft, left_dst_irow, left_dst_icol, left_dst_p)\n         END DO\n      END DO\n      !\n      ALLOCATE (right_sizes(2, 0:nvirt_k - 1, 0:right_npcols*right_col_nimages - 1))\n      right_sizes = -1\n      DO right_src_vcol = 0, right_col_nimages*right_npcols - 1\n         DO right_src_vrow = 0, right_row_nimages*right_nprows - 1\n            ! Calculate what was shifted.  The right_src_v{row,col} are\n            ! the \"source\" rows/columns; the right_dst are the shifted\n            ! targets where the data was placed in make_images.\n            CALL image_calculator(right_set%image_dist, &\n                                  prow=right_dst_prow, pcol=right_dst_pcol, &\n                                  rowi=right_dst_irow, coli=right_dst_icol, &\n                                  myvprow=right_src_vrow, myvpcol=right_src_vcol, &\n                                  shifting='r')\n            right_dst_p = right_pgrid(right_dst_prow, right_dst_pcol)\n            right_sizes(idata, right_src_vrow, right_src_vcol) = &\n               all_sizes( &\n               idata + iright, right_dst_irow, right_dst_icol, right_dst_p)\n            right_sizes(imeta, right_src_vrow, right_src_vcol) = &\n               all_sizes( &\n               imeta + iright, right_dst_irow, right_dst_icol, right_dst_p)\n         END DO\n      END DO\n      !\n      ! Setup product work areas\n      left_max_nze = MAXVAL(all_sizes(idata + ileft, :, :, :))\n      left_max_nblks = MAXVAL(all_sizes(imeta + ileft, :, :, :))\n      right_max_nze = MAXVAL(all_sizes(idata + iright, :, :, :))\n      right_max_nblks = MAXVAL(all_sizes(imeta + iright, :, :, :))\n      !!\n      ! Evaluate sizes for workspaces\n      IF (.NOT. keep_sparsity) THEN\n         IF (use_acc()) THEN\n            size_guess_init = product_matrix_size_guess(left_set%mats(1, 1), right_set%mats(1, 1), product_matrix, &\n                                                        left_max_nze, right_max_nze, &\n                                                        left_col_nimages, right_row_nimages, &\n                                                        nthreads)\n         ELSE\n            size_guess_init = 1\n         END IF\n      END IF\n      ithread = 0\n!$OMP PARALLEL DEFAULT(NONE) &\n!$OMP          PRIVATE (i, size_guess, ithread) &\n!$OMP          SHARED (product_matrix, left_max_nze, right_max_nze) &\n!$OMP          SHARED (left_set, right_set, &\n!$OMP                 left_col_nimages, right_row_nimages) &\n!$OMP          SHARED (nthreads, keep_sparsity, mynode, size_guess_init)\n      !\n!$    ithread = OMP_GET_THREAD_NUM()\n      ! The work arrays have to be setup (actually, not quite sure).\n      i = ithread + 1\n      size_guess = product_matrix%wms(i)%datasize ! Should be minimal\n      IF (.NOT. keep_sparsity) THEN\n         size_guess = MAX(size_guess, size_guess_init)\n      END IF\n      CALL dbcsr_data_ensure_size(product_matrix%wms(i)%data_area, &\n                                  size_guess)\n      CALL dbcsr_data_set_size_referenced(product_matrix%wms(i)%data_area, &\n                                          product_matrix%wms(i)%datasize)\n      ! XXXXXXX a quick fix right now, allocation with size 1 might actually not be needed at all,\n      !         but something expects this to be associated\n      CALL ensure_array_size(product_matrix%wms(i)%row_i, ub=1)\n      CALL ensure_array_size(product_matrix%wms(i)%col_i, ub=1)\n      CALL ensure_array_size(product_matrix%wms(i)%blk_p, ub=1)\n!$OMP END PARALLEL\n\n      ! update capacity of memory-pools, +1 for the dense case\n      IF (ASSOCIATED(memtype_abpanel_1%pool)) &\n         CALL dbcsr_mempool_limit_capacity(memtype_abpanel_1%pool, &\n                                           capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1)\n      IF (ASSOCIATED(memtype_abpanel_2%pool)) &\n         CALL dbcsr_mempool_limit_capacity(memtype_abpanel_2%pool, &\n                                           capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1)\n      IF (use_acc()) THEN\n         ! enumerate the blocksizes to keep the following 2D-arrays small.\n         CALL enumerate_blk_sizes(right_set%mats(1, 1)%row_blk_size%low%data, &\n                                  dbcsr_max_row_size(right_set%mats(1, 1)), &\n                                  row_blk_sizes2enum, enum2row_blk_sizes)\n         CALL enumerate_blk_sizes(right_set%mats(1, 1)%col_blk_size%low%data, &\n                                  dbcsr_max_col_size(right_set%mats(1, 1)), &\n                                  col_blk_sizes2enum, enum2col_blk_sizes)\n      END IF\n\n      !\n      ! Setup the left buffer matrices\n      !\n      CALL buffer_matrices_ensure_size(left_set, index_size=left_max_nblks, &\n                                       data_size=left_max_nze)\n\n      CALL setup_buffer_matrices(left_buffer_2, left_row_mult, left_col_nimages, &\n                                 left_set%mats(1, 1), index_size=left_max_nblks, &\n                                 data_size=left_max_nze)\n      IF (otf_filtering) THEN\n         ALLOCATE (left_norms(left_max_nblks), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory for left norms\")\n         IF (stat .NE. 0) otf_filtering = .FALSE.\n      END IF\n      left_buffer_calc => left_set\n      left_buffer_comm => left_buffer_2\n      ALLOCATE (left_data_sr(left_col_nimages))\n      ALLOCATE (left_index_sr(left_col_nimages))\n      ALLOCATE (left_data_rr(left_col_nimages))\n      ALLOCATE (left_index_rr(left_col_nimages))\n      left_data_sr = mp_request_null\n      left_data_rr = mp_request_null\n      left_index_sr = mp_request_null\n      left_index_rr = mp_request_null\n\n      ! Setup buffers for right matrix\n      CALL buffer_matrices_ensure_size(right_set, index_size=right_max_nblks, &\n                                       data_size=right_max_nze)\n\n      CALL setup_buffer_matrices(right_buffer_2, right_row_nimages, right_col_mult, &\n                                 right_set%mats(1, 1), index_size=right_max_nblks, data_size=right_max_nze)\n      IF (otf_filtering) THEN\n         ALLOCATE (right_norms(right_max_nblks), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_WARN(\"Could not allocate memory for right norms\")\n         IF (stat .NE. 0) otf_filtering = .FALSE.\n      END IF\n      right_buffer_calc => right_set\n      right_buffer_comm => right_buffer_2\n      ALLOCATE (right_data_sr(right_row_nimages))\n      ALLOCATE (right_index_sr(right_row_nimages))\n      ALLOCATE (right_data_rr(right_row_nimages))\n      ALLOCATE (right_index_rr(right_row_nimages))\n      right_data_sr = mp_request_null\n      right_data_rr = mp_request_null\n      right_index_sr = mp_request_null\n      right_index_rr = mp_request_null\n      !\n      ALLOCATE (m_sizes(dbcsr_nblkrows_local(product_matrix)))\n      CALL local_filter(array_data(product_matrix%row_blk_size), array_size(product_matrix%local_rows), &\n                        array_data(product_matrix%local_rows), m_sizes)\n      ALLOCATE (n_sizes(dbcsr_nblkcols_local(product_matrix)))\n      CALL local_filter(array_data(product_matrix%col_blk_size), array_size(product_matrix%local_cols), &\n                        array_data(product_matrix%local_cols), n_sizes)\n      !\n!$OMP PARALLEL &\n!$OMP DEFAULT (NONE) &\n!$OMP SHARED (left_buffer_comm, right_buffer_comm, product_matrix,&\n!$OMP         keep_sparsity, filter_eps, row_max_epss, multrec, nthreads, &\n!$OMP         right_data_sr, right_data_rr, left_data_sr, left_data_rr,&\n!$OMP         right_index_sr, right_index_rr, left_index_sr, left_index_rr,&\n!$OMP         m_sizes, n_sizes, keep_product_data), &\n!$OMP PRIVATE(ithread)\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      ALLOCATE (multrec(ithread)%p)\n      CALL dbcsr_mm_multrec_init(multrec(ithread)%p, &\n                                 product=product_matrix, &\n                                 keep_sparsity=keep_sparsity, &\n                                 eps=filter_eps, &\n                                 row_max_epss=row_max_epss, &\n                                 block_estimate=MAX(product_matrix%nblks, &\n                                                    left_buffer_comm%mats(1, 1)%nblks, &\n                                                    right_buffer_comm%mats(1, 1)%nblks)/nthreads, &\n                                 right_row_blk_size=array_data(right_buffer_comm%mats(1, 1)%row_blk_size), &\n                                 m_sizes=m_sizes, n_sizes=n_sizes, &\n                                 keep_product_data=keep_product_data)\n!$OMP END PARALLEL\n      !\n      ! Setup indexing\n      CALL setup_rec_index_2d(left_set, left_row_nimages, left_col_nimages)\n      CALL setup_rec_index_2d(right_set, right_row_nimages, right_col_nimages)\n      !\n      ! Setup the send/receive data pointers\n      CALL dbcsr_data_init(left_data_sp)\n      CALL dbcsr_data_init(left_data_rp)\n      CALL dbcsr_data_init(right_data_sp)\n      CALL dbcsr_data_init(right_data_rp)\n      CALL dbcsr_data_new(left_data_sp, data_type)\n      CALL dbcsr_data_new(left_data_rp, data_type)\n      CALL dbcsr_data_new(right_data_sp, data_type)\n      CALL dbcsr_data_new(right_data_rp, data_type)\n\n      ! Setup transpose stackbuffers\n      IF (use_acc()) THEN\n         CALL dbcsr_data_init(trs_stackbuf_1)\n         CALL dbcsr_data_init(trs_stackbuf_2)\n         CALL dbcsr_data_new(trs_stackbuf_1, data_type=dbcsr_type_int_4, &\n                             data_size=2*right_max_nblks, memory_type=memtype_trsbuffer_1)\n         CALL dbcsr_data_new(trs_stackbuf_2, data_type=dbcsr_type_int_4, &\n                             data_size=2*right_max_nblks, memory_type=memtype_trsbuffer_2)\n         trs_stackbuf_calc => trs_stackbuf_1\n         trs_stackbuf_comm => trs_stackbuf_2\n      END IF\n      !\n      ! Reset indices for virtual images\n      v_ki_right = 0\n      v_ki_left = 0\n      !\n      ! Here is the main loop.\n      !\n      ! In the first loop iteration, the data is fetched from the\n      ! sources. In the remaining iterations, the data are exchanged\n      ! among neighbors.  In the last loop only calculations take place.\n      !\n      CALL timeset(routineN//\"_loop\", handle1)\n      !\n      grouped_k_index: DO metronome = 0, nvirt_k - 1\n         ! Wait for right matrix transfer completion. Wait in all but\n         ! the first loop iteration.\n         CALL timeset(routineN//\"_metrocomm1\", handle2)\n         wait_right: IF (v_ki_right .EQ. right_row_nimages) THEN\n            ! Reset index\n            v_ki_right = 0\n            IF (debug_mod) WRITE (*, '(1X,A)') routineN//\" waiting for right\"\n            !\n            CALL mp_waitall(right_data_sr)\n            CALL mp_waitall(right_data_rr)\n            CALL mp_waitall(right_index_sr)\n            CALL mp_waitall(right_index_rr)\n            !\n            ! Repoint indices of right matrices\n            DO v_ki = 0, right_row_nimages - 1\n               CALL dbcsr_repoint_index(right_buffer_calc%mats(v_ki + 1, 1))\n               right_buffer_calc%mats(v_ki + 1, 1)%valid = .TRUE.\n            END DO\n         END IF wait_right\n         CALL timestop(handle2)\n         !\n         ! Right matrix transfer. Transfer in all but the last loop\n         ! iteration.\n         xfer_right: IF (v_ki_right .EQ. 0 .AND. metronome + right_row_nimages .LT. nvirt_k) THEN\n            DO v_ki = 0, right_row_nimages - 1\n               ! Calculate the process to send to.  It's the virtual\n               ! process row -min_nimages up (i.e., smaller row number)\n               ! from me.\n               CALL image_calculator(right_set%image_dist, &\n                                     prow=right_send_prow, rowi=right_send_irow, & ! output\n                                     pcol=right_send_pcol, coli=right_send_icol, & ! output\n                                     vprow=right_send_vrow, vpcol=right_send_vcol, & ! output\n                                     ! myvprow goes through all of my (process row) images\n                                     myvprow=v_ki + right_myfirstvrow, &\n                                     myvpcol=right_myfirstvcol, & ! nothing happens in the columns\n                                     vprow_shift=-right_row_nimages, &\n                                     shifting='0')\n               ! Calculate which data I send.\n               CALL image_calculator(right_set%image_dist, &\n                                     prow=right_dst_prow, rowi=right_dst_irow, &\n                                     pcol=right_dst_pcol, coli=right_dst_icol, &\n                                     vprow=right_dst_vrow, vpcol=right_dst_vcol, &\n                                     ! myvprows goes through all of my (process row) images\n                                     myvprow=v_ki + right_myfirstvrow, &\n                                     myvpcol=right_myfirstvcol, & ! nothing happens in the columns\n                                     vprow_shift=metronome, &\n                                     ! This is with relative shifting.\n                                     shifting='R')\n               right_dst_p = right_pgrid(right_dst_prow, right_dst_pcol)\n               CALL dbcsr_data_set_pointer( &\n                  area=right_data_sp, &\n                  rsize=right_sizes(idata, right_dst_vrow, right_dst_vcol), &\n                  csize=1, &\n                  pointee=right_buffer_calc%mats(v_ki + 1, 1)%data_area)\n               right_index_sp => right_buffer_calc%mats( &\n                                 v_ki + 1, 1 &\n                                 )%index(1: &\n                                         right_sizes(imeta, right_dst_vrow, right_dst_vcol))\n               !\n               ! Calculate the process to receive from\n               CALL image_calculator(right_set%image_dist, &\n                                     prow=right_recv_prow, rowi=right_recv_irow, &\n                                     pcol=right_recv_pcol, coli=right_recv_icol, &\n                                     vprow=right_recv_vrow, vpcol=right_recv_vcol, &\n                                     myvprow=v_ki + right_myfirstvrow, &\n                                     myvpcol=right_myfirstvcol, &\n                                     vprow_shift=+right_row_nimages, & ! just the opposite as \"send to\"\n                                     shifting='0')\n               ! Calculate which data I receive\n               CALL image_calculator(right_set%image_dist, &\n                                     prow=right_src_prow, rowi=right_src_irow, &\n                                     pcol=right_src_pcol, coli=right_src_icol, &\n                                     vprow=right_src_vrow, vpcol=right_src_vcol, &\n                                     myvprow=v_ki + right_myfirstvrow, &\n                                     myvpcol=right_myfirstvcol, &\n                                     ! receive window moves with the metronome\n                                     vprow_shift=metronome + right_row_nimages, &\n                                     shifting='R')\n               !\n               IF (use_acc()) THEN\n                  CALL timeset(routineN//\"_acc_sync_right\", handle3)\n                  CALL acc_event_synchronize(right_buffer_comm%mats(v_ki + 1, 1)%data_area%d%acc_ready)\n                  CALL timestop(handle3)\n               END IF\n\n               right_src_p = right_pgrid(right_src_prow, right_src_pcol)\n               CALL dbcsr_data_set_pointer( &\n                  area=right_data_rp, &\n                  rsize=right_sizes(idata, right_src_vrow, right_src_vcol), &\n                  csize=1, &\n                  pointee=right_buffer_comm%mats(v_ki + 1, 1)%data_area)\n               right_index_rp => right_buffer_comm%mats( &\n                                 v_ki + 1, 1 &\n                                 )%index(1: &\n                                         right_sizes(imeta, right_src_vrow, right_src_vcol))\n               !\n               right_send_p = right_pgrid(right_send_prow, right_send_pcol)\n               right_recv_p = right_pgrid(right_recv_prow, right_recv_pcol)\n               ! These are column-communicator relative\n               IF (dbcsr_mp_has_subgroups(right_mp_obj)) THEN\n                  right_send_p = right_send_prow\n                  right_recv_p = right_recv_prow\n                  grp = dbcsr_mp_my_col_group(right_mp_obj)\n               ELSE\n                  grp = dbcsr_mp_group(right_mp_obj)\n               END IF\n               !\n               CALL timeset(routineN//\"_metrocomm2\", handle2)\n               CALL dbcsr_irecv_any(right_data_rp, right_recv_p, &\n                                    grp, right_data_rr(v_ki + 1), tag=right_src_vrow)\n               CALL mp_irecv(right_index_rp, right_recv_p, &\n                             grp, right_index_rr(v_ki + 1), tag=right_src_vrow)\n               CALL dbcsr_isend_any(right_data_sp, right_send_p, &\n                                    grp, right_data_sr(v_ki + 1), tag=right_dst_vrow)\n               CALL mp_isend(right_index_sp, right_send_p, &\n                             grp, right_index_sr(v_ki + 1), tag=right_dst_vrow)\n               dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1\n               CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(1, :), &\n                                         dbcsr_data_get_size(right_data_rp), &\n                                         data_type_byte, &\n                                         dbcsr_mpi_statistics%data_size_breakdown(:, :, 1))\n               CALL timestop(handle2)\n            END DO\n         END IF xfer_right\n         !\n         ! Wait for left matrix transfer completion. Wait in all but\n         ! the first loop iteration.\n         CALL timeset(routineN//\"_metrocomm3\", handle2)\n         wait_left: IF (v_ki_left .EQ. left_col_nimages) THEN\n            ! Reset index\n            v_ki_left = 0\n            IF (debug_mod) WRITE (*, '(1X,A)') routineN//\" waiting for left\"\n            CALL mp_waitall(left_data_sr)\n            CALL mp_waitall(left_data_rr)\n            CALL mp_waitall(left_index_sr)\n            CALL mp_waitall(left_index_rr)\n            !\n            ! Repoint indices of left matrices\n            DO v_ki = 0, left_col_nimages - 1\n               CALL dbcsr_repoint_index(left_buffer_calc%mats(1, v_ki + 1))\n               left_buffer_calc%mats(1, v_ki + 1)%valid = .TRUE.\n            END DO\n         END IF wait_left\n         CALL timestop(handle2)\n         !\n         ! Left matrix transfer. Transfer in all but the last processor images.\n         xfer_left: IF (v_ki_left .EQ. 0 .AND. metronome + left_col_nimages .LT. nvirt_k) THEN\n            DO v_ki = 0, left_col_nimages - 1\n               ! Calculate the process to send to.\n               CALL image_calculator(left_set%image_dist, &\n                                     prow=left_send_prow, rowi=left_send_irow, & ! output\n                                     pcol=left_send_pcol, coli=left_send_icol, & ! output\n                                     vprow=left_send_vrow, vpcol=left_send_vcol, & ! output\n                                     myvprow=left_myfirstvrow, & ! nothing happens in the rows\n                                     ! go through all my column images\n                                     myvpcol=v_ki + left_myfirstvcol, &\n                                     ! send to process left_col_nimages left in the grid\n                                     vpcol_shift=-left_col_nimages, &\n                                     shifting='0')\n               ! Calculate which data I send.\n               CALL image_calculator(left_set%image_dist, &\n                                     prow=left_dst_prow, rowi=left_dst_irow, &\n                                     pcol=left_dst_pcol, coli=left_dst_icol, &\n                                     vprow=left_dst_vrow, vpcol=left_dst_vcol, &\n                                     myvprow=left_myfirstvrow, &\n                                     ! go through all my column images\n                                     myvpcol=v_ki + left_myfirstvcol, &\n                                     vpcol_shift=metronome, &\n                                     ! This is with relative shifting.\n                                     shifting='L')\n               !\n               left_dst_p = left_pgrid(left_dst_prow, left_dst_pcol)\n               CALL dbcsr_data_set_pointer( &\n                  area=left_data_sp, &\n                  rsize=left_sizes(idata, left_dst_vrow, left_dst_vcol), &\n                  csize=1, &\n                  pointee=left_buffer_calc%mats(1, v_ki + 1)%data_area)\n               left_index_sp => left_buffer_calc%mats( &\n                                1, v_ki + 1 &\n                                )%index(1: &\n                                        left_sizes(imeta, left_dst_vrow, left_dst_vcol))\n               !\n               ! Calculate the process to receive from\n               CALL image_calculator(left_set%image_dist, &\n                                     prow=left_recv_prow, rowi=left_recv_irow, &\n                                     pcol=left_recv_pcol, coli=left_recv_icol, &\n                                     vprow=left_recv_vrow, vpcol=left_recv_vcol, &\n                                     myvprow=left_myfirstvrow, &\n                                     myvpcol=v_ki + left_myfirstvcol, &\n                                     vpcol_shift=+left_col_nimages, & ! just the opposite as \"send to\"\n                                     shifting='0')\n               ! Calculate which data I receive\n               CALL image_calculator(left_set%image_dist, &\n                                     prow=left_src_prow, rowi=left_src_irow, &\n                                     pcol=left_src_pcol, coli=left_src_icol, &\n                                     vprow=left_src_vrow, vpcol=left_src_vcol, &\n                                     myvprow=left_myfirstvrow, &\n                                     myvpcol=v_ki + left_myfirstvcol, &\n                                     ! receive window moves with the metronome\n                                     vpcol_shift=metronome + left_col_nimages, &\n                                     shifting='L')\n               !\n               IF (use_acc()) THEN\n                  CALL timeset(routineN//\"_acc_sync_left\", handle3)\n                  CALL acc_event_synchronize(left_buffer_comm%mats(1, v_ki + 1)%data_area%d%acc_ready)\n                  CALL timestop(handle3)\n               END IF\n\n               left_src_p = left_pgrid(left_src_prow, left_src_pcol)\n               CALL dbcsr_data_set_pointer( &\n                  area=left_data_rp, &\n                  rsize=left_sizes(idata, left_src_vrow, left_src_vcol), &\n                  csize=1, &\n                  pointee=left_buffer_comm%mats(1, v_ki + 1)%data_area)\n               left_index_rp => left_buffer_comm%mats( &\n                                1, v_ki + 1 &\n                                )%index(1: &\n                                        left_sizes(imeta, left_src_vrow, left_src_vcol))\n               !\n               left_send_p = left_pgrid(left_send_prow, left_send_pcol)\n               left_recv_p = left_pgrid(left_recv_prow, left_recv_pcol)\n               ! These are column-communicator relative\n               IF (dbcsr_mp_has_subgroups(left_mp_obj)) THEN\n                  left_send_p = left_send_pcol\n                  left_recv_p = left_recv_pcol\n                  grp = dbcsr_mp_my_row_group(left_mp_obj)\n               ELSE\n                  grp = dbcsr_mp_group(left_mp_obj)\n               END IF\n               !\n               CALL timeset(routineN//\"_metrocomm4\", handle2)\n               CALL dbcsr_irecv_any(left_data_rp, left_recv_p, &\n                                    grp, left_data_rr(v_ki + 1), tag=left_src_vcol)\n               CALL mp_irecv(left_index_rp, left_recv_p, &\n                             grp, left_index_rr(v_ki + 1), tag=left_src_vcol)\n               CALL dbcsr_isend_any(left_data_sp, left_send_p, &\n                                    grp, left_data_sr(v_ki + 1), tag=left_dst_vcol)\n               CALL mp_isend(left_index_sp, left_send_p, &\n                             grp, left_index_sr(v_ki + 1), tag=left_dst_vcol)\n               dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1\n               CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(2, :), &\n                                         dbcsr_data_get_size(left_data_rp), &\n                                         data_type_byte, &\n                                         dbcsr_mpi_statistics%data_size_breakdown(:, :, 2))\n               CALL timestop(handle2)\n            END DO\n         END IF xfer_left\n         !\n         ! Do multiplication\n         v_ki_left = v_ki_left + 1\n         v_ki_right = v_ki_right + 1\n         IF (debug_mod) THEN\n            CALL dbcsr_print(left_buffer_calc%mats(1, v_ki_left), nodata=.TRUE.)\n            CALL dbcsr_print(right_buffer_calc%mats(v_ki_right, 1), nodata=.TRUE.)\n         END IF\n         !\n         ! from here the code for dbcsr_mm_driver_inner_init was taken\n         !\n         IF (.FALSE.) WRITE (*, *) routineN//\" TICK\", metronome\n         ! Since the right matrix is shifted vertically, the\n         ! received data always has different notions of \"local\n         ! rows\".  Thus the local_rows and global_rows must be\n         ! recalculated.\n         CALL dbcsr_reset_vlocals(right_buffer_calc%mats(v_ki_right, 1), &\n                                  right_set%image_dist)\n         CALL dbcsr_reset_vlocals(left_buffer_calc%mats(1, v_ki_left), &\n                                  left_set%image_dist)\n         !\n         CALL ensure_array_size(k_sizes, ub=array_size(right_buffer_calc%mats(v_ki_right, 1)%local_rows))\n         CALL local_filter(array_data(right_buffer_calc%mats(v_ki_right, 1)%row_blk_size), &\n                           array_size(right_buffer_calc%mats(v_ki_right, 1)%local_rows), &\n                           array_data(right_buffer_calc%mats(v_ki_right, 1)%local_rows), &\n                           k_sizes)\n         !\n         IF (use_acc()) THEN\n            CALL dbcsr_data_host2dev(left_buffer_calc%mats(1, v_ki_left)%data_area)\n            CALL dbcsr_data_host2dev(right_buffer_calc%mats(v_ki_right, 1)%data_area)\n            CALL acc_transpose_blocks(right_buffer_calc%mats(v_ki_right, 1), trs_stackbuf_calc, &\n                                      k_sizes, n_sizes, &\n                                      row_blk_sizes2enum, enum2row_blk_sizes, &\n                                      col_blk_sizes2enum, enum2col_blk_sizes)\n         END IF\n\n         ! Sets the local right-matrix columns\n         IF (otf_filtering) THEN\n            left_norms(:) = huge_norm\n            right_norms(:) = huge_norm\n            CALL calculate_norms(right_buffer_calc%mats(v_ki_right, 1), &\n                                 right_norms, k_sizes, n_sizes)\n            CALL calculate_norms(left_buffer_calc%mats(1, v_ki_left), &\n                                 left_norms, m_sizes, k_sizes)\n         END IF\n\n         ! Wait for left and right buffers transfer to device before proceeding\n         IF (use_acc()) THEN\n            CALL timeset(routineN//\"_sync_h2d\", handle2)\n            CALL acc_device_synchronize()\n            CALL timestop(handle2)\n         END IF\n         !\n         flop_single = 0\n         threads_finished = 0\n\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP SHARED (left_buffer_calc, right_buffer_calc, &\n!$OMP         v_ki_left, v_ki_right, handle2, handle3, &\n!$OMP         product_matrix, multrec,&\n!$OMP         filter_eps, right_norms, left_norms, row_max_epss, &\n!$OMP         keep_sparsity,threads_finished, &\n!$OMP         right_data_sr, right_data_rr, right_index_sr, right_index_rr, &\n!$OMP         left_data_sr, left_data_rr, left_index_sr, left_index_rr, &\n!$OMP         dbcsr_cfg, k_sizes, nvirt_k, metronome) &\n!$OMP PRIVATE (ithread,nthreads,threads_finished_read) &\n!$OMP REDUCTION (+: flop_single)\n         ithread = 0; nthreads = 1\n!$       ithread = omp_get_thread_num(); nthreads = omp_get_num_threads()\n\n         CALL timeset(routineN//\"_multrec\", handle2)\n\n         CALL dbcsr_mm_multrec_multiply(multrec(ithread)%p, &\n                                        left=left_buffer_calc%mats(1, v_ki_left), &\n                                        right=right_buffer_calc%mats(v_ki_right, 1), &\n                                        flop=flop_single, &\n                                        a_norms=left_norms, b_norms=right_norms, &\n                                        k_sizes=k_sizes)\n\n         IF (metronome == nvirt_k - 1) THEN\n            CALL timeset(routineN//\"_multrec_finalize\", handle3)\n            CALL dbcsr_mm_multrec_finalize(multrec(ithread)%p)\n            DEALLOCATE (multrec(ithread)%p)\n            CALL timestop(handle3)\n         END IF\n\n!$OMP ATOMIC\n         threads_finished = threads_finished + 1\n         IF (dbcsr_cfg%use_comm_thread%val .AND. (ithread .EQ. 0)) THEN\n            DO\n! requires OMP 3.1 (e.g. gcc >=4.7), for correctness, otherwise we keep fingers crossed\n#if defined _OPENMP && _OPENMP >= 200711\n!$OMP                 ATOMIC READ\n#endif\n               threads_finished_read = threads_finished\n               IF (threads_finished_read .EQ. nthreads) EXIT\n               CALL mp_testany(right_data_sr)\n               CALL mp_testany(right_data_rr)\n               CALL mp_testany(left_data_sr)\n               CALL mp_testany(left_data_rr)\n               CALL mp_testany(right_index_sr)\n               CALL mp_testany(right_index_rr)\n               CALL mp_testany(left_index_sr)\n               CALL mp_testany(left_index_rr)\n            END DO\n         END IF\n!$OMP BARRIER\n         CALL timestop(handle2)\n\n!$OMP END PARALLEL\n         flop_total = flop_total + flop_single\n         !\n         ! Move to the next images\n         IF (v_ki_left .EQ. left_col_nimages) THEN\n            CALL dbcsr_switch(left_buffer_calc, left_buffer_comm)\n         END IF\n         IF (v_ki_right .EQ. right_row_nimages) THEN\n            CALL dbcsr_switch(right_buffer_calc, right_buffer_comm)\n            CALL dbcsr_switch(trs_stackbuf_calc, trs_stackbuf_comm)\n         END IF\n\n      END DO grouped_k_index\n      CALL timestop(handle1)\n      CALL m_memory(mem)\n      max_memory = MAX(max_memory, REAL(mem))\n\n      IF (use_acc()) THEN\n         CALL dbcsr_data_release(trs_stackbuf_1)\n         CALL dbcsr_data_release(trs_stackbuf_2)\n         DEALLOCATE (row_blk_sizes2enum, enum2row_blk_sizes)\n         DEALLOCATE (col_blk_sizes2enum, enum2col_blk_sizes)\n      END IF\n\n      IF (ALLOCATED(right_norms)) THEN\n         DEALLOCATE (right_norms)\n      END IF\n      IF (ALLOCATED(left_norms)) THEN\n         DEALLOCATE (left_norms)\n      END IF\n      IF (ALLOCATED(row_max_epss)) THEN\n         DEALLOCATE (row_max_epss)\n      END IF\n      !\n      CALL dbcsr_destroy_array(right_buffer_2)\n      CALL dbcsr_destroy_array(left_buffer_2)\n      DEALLOCATE (my_sizes)\n      !\n      CALL dbcsr_data_clear_pointer(left_data_sp)\n      CALL dbcsr_data_clear_pointer(left_data_rp)\n      CALL dbcsr_data_clear_pointer(right_data_sp)\n      CALL dbcsr_data_clear_pointer(right_data_rp)\n      CALL dbcsr_data_release(left_data_sp)\n      CALL dbcsr_data_release(left_data_rp)\n      CALL dbcsr_data_release(right_data_sp)\n      CALL dbcsr_data_release(right_data_rp)\n      !\n      DEALLOCATE (left_data_rr, left_data_sr, left_index_rr, left_index_sr, &\n                  right_data_rr, right_data_sr, right_index_rr, right_index_sr)\n      !\n      !\n      IF (debug_mod) THEN\n         v_ki = 0\n         DO i = 1, SIZE(product_matrix%blk_p)\n            v_ki = MAX(v_ki, ABS(product_matrix%blk_p(i)))\n         END DO\n         WRITE (*, *) routineN//\" Actual final size\", &\n            LOG(REAL(dbcsr_data_get_size(product_matrix%data_area)))/LOG(10.0), &\n            LOG(REAL(v_ki))/LOG(10.0)\n      END IF\n      !\n      flop = flop_total\n      DEALLOCATE (left_buffer_2, right_buffer_2)\n      DEALLOCATE (m_sizes, n_sizes)\n      IF (ASSOCIATED(k_sizes)) DEALLOCATE (k_sizes)\n      !\n      CALL timestop(handle)\n   END SUBROUTINE multiply_cannon\n\n   SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, &\n                                  retain_sparsity, &\n                                  filter_eps, flop, keep_product_data)\n      !! Multiplies two DBCSR matrices\n      !!\n      !! This function is expected to be called only if __DBCSR_ACC_G2G\n      !! is enabled and the data type is FP64.\n      !!\n      !! If __DBCSR_ACC is enabled, norms are calculated on the GPU and\n      !! MPI calls reference buffers on the GPU device. Input matrices\n      !! are copied from host to device only once. For the right matrix,\n      !! transpose kernel is also called only once and the transposed\n      !! matrix is transferred over MPI to neighbors.\n      !!\n      !! If __DBCSR_ACC is not enabled, all calculations are performed on\n      !! the CPU and MPI calls reference host buffers.\n\n      TYPE(dbcsr_2d_array_type), POINTER                 :: left_set, right_set\n         !! set of imaged left matrices\n         !! set of imaged right matrices\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: product_matrix\n         !! DBCSR product matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity\n         !! retain the sparsity of the existing product matrix; default is no\n      REAL(kind=real_8), INTENT(in), OPTIONAL            :: filter_eps\n      INTEGER(KIND=int_8), INTENT(OUT)                   :: flop\n         !! effective flop\n      LOGICAL, INTENT(IN)                                :: keep_product_data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'multiply_cannon'\n      INTEGER, PARAMETER                                 :: idata = 1, ileft = 0, imeta = 2, &\n                                                            iright = 2\n\n      INTEGER :: data_type, data_type_byte, handle, handle1, handle2, handle3, i, ithread, &\n                 left_col_image, left_col_mult, left_col_nimages, left_dst_icol, left_dst_irow, &\n                 left_dst_p, left_dst_pcol, left_dst_prow, left_dst_vcol, left_dst_vrow, left_max_nblks, &\n                 left_max_nze, left_myfirstvcol, left_myfirstvrow, left_mypcol, left_myprow, left_npcols, &\n                 left_nprows, left_recv_icol, left_recv_irow, left_recv_p, left_recv_pcol, left_recv_prow, &\n                 left_recv_vcol, left_recv_vrow, left_row_image, left_row_mult, left_row_nimages, &\n                 left_send_icol, left_send_irow, left_send_p, left_send_pcol, left_send_prow\n      INTEGER :: left_send_vcol, left_send_vrow, left_src_icol, left_src_irow, left_src_p, &\n                 left_src_pcol, left_src_prow, left_src_vcol, left_src_vrow, metronome, min_nimages, &\n                 mynode, nblkrows_used, nsteps_k, nthreads, numnodes, nvirt_k, &\n                 output_unit, right_col_image, right_col_mult, right_col_nimages, right_dst_icol, &\n                 right_dst_irow, right_dst_p, right_dst_pcol, right_dst_prow, right_dst_vcol, &\n                 right_dst_vrow, right_max_nblks, right_max_nze, right_myfirstvcol, right_myfirstvrow, &\n                 right_mypcol, right_myprow, right_npcols, right_nprows, right_recv_icol, right_recv_irow\n      INTEGER :: right_recv_p, right_recv_pcol, right_recv_prow, right_recv_vcol, right_recv_vrow, &\n                 right_row_image, right_row_mult, right_row_nimages, right_send_icol, right_send_irow, &\n                 right_send_p, right_send_pcol, right_send_prow, right_send_vcol, right_send_vrow, &\n                 right_src_icol, right_src_irow, right_src_p, right_src_pcol, right_src_prow, &\n                 right_src_vcol, right_src_vrow, row, size_guess, size_guess_init, stat, threads_finished, &\n                 threads_finished_read, v_ki, v_ki_left, v_ki_right, max_nblks\n      INTEGER :: left_numnodes, right_numnodes, left_mynode, right_mynode\n      INTEGER :: msglen\n      INTEGER(KIND=int_8)                                :: flop_single, flop_total, mem\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: row_counts, total_row_counts\n      INTEGER, ALLOCATABLE, DIMENSION(:, :, :)           :: left_sizes, my_sizes, right_sizes\n      INTEGER, ALLOCATABLE, DIMENSION(:, :, :, :)        :: all_sizes\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_blk_sizes2enum, enum2col_blk_sizes, &\n                                                    enum2row_blk_sizes, m_sizes, n_sizes, &\n                                                    row_blk_sizes2enum, left_index_rp, left_index_sp, &\n                                                    right_index_rp, right_index_sp\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: k_sizes\n      INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS      :: left_pgrid, product_pgrid, right_pgrid\n      INTEGER, SAVE                                      :: mult_id = 0\n      LOGICAL                                            :: keep_sparsity, list_indexing, &\n                                                            otf_filtering\n      LOGICAL                                            :: copy_left, copy_right\n\n      REAL(kind=sp), ALLOCATABLE, DIMENSION(:) :: left_norms, right_norms, &\n                                                  row_max_epss\n      REAL(kind=sp)                            :: filter_eps_sp\n      TYPE(dbcsr_2d_array_type), POINTER :: left_buffer_2, left_buffer_calc, &\n                                            left_buffer_comm, right_buffer_2, right_buffer_calc, right_buffer_comm\n      TYPE(dbcsr_data_obj)                     :: left_data_rp, left_data_sp, &\n                                                  right_data_rp, right_data_sp\n      TYPE(dbcsr_data_obj), POINTER            :: trs_stackbuf_calc, &\n                                                  trs_stackbuf_comm\n      TYPE(dbcsr_data_obj), TARGET             :: trs_stackbuf_1, trs_stackbuf_2\n      TYPE(dbcsr_data_obj)                     :: normsbuf, offsetsbuf, nelemsbuf\n      TYPE(dbcsr_mm_multrec_type_p), DIMENSION(:), ALLOCATABLE :: multrec\n      TYPE(dbcsr_mp_obj)                       :: left_mp_obj, product_mp_obj, &\n                                                  right_mp_obj\n      TYPE(mp_comm_type)                       :: grp, left_grp, right_grp, mp_group\n      TYPE(mp_request_type), DIMENSION(:), ALLOCATABLE :: left_data_rr, left_data_sr, left_index_rr, &\n                                                         left_index_sr, right_data_rr, right_data_sr, right_index_rr, right_index_sr\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      NULLIFY (trs_stackbuf_calc, trs_stackbuf_comm)\n      NULLIFY (row_blk_sizes2enum, enum2row_blk_sizes)\n      NULLIFY (col_blk_sizes2enum, enum2col_blk_sizes)\n      NULLIFY (k_sizes)\n      !\n      ALLOCATE (left_buffer_2, right_buffer_2)\n      mult_id = mult_id + 1\n\n      IF (PRESENT(retain_sparsity)) THEN\n         keep_sparsity = retain_sparsity\n      ELSE\n         keep_sparsity = .FALSE.\n      END IF\n      otf_filtering = PRESENT(filter_eps)\n\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP SHARED (multrec, nthreads, product_matrix)\n!$OMP MASTER\n      nthreads = 1\n!$    nthreads = OMP_GET_NUM_THREADS()\n      IF (.NOT. ASSOCIATED(product_matrix%wms)) &\n         DBCSR_ABORT(\"Work matrices do not exist\")\n      IF (SIZE(product_matrix%wms) .NE. nthreads) &\n         DBCSR_ABORT(\"Work matrices not correctly sized.\")\n      ALLOCATE (multrec(0:nthreads - 1))\n!$OMP END MASTER\n!$OMP END PARALLEL\n\n      output_unit = default_output_unit\n      flop_total = 0\n      ! Set up variables\n      data_type = dbcsr_get_data_type(product_matrix)\n      data_type_byte = dbcsr_datatype_sizeof(data_type)\n      left_row_nimages = left_set%image_dist%i%row_decimation\n      left_row_mult = left_set%image_dist%i%row_multiplicity\n      left_col_nimages = left_set%image_dist%i%col_decimation\n      left_col_mult = left_set%image_dist%i%col_multiplicity\n      right_row_nimages = right_set%image_dist%i%row_decimation\n      right_row_mult = right_set%image_dist%i%row_multiplicity\n      right_col_nimages = right_set%image_dist%i%col_decimation\n      right_col_mult = right_set%image_dist%i%col_multiplicity\n      left_mp_obj = dbcsr_distribution_mp(left_set%image_dist%i%main)\n      right_mp_obj = dbcsr_distribution_mp(right_set%image_dist%i%main)\n      product_mp_obj = dbcsr_distribution_mp(product_matrix%dist)\n      numnodes = dbcsr_mp_numnodes(product_mp_obj)\n      mynode = dbcsr_mp_mynode(product_mp_obj)\n      left_nprows = dbcsr_mp_nprows(left_mp_obj)\n      left_npcols = dbcsr_mp_npcols(left_mp_obj)\n      left_myprow = dbcsr_mp_myprow(left_mp_obj)\n      left_mypcol = dbcsr_mp_mypcol(left_mp_obj)\n      left_myfirstvrow = dbcsr_mp_myprow(left_mp_obj)*left_row_nimages\n      left_myfirstvcol = dbcsr_mp_mypcol(left_mp_obj)*left_col_nimages\n      right_nprows = dbcsr_mp_nprows(right_mp_obj)\n      right_npcols = dbcsr_mp_npcols(right_mp_obj)\n      right_myprow = dbcsr_mp_myprow(right_mp_obj)\n      right_mypcol = dbcsr_mp_mypcol(right_mp_obj)\n      right_myfirstvrow = dbcsr_mp_myprow(right_mp_obj)*right_row_nimages\n      right_myfirstvcol = dbcsr_mp_mypcol(right_mp_obj)*right_col_nimages\n      mp_group = dbcsr_mp_group(product_mp_obj)\n      left_pgrid => dbcsr_mp_pgrid(left_mp_obj)\n      right_pgrid => dbcsr_mp_pgrid(right_mp_obj)\n      product_pgrid => dbcsr_mp_pgrid(product_mp_obj)\n      CALL dbcsr_mp_grid_setup(product_mp_obj)\n      CALL dbcsr_mp_grid_setup(left_mp_obj)\n      CALL dbcsr_mp_grid_setup(right_mp_obj)\n      !\n      ! Dummy checks\n      ! left/right matching\n      IF (left_col_nimages .NE. right_row_mult) &\n         DBCSR_ABORT(\"Left/Right image mismatch\")\n      IF (left_col_mult .NE. right_row_nimages) &\n         DBCSR_ABORT(\"Left/Right image mismatch\")\n      IF (left_col_nimages*left_npcols .NE. right_row_nimages*right_nprows) &\n         DBCSR_ABORT(\"Left/Right total mismatch\")\n      ! product/left matching\n      IF (left_row_mult*dbcsr_mp_nprows(product_mp_obj) .NE. left_row_nimages*left_nprows) &\n         DBCSR_ABORT(\"Product/Left total mismatch\")\n      ! product/left matching\n      IF (right_col_mult*dbcsr_mp_npcols(product_mp_obj) .NE. right_col_nimages*right_npcols) &\n         DBCSR_ABORT(\"Product/Right total mismatch\")\n      ! Limitations\n      IF (left_row_nimages .NE. 1) &\n         DBCSR_ABORT(\"Product/Left matrix process grid mismatch\")\n      IF (left_row_mult .NE. 1) &\n         DBCSR_ABORT(\"Product/Left matrix process grid mismatch\")\n      IF (right_col_nimages .NE. 1) &\n         DBCSR_ABORT(\"Product/Right matrix process grid mismatch\")\n      IF (right_col_mult .NE. 1) &\n         DBCSR_ABORT(\"Product/Right matrix process grid mismatch\")\n\n      dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, left_row_nimages*left_col_nimages)\n      dbcsr_mpi_statistics%nimages = MAX(dbcsr_mpi_statistics%nimages, right_row_nimages*right_col_nimages)\n      !\n      ! Exchange size data\n      ALLOCATE (my_sizes(4, MAX(left_row_nimages, right_row_nimages), &\n                         MAX(left_col_nimages, right_col_nimages)))\n      my_sizes(:, :, :) = 0\n      DO left_row_image = 1, left_row_nimages\n         DO left_col_image = 1, left_col_nimages\n            my_sizes(idata + ileft, left_row_image, left_col_image) &\n               = dbcsr_data_get_size_referenced( &\n                 left_set%mats(left_row_image, left_col_image)%data_area)\n            my_sizes(imeta + ileft, left_row_image, left_col_image) = &\n               left_set%mats(left_row_image, left_col_image)%index &\n               (dbcsr_slot_size)\n         END DO\n      END DO\n\n      DO right_row_image = 1, right_row_nimages\n         DO right_col_image = 1, right_col_nimages\n            my_sizes(idata + iright, right_row_image, right_col_image) &\n               = dbcsr_data_get_size_referenced( &\n                 right_set%mats(right_row_image, right_col_image)%data_area)\n            my_sizes(imeta + iright, right_row_image, right_col_image) = &\n               right_set%mats(right_row_image, right_col_image)%index &\n               (dbcsr_slot_size)\n         END DO\n      END DO\n\n      ALLOCATE (all_sizes(4, LBOUND(my_sizes, 2):UBOUND(my_sizes, 2), &\n                          LBOUND(my_sizes, 3):UBOUND(my_sizes, 3), 0:numnodes - 1))\n      CALL mp_allgather(my_sizes, all_sizes, mp_group)\n      !\n      ! Count the maximum possible multiplies per row for on-the-fly\n      ! filtering.\n      per_row_eps: IF (.NOT. otf_filtering) THEN\n         ! These arrays must be valid when passed to called subroutines.\n         ALLOCATE (left_norms(0), right_norms(0), row_max_epss(0), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory\")\n      ELSE\n         IF (careful_mod) THEN\n            IF (left_set%mats(1, 1)%bcsc) &\n               DBCSR_ABORT(\"Can not do on-the-fly filtering with CSC-indexed matrices.\")\n         END IF\n         IF (dbcsr_has_local_row_index(left_set%mats(1, 1))) THEN\n            nblkrows_used = dbcsr_nblkrows_local(left_set%mats(1, 1))\n         ELSE\n            nblkrows_used = dbcsr_nblkrows_total(left_set%mats(1, 1))\n         END IF\n         ALLOCATE (row_max_epss(nblkrows_used), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory for left epsilons\")\n         ALLOCATE (row_counts(nblkrows_used), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory for left row counts\")\n         ! The summation could be done prow-locally but it would\n         ! complicate the pre-row eps calculation.\n         ALLOCATE (total_row_counts(nblkrows_used), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory for left row counts\")\n         ! Each prow member matrix (npcols * row_images) counts the\n         ! blocks present in each of its rows.\n         total_row_counts(:) = 0\n         DO left_row_image = 1, left_row_nimages\n            DO left_col_image = 1, left_col_nimages\n               list_indexing = &\n                  left_set%mats(left_row_image, left_col_image)%list_indexing\n               IF (careful_mod) THEN\n                  IF (list_indexing) THEN\n                     IF ((left_set%mats(left_row_image, left_col_image)%nblks)*3 .NE. &\n                         SIZE(left_set%mats(left_row_image, left_col_image)%coo_l)) &\n                        DBCSR_ABORT(\"Row count mismatch\")\n                  ELSE\n                     IF (nblkrows_used + 1 .NE. SIZE(left_set%mats(left_row_image, left_col_image)%row_p)) &\n                        DBCSR_ABORT(\"Row count mismatch\")\n                  END IF\n               END IF\n               IF (list_indexing) THEN\n                  CALL count_bins( &\n                     left_set%mats(left_row_image, left_col_image)%nblks, &\n                     left_set%mats(left_row_image, left_col_image)%coo_l(1::3), &\n                     nblkrows_used, row_counts)\n               ELSE\n                  CALL dbcsr_count_row_index( &\n                     left_set%mats(left_row_image, left_col_image)%row_p, &\n                     row_counts, nblkrows_used)\n               END IF\n               total_row_counts(:) = total_row_counts(:) &\n                                     + row_counts(:)\n            END DO\n         END DO\n         ! The counted blocks are then summed up\n         CALL mp_sum(total_row_counts, dbcsr_mp_my_row_group(product_mp_obj))\n         ! and used to determine the maximum per-block epsilon.\n         filter_eps_sp = REAL(filter_eps, KIND=KIND(row_max_epss))\n!$OMP PARALLEL DO DEFAULT (NONE) &\n!$OMP SHARED(nblkrows_used,row_max_epss,filter_eps_sp,&\n!$OMP        total_row_counts)\n         DO row = 1, nblkrows_used\n            row_max_epss(row) &\n               = (filter_eps_sp &\n                  /REAL(MAX(1, total_row_counts(row)), KIND=KIND(row_max_epss)))**2\n         END DO\n!$OMP END PARALLEL DO\n         !\n         DEALLOCATE (row_counts)\n         DEALLOCATE (total_row_counts)\n      END IF per_row_eps\n      !\n      ! The main transfer loop goes through the virtual rows/columns.\n      ! The number of steps may be smaller if the grid dimension is very\n      ! non-optimal (both left column images and right row images are >\n      ! 1).\n      min_nimages = MIN(left_col_nimages, right_row_nimages)\n      nvirt_k = left_npcols*left_col_nimages\n      nsteps_k = nvirt_k/min_nimages\n      !\n      ! Translate the all_sizes to account for pre-distribution.  This\n      ! is just done to simplify lookups.\n      ALLOCATE (left_sizes(2, 0:left_nprows*left_row_nimages - 1, 0:nvirt_k - 1))\n      left_sizes = -1\n      DO left_src_vcol = 0, left_col_nimages*left_npcols - 1\n         DO left_src_vrow = 0, left_row_nimages*left_nprows - 1\n            ! Calculate what was shifted.  The left_src_v{row,col} are\n            ! the \"source\" rows/columns; the left_dst are the shifted\n            ! targets where the data was placed in make_images.\n            CALL image_calculator(left_set%image_dist, &\n                                  prow=left_dst_prow, pcol=left_dst_pcol, &\n                                  rowi=left_dst_irow, coli=left_dst_icol, &\n                                  myvprow=left_src_vrow, myvpcol=left_src_vcol, &\n                                  shifting='l')\n            left_dst_p = left_pgrid(left_dst_prow, left_dst_pcol)\n            left_sizes(idata, left_src_vrow, left_src_vcol) = &\n               all_sizes( &\n               idata + ileft, left_dst_irow, left_dst_icol, left_dst_p)\n            left_sizes(imeta, left_src_vrow, left_src_vcol) = &\n               all_sizes( &\n               imeta + ileft, left_dst_irow, left_dst_icol, left_dst_p)\n         END DO\n      END DO\n      !\n      ALLOCATE (right_sizes(2, 0:nvirt_k - 1, 0:right_npcols*right_col_nimages - 1))\n      right_sizes = -1\n      DO right_src_vcol = 0, right_col_nimages*right_npcols - 1\n         DO right_src_vrow = 0, right_row_nimages*right_nprows - 1\n            ! Calculate what was shifted.  The right_src_v{row,col} are\n            ! the \"source\" rows/columns; the right_dst are the shifted\n            ! targets where the data was placed in make_images.\n            CALL image_calculator(right_set%image_dist, &\n                                  prow=right_dst_prow, pcol=right_dst_pcol, &\n                                  rowi=right_dst_irow, coli=right_dst_icol, &\n                                  myvprow=right_src_vrow, myvpcol=right_src_vcol, &\n                                  shifting='r')\n            right_dst_p = right_pgrid(right_dst_prow, right_dst_pcol)\n            right_sizes(idata, right_src_vrow, right_src_vcol) = &\n               all_sizes( &\n               idata + iright, right_dst_irow, right_dst_icol, right_dst_p)\n            right_sizes(imeta, right_src_vrow, right_src_vcol) = &\n               all_sizes( &\n               imeta + iright, right_dst_irow, right_dst_icol, right_dst_p)\n         END DO\n      END DO\n      !\n      ! Setup product work areas\n      left_max_nze = MAXVAL(all_sizes(idata + ileft, :, :, :))\n      left_max_nblks = MAXVAL(all_sizes(imeta + ileft, :, :, :))\n      right_max_nze = MAXVAL(all_sizes(idata + iright, :, :, :))\n      right_max_nblks = MAXVAL(all_sizes(imeta + iright, :, :, :))\n      !!\n      ! Evaluate sizes for workspaces\n      IF (.NOT. keep_sparsity) THEN\n         IF (use_acc()) THEN\n            size_guess_init = product_matrix_size_guess(left_set%mats(1, 1), right_set%mats(1, 1), product_matrix, &\n                                                        left_max_nze, right_max_nze, &\n                                                        left_col_nimages, right_row_nimages, &\n                                                        nthreads)\n         ELSE\n            size_guess_init = 1\n         END IF\n      END IF\n      ithread = 0\n!$OMP PARALLEL DEFAULT(NONE) &\n!$OMP          PRIVATE (i, size_guess, ithread) &\n!$OMP          SHARED (product_matrix, left_max_nze, right_max_nze) &\n!$OMP          SHARED (left_set, right_set, &\n!$OMP                 left_col_nimages, right_row_nimages) &\n!$OMP          SHARED (nthreads, keep_sparsity, mynode, size_guess_init)\n      !\n!$    ithread = OMP_GET_THREAD_NUM()\n      ! The work arrays have to be setup (actually, not quite sure).\n      i = ithread + 1\n      size_guess = product_matrix%wms(i)%datasize ! Should be minimal\n      IF (.NOT. keep_sparsity) THEN\n         size_guess = MAX(size_guess, size_guess_init)\n      END IF\n      CALL dbcsr_data_ensure_size(product_matrix%wms(i)%data_area, &\n                                  size_guess)\n      CALL dbcsr_data_set_size_referenced(product_matrix%wms(i)%data_area, &\n                                          product_matrix%wms(i)%datasize)\n      ! XXXXXXX a quick fix right now, allocation with size 1 might actually not be needed at all,\n      !         but something expects this to be associated\n      CALL ensure_array_size(product_matrix%wms(i)%row_i, ub=1)\n      CALL ensure_array_size(product_matrix%wms(i)%col_i, ub=1)\n      CALL ensure_array_size(product_matrix%wms(i)%blk_p, ub=1)\n!$OMP END PARALLEL\n\n      ! update capacity of memory-pools, +1 for the dense case\n      IF (ASSOCIATED(memtype_abpanel_1%pool)) &\n         CALL dbcsr_mempool_limit_capacity(memtype_abpanel_1%pool, &\n                                           capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1)\n      IF (ASSOCIATED(memtype_abpanel_2%pool)) &\n         CALL dbcsr_mempool_limit_capacity(memtype_abpanel_2%pool, &\n                                           capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1)\n      IF (use_acc()) THEN\n         ! enumerate the blocksizes to keep the following 2D-arrays small.\n         CALL enumerate_blk_sizes(right_set%mats(1, 1)%row_blk_size%low%data, &\n                                  dbcsr_max_row_size(right_set%mats(1, 1)), &\n                                  row_blk_sizes2enum, enum2row_blk_sizes)\n         CALL enumerate_blk_sizes(right_set%mats(1, 1)%col_blk_size%low%data, &\n                                  dbcsr_max_col_size(right_set%mats(1, 1)), &\n                                  col_blk_sizes2enum, enum2col_blk_sizes)\n      END IF\n\n      ! Save col and row communicators\n      IF (dbcsr_mp_has_subgroups(right_mp_obj)) THEN\n         right_grp = dbcsr_mp_my_col_group(right_mp_obj)\n      ELSE\n         right_grp = dbcsr_mp_group(right_mp_obj)\n      END IF\n      IF (dbcsr_mp_has_subgroups(left_mp_obj)) THEN\n         left_grp = dbcsr_mp_my_row_group(left_mp_obj)\n      ELSE\n         left_grp = dbcsr_mp_group(left_mp_obj)\n      END IF\n      CALL mp_environ(left_numnodes, left_mynode, left_grp)\n      CALL mp_environ(right_numnodes, right_mynode, right_grp)\n\n      !\n      ! Setup the left buffer matrices\n      !\n      CALL buffer_matrices_ensure_size(left_set, index_size=left_max_nblks, &\n                                       data_size=left_max_nze)\n\n      CALL setup_buffer_matrices(left_buffer_2, left_row_mult, left_col_nimages, &\n                                 left_set%mats(1, 1), index_size=left_max_nblks, &\n                                 data_size=left_max_nze)\n      IF (otf_filtering) THEN\n         ALLOCATE (left_norms(left_max_nblks), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_ABORT(\"Could not allocate memory for left norms\")\n         IF (stat .NE. 0) otf_filtering = .FALSE.\n      END IF\n      left_buffer_calc => left_set\n      left_buffer_comm => left_buffer_2\n      ALLOCATE (left_data_sr(left_col_nimages))\n      ALLOCATE (left_index_sr(left_col_nimages))\n      ALLOCATE (left_data_rr(left_col_nimages))\n      ALLOCATE (left_index_rr(left_col_nimages))\n      left_data_sr = mp_request_null\n      left_data_rr = mp_request_null\n      left_index_sr = mp_request_null\n      left_index_rr = mp_request_null\n\n      ! Setup buffers for right matrix\n      CALL buffer_matrices_ensure_size(right_set, index_size=right_max_nblks, &\n                                       data_size=right_max_nze)\n\n      CALL setup_buffer_matrices(right_buffer_2, right_row_nimages, right_col_mult, &\n                                 right_set%mats(1, 1), index_size=right_max_nblks, data_size=right_max_nze)\n      IF (otf_filtering) THEN\n         ALLOCATE (right_norms(right_max_nblks), stat=stat)\n         IF (stat .NE. 0) &\n            DBCSR_WARN(\"Could not allocate memory for right norms\")\n         IF (stat .NE. 0) otf_filtering = .FALSE.\n\n      END IF\n      IF (use_acc() .and. otf_filtering) THEN\n         max_nblks = MAX(left_max_nblks, right_max_nblks)\n         CALL dbcsr_data_init(normsbuf)\n         CALL dbcsr_data_new(normsbuf, data_type=dbcsr_type_real_4, &\n                             data_size=max_nblks, memory_type=memtype_normsbuf)\n         CALL dbcsr_data_init(offsetsbuf)\n         CALL dbcsr_data_new(offsetsbuf, data_type=dbcsr_type_int_4, &\n                             data_size=max_nblks, memory_type=memtype_offsetsbuf)\n         CALL dbcsr_data_init(nelemsbuf)\n         CALL dbcsr_data_new(nelemsbuf, data_type=dbcsr_type_int_4, &\n                             data_size=max_nblks, memory_type=memtype_nelemsbuf)\n      END IF\n      right_buffer_calc => right_set\n      right_buffer_comm => right_buffer_2\n      ALLOCATE (right_data_sr(right_row_nimages))\n      ALLOCATE (right_index_sr(right_row_nimages))\n      ALLOCATE (right_data_rr(right_row_nimages))\n      ALLOCATE (right_index_rr(right_row_nimages))\n      right_data_sr = mp_request_null\n      right_data_rr = mp_request_null\n      right_index_sr = mp_request_null\n      right_index_rr = mp_request_null\n      !\n      ALLOCATE (m_sizes(dbcsr_nblkrows_local(product_matrix)))\n      CALL local_filter(array_data(product_matrix%row_blk_size), array_size(product_matrix%local_rows), &\n                        array_data(product_matrix%local_rows), m_sizes)\n      ALLOCATE (n_sizes(dbcsr_nblkcols_local(product_matrix)))\n      CALL local_filter(array_data(product_matrix%col_blk_size), array_size(product_matrix%local_cols), &\n                        array_data(product_matrix%local_cols), n_sizes)\n      !\n!$OMP PARALLEL &\n!$OMP DEFAULT (NONE) &\n!$OMP SHARED (left_buffer_comm, right_buffer_comm, product_matrix,&\n!$OMP         keep_sparsity, filter_eps, row_max_epss, multrec, nthreads, &\n!$OMP         right_data_sr, right_data_rr, left_data_sr, left_data_rr,&\n!$OMP         right_index_sr, right_index_rr, left_index_sr, left_index_rr,&\n!$OMP         m_sizes, n_sizes, keep_product_data), &\n!$OMP PRIVATE(ithread)\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      ALLOCATE (multrec(ithread)%p)\n      CALL dbcsr_mm_multrec_init(multrec(ithread)%p, &\n                                 product=product_matrix, &\n                                 keep_sparsity=keep_sparsity, &\n                                 eps=filter_eps, &\n                                 row_max_epss=row_max_epss, &\n                                 block_estimate=MAX(product_matrix%nblks, &\n                                                    left_buffer_comm%mats(1, 1)%nblks, &\n                                                    right_buffer_comm%mats(1, 1)%nblks)/nthreads, &\n                                 right_row_blk_size=array_data(right_buffer_comm%mats(1, 1)%row_blk_size), &\n                                 m_sizes=m_sizes, n_sizes=n_sizes, &\n                                 keep_product_data=keep_product_data)\n!$OMP END PARALLEL\n      !\n      ! Setup indexing\n      CALL setup_rec_index_2d(left_set, left_row_nimages, left_col_nimages)\n      CALL setup_rec_index_2d(right_set, right_row_nimages, right_col_nimages)\n      !\n      ! Setup the send/receive data pointers\n      CALL dbcsr_data_init(left_data_sp)\n      CALL dbcsr_data_init(left_data_rp)\n      CALL dbcsr_data_init(right_data_sp)\n      CALL dbcsr_data_init(right_data_rp)\n      CALL dbcsr_data_new(left_data_sp, data_type)\n      CALL dbcsr_data_new(left_data_rp, data_type)\n      CALL dbcsr_data_new(right_data_sp, data_type)\n      CALL dbcsr_data_new(right_data_rp, data_type)\n\n      ! Setup transpose stackbuffers\n      IF (use_acc()) THEN\n         CALL dbcsr_data_init(trs_stackbuf_1)\n         CALL dbcsr_data_init(trs_stackbuf_2)\n         CALL dbcsr_data_new(trs_stackbuf_1, data_type=dbcsr_type_int_4, &\n                             data_size=2*right_max_nblks, memory_type=memtype_trsbuffer_1)\n         CALL dbcsr_data_new(trs_stackbuf_2, data_type=dbcsr_type_int_4, &\n                             data_size=2*right_max_nblks, memory_type=memtype_trsbuffer_2)\n         trs_stackbuf_calc => trs_stackbuf_1\n         trs_stackbuf_comm => trs_stackbuf_2\n      END IF\n      !\n      ! Reset indices for virtual images\n      v_ki_right = 0\n      v_ki_left = 0\n      !\n      ! Here is the main loop.\n      !\n      ! In the first loop iteration, the data is fetched from the\n      ! sources. In the remaining iterations, the data are exchanged\n      ! among neighbors.  In the last loop only calculations take place.\n      !\n      CALL timeset(routineN//\"_loop\", handle1)\n      copy_left = .true.\n      copy_right = .true.\n      !\n      grouped_k_index: DO metronome = 0, nvirt_k - 1\n         ! Wait for right matrix transfer completion. Wait in all but\n         ! the first loop iteration.\n         CALL timeset(routineN//\"_metrocomm1\", handle2)\n         wait_right: IF (v_ki_right .EQ. right_row_nimages) THEN\n            ! Reset index\n            v_ki_right = 0\n            IF (debug_mod) WRITE (*, '(1X,A)') routineN//\" waiting for right\"\n            !\n            CALL mp_waitall(right_data_sr)\n            CALL mp_waitall(right_data_rr)\n            CALL mp_waitall(right_index_sr)\n            CALL mp_waitall(right_index_rr)\n            !\n            ! Repoint indices of right matrices\n            DO v_ki = 0, right_row_nimages - 1\n               CALL dbcsr_repoint_index(right_buffer_calc%mats(v_ki + 1, 1))\n               right_buffer_calc%mats(v_ki + 1, 1)%valid = .TRUE.\n            END DO\n         END IF wait_right\n         CALL timestop(handle2)\n         !\n         ! Wait for left matrix transfer completion. Wait in all but\n         ! the first loop iteration.\n         CALL timeset(routineN//\"_metrocomm3\", handle2)\n         wait_left: IF (v_ki_left .EQ. left_col_nimages) THEN\n            ! Reset index\n            v_ki_left = 0\n            IF (debug_mod) WRITE (*, '(1X,A)') routineN//\" waiting for left\"\n            CALL mp_waitall(left_data_sr)\n            CALL mp_waitall(left_data_rr)\n            CALL mp_waitall(left_index_sr)\n            CALL mp_waitall(left_index_rr)\n            !\n            ! Repoint indices of left matrices\n            DO v_ki = 0, left_col_nimages - 1\n               CALL dbcsr_repoint_index(left_buffer_calc%mats(1, v_ki + 1))\n               left_buffer_calc%mats(1, v_ki + 1)%valid = .TRUE.\n            END DO\n         END IF wait_left\n         CALL timestop(handle2)\n\n         v_ki_left = v_ki_left + 1\n         v_ki_right = v_ki_right + 1\n\n         IF (debug_mod) THEN\n            CALL dbcsr_print(left_buffer_calc%mats(1, v_ki_left), nodata=.TRUE.)\n            CALL dbcsr_print(right_buffer_calc%mats(v_ki_right, 1), nodata=.TRUE.)\n         END IF\n         !\n         ! from here the code for dbcsr_mm_driver_inner_init was taken\n         !\n         IF (.FALSE.) WRITE (*, *) routineN//\" TICK\", metronome\n         ! Since the right matrix is shifted vertically, the\n         ! received data always has different notions of \"local\n         ! rows\".  Thus the local_rows and global_rows must be\n         ! recalculated.\n         CALL dbcsr_reset_vlocals(right_buffer_calc%mats(v_ki_right, 1), &\n                                  right_set%image_dist)\n         CALL dbcsr_reset_vlocals(left_buffer_calc%mats(1, v_ki_left), &\n                                  left_set%image_dist)\n         !\n         CALL ensure_array_size(k_sizes, ub=array_size(right_buffer_calc%mats(v_ki_right, 1)%local_rows))\n         CALL local_filter(array_data(right_buffer_calc%mats(v_ki_right, 1)%row_blk_size), &\n                           array_size(right_buffer_calc%mats(v_ki_right, 1)%local_rows), &\n                           array_data(right_buffer_calc%mats(v_ki_right, 1)%local_rows), &\n                           k_sizes)\n         !\n         ! Transfer left and right buffers from host to GPU memory\n         IF (use_acc()) THEN\n            IF (copy_left) THEN\n               ! copy left buffer images to device\n               DO v_ki = 1, left_col_nimages\n                  CALL dbcsr_data_host2dev(left_buffer_calc%mats(1, v_ki)%data_area)\n                  CALL timeset(routineN//\"_sync_h2d\", handle2)\n                  CALL acc_stream_synchronize(left_buffer_calc%mats(1, v_ki)%data_area%d%memory_type%acc_stream)\n                  CALL timestop(handle2)\n               END DO\n               copy_left = .false.\n            END IF\n            ! calculate norms for matrices in left buffer\n            IF (otf_filtering) THEN\n               left_norms(:) = huge_norm\n               CALL acc_calculate_norms(left_buffer_calc%mats(1, v_ki_left), &\n                                        left_norms, normsbuf, offsetsbuf, nelemsbuf, m_sizes, k_sizes)\n            END IF\n\n            IF (copy_right) THEN\n               ! copy right buffer images to device\n               DO v_ki = 1, right_row_nimages\n                  CALL dbcsr_data_host2dev(right_buffer_calc%mats(v_ki, 1)%data_area)\n                  CALL timeset(routineN//\"_sync_h2d\", handle2)\n                  CALL acc_stream_synchronize(right_buffer_calc%mats(v_ki, 1)%data_area%d%memory_type%acc_stream)\n                  CALL timestop(handle2)\n\n                  ! now transpose right buffer image\n                  CALL acc_transpose_blocks(right_buffer_calc%mats(v_ki, 1), trs_stackbuf_calc, &\n                                            k_sizes, n_sizes, &\n                                            row_blk_sizes2enum, enum2row_blk_sizes, &\n                                            col_blk_sizes2enum, enum2col_blk_sizes)\n               END DO\n               ! Wait for transpose to complete before proceeding\n               CALL timeset(routineN//\"_sync_h2d\", handle2)\n               CALL acc_stream_synchronize(trs_stackbuf_calc%d%memory_type%acc_stream)\n               CALL timestop(handle2)\n               copy_right = .false.\n            END IF\n            ! calculate norms for matrices in right buffer\n            IF (otf_filtering) THEN\n               right_norms(:) = huge_norm\n               CALL acc_calculate_norms(right_buffer_calc%mats(v_ki_right, 1), &\n                                        right_norms, normsbuf, offsetsbuf, nelemsbuf, k_sizes, n_sizes)\n            END IF\n         END IF\n         !\n         ! Right matrix transfer. Transfer in all but the last loop\n         ! iteration.\n         xfer_right: IF (v_ki_right .EQ. 1 .AND. metronome + right_row_nimages .LT. nvirt_k) THEN\n            DO v_ki = 0, right_row_nimages - 1\n               ! Calculate the process to send to.  It's the virtual\n               ! process row -min_nimages up (i.e., smaller row number)\n               ! from me.\n               CALL image_calculator(right_set%image_dist, &\n                                     prow=right_send_prow, rowi=right_send_irow, & ! output\n                                     pcol=right_send_pcol, coli=right_send_icol, & ! output\n                                     vprow=right_send_vrow, vpcol=right_send_vcol, & ! output\n                                     ! myvprow goes through all of my (process row) images\n                                     myvprow=v_ki + right_myfirstvrow, &\n                                     myvpcol=right_myfirstvcol, & ! nothing happens in the columns\n                                     vprow_shift=-right_row_nimages, &\n                                     shifting='0')\n               ! Calculate which data I send.\n               CALL image_calculator(right_set%image_dist, &\n                                     prow=right_dst_prow, rowi=right_dst_irow, &\n                                     pcol=right_dst_pcol, coli=right_dst_icol, &\n                                     vprow=right_dst_vrow, vpcol=right_dst_vcol, &\n                                     ! myvprows goes through all of my (process row) images\n                                     myvprow=v_ki + right_myfirstvrow, &\n                                     myvpcol=right_myfirstvcol, & ! nothing happens in the columns\n                                     vprow_shift=metronome, &\n                                     ! This is with relative shifting.\n                                     shifting='R')\n               right_dst_p = right_pgrid(right_dst_prow, right_dst_pcol)\n               CALL dbcsr_data_set_pointer( &\n                  area=right_data_sp, &\n                  rsize=right_sizes(idata, right_dst_vrow, right_dst_vcol), &\n                  csize=1, &\n                  pointee=right_buffer_calc%mats(v_ki + 1, 1)%data_area)\n               right_index_sp => right_buffer_calc%mats( &\n                                 v_ki + 1, 1 &\n                                 )%index(1: &\n                                         right_sizes(imeta, right_dst_vrow, right_dst_vcol))\n               !\n               ! Calculate the process to receive from\n               CALL image_calculator(right_set%image_dist, &\n                                     prow=right_recv_prow, rowi=right_recv_irow, &\n                                     pcol=right_recv_pcol, coli=right_recv_icol, &\n                                     vprow=right_recv_vrow, vpcol=right_recv_vcol, &\n                                     myvprow=v_ki + right_myfirstvrow, &\n                                     myvpcol=right_myfirstvcol, &\n                                     vprow_shift=+right_row_nimages, & ! just the opposite as \"send to\"\n                                     shifting='0')\n               ! Calculate which data I receive\n               CALL image_calculator(right_set%image_dist, &\n                                     prow=right_src_prow, rowi=right_src_irow, &\n                                     pcol=right_src_pcol, coli=right_src_icol, &\n                                     vprow=right_src_vrow, vpcol=right_src_vcol, &\n                                     myvprow=v_ki + right_myfirstvrow, &\n                                     myvpcol=right_myfirstvcol, &\n                                     ! receive window moves with the metronome\n                                     vprow_shift=metronome + right_row_nimages, &\n                                     shifting='R')\n               !\n               IF (use_acc()) THEN\n                  CALL timeset(routineN//\"_acc_sync_right\", handle3)\n                  CALL acc_event_synchronize(right_buffer_comm%mats(v_ki + 1, 1)%data_area%d%acc_ready)\n                  CALL timestop(handle3)\n               END IF\n\n               right_src_p = right_pgrid(right_src_prow, right_src_pcol)\n               CALL dbcsr_data_set_pointer( &\n                  area=right_data_rp, &\n                  rsize=right_sizes(idata, right_src_vrow, right_src_vcol), &\n                  csize=1, &\n                  pointee=right_buffer_comm%mats(v_ki + 1, 1)%data_area)\n               right_index_rp => right_buffer_comm%mats( &\n                                 v_ki + 1, 1 &\n                                 )%index(1: &\n                                         right_sizes(imeta, right_src_vrow, right_src_vcol))\n               !\n               right_send_p = right_pgrid(right_send_prow, right_send_pcol)\n               right_recv_p = right_pgrid(right_recv_prow, right_recv_pcol)\n               ! These are column-communicator relative\n               IF (dbcsr_mp_has_subgroups(right_mp_obj)) THEN\n                  right_send_p = right_send_prow\n                  right_recv_p = right_recv_prow\n                  grp = dbcsr_mp_my_col_group(right_mp_obj)\n               ELSE\n                  grp = dbcsr_mp_group(right_mp_obj)\n               END IF\n               !\n               CALL timeset(routineN//\"_metrocomm2\", handle2)\n               IF (.not. use_acc()) THEN\n                  CALL dbcsr_irecv_any(right_data_rp, right_recv_p, &\n                                       grp, right_data_rr(v_ki + 1), tag=right_src_vrow)\n               ELSE\n                  msglen = right_sizes(idata, right_src_vrow, right_src_vcol)\n#if defined (__DBCSR_ACC)\n                  CALL C_F_POINTER(acc_devmem_cptr(right_buffer_comm%mats( &\n                                                   v_ki + 1, 1)%data_area%d%acc_devmem), &\n                                   right_data_rp%d%r_dp, (/msglen/))\n#endif\n                  CALL mp_irecv(right_data_rp%d%r_dp, &\n                                right_recv_p, grp, &\n                                right_data_rr(v_ki + 1), tag=right_src_vrow)\n               END IF\n               CALL mp_irecv(right_index_rp, right_recv_p, &\n                             grp, right_index_rr(v_ki + 1), tag=right_src_vrow)\n               IF (.not. use_acc()) THEN\n                  CALL dbcsr_isend_any(right_data_sp, right_send_p, &\n                                       grp, right_data_sr(v_ki + 1), tag=right_dst_vrow)\n               ELSE\n                  msglen = right_sizes(idata, right_dst_vrow, right_dst_vcol)\n#if defined (__DBCSR_ACC)\n                  CALL C_F_POINTER(acc_devmem_cptr(right_buffer_calc%mats( &\n                                                   v_ki + 1, 1)%data_area%d%acc_devmem), &\n                                   right_data_sp%d%r_dp, (/msglen/))\n#endif\n                  CALL mp_isend(right_data_sp%d%r_dp, &\n                                right_send_p, grp, &\n                                right_data_sr(v_ki + 1), tag=right_dst_vrow)\n               END IF\n               CALL mp_isend(right_index_sp, right_send_p, &\n                             grp, right_index_sr(v_ki + 1), tag=right_dst_vrow)\n               dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1\n               CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(1, :), &\n                                         dbcsr_data_get_size(right_data_rp), &\n                                         data_type_byte, &\n                                         dbcsr_mpi_statistics%data_size_breakdown(:, :, 1))\n               CALL timestop(handle2)\n            END DO\n         END IF xfer_right\n         !\n         ! Left matrix transfer. Transfer in all but the last processor images.\n         xfer_left: IF (v_ki_left .EQ. 1 .AND. metronome + left_col_nimages .LT. nvirt_k) THEN\n            DO v_ki = 0, left_col_nimages - 1\n               ! Calculate the process to send to.\n               CALL image_calculator(left_set%image_dist, &\n                                     prow=left_send_prow, rowi=left_send_irow, & ! output\n                                     pcol=left_send_pcol, coli=left_send_icol, & ! output\n                                     vprow=left_send_vrow, vpcol=left_send_vcol, & ! output\n                                     myvprow=left_myfirstvrow, & ! nothing happens in the rows\n                                     ! go through all my column images\n                                     myvpcol=v_ki + left_myfirstvcol, &\n                                     ! send to process left_col_nimages left in the grid\n                                     vpcol_shift=-left_col_nimages, &\n                                     shifting='0')\n               ! Calculate which data I send.\n               CALL image_calculator(left_set%image_dist, &\n                                     prow=left_dst_prow, rowi=left_dst_irow, &\n                                     pcol=left_dst_pcol, coli=left_dst_icol, &\n                                     vprow=left_dst_vrow, vpcol=left_dst_vcol, &\n                                     myvprow=left_myfirstvrow, &\n                                     ! go through all my column images\n                                     myvpcol=v_ki + left_myfirstvcol, &\n                                     vpcol_shift=metronome, &\n                                     ! This is with relative shifting.\n                                     shifting='L')\n               !\n               left_dst_p = left_pgrid(left_dst_prow, left_dst_pcol)\n               CALL dbcsr_data_set_pointer( &\n                  area=left_data_sp, &\n                  rsize=left_sizes(idata, left_dst_vrow, left_dst_vcol), &\n                  csize=1, &\n                  pointee=left_buffer_calc%mats(1, v_ki + 1)%data_area)\n               left_index_sp => left_buffer_calc%mats( &\n                                1, v_ki + 1 &\n                                )%index(1: &\n                                        left_sizes(imeta, left_dst_vrow, left_dst_vcol))\n               !\n               ! Calculate the process to receive from\n               CALL image_calculator(left_set%image_dist, &\n                                     prow=left_recv_prow, rowi=left_recv_irow, &\n                                     pcol=left_recv_pcol, coli=left_recv_icol, &\n                                     vprow=left_recv_vrow, vpcol=left_recv_vcol, &\n                                     myvprow=left_myfirstvrow, &\n                                     myvpcol=v_ki + left_myfirstvcol, &\n                                     vpcol_shift=+left_col_nimages, & ! just the opposite as \"send to\"\n                                     shifting='0')\n               ! Calculate which data I receive\n               CALL image_calculator(left_set%image_dist, &\n                                     prow=left_src_prow, rowi=left_src_irow, &\n                                     pcol=left_src_pcol, coli=left_src_icol, &\n                                     vprow=left_src_vrow, vpcol=left_src_vcol, &\n                                     myvprow=left_myfirstvrow, &\n                                     myvpcol=v_ki + left_myfirstvcol, &\n                                     ! receive window moves with the metronome\n                                     vpcol_shift=metronome + left_col_nimages, &\n                                     shifting='L')\n               !\n               IF (use_acc()) THEN\n                  CALL timeset(routineN//\"_acc_sync_left\", handle3)\n                  CALL acc_event_synchronize(left_buffer_comm%mats(1, v_ki + 1)%data_area%d%acc_ready)\n                  CALL timestop(handle3)\n               END IF\n\n               left_src_p = left_pgrid(left_src_prow, left_src_pcol)\n               CALL dbcsr_data_set_pointer( &\n                  area=left_data_rp, &\n                  rsize=left_sizes(idata, left_src_vrow, left_src_vcol), &\n                  csize=1, &\n                  pointee=left_buffer_comm%mats(1, v_ki + 1)%data_area)\n               left_index_rp => left_buffer_comm%mats( &\n                                1, v_ki + 1 &\n                                )%index(1: &\n                                        left_sizes(imeta, left_src_vrow, left_src_vcol))\n               !\n               left_send_p = left_pgrid(left_send_prow, left_send_pcol)\n               left_recv_p = left_pgrid(left_recv_prow, left_recv_pcol)\n               ! These are column-communicator relative\n               IF (dbcsr_mp_has_subgroups(left_mp_obj)) THEN\n                  left_send_p = left_send_pcol\n                  left_recv_p = left_recv_pcol\n                  grp = dbcsr_mp_my_row_group(left_mp_obj)\n               ELSE\n                  grp = dbcsr_mp_group(left_mp_obj)\n               END IF\n               !\n               CALL timeset(routineN//\"_metrocomm4\", handle2)\n               IF (.not. use_acc()) THEN\n                  CALL dbcsr_irecv_any(left_data_rp, left_recv_p, &\n                                       grp, left_data_rr(v_ki + 1), tag=left_src_vcol)\n               ELSE\n                  msglen = left_sizes(idata, left_src_vrow, left_src_vcol)\n#if defined (__DBCSR_ACC)\n                  CALL C_F_POINTER(acc_devmem_cptr(left_buffer_comm%mats( &\n                                                   1, v_ki + 1)%data_area%d%acc_devmem), &\n                                   left_data_rp%d%r_dp, (/msglen/))\n#endif\n                  CALL mp_irecv(left_data_rp%d%r_dp, &\n                                left_recv_p, grp, &\n                                left_data_rr(v_ki + 1), tag=left_src_vcol)\n               END IF\n               CALL mp_irecv(left_index_rp, left_recv_p, &\n                             grp, left_index_rr(v_ki + 1), tag=left_src_vcol)\n               IF (.not. use_acc()) THEN\n                  CALL dbcsr_isend_any(left_data_sp, left_send_p, &\n                                       grp, left_data_sr(v_ki + 1), tag=left_dst_vcol)\n               ELSE\n                  msglen = left_sizes(idata, left_dst_vrow, left_dst_vcol)\n#if defined (__DBCSR_ACC)\n                  CALL C_F_POINTER(acc_devmem_cptr(left_buffer_calc%mats( &\n                                                   1, v_ki + 1)%data_area%d%acc_devmem), &\n                                   left_data_sp%d%r_dp, (/msglen/))\n#endif\n                  CALL mp_isend(left_data_sp%d%r_dp, &\n                                left_send_p, grp, &\n                                left_data_sr(v_ki + 1), tag=left_dst_vcol)\n               END IF\n               CALL mp_isend(left_index_sp, left_send_p, &\n                             grp, left_index_sr(v_ki + 1), tag=left_dst_vcol)\n               dbcsr_mpi_statistics%nexchanged = dbcsr_mpi_statistics%nexchanged + 1\n               CALL count_mpi_statistics(dbcsr_mpi_statistics%data_size(2, :), &\n                                         dbcsr_data_get_size(left_data_rp), &\n                                         data_type_byte, &\n                                         dbcsr_mpi_statistics%data_size_breakdown(:, :, 2))\n               CALL timestop(handle2)\n            END DO\n         END IF xfer_left\n\n         ! Do multiplication\n\n         ! If no GPU backend, calculate norms on the CPU\n         IF (otf_filtering .and. .not. use_acc()) THEN\n            left_norms(:) = huge_norm\n            right_norms(:) = huge_norm\n            CALL calculate_norms(right_buffer_calc%mats(v_ki_right, 1), &\n                                 right_norms, k_sizes, n_sizes)\n            CALL calculate_norms(left_buffer_calc%mats(1, v_ki_left), &\n                                 left_norms, m_sizes, k_sizes)\n         END IF\n         !\n         flop_single = 0\n         threads_finished = 0\n\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP SHARED (left_buffer_calc, right_buffer_calc, &\n!$OMP         v_ki_left, v_ki_right, handle2, handle3, &\n!$OMP         product_matrix, multrec,&\n!$OMP         filter_eps, right_norms, left_norms, row_max_epss, &\n!$OMP         keep_sparsity,threads_finished, &\n!$OMP         right_data_sr, right_data_rr, right_index_sr, right_index_rr, &\n!$OMP         left_data_sr, left_data_rr, left_index_sr, left_index_rr, &\n!$OMP         dbcsr_cfg, k_sizes, nvirt_k, metronome) &\n!$OMP PRIVATE (ithread,nthreads,threads_finished_read) &\n!$OMP REDUCTION (+: flop_single)\n         ithread = 0; nthreads = 1\n!$       ithread = omp_get_thread_num(); nthreads = omp_get_num_threads()\n\n         CALL timeset(routineN//\"_multrec\", handle2)\n\n         CALL dbcsr_mm_multrec_multiply(multrec(ithread)%p, &\n                                        left=left_buffer_calc%mats(1, v_ki_left), &\n                                        right=right_buffer_calc%mats(v_ki_right, 1), &\n                                        flop=flop_single, &\n                                        a_norms=left_norms, b_norms=right_norms, &\n                                        k_sizes=k_sizes)\n\n         IF (metronome == nvirt_k - 1) THEN\n            CALL timeset(routineN//\"_multrec_finalize\", handle3)\n            CALL dbcsr_mm_multrec_finalize(multrec(ithread)%p)\n            DEALLOCATE (multrec(ithread)%p)\n            CALL timestop(handle3)\n         END IF\n\n!$OMP ATOMIC\n         threads_finished = threads_finished + 1\n         IF (dbcsr_cfg%use_comm_thread%val .AND. (ithread .EQ. 0)) THEN\n            DO\n! requires OMP 3.1 (e.g. gcc >=4.7), for correctness, otherwise we keep fingers crossed\n#if defined _OPENMP && _OPENMP >= 200711\n!$OMP                 ATOMIC READ\n#endif\n               threads_finished_read = threads_finished\n               IF (threads_finished_read .EQ. nthreads) EXIT\n               ! Using MPI_Testany to trigger forward progress in MPI\n               CALL mp_testany(right_data_sr)\n               CALL mp_testany(right_data_rr)\n               CALL mp_testany(left_data_sr)\n               CALL mp_testany(left_data_rr)\n               CALL mp_testany(right_index_sr)\n               CALL mp_testany(right_index_rr)\n               CALL mp_testany(left_index_sr)\n               CALL mp_testany(left_index_rr)\n            END DO\n         END IF\n!$OMP BARRIER\n         CALL timestop(handle2)\n\n!$OMP END PARALLEL\n         flop_total = flop_total + flop_single\n         !\n         ! Move to the next images\n         IF (v_ki_left .EQ. left_col_nimages) THEN\n            CALL dbcsr_switch(left_buffer_calc, left_buffer_comm)\n         END IF\n         IF (v_ki_right .EQ. right_row_nimages) THEN\n            CALL dbcsr_switch(right_buffer_calc, right_buffer_comm)\n            CALL dbcsr_switch(trs_stackbuf_calc, trs_stackbuf_comm)\n         END IF\n\n      END DO grouped_k_index\n      CALL timestop(handle1)\n      CALL m_memory(mem)\n      max_memory = MAX(max_memory, REAL(mem))\n\n      IF (use_acc()) THEN\n         CALL dbcsr_data_release(trs_stackbuf_1)\n         CALL dbcsr_data_release(trs_stackbuf_2)\n         DEALLOCATE (row_blk_sizes2enum, enum2row_blk_sizes)\n         DEALLOCATE (col_blk_sizes2enum, enum2col_blk_sizes)\n         IF (otf_filtering) THEN\n            CALL dbcsr_data_release(normsbuf)\n            CALL dbcsr_data_release(offsetsbuf)\n            CALL dbcsr_data_release(nelemsbuf)\n         END IF\n      END IF\n\n      IF (ALLOCATED(right_norms)) THEN\n         DEALLOCATE (right_norms)\n      END IF\n      IF (ALLOCATED(left_norms)) THEN\n         DEALLOCATE (left_norms)\n      END IF\n      IF (ALLOCATED(row_max_epss)) THEN\n         DEALLOCATE (row_max_epss)\n      END IF\n      !\n      CALL dbcsr_destroy_array(right_buffer_2)\n      CALL dbcsr_destroy_array(left_buffer_2)\n      DEALLOCATE (my_sizes)\n      !\n      CALL dbcsr_data_clear_pointer(left_data_sp)\n      CALL dbcsr_data_clear_pointer(left_data_rp)\n      CALL dbcsr_data_clear_pointer(right_data_sp)\n      CALL dbcsr_data_clear_pointer(right_data_rp)\n      CALL dbcsr_data_release(left_data_sp)\n      CALL dbcsr_data_release(left_data_rp)\n      CALL dbcsr_data_release(right_data_sp)\n      CALL dbcsr_data_release(right_data_rp)\n      !\n      DEALLOCATE (left_data_rr, left_data_sr, left_index_rr, left_index_sr, &\n                  right_data_rr, right_data_sr, right_index_rr, right_index_sr)\n      !\n      !\n      IF (debug_mod) THEN\n         v_ki = 0\n         DO i = 1, SIZE(product_matrix%blk_p)\n            v_ki = MAX(v_ki, ABS(product_matrix%blk_p(i)))\n         END DO\n         WRITE (*, *) routineN//\" Actual final size\", &\n            LOG(REAL(dbcsr_data_get_size(product_matrix%data_area)))/LOG(10.0), &\n            LOG(REAL(v_ki))/LOG(10.0)\n      END IF\n      !\n      flop = flop_total\n      DEALLOCATE (left_buffer_2, right_buffer_2)\n      DEALLOCATE (m_sizes, n_sizes)\n      IF (ASSOCIATED(k_sizes)) DEALLOCATE (k_sizes)\n      !\n      CALL timestop(handle)\n   END SUBROUTINE multiply_cannon_g2g\n\n   SUBROUTINE setup_buffer_matrices(buffer_set, buff_nrows, buff_ncols, &\n                                    source_matrix, index_size, data_size)\n      TYPE(dbcsr_2d_array_type), INTENT(OUT)             :: buffer_set\n      INTEGER, INTENT(IN)                                :: buff_nrows, buff_ncols\n      TYPE(dbcsr_type), INTENT(IN)                       :: source_matrix\n      INTEGER, INTENT(IN)                                :: index_size\n      INTEGER, INTENT(IN), OPTIONAL                      :: data_size\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'setup_buffer_matrices'\n\n      INTEGER                                            :: col_image, handle, row_image\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      CALL dbcsr_image_dist_init(buffer_set%image_dist)\n      ALLOCATE (buffer_set%mats(buff_nrows, buff_ncols))\n      DO row_image = 1, buff_nrows\n         DO col_image = 1, buff_ncols\n            CALL setup_buffer_matrix(buffer_set%mats(row_image, col_image), &\n                                     source_matrix, index_size, data_size=data_size, &\n                                     data_memory_type=memtype_abpanel_2)\n         END DO\n      END DO\n      IF (source_matrix%local_indexing .AND. careful_mod) THEN\n         IF (.NOT. array_exists(source_matrix%local_rows)) &\n            DBCSR_ABORT(\"Local rows should exist.\")\n         IF (.NOT. array_exists(source_matrix%global_rows)) &\n            DBCSR_ABORT(\"Global rows should exist.\")\n         !\n         IF (.NOT. array_exists(source_matrix%local_cols)) &\n            DBCSR_ABORT(\"Local cols should exist.\")\n         IF (.NOT. array_exists(source_matrix%global_cols)) &\n            DBCSR_ABORT(\"Global cols should exist.\")\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE setup_buffer_matrices\n\n   SUBROUTINE buffer_matrices_ensure_size(buffer_set, index_size, data_size)\n      !! Enlarge left_set and right_set to hold any a/b-panel.\n      !! left_set and right_set are created by make_images to hold the a/b-panels\n      !! used for the initial cannon-tick. This routine ensures that these buffers\n      !! can hold any a/b-panel occurring during a matrix multiply and makes them\n      !! therefore suitable as buffers for the entire cannon algorithm.\n      !! This saves memory since no separate buffers for the first cannon-tick\n      !! have to be allocated.\n\n      TYPE(dbcsr_2d_array_type), INTENT(INOUT)           :: buffer_set\n      INTEGER, INTENT(IN)                                :: index_size, data_size\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'buffer_matrices_ensure_size'\n\n      INTEGER                                            :: col_image, handle, row_image\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      DO row_image = 1, SIZE(buffer_set%mats, 1)\n         DO col_image = 1, SIZE(buffer_set%mats, 2)\n            CALL dbcsr_data_ensure_size(buffer_set%mats(row_image, col_image)%data_area, &\n                                        data_size)\n            CALL ensure_array_size(buffer_set%mats(row_image, col_image)%index, &\n                                   ub=index_size, &\n                                   memory_type=dbcsr_get_index_memory_type(buffer_set%mats(row_image, col_image)))\n            CALL dbcsr_repoint_index(buffer_set%mats(row_image, col_image))\n         END DO\n      END DO\n      CALL timestop(handle)\n   END SUBROUTINE buffer_matrices_ensure_size\n\n   SUBROUTINE setup_rec_index_2d(matrix_set, n_rows, n_cols)\n      TYPE(dbcsr_2d_array_type), INTENT(INOUT)           :: matrix_set\n      INTEGER, INTENT(IN)                                :: n_rows, n_cols\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'setup_rec_index_2d'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: handle, i_col, i_row, t_f, t_l, t_size\n\n!$    INTEGER                                  :: ithread\n      LOGICAL                                  :: thread_redist\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      DO i_row = 1, n_rows\n         DO i_col = 1, n_cols\n            IF (.FALSE.) &\n               CALL dbcsr_reset_vlocals(matrix_set%mats(i_row, i_col), &\n                                        matrix_set%image_dist)\n            IF (dbg) THEN\n               WRITE (*, *) routineN//\" m, n, size\", &\n                  SIZE(matrix_set%mats(i_row, i_col)%coo_l), &\n                  dbcsr_nblkrows_local(matrix_set%mats(i_row, i_col)), &\n                  dbcsr_nblkcols_local(matrix_set%mats(i_row, i_col))\n               WRITE (*, '(3(1X,I7))') matrix_set%mats(i_row, i_col)%coo_l\n            END IF\n            IF (careful_mod) THEN\n               IF (SIZE(matrix_set%mats(i_row, i_col)%coo_l) .NE. matrix_set%mats(i_row, i_col)%nblks*3) &\n                  DBCSR_ABORT(\"Block count mismatch.\")\n            END IF\n            thread_redist = ASSOCIATED(matrix_set%mats(i_row, i_col)%thr_c)\n            t_size = SIZE(matrix_set%mats(i_row, i_col)%coo_l)/3\n            t_f = 1\n            t_l = t_size\n!$OMP       PARALLEL IF (thread_redist) DEFAULT (NONE) &\n!$OMP       PRIVATE (ithread) &\n!$OMP       FIRSTPRIVATE (t_f, t_l, t_size) &\n!$OMP       SHARED (matrix_set, i_row, i_col, thread_redist)\n!$          ithread = OMP_GET_THREAD_NUM()\n!$          IF (thread_redist) THEN\n!$             t_f = matrix_set%mats(i_row, i_col)%thr_c(ithread + 1) + 1\n!$             t_l = matrix_set%mats(i_row, i_col)%thr_c(ithread + 2)\n!$          END IF\n            t_size = t_l - t_f + 1\n!$OMP       BARRIER\n            IF (t_size .GT. 0) THEN\n               CALL call_rec_sort_index( &\n                  dbcsr_nblkrows_local(matrix_set%mats(i_row, i_col)), &\n                  dbcsr_nblkcols_local(matrix_set%mats(i_row, i_col)), &\n                  t_size, &\n                  matrix_set%mats(i_row, i_col)%coo_l((t_f*3 - 2):(t_l*3)))\n            END IF\n!$OMP       END PARALLEL\n         END DO\n      END DO\n      CALL timestop(handle)\n   END SUBROUTINE setup_rec_index_2d\n\n   SUBROUTINE call_rec_sort_index(m, n, nblks, idx)\n      !! Used to thunk a call to rec_sort_index\n      INTEGER, INTENT(IN)                                :: m, n, nblks\n      INTEGER, DIMENSION(3, 1:nblks), INTENT(INOUT)      :: idx\n\n!   ---------------------------------------------------------------------------\n\n      CALL rec_sort_index(1, m, 1, n, nblks, idx, 0)\n   END SUBROUTINE call_rec_sort_index\n\n   SUBROUTINE dbcsr_switch_sets(set1p, set2p)\n      !! Switches pointers between two matrix sets\n      TYPE(dbcsr_2d_array_type), POINTER                 :: set1p, set2p\n\n      TYPE(dbcsr_2d_array_type), POINTER                 :: tmp_set\n\n!   ---------------------------------------------------------------------------\n\n      tmp_set => set1p\n      set1p => set2p\n      set2p => tmp_set\n   END SUBROUTINE dbcsr_switch_sets\n\n   SUBROUTINE dbcsr_switch_d_ptrs(area1p, area2p)\n      !! Switches pointers between two data areas\n      TYPE(dbcsr_data_obj), POINTER                      :: area1p, area2p\n\n      TYPE(dbcsr_data_obj), POINTER                      :: tmp_p\n\n      tmp_p => area1p\n      area1p => area2p\n      area2p => tmp_p\n   END SUBROUTINE dbcsr_switch_d_ptrs\n\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1, normname1 in inst_params_float\n\n! **************************************************************************************************\n      SUBROUTINE prepare_buffers_${nametype1}$ (negate_real, negate_imaginary, &\n                                                iter, row, col, blk, blk_p, bp, &\n                                                row_size, col_size, nze, nsymmetries, symmetry_i, &\n                                                stored_row, stored_col, tr_row_size, tr_col_size, tr, &\n                                                row_img, col_img, nrow_images, ncol_images, &\n                                                row_img_dist, col_img_dist, predist_type_fwd, blacs2mpi, &\n                                                target_imgdist, prow, pcol, rowi, coli, &\n                                                row_dist, col_dist, dst_p, sm_pos, myt_smp, metalen, &\n                                                sd_pos, myt_sdp, send_meta, sd_disp, &\n                                                data_area, send_data_area, scale_neg_one, scale_value)\n     !! Prepare buffers for multiplications\n         LOGICAL, INTENT(IN)                                     :: negate_real, negate_imaginary\n         TYPE(dbcsr_iterator), INTENT(INOUT)                     :: iter\n         INTEGER, INTENT(INOUT)                                  :: row, col, blk, blk_p, row_size, col_size, &\n                                                                    nze, bp, symmetry_i, &\n                                                                    stored_row, stored_col, tr_row_size, tr_col_size, &\n                                                                    row_img, col_img, prow, pcol, rowi, coli, &\n                                                                    dst_p, sm_pos, sd_pos\n         INTEGER, INTENT(IN)                                     :: nsymmetries, nrow_images, ncol_images, metalen\n         LOGICAL, INTENT(INOUT)                                  :: tr\n         INTEGER, DIMENSION(:), INTENT(IN), CONTIGUOUS, POINTER  :: row_img_dist, col_img_dist, row_dist, col_dist\n         INTEGER, DIMENSION(:), ALLOCATABLE, INTENT(IN)          :: sd_disp\n         INTEGER, DIMENSION(:), ALLOCATABLE, INTENT(INOUT)       :: myt_smp, myt_sdp, send_meta\n         TYPE(dbcsr_imagedistribution_obj), INTENT(IN)           :: target_imgdist\n         INTEGER, DIMENSION(:, :), INTENT(IN), CONTIGUOUS, POINTER :: blacs2mpi\n         CHARACTER, INTENT(IN)                                   :: predist_type_fwd\n         ${type1}$, DIMENSION(:), INTENT(IN), CONTIGUOUS         :: data_area\n         TYPE(dbcsr_data_obj), INTENT(INOUT)                     :: send_data_area\n         TYPE(dbcsr_scalar_type), INTENT(IN)                     :: scale_neg_one\n         TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL           :: scale_value\n\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, blk, blk_p=blk_p, &\n                                           row_size=row_size, col_size=col_size)\n            nze = row_size*col_size\n            IF (nze .EQ. 0) CYCLE\n            bp = ABS(blk_p)\n            DO symmetry_i = 1, nsymmetries\n               IF (symmetry_i .EQ. 1) THEN\n                  stored_row = row; stored_col = col; tr = blk_p .LT. 0\n                  tr_row_size = col_size; tr_col_size = row_size\n               ELSE\n                  IF (row .EQ. col) CYCLE\n                  stored_row = col; stored_col = row; tr = blk_p .GT. 0\n                  tr_row_size = row_size; tr_col_size = col_size\n               END IF\n               ! Where do we send this block?\n               row_img = 1\n               IF (nrow_images .GT. 1) row_img = row_img_dist(stored_row)\n               col_img = 1\n               IF (ncol_images .GT. 1) col_img = col_img_dist(stored_col)\n               CALL image_calculator(target_imgdist, &\n                                     prow=prow, rowi=rowi, &\n                                     pcol=pcol, coli=coli, &\n                                     myprow=row_dist(stored_row), myrowi=row_img, &\n                                     mypcol=col_dist(stored_col), mycoli=col_img, &\n                                     shifting=predist_type_fwd)\n               dst_p = blacs2mpi(prow, pcol)\n               sm_pos = myt_smp(dst_p)\n               myt_smp(dst_p) = myt_smp(dst_p) + metalen\n               sd_pos = myt_sdp(dst_p)\n               myt_sdp(dst_p) = myt_sdp(dst_p) + nze\n               IF (tr) THEN\n                  IF (PRESENT(scale_value)) THEN\n                     CALL dbcsr_block_transpose(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1), &\n                                                data_area(bp:bp + nze - 1)*scale_value%${base1}$_${prec1}$, &\n                                                tr_row_size, tr_col_size)\n                  ELSE\n                     CALL dbcsr_block_transpose(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1), &\n                                                data_area(bp:bp + nze - 1), &\n                                                tr_row_size, tr_col_size)\n                  END IF\n                  IF (negate_real .AND. negate_imaginary) THEN\n                     send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = &\n                        send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1)*scale_neg_one%${base1}$_${prec1}$\n                  ELSEIF (negate_real) THEN\n                     #:if nametype1==\"s\" or nametype1==\"d\"\n                        send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = &\n                           -send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1)\n                     #:else\n                        send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = &\n                           CMPLX( &\n                           -REAL(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1), KIND=${kind1}$), &\n                           AIMAG(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1)), &\n                           KIND=${kind1}$)\n                     #:endif\n                  ELSEIF (negate_imaginary) THEN\n                     #:if nametype1==\"c\" or nametype1==\"z\"\n                        send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = &\n                           CONJG(send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1))\n                     #:endif\n                  END IF\n               ELSE\n                  ! Copy the block\n                  IF (PRESENT(scale_value)) THEN\n                     send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = &\n                        data_area(bp:bp + nze - 1)*scale_value%${base1}$_${prec1}$\n                  ELSE\n                     send_data_area%d%${base1}$_${prec1}$ (sd_pos:myt_sdp(dst_p) - 1) = data_area(bp:bp + nze - 1)\n                  END IF\n               END IF\n\n               send_meta(sm_pos) = stored_row\n               send_meta(sm_pos + 1) = stored_col\n               send_meta(sm_pos + 2) = sd_pos - sd_disp(dst_p) + 1\n               send_meta(sm_pos + 3) = rowi\n               send_meta(sm_pos + 4) = coli\n            END DO\n         END DO\n      END SUBROUTINE prepare_buffers_${nametype1}$\n   #:endfor\n\nEND MODULE dbcsr_mm_cannon\n"
  },
  {
    "path": "src/mm/dbcsr_mm_common.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! Copyright (C) 2022 Advanced Micro Devices, Inc. - All rights reserved                            !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_common\n   !! Common variables and routines for the dbcsr matrix-matrix multiplication algorithms.\n   !! <b>Modification history:</b>\n   !! - 2016-08    Code organization (Alfio Lazzaro).\n\n   USE ISO_C_BINDING, ONLY: C_PTR, C_INT\n\n   USE dbcsr_acc_event, ONLY: acc_event_record, &\n                              acc_event_synchronize, &\n                              acc_stream_wait_event\n   USE dbcsr_acc_stream, ONLY: acc_stream_type, &\n                               acc_stream_synchronize, &\n                               acc_stream_cptr\n   USE dbcsr_acc_devmem, ONLY: acc_devmem_cptr\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_hold\n   USE dbcsr_acc_operations, ONLY: dbcsr_acc_transpose\n   USE dbcsr_data_methods, ONLY: dbcsr_data_ensure_size, &\n                                 dbcsr_data_get_size, &\n                                 dbcsr_data_host2dev, &\n                                 dbcsr_data_dev2host, &\n                                 dbcsr_data_set_size_referenced, &\n                                 dbcsr_get_data_p_c, &\n                                 dbcsr_get_data_p_d, &\n                                 dbcsr_get_data_p_s, &\n                                 dbcsr_get_data_p_z\n   USE dbcsr_methods, ONLY: dbcsr_get_data_type, &\n                            dbcsr_get_index_memory_type, &\n                            dbcsr_nfullcols_local, &\n                            dbcsr_nfullrows_local, &\n                            dbcsr_valid_index\n   USE dbcsr_mm_multrec, ONLY: dbcsr_mm_multrec_type\n   USE dbcsr_ptr_util, ONLY: ensure_array_size\n   USE dbcsr_types, ONLY: &\n      dbcsr_data_obj, dbcsr_memtype_type, dbcsr_mpi_size_limits, dbcsr_mpi_statistics_type, &\n      dbcsr_type, dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_int_4, &\n      dbcsr_type_real_4, dbcsr_type_real_8\n   USE dbcsr_work_operations, ONLY: dbcsr_create\n   USE dbcsr_kinds, ONLY: int_4, &\n                          int_8, &\n                          real_4, &\n                          real_8, &\n                          sp\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_common'\n\n   TYPE dbcsr_memtype_type_p\n      TYPE(dbcsr_memtype_type), POINTER :: p => Null()\n      ! ensure that array-elements are on different cache lines\n      INTEGER(kind=int_4), DIMENSION(64)    :: padding = -1_int_4\n   END TYPE dbcsr_memtype_type_p\n\n   TYPE(dbcsr_memtype_type_p), DIMENSION(:), POINTER, SAVE :: memtype_product_wm => Null()\n\n   TYPE(dbcsr_mpi_statistics_type), SAVE :: dbcsr_mpi_statistics\n   INTEGER, SAVE :: num_multiplications = 0\n   REAL, SAVE :: max_memory = 0\n   REAL, PARAMETER :: huge_norm = HUGE(1.0)**(1.0/3.0)\n\n   TYPE(dbcsr_memtype_type), SAVE  :: memtype_abpanel_1, memtype_abpanel_2, &\n                                      memtype_trsbuffer_1, memtype_trsbuffer_2, &\n                                      memtype_normsbuf, memtype_offsetsbuf, &\n                                      memtype_nelemsbuf, &\n                                      memtype_mpi_buffer, memtype_mpi_product\n   TYPE(acc_stream_type), SAVE     :: stream_1, stream_2\n   ! ab-panels and streams are shared between all threads\n\n   TYPE dbcsr_mm_multrec_type_p\n      TYPE(dbcsr_mm_multrec_type), POINTER :: p => Null()\n      ! ensure that array-elements are on different cache lines\n      INTEGER(kind=int_4), DIMENSION(64)       :: padding\n   END TYPE dbcsr_mm_multrec_type_p\n\n   PUBLIC :: memtype_product_wm\n   PUBLIC :: dbcsr_mpi_statistics, num_multiplications\n   PUBLIC :: max_memory\n\n   PUBLIC :: memtype_abpanel_1, memtype_abpanel_2, &\n             memtype_trsbuffer_1, memtype_trsbuffer_2, &\n             memtype_normsbuf, memtype_offsetsbuf, &\n             memtype_nelemsbuf, &\n             memtype_mpi_buffer, memtype_mpi_product\n   PUBLIC :: stream_1, stream_2\n\n   PUBLIC :: dbcsr_mm_multrec_type_p\n   PUBLIC :: count_mpi_statistics\n   PUBLIC :: setup_buffer_matrix\n   PUBLIC :: rec_sort_index\n   PUBLIC :: enumerate_blk_sizes\n\n   PUBLIC :: acc_transpose_blocks\n   PUBLIC :: acc_calculate_norms\n\n   PUBLIC :: product_matrix_size_guess\n\n   PUBLIC :: calculate_norms\n   PUBLIC :: huge_norm\n   PUBLIC :: local_filter\n\n#if defined (__DBCSR_ACC)\n   INTERFACE\n      FUNCTION acc_interface_calculate_norms(mat, nblks, offsets, nelems, norms, stream_ptr) RESULT(istat) &\n         BIND(C, name=\"c_calculate_norms\")\n         IMPORT\n         TYPE(C_PTR), INTENT(IN), VALUE           :: mat\n         TYPE(C_PTR), INTENT(IN), VALUE           :: offsets\n         TYPE(C_PTR), INTENT(IN), VALUE           :: nelems\n         TYPE(C_PTR), VALUE                       :: norms\n         INTEGER(KIND=C_INT), INTENT(IN), &\n            VALUE                                  :: nblks\n         TYPE(C_PTR), VALUE                       :: stream_ptr\n         INTEGER(KIND=C_INT)                      :: istat\n\n      END FUNCTION acc_interface_calculate_norms\n   END INTERFACE\n#endif\n\nCONTAINS\n\n   SUBROUTINE count_mpi_statistics(mpi_statistics, data_size, &\n                                   element_size_bytes, size_breakdown)\n      REAL, DIMENSION(:), INTENT(INOUT)                  :: mpi_statistics\n      INTEGER, INTENT(IN)                                :: data_size\n      INTEGER, INTENT(IN)                                :: element_size_bytes\n      INTEGER(KIND=int_8), DIMENSION(:, :), &\n         INTENT(INOUT), OPTIONAL                         :: size_breakdown\n\n      INTEGER                                            :: ilimit, nlimits\n      INTEGER(KIND=int_8)                                :: data_size_bytes, llimit\n\n      ! change in bytes\n      data_size_bytes = INT(data_size, KIND=int_8)*INT(element_size_bytes, KIND=int_8)\n      !\n      mpi_statistics(1) = mpi_statistics(1) + REAL(data_size_bytes)\n      mpi_statistics(2) = MIN(mpi_statistics(2), REAL(data_size_bytes))\n      mpi_statistics(3) = MAX(mpi_statistics(3), REAL(data_size_bytes))\n      IF (PRESENT(size_breakdown)) THEN\n         nlimits = SIZE(dbcsr_mpi_size_limits)\n         ! check for oversize messages\n         IF (data_size_bytes .GT. dbcsr_mpi_size_limits(nlimits)) THEN\n            size_breakdown(nlimits + 1, 1) = size_breakdown(nlimits + 1, 1) + 1\n            size_breakdown(nlimits + 1, 2) = size_breakdown(nlimits + 1, 2) + data_size_bytes\n            RETURN\n         END IF\n         llimit = 0\n         DO ilimit = 1, nlimits\n            IF (data_size_bytes .GE. llimit .AND. data_size_bytes .LE. dbcsr_mpi_size_limits(ilimit)) THEN\n               size_breakdown(ilimit, 1) = size_breakdown(ilimit, 1) + 1\n               size_breakdown(ilimit, 2) = size_breakdown(ilimit, 2) + data_size_bytes\n               RETURN\n            END IF\n            llimit = dbcsr_mpi_size_limits(ilimit)\n         END DO\n      END IF\n   END SUBROUTINE count_mpi_statistics\n\n   SUBROUTINE setup_buffer_matrix(matrix, source_matrix, &\n                                  index_size, data_size, data_buffer, data_memory_type)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: source_matrix\n      INTEGER, INTENT(IN), OPTIONAL                      :: index_size, data_size\n      TYPE(dbcsr_data_obj), INTENT(IN), OPTIONAL         :: data_buffer\n      TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL     :: data_memory_type\n\n      matrix = dbcsr_type()\n      CALL dbcsr_create(matrix, &\n                        template=source_matrix, &\n                        name=TRIM(\"Buffer of \"//TRIM(source_matrix%name)), &\n                        nze=data_size, &\n                        data_buffer=data_buffer, &\n                        data_memory_type=data_memory_type, &\n                        index_memory_type=memtype_mpi_buffer)\n      IF (PRESENT(data_size)) THEN\n         CALL dbcsr_data_ensure_size( &\n            matrix%data_area, &\n            data_size, nocopy=.TRUE.)\n      END IF\n      IF (PRESENT(index_size)) THEN\n         CALL ensure_array_size( &\n            matrix%index, &\n            ub=index_size, nocopy=.TRUE., &\n            memory_type=dbcsr_get_index_memory_type(matrix))\n      END IF\n      matrix%negate_real = source_matrix%negate_real\n      matrix%negate_imaginary = source_matrix%negate_imaginary\n      matrix%local_indexing = source_matrix%local_indexing\n      matrix%list_indexing = source_matrix%list_indexing\n      !\n      IF (source_matrix%has_local_rows) THEN\n         matrix%local_rows = source_matrix%local_rows\n         CALL array_hold(matrix%local_rows)\n         matrix%has_local_rows = .TRUE.\n      END IF\n      IF (source_matrix%has_global_rows) THEN\n         matrix%global_rows = source_matrix%global_rows\n         CALL array_hold(matrix%global_rows)\n         matrix%has_global_rows = .TRUE.\n      END IF\n      IF (source_matrix%has_local_cols) THEN\n         matrix%local_cols = source_matrix%local_cols\n         CALL array_hold(matrix%local_cols)\n         matrix%has_local_cols = .TRUE.\n      END IF\n      IF (source_matrix%has_global_cols) THEN\n         matrix%global_cols = source_matrix%global_cols\n         CALL array_hold(matrix%global_cols)\n         matrix%has_global_cols = .TRUE.\n      END IF\n\n   END SUBROUTINE setup_buffer_matrix\n\n   RECURSIVE SUBROUTINE rec_sort_index(mi, mf, ni, nf, nele, a, d)\n      !! Sorts index for recursing.\n      !!\n      !! History\n      !! - 2011-02-17 [UB] modified for use in DBCSR; reduced memory usage.\n      !! @note\n      !! Always cut longest first. On a tie cut N\n      !! @endnote\n\n      INTEGER, INTENT(IN)                                :: mi, mf, ni, nf, nele\n      INTEGER, DIMENSION(3, 1:nele), INTENT(inout)       :: a\n      INTEGER, INTENT(IN)                                :: d\n\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: half, M, N, nlow\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: tmp\n\n!   ---------------------------------------------------------------------------\n\n      IF (dbg) THEN\n         WRITE (*, *) \" rs\", mi, mf, \"/\", ni, nf, \"=>\", nele, d\n         WRITE (*, '(3(1X,I7))') a(:, 1:nele)\n      END IF\n      IF (dbg) THEN\n         IF (d .GT. 20) THEN\n            WRITE (*, *) a(1, -d*1000)\n         END IF\n      END IF\n      ALLOCATE (tmp(3, nele))\n      M = mf - mi + 1\n      N = nf - ni + 1\n      IF (M > N) THEN\n         half = M/2\n         CALL rec_split(nele, a, tmp, 1, nlow, mi, half)\n         a = tmp\n         DEALLOCATE (tmp)\n         IF (nlow .GT. 1) THEN\n            CALL rec_sort_index(mi, mi + half - 1, ni, nf, nlow, a(:, 1:nlow), d + 1)\n         END IF\n         IF (nele - nlow .GT. 1) THEN\n            CALL rec_sort_index(mi + half, mf, ni, nf, nele - nlow, a(:, nlow + 1:nele), d + 1)\n         END IF\n      ELSE\n         half = N/2\n         CALL rec_split(nele, a, tmp, 2, nlow, ni, half)\n         a = tmp\n         DEALLOCATE (tmp)\n         IF (nlow .GT. 1) THEN\n            CALL rec_sort_index(mi, mf, ni, ni + half - 1, nlow, a(:, 1:nlow), d + 1)\n         END IF\n         IF (nele - nlow .GT. 1) THEN\n            CALL rec_sort_index(mi, mf, ni + half, nf, nele - nlow, a(:, nlow + 1:nele), d + 1)\n         END IF\n      END IF\n   END SUBROUTINE rec_sort_index\n\n   SUBROUTINE rec_split(nele, a, split, row_or_col, nlow, mi, half)\n      INTEGER, INTENT(IN)                                :: nele\n      INTEGER, DIMENSION(3, nele), INTENT(IN)            :: a\n      INTEGER, DIMENSION(3, nele), INTENT(OUT)           :: split\n      INTEGER, INTENT(IN)                                :: row_or_col\n      INTEGER, INTENT(OUT)                               :: nlow\n      INTEGER, INTENT(IN)                                :: mi, half\n\n      INTEGER                                            :: el, half_m, p_high, p_low\n\n      half_m = mi + half - 1\n      p_low = 1\n      p_high = nele\n      DO el = 1, nele\n         IF (a(row_or_col, el) <= half_m) THEN\n            split(1:3, p_low) = a(1:3, el)\n            p_low = p_low + 1\n         ELSE\n            split(1:3, p_high) = a(1:3, el)\n            p_high = p_high - 1\n         END IF\n      END DO\n      nlow = p_low - 1\n      DBCSR_ASSERT(p_high .EQ. nlow)\n\n   END SUBROUTINE rec_split\n\n   SUBROUTINE enumerate_blk_sizes(blk_sizes, max_size, enum, rev_enum)\n      !! Enumerate all occurring blocksizes\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: blk_sizes\n      INTEGER, INTENT(IN)                                :: max_size\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: enum, rev_enum\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'enumerate_blk_sizes'\n\n      INTEGER                                            :: handle, i, n\n\n      CALL timeset(routineN, handle)\n\n      ALLOCATE (enum(0:max_size))\n      enum(:) = 0\n\n      DO i = 1, SIZE(blk_sizes)\n         enum(blk_sizes(i)) = 1\n      END DO\n\n      n = SUM(enum)\n      ALLOCATE (rev_enum(n))\n\n      n = 0\n      DO i = 0, SIZE(enum) - 1\n         IF (enum(i) > 0) THEN\n            n = n + 1\n            enum(i) = n\n            rev_enum(n) = i\n         END IF\n      END DO\n\n      CALL timestop(handle)\n\n   END SUBROUTINE enumerate_blk_sizes\n\n   SUBROUTINE acc_transpose_blocks(matrix, trs_stackbuf, &\n      !! write out a stack for transposing the blocks\n                                   row_blk_sizes, col_blk_sizes, &\n                                   row_blk_sizes2enum, enum2row_blk_sizes, &\n                                   col_blk_sizes2enum, enum2col_blk_sizes, &\n                                   noresize)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: trs_stackbuf\n      INTEGER, DIMENSION(:), INTENT(IN), POINTER, CONTIGUOUS :: row_blk_sizes, col_blk_sizes, &\n                                                                row_blk_sizes2enum, enum2row_blk_sizes, &\n                                                                col_blk_sizes2enum, enum2col_blk_sizes\n      LOGICAL, INTENT(IN), OPTIONAL                      :: noresize\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'acc_transpose_blocks'\n\n      INTEGER                                            :: blk_p, handle, handle1, i, m, mi, &\n                                                            mi_max, n, nblks, ni, ni_max, offset, x, &\n                                                            row, col\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: counters, filled, offsets, tmp_stack\n      INTEGER, DIMENSION(:), POINTER                     :: blk_index\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: trs_stack\n      LOGICAL                                            :: my_noresize\n\n      CALL timeset(routineN, handle)\n\n      NULLIFY (trs_stack)\n\n      IF (.NOT. matrix%list_indexing) &\n         DBCSR_ABORT(\"build_trs_stack: only list_indexing supported.\")\n      IF (.NOT. matrix%local_indexing) &\n         DBCSR_ABORT(\"build_trs_stack: only local_indexing supported.\")\n      IF (trs_stackbuf%d%data_type /= dbcsr_type_int_4) &\n         DBCSR_ABORT(\"build_trs_stack: stac_buf has wrong datatype\")\n      blk_index => matrix%coo_l\n      nblks = matrix%nblks\n\n      ! make sure buffer from previous cannon-tick was uploaded\n      CALL timeset(routineN//\"_sync\", handle1)\n      CALL acc_event_synchronize(trs_stackbuf%d%acc_ready)\n      CALL timestop(handle1)\n\n      CALL timeset(routineN//\"_ensure\", handle1)\n      my_noresize = .FALSE.\n      IF (PRESENT(noresize)) my_noresize = noresize\n      IF (my_noresize) THEN\n         IF (dbcsr_data_get_size(trs_stackbuf) .LT. nblks) &\n            DBCSR_ABORT(\"build_trs_stack: trs_stackbuf undersized\")\n      ELSE\n         CALL dbcsr_data_ensure_size(trs_stackbuf, data_size=nblks, nocopy=.TRUE.)\n      END IF\n      CALL dbcsr_data_set_size_referenced(trs_stackbuf, nblks)\n      trs_stack => trs_stackbuf%d%i4\n      CALL timestop(handle1)\n\n      mi_max = SIZE(enum2row_blk_sizes); ni_max = SIZE(enum2col_blk_sizes)\n      ALLOCATE (counters(mi_max, ni_max), offsets(mi_max, ni_max))\n      counters(:, :) = 0; offsets(:, :) = 0\n\n      CALL timeset(routineN//\"_comp\", handle1)\n\n      ! Simplified algorithm for single size blocks\n      IF (mi_max .EQ. 1 .AND. ni_max .EQ. 1) THEN\n         DO i = 1, nblks\n            blk_p = blk_index(3*(i - 1) + 3)\n            IF (blk_p == 0) CYCLE\n            counters(1, 1) = counters(1, 1) + 1\n            trs_stack(counters(1, 1)) = blk_p - 1\n         END DO\n      ELSE\n         ALLOCATE (tmp_stack(3, nblks))\n         ! collect block addresses and dimensions in a temporary stack\n         ! while doing so, also count number of blocks per block-dimensions\n         DO i = 1, nblks\n            row = blk_index(3*(i - 1) + 1)\n            col = blk_index(3*(i - 1) + 2)\n            blk_p = blk_index(3*(i - 1) + 3)\n            IF (blk_p == 0) CYCLE\n            m = row_blk_sizes(row)\n            n = col_blk_sizes(col)\n            mi = row_blk_sizes2enum(m)\n            ni = col_blk_sizes2enum(n)\n            tmp_stack(1, i) = mi\n            tmp_stack(2, i) = ni\n            tmp_stack(3, i) = blk_p - 1\n            counters(mi, ni) = counters(mi, ni) + 1\n         END DO\n         ! calculate offsets for first element of each sub-stack\n         offset = 0\n         DO mi = 1, mi_max\n            DO ni = 1, ni_max\n               offsets(mi, ni) = offset\n               offset = offset + counters(mi, ni)\n            END DO\n         END DO\n         ! write all sub-stacks into the host-pinned buffer\n         ALLOCATE (filled(mi_max, ni_max))\n         filled(:, :) = 0\n         DO i = 1, nblks\n            mi = tmp_stack(1, i)\n            ni = tmp_stack(2, i)\n            blk_p = tmp_stack(3, i)\n            x = offsets(mi, ni) + filled(mi, ni) + 1\n            trs_stack(x) = blk_p\n            filled(mi, ni) = filled(mi, ni) + 1\n         END DO\n         !sanity check\n         DO ni = 1, ni_max\n            DO mi = 1, mi_max\n               IF (filled(mi, ni) /= counters(mi, ni)) &\n                  DBCSR_ABORT(\"acc_transpose_blocks: bug\")\n            END DO\n         END DO\n      END IF\n      CALL timestop(handle1)\n\n      CALL timeset(routineN//\"_sync\", handle1)\n      !transfer all stacks\n      CALL dbcsr_data_host2dev(trs_stackbuf)\n      ! make sure block-buffer is uploaded before running the kernels\n      CALL acc_stream_wait_event(trs_stackbuf%d%memory_type%acc_stream, matrix%data_area%d%acc_ready)\n      CALL timestop(handle1)\n\n      CALL timeset(routineN//\"_kernels\", handle1)\n      ! launch kernels\n      DO ni = 1, ni_max\n         DO mi = 1, mi_max\n            IF (counters(mi, ni) > 0) THEN\n               m = enum2row_blk_sizes(mi)\n               n = enum2col_blk_sizes(ni)\n               CALL dbcsr_acc_transpose( &\n                  trs_stack=trs_stackbuf%d%acc_devmem, &\n                  offset=offsets(mi, ni), &\n                  nblks=counters(mi, ni), &\n                  data_type=matrix%data_type, &\n                  buffer=matrix%data_area%d%acc_devmem, &\n                  m=m, n=n, &\n                  stream=trs_stackbuf%d%memory_type%acc_stream)\n            END IF\n         END DO\n      END DO\n      CALL timestop(handle1)\n\n      CALL timeset(routineN//\"_sync\", handle1)\n      ! make sure block-buffer are not used until transpose kernels finished\n      CALL acc_event_record(trs_stackbuf%d%acc_ready, trs_stackbuf%d%memory_type%acc_stream)\n      CALL acc_stream_wait_event(matrix%data_area%d%memory_type%acc_stream, trs_stackbuf%d%acc_ready)\n      CALL acc_event_record(matrix%data_area%d%acc_ready, matrix%data_area%d%memory_type%acc_stream)\n      CALL timestop(handle1)\n\n      CALL timestop(handle)\n   END SUBROUTINE acc_transpose_blocks\n\n   SUBROUTINE acc_calculate_norms(matrix, norms, normsbuf, offsetsbuf, nelemsbuf, row_blk_sizes, col_blk_sizes)\n      !! calculate norms for a set of blocks in matrix whose row and col sizes are given\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      REAL(kind=sp), DIMENSION(:), INTENT(OUT)           :: norms\n      TYPE(dbcsr_data_obj), INTENT(INOUT), TARGET        :: normsbuf\n      TYPE(dbcsr_data_obj), INTENT(INOUT), TARGET        :: offsetsbuf\n      TYPE(dbcsr_data_obj), INTENT(INOUT), TARGET        :: nelemsbuf\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS, INTENT(IN) :: row_blk_sizes, col_blk_sizes\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'acc_calculate_norms'\n\n      INTEGER                                            :: nblks, blk_p, handle, i\n      INTEGER                                            :: nblks_final, j\n      INTEGER                                            :: data_type\n      INTEGER                                            :: row, col\n      INTEGER, DIMENSION(:), POINTER                     :: blk_index\n      REAL, DIMENSION(:), POINTER, CONTIGUOUS            :: normsbuf_ptr\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: offsetsbuf_ptr\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: nelemsbuf_ptr\n#if defined (__DBCSR_ACC)\n      INTEGER                                            :: istat\n#endif\n\n      CALL timeset(routineN, handle)\n\n      blk_index => matrix%coo_l\n      nblks = matrix%nblks\n      data_type = dbcsr_get_data_type(matrix)\n\n      if (nblks > 0 .and. data_type .eq. dbcsr_type_real_8) then\n\n         IF (normsbuf%d%data_type /= dbcsr_type_real_4) &\n            DBCSR_ABORT(\"acc_calculate_norms: normsbuf has wrong datatype\")\n         IF (offsetsbuf%d%data_type /= dbcsr_type_int_4) &\n            DBCSR_ABORT(\"acc_calculate_norms: offsetsbuf has wrong datatype\")\n         IF (nelemsbuf%d%data_type /= dbcsr_type_int_4) &\n            DBCSR_ABORT(\"acc_calculate_norms: nelemsbuf has wrong datatype\")\n\n         NULLIFY (normsbuf_ptr)\n         NULLIFY (offsetsbuf_ptr)\n         NULLIFY (nelemsbuf_ptr)\n         CALL dbcsr_data_ensure_size(normsbuf, data_size=nblks, nocopy=.TRUE.)\n         CALL dbcsr_data_set_size_referenced(normsbuf, nblks)\n         normsbuf_ptr => normsbuf%d%r_sp\n         CALL dbcsr_data_ensure_size(offsetsbuf, data_size=nblks, nocopy=.TRUE.)\n         CALL dbcsr_data_set_size_referenced(offsetsbuf, nblks)\n         offsetsbuf_ptr => offsetsbuf%d%i4\n         CALL dbcsr_data_ensure_size(nelemsbuf, data_size=nblks, nocopy=.TRUE.)\n         CALL dbcsr_data_set_size_referenced(nelemsbuf, nblks)\n         nelemsbuf_ptr => nelemsbuf%d%i4\n\n         j = 1\n         DO i = 1, nblks\n            blk_p = blk_index(3*i)\n            IF (blk_p == 0) CYCLE\n            offsetsbuf_ptr(j) = blk_p - 1\n            row = blk_index(3*i - 2)\n            col = blk_index(3*i - 1)\n            nelemsbuf_ptr(j) = row_blk_sizes(row)*col_blk_sizes(col)\n            j = j + 1\n         END DO\n         nblks_final = j - 1\n\n         ! copy offsets to GPU buffer, launch kernel, copy norms back to host\n         ! offsetsbuf, nelemsbuf and normsbuf share the same stream, so no need\n         ! to synchronize stream until norms are copied back to host\n         CALL dbcsr_data_host2dev(offsetsbuf)\n         CALL dbcsr_data_host2dev(nelemsbuf)\n#if defined (__DBCSR_ACC)\n         istat = acc_interface_calculate_norms(acc_devmem_cptr(matrix%data_area%d%acc_devmem), &\n                                               INT(nblks_final, KIND=C_INT), &\n                                               acc_devmem_cptr(offsetsbuf%d%acc_devmem), &\n                                               acc_devmem_cptr(nelemsbuf%d%acc_devmem), &\n                                               acc_devmem_cptr(normsbuf%d%acc_devmem), &\n                                               acc_stream_cptr(normsbuf%d%memory_type%acc_stream))\n         IF (istat == -1) &\n            DBCSR_ABORT(\"acc_calculate_norms: warp size obtained is unexpected\")\n#endif\n         CALL dbcsr_data_dev2host(normsbuf)\n         CALL acc_stream_synchronize(normsbuf%d%memory_type%acc_stream)\n\n         j = 1\n         DO i = 1, nblks\n            blk_p = blk_index(3*i)\n            IF (blk_p == 0) CYCLE\n            norms(i) = normsbuf_ptr(j)\n            j = j + 1\n         END DO\n      else\n         ! call CPU function to calculate norms\n         CALL calculate_norms(matrix, norms, row_blk_sizes, col_blk_sizes)\n      end if\n      CALL timestop(handle)\n   END SUBROUTINE acc_calculate_norms\n\n   FUNCTION product_matrix_size_guess(matrix_left, matrix_right, product_matrix, &\n      !! Guess the size of the product matrix from the A and B sparsities\n                                      left_data_size, right_data_size, &\n                                      left_col_nimages, right_row_nimages, &\n                                      nthreads) RESULT(size_guess)\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_left, matrix_right, product_matrix\n      INTEGER, INTENT(IN)                                :: left_data_size, right_data_size, &\n                                                            left_col_nimages, right_row_nimages, &\n                                                            nthreads\n      INTEGER                                            :: size_guess\n\n      INTEGER(KIND=int_8)                                :: size8\n      REAL(kind=real_8)                                  :: factor, fill_guess, left_fill, right_fill\n\n      ! First we calculate the sparsities\n      size8 = INT(dbcsr_nfullrows_local(matrix_left), KIND=int_8)* &\n              INT(dbcsr_nfullcols_local(matrix_left), KIND=int_8)\n      size8 = MAX(1_int_8, size8)\n      left_fill = (REAL(left_data_size, KIND=real_8)*REAL(left_col_nimages, KIND=real_8))/REAL(size8, KIND=real_8)\n      size8 = INT(dbcsr_nfullrows_local(matrix_right), KIND=int_8)* &\n              INT(dbcsr_nfullcols_local(matrix_right), KIND=int_8)\n      size8 = MAX(1_int_8, size8)\n      right_fill = (REAL(right_data_size, KIND=real_8)*REAL(right_row_nimages, KIND=real_8))/REAL(size8, KIND=real_8)\n      size8 = INT(dbcsr_nfullrows_local(product_matrix), KIND=int_8)* &\n              INT(dbcsr_nfullcols_local(product_matrix), KIND=int_8)\n      size8 = MAX(1_int_8, size8)\n!     factor = 7.0 ! Old guess\n      factor = 2.4 ! New guess\n      fill_guess = factor*MAX(left_fill, right_fill)\n      fill_guess = MIN(1.0_real_8, MAX(0.0_real_8, fill_guess))\n      IF (nthreads .GT. 1) THEN\n         fill_guess = fill_guess*3.0_real_8/REAL(2*nthreads, KIND=real_8)\n      END IF\n      size_guess = INT(REAL(size8, KIND=real_8)*fill_guess, KIND=int_4)\n   END FUNCTION product_matrix_size_guess\n\n   SUBROUTINE calculate_norms(matrix, norms, row_blk_sizes, col_blk_sizes)\n      !! Calculates per-block norms.\n      !! Rewritten to be very low-level.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! DBCSR matrix for which to calculate norms\n      REAL(kind=sp), DIMENSION(:), INTENT(OUT)           :: norms\n         !! Block norms\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS, INTENT(IN) :: row_blk_sizes, col_blk_sizes\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'calculate_norms'\n\n      INTEGER                                            :: data_type, handle, nblks\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      ! Checks for validity\n      IF (.NOT. dbcsr_valid_index(matrix)) &\n         DBCSR_ABORT(\"The matrix must be valid.\")\n      data_type = dbcsr_get_data_type(matrix)\n      nblks = matrix%nblks\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         CALL calc_norms_s(norms, nblks, matrix%coo_l, &\n                           row_blk_sizes, col_blk_sizes, &\n                           dbcsr_get_data_p_s(matrix%data_area))\n      CASE (dbcsr_type_real_8)\n         CALL calc_norms_d(norms, nblks, matrix%coo_l, &\n                           row_blk_sizes, col_blk_sizes, &\n                           dbcsr_get_data_p_d(matrix%data_area))\n      CASE (dbcsr_type_complex_4)\n         CALL calc_norms_c(norms, nblks, matrix%coo_l, &\n                           row_blk_sizes, col_blk_sizes, &\n                           dbcsr_get_data_p_c(matrix%data_area))\n      CASE (dbcsr_type_complex_8)\n         CALL calc_norms_z(norms, nblks, matrix%coo_l, &\n                           row_blk_sizes, col_blk_sizes, &\n                           dbcsr_get_data_p_z(matrix%data_area))\n      CASE DEFAULT\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n      !\n      CALL timestop(handle)\n   END SUBROUTINE calculate_norms\n\n   PURE SUBROUTINE local_filter(full_data, nle, local_elements, local_data)\n      !! Gathers the local elements from all data (full_data)\n\n      INTEGER, DIMENSION(:), INTENT(IN), CONTIGUOUS      :: full_data\n         !! All elements\n      INTEGER, INTENT(IN)                                :: nle\n         !! Number of local elements\n      INTEGER, DIMENSION(1:nle), INTENT(IN)              :: local_elements\n         !! List of local elements\n      INTEGER, DIMENSION(1:nle), INTENT(OUT)             :: local_data\n         !! Local elements obtained from all elements\n\n      INTEGER                                            :: l\n\n      DO l = 1, nle\n         local_data(l) = full_data(local_elements(l))\n      END DO\n   END SUBROUTINE local_filter\n\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1, normname1 in inst_params_float\n      SUBROUTINE calc_norms_${nametype1}$ (norms, nblks, &\n                                           blki, rbs, cbs, DATA)\n     !! Calculates norms of the entire matrix with minimal overhead.\n         REAL(kind=sp), DIMENSION(:), INTENT(OUT) :: norms\n         INTEGER, INTENT(IN)                      :: nblks\n         INTEGER, DIMENSION(3, nblks), INTENT(IN) :: blki\n         INTEGER, DIMENSION(:), INTENT(IN)        :: rbs, cbs\n         ${type1}$, DIMENSION(:), &\n            INTENT(IN)                            :: DATA\n\n         INTEGER                                  :: blk, bp, bpe, row, col\n\n         REAL(KIND=real_8), EXTERNAL              :: DDOT\n#if defined (__ACCELERATE)\n         REAL(KIND=real_8), EXTERNAL              :: SDOT\n#else\n         REAL(KIND=real_4), EXTERNAL              :: SDOT\n#endif\n\n!   ---------------------------------------------------------------------------\n\n!$OMP     parallel default(none) &\n!$OMP              shared(DATA, norms, nblks, rbs, cbs, blki) &\n!$OMP              private(row, col, blk, bp, bpe)\n!$OMP     do schedule(dynamic)\n         DO blk = 1, nblks\n            bp = blki(3, blk)\n            row = blki(1, blk)\n            col = blki(2, blk)\n            #:if nametype1 in ['d', 's']\n               bpe = rbs(row)*cbs(col)\n               norms(blk) = REAL(${normname1}$ (bpe, data(bp), 1, data(bp), 1)), KIND = sp)\n            #:else\n               bpe = bp + rbs(row)*cbs(col) - 1\n               norms(blk) = REAL(SUM(ABS(DATA(bp:bpe))**2), KIND=sp)\n            #:endif\n         END DO\n!$OMP     end do\n!$OMP     end parallel\n      END SUBROUTINE calc_norms_${nametype1}$\n   #:endfor\n\nEND MODULE dbcsr_mm_common\n"
  },
  {
    "path": "src/mm/dbcsr_mm_csr.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_csr\n   !! Third layer of the dbcsr matrix-matrix multiplication.\n   !! It collects the full matrix blocks, which need to be multiplied,\n   !! and stores their parameters in various stacks.\n   !! After a certain amount of parameters is collected it dispatches\n   !! the filled stacks to either the CPU or the accelerator device.\n   !! <b>Modification history:</b>\n   !! - 2010-02-23 Moved from dbcsr_operations\n   !! - 2011-11    Moved parameter-stack processing routines to\n   !! dbcsr_mm_methods.\n   !! - 2013-01    extensive refactoring (Ole Schuett)\n\n   USE dbcsr_array_types, ONLY: array_data\n   USE dbcsr_block_operations, ONLY: block_add, &\n                                     dbcsr_block_copy_aa\n   USE dbcsr_config, ONLY: dbcsr_cfg, &\n                           default_resize_factor\n   USE dbcsr_data_methods, ONLY: dbcsr_data_ensure_size\n   USE dbcsr_dist_util, ONLY: map_most_common\n   USE dbcsr_kinds, ONLY: int_1, &\n                          int_4, &\n                          int_8, &\n                          sp\n   USE dbcsr_mm_sched, ONLY: &\n      dbcsr_mm_sched_barrier, dbcsr_mm_sched_begin_burst, dbcsr_mm_sched_dev2host_init, &\n      dbcsr_mm_sched_end_burst, dbcsr_mm_sched_finalize, dbcsr_mm_sched_init, &\n      dbcsr_mm_sched_lib_finalize, dbcsr_mm_sched_lib_init, &\n      dbcsr_mm_sched_process, dbcsr_mm_sched_set_orig_datasize, dbcsr_mm_sched_type\n   USE dbcsr_mm_types, ONLY: &\n      dbcsr_ps_width, p_a_first, p_b_first, p_c_blk, p_c_first, p_k, p_m, p_n, &\n      stack_descriptor_type\n   USE dbcsr_ptr_util, ONLY: ensure_array_size\n   USE dbcsr_toollib, ONLY: sort\n   USE dbcsr_types, ONLY: dbcsr_data_obj, &\n                          dbcsr_type, &\n                          dbcsr_work_type\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_csr'\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   INTEGER, PARAMETER :: max_stack_block_size = HUGE(INT(0))\n      !!  max_stack_block_size  The maximal block size to be specially treated.\n\n! **************************************************************************************************\n   TYPE dbcsr_mm_csr_type\n      PRIVATE\n      TYPE(hash_table_type), DIMENSION(:), POINTER  :: c_hashes => Null()\n      INTEGER                        :: nm_stacks = -1, nn_stacks = -1, nk_stacks = -1\n      INTEGER(KIND=int_4), DIMENSION(:), POINTER :: m_size_maps => Null()\n      INTEGER(KIND=int_4), DIMENSION(:), POINTER :: n_size_maps => Null()\n      INTEGER(KIND=int_4), DIMENSION(:), POINTER :: k_size_maps => Null()\n      INTEGER                        :: max_m = -1, max_n = -1, max_k = -1\n      INTEGER                        :: m_size_maps_size = -1, &\n                                        n_size_maps_size = -1, &\n                                        k_size_maps_size = -1\n      INTEGER(KIND=int_1), DIMENSION(:, :, :), POINTER :: stack_map => Null()\n      TYPE(stack_descriptor_type), DIMENSION(:), POINTER  :: stacks_descr => Null()\n      TYPE(dbcsr_work_type), POINTER           :: product_wm => Null()\n      INTEGER, DIMENSION(:, :, :), POINTER       :: stacks_data => Null()\n      INTEGER, DIMENSION(:), POINTER           :: stacks_fillcount => Null()\n      TYPE(dbcsr_mm_sched_type)                      :: sched = dbcsr_mm_sched_type()\n      LOGICAL                                  :: keep_product_data = .FALSE.\n   END TYPE dbcsr_mm_csr_type\n\n#include \"utils/dbcsr_hash_table_types.f90\"\n\n! **************************************************************************************************\n   PUBLIC :: dbcsr_mm_csr_type\n   PUBLIC :: dbcsr_mm_csr_lib_init, dbcsr_mm_csr_lib_finalize\n   PUBLIC :: dbcsr_mm_csr_init, dbcsr_mm_csr_finalize\n   PUBLIC :: dbcsr_mm_csr_multiply, dbcsr_mm_csr_purge_stacks\n   PUBLIC :: dbcsr_mm_csr_dev2host_init, dbcsr_mm_csr_red3D\n\nCONTAINS\n\n   SUBROUTINE dbcsr_mm_csr_lib_init()\n      !! Initialize the library\n\n      CALL dbcsr_mm_sched_lib_init()\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_mm_csr_lib_finalize()\n      !! Finalize the library\n      CALL dbcsr_mm_sched_lib_finalize()\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_mm_csr_multiply(this, left, right, mi, mf, ni, nf, ki, kf, &\n      !! A wrapper around dbcsr_mm_csr_multiply_low to avoid expensive dereferencings.\n                                    ai, af, &\n                                    bi, bf, &\n                                    m_sizes, n_sizes, k_sizes, &\n                                    c_local_rows, c_local_cols, &\n                                    c_has_symmetry, keep_sparsity, use_eps, &\n                                    row_max_epss, &\n                                    flop, &\n                                    a_index, b_index, a_norms, b_norms)\n      TYPE(dbcsr_mm_csr_type), INTENT(INOUT)             :: this\n      TYPE(dbcsr_type), INTENT(IN)                       :: left, right\n      INTEGER, INTENT(IN)                                :: mi, mf, ni, nf, ki, kf, ai, af, bi, bf\n      INTEGER, DIMENSION(:), INTENT(INOUT)               :: m_sizes, n_sizes, k_sizes, c_local_rows, &\n                                                            c_local_cols\n      LOGICAL, INTENT(INOUT)                             :: c_has_symmetry, keep_sparsity, use_eps\n      REAL(kind=sp), DIMENSION(:)                        :: row_max_epss\n      INTEGER(KIND=int_8), INTENT(INOUT)                 :: flop\n      INTEGER, DIMENSION(1:3, 1:af), INTENT(IN)          :: a_index\n      INTEGER, DIMENSION(1:3, 1:bf), INTENT(IN)          :: b_index\n      REAL(KIND=sp), DIMENSION(:), POINTER               :: a_norms, b_norms\n\n      INTEGER                                            :: ithread, max_new_nblks, nblks_new\n\n      ithread = 0\n!$    ithread = omp_get_thread_num()\n\n      ! This has to be done here because ensure_array_size() expects a pointer.\n      ! the maximum number of blocks can be safely estimated by considering both the rowxcol,\n      ! but also the blocks the latter can never be larger than norec**2, which is a 'small' constant\n      max_new_nblks = INT(MIN(INT(mf - mi + 1, int_8)*INT(nf - ni + 1, int_8), &\n                              INT(af - ai + 1, int_8)*INT(bf - bi + 1, int_8)))\n\n      nblks_new = this%product_wm%lastblk + max_new_nblks\n\n      CALL ensure_array_size(this%product_wm%row_i, ub=nblks_new, &\n                             factor=default_resize_factor)\n      CALL ensure_array_size(this%product_wm%col_i, ub=nblks_new, &\n                             factor=default_resize_factor)\n      CALL ensure_array_size(this%product_wm%blk_p, ub=nblks_new, &\n                             factor=default_resize_factor)\n\n      CALL dbcsr_mm_csr_multiply_low(this, left=left, right=right, &\n                                     mi=mi, mf=mf, ki=ki, kf=kf, &\n                                     ai=ai, af=af, &\n                                     bi=bi, bf=bf, &\n                                     c_row_i=this%product_wm%row_i, &\n                                     c_col_i=this%product_wm%col_i, &\n                                     c_blk_p=this%product_wm%blk_p, &\n                                     lastblk=this%product_wm%lastblk, &\n                                     datasize=this%product_wm%datasize, &\n                                     m_sizes=m_sizes, n_sizes=n_sizes, k_sizes=k_sizes, &\n                                     c_local_rows=c_local_rows, c_local_cols=c_local_cols, &\n                                     c_has_symmetry=c_has_symmetry, keep_sparsity=keep_sparsity, &\n                                     use_eps=use_eps, &\n                                     row_max_epss=row_max_epss, &\n                                     flop=flop, &\n                                     row_size_maps=this%m_size_maps, &\n                                     col_size_maps=this%n_size_maps, &\n                                     k_size_maps=this%k_size_maps, &\n                                     row_size_maps_size=this%m_size_maps_size, &\n                                     col_size_maps_size=this%n_size_maps_size, &\n                                     k_size_maps_size=this%k_size_maps_size, &\n                                     nm_stacks=this%nm_stacks, nn_stacks=this%nn_stacks, &\n                                     nk_stacks=this%nk_stacks, &\n                                     stack_map=this%stack_map, &\n                                     stacks_data=this%stacks_data, &\n                                     stacks_fillcount=this%stacks_fillcount, &\n                                     c_hashes=this%c_hashes, &\n                                     a_index=a_index, b_index=b_index, &\n                                     a_norms=a_norms, b_norms=b_norms)\n\n   END SUBROUTINE dbcsr_mm_csr_multiply\n\n   SUBROUTINE dbcsr_mm_csr_multiply_low(this, left, right, mi, mf, ki, kf, &\n      !! Performs multiplication of smaller submatrices.\n                                        ai, af, bi, bf, &\n                                        c_row_i, c_col_i, c_blk_p, lastblk, datasize, &\n                                        m_sizes, n_sizes, k_sizes, &\n                                        c_local_rows, c_local_cols, &\n                                        c_has_symmetry, keep_sparsity, use_eps, &\n                                        row_max_epss, flop, &\n                                        row_size_maps, col_size_maps, k_size_maps, &\n                                        row_size_maps_size, col_size_maps_size, k_size_maps_size, &\n                                        nm_stacks, nn_stacks, nk_stacks, stack_map, &\n                                        stacks_data, stacks_fillcount, c_hashes, &\n                                        a_index, b_index, a_norms, b_norms)\n      TYPE(dbcsr_mm_csr_type), INTENT(INOUT)             :: this\n      TYPE(dbcsr_type), INTENT(IN)                       :: left, right\n      INTEGER, INTENT(IN)                                :: mi, mf, ki, kf, ai, af, bi, bf\n      INTEGER, DIMENSION(:), INTENT(INOUT)               :: c_row_i, c_col_i, c_blk_p\n      INTEGER, INTENT(INOUT)                             :: lastblk, datasize\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: m_sizes, n_sizes, k_sizes, c_local_rows, &\n                                                            c_local_cols\n      LOGICAL, INTENT(IN)                                :: c_has_symmetry, keep_sparsity, use_eps\n      REAL(kind=sp), DIMENSION(:)                        :: row_max_epss\n      INTEGER(KIND=int_8), INTENT(INOUT)                 :: flop\n      INTEGER, INTENT(IN)                                :: row_size_maps_size, k_size_maps_size, &\n                                                            col_size_maps_size\n      INTEGER(KIND=int_4), &\n         DIMENSION(0:row_size_maps_size - 1), INTENT(IN)   :: row_size_maps\n      INTEGER(KIND=int_4), &\n         DIMENSION(0:col_size_maps_size - 1), INTENT(IN)   :: col_size_maps\n      INTEGER(KIND=int_4), &\n         DIMENSION(0:k_size_maps_size - 1), INTENT(IN)     :: k_size_maps\n      INTEGER, INTENT(IN)                                :: nm_stacks, nn_stacks, nk_stacks\n      INTEGER(KIND=int_1), DIMENSION(nn_stacks + 1, &\n                                     nk_stacks + 1, nm_stacks + 1), INTENT(IN)           :: stack_map\n      INTEGER, DIMENSION(:, :, :), INTENT(INOUT)         :: stacks_data\n      INTEGER, DIMENSION(:), INTENT(INOUT)               :: stacks_fillcount\n      TYPE(hash_table_type), DIMENSION(:), INTENT(INOUT) :: c_hashes\n      INTEGER, DIMENSION(1:3, 1:af), INTENT(IN)          :: a_index\n      INTEGER, DIMENSION(1:3, 1:bf), INTENT(IN)          :: b_index\n      REAL(KIND=sp), DIMENSION(:), POINTER               :: a_norms, b_norms\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_csr_multiply_low'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER :: a_blk, a_col_l, a_row_l, b_blk, b_col_l, c_blk_id, c_col_logical, c_nze, &\n                 c_row_logical, ithread, k_size, m_size, mapped_col_size, mapped_k_size, mapped_row_size, &\n                 n_a_norms, n_b_norms, n_size, nstacks, s_dp, ws\n      INTEGER, DIMENSION(mi:mf + 1)                        :: a_row_p\n      INTEGER, DIMENSION(ki:kf + 1)                        :: b_row_p\n      INTEGER, DIMENSION(2, bf - bi + 1)                     :: b_blk_info\n      INTEGER, DIMENSION(2, af - ai + 1)                     :: a_blk_info\n      INTEGER(KIND=int_4)                                :: offset\n      LOGICAL                                            :: block_exists\n      REAL(kind=sp)                                      :: a_norm, a_row_eps, b_norm\n      REAL(KIND=sp), DIMENSION(1:af - ai + 1)                :: left_norms\n      REAL(KIND=sp), DIMENSION(1:bf - bi + 1)                :: right_norms\n\n!   ---------------------------------------------------------------------------\n\n      ithread = 0\n!$    ithread = omp_get_thread_num()\n\n      nstacks = SIZE(this%stacks_data, 3)\n\n      IF (use_eps) THEN\n         n_a_norms = af - ai + 1\n         n_b_norms = bf - bi + 1\n      ELSE\n         n_a_norms = 0\n         n_b_norms = 0\n      END IF\n\n      !\n      ! Build the indices\n      CALL build_csr_index(mi, mf, ai, af, a_row_p, a_blk_info, a_index, &\n                           n_a_norms, left_norms, a_norms)\n      CALL build_csr_index(ki, kf, bi, bf, b_row_p, b_blk_info, b_index, &\n                           n_b_norms, right_norms, b_norms)\n\n      a_row_cycle: DO a_row_l = mi, mf\n         m_size = m_sizes(a_row_l)\n\n         a_row_eps = row_max_epss(a_row_l)\n         mapped_row_size = row_size_maps(m_size)\n\n         a_blk_cycle: DO a_blk = a_row_p(a_row_l) + 1, a_row_p(a_row_l + 1)\n            a_col_l = a_blk_info(1, a_blk)\n            IF (debug_mod) WRITE (*, *) ithread, routineN//\" A col\", a_col_l, \";\", a_row_l\n            k_size = k_sizes(a_col_l)\n            mapped_k_size = k_size_maps(k_size)\n\n            a_norm = left_norms(a_blk)\n            b_blk_cycle: DO b_blk = b_row_p(a_col_l) + 1, b_row_p(a_col_l + 1)\n               IF (dbg) THEN\n                  WRITE (*, '(1X,A,3(1X,I7),1X,A,1X,I16)') routineN//\" trying B\", &\n                     a_row_l, b_blk_info(1, b_blk), a_col_l, \"at\", b_blk_info(2, b_blk)\n               END IF\n               b_norm = right_norms(b_blk)\n               IF (a_norm*b_norm .LT. a_row_eps) THEN\n                  CYCLE\n               END IF\n               b_col_l = b_blk_info(1, b_blk)\n               ! Don't calculate symmetric blocks.\n               symmetric_product: IF (c_has_symmetry) THEN\n                  c_row_logical = c_local_rows(a_row_l)\n                  c_col_logical = c_local_cols(b_col_l)\n                  IF (c_row_logical .NE. c_col_logical &\n                      .AND. my_checker_tr(c_row_logical, c_col_logical)) THEN\n                     IF (dbg) THEN\n                        WRITE (*, *) \"Skipping symmetric block!\", c_row_logical, &\n                           c_col_logical\n                     END IF\n                     CYCLE\n                  END IF\n               END IF symmetric_product\n\n               c_blk_id = hash_table_get(c_hashes(a_row_l), b_col_l)\n               IF (.FALSE.) THEN\n                  WRITE (*, '(1X,A,3(1X,I7),1X,A,1X,I16)') routineN//\" coor\", &\n                     a_row_l, a_col_l, b_col_l, \"c blk\", c_blk_id\n               END IF\n               block_exists = c_blk_id .GT. 0\n\n               n_size = n_sizes(b_col_l)\n               c_nze = m_size*n_size\n               !\n               IF (block_exists) THEN\n                  offset = c_blk_p(c_blk_id)\n               ELSE\n                  IF (keep_sparsity) CYCLE\n\n                  offset = datasize + 1\n                  lastblk = lastblk + 1\n                  datasize = datasize + c_nze\n                  c_blk_id = lastblk ! assign a new c-block-id\n\n                  IF (dbg) WRITE (*, *) routineN//\" new block offset, nze\", offset, c_nze\n                  CALL hash_table_add(c_hashes(a_row_l), &\n                                      b_col_l, c_blk_id)\n\n                  ! We still keep the linear index because it's\n                  ! easier than getting the values out of the\n                  ! hashtable in the end.\n                  c_row_i(lastblk) = a_row_l\n                  c_col_i(lastblk) = b_col_l\n                  c_blk_p(lastblk) = offset\n               END IF\n\n               ! TODO: this is only called with careful_mod\n               ! We should not call certain MM routines (netlib BLAS)\n               ! with zero LDs; however, we still need to get to here\n               ! to get new blocks.\n               IF (careful_mod) THEN\n                  IF (c_nze .EQ. 0 .OR. k_size .EQ. 0) THEN\n                     DBCSR_ABORT(\"Can not call MM with LDx=0.\")\n                     CYCLE\n                  END IF\n               END IF\n\n               mapped_col_size = col_size_maps(n_size)\n               ws = stack_map(mapped_col_size, mapped_k_size, mapped_row_size)\n               stacks_fillcount(ws) = stacks_fillcount(ws) + 1\n               s_dp = stacks_fillcount(ws)\n\n               stacks_data(p_m, s_dp, ws) = m_size\n               stacks_data(p_n, s_dp, ws) = n_size\n               stacks_data(p_k, s_dp, ws) = k_size\n               stacks_data(p_a_first, s_dp, ws) = a_blk_info(2, a_blk)\n               stacks_data(p_b_first, s_dp, ws) = b_blk_info(2, b_blk)\n               stacks_data(p_c_first, s_dp, ws) = offset\n               stacks_data(p_c_blk, s_dp, ws) = c_blk_id\n\n               flop = flop + INT(2*c_nze, int_8)*INT(k_size, int_8)\n\n               IF (stacks_fillcount(ws) >= SIZE(stacks_data, 2)) &\n                  CALL flush_stacks(this, left=left, right=right)\n\n            END DO b_blk_cycle ! b\n         END DO a_blk_cycle ! a_col\n      END DO a_row_cycle ! a_row\n\n   END SUBROUTINE dbcsr_mm_csr_multiply_low\n\n   SUBROUTINE dbcsr_mm_csr_init(this, left, right, product, &\n      !! Initializes a multiplication cycle for new set of C-blocks.\n                                m_sizes, n_sizes, block_estimate, right_row_blk_size, &\n                                nlayers, keep_product_data)\n      TYPE(dbcsr_mm_csr_type), INTENT(INOUT)             :: this\n      TYPE(dbcsr_type), INTENT(IN), OPTIONAL             :: left, right\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: product\n      INTEGER, DIMENSION(:), POINTER                     :: m_sizes, n_sizes\n      INTEGER, INTENT(IN)                                :: block_estimate\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: right_row_blk_size\n      INTEGER, OPTIONAL                                  :: nlayers\n      LOGICAL, INTENT(IN)                                :: keep_product_data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_csr_init'\n\n      INTEGER                                            :: default_stack, handle, istack, ithread, &\n                                                            k_map, k_size, m_map, m_size, n_map, &\n                                                            n_size, nstacks, nthreads, ps_g\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: flop_index, flop_list, most_common_k, &\n                                                            most_common_m, most_common_n\n      TYPE(stack_descriptor_type), ALLOCATABLE, &\n         DIMENSION(:)                                    :: tmp_descr\n\n      CALL timeset(routineN, handle)\n\n      ithread = 0; nthreads = 1\n!$    ithread = OMP_GET_THREAD_NUM(); nthreads = OMP_GET_NUM_THREADS()\n\n      IF (PRESENT(left) .NEQV. PRESENT(right)) &\n         DBCSR_ABORT(\"Must both left and right provided or not.\")\n\n      IF (PRESENT(left) .AND. PRESENT(right)) THEN\n         ! find out if we have local_indexin\n         IF (.NOT. right%local_indexing) &\n            DBCSR_ABORT(\"Matrices must have local indexing.\")\n         IF (.NOT. left%local_indexing) &\n            DBCSR_ABORT(\"Matrices must have local indexing.\")\n      END IF\n      ! Setup the hash tables if needed\n      ALLOCATE (this%c_hashes(product%nblkrows_local))\n      CALL fill_hash_tables(this%c_hashes, product, block_estimate, &\n                            row_map=array_data(product%global_rows), &\n                            col_map=array_data(product%global_cols))\n\n      ! Setup the MM stack\n      this%nm_stacks = dbcsr_cfg%n_stacks%val\n      this%nn_stacks = dbcsr_cfg%n_stacks%val\n      this%nk_stacks = dbcsr_cfg%n_stacks%val\n      nstacks = this%nm_stacks*this%nn_stacks*this%nk_stacks + 1\n      IF (nstacks > INT(HUGE(this%stack_map))) &\n         DBCSR_ABORT(\"Too many stacks requested (global/dbcsr/n_size_*_stacks in input)\")\n\n      ALLOCATE (this%stacks_descr(nstacks))\n      ALLOCATE (this%stacks_data(dbcsr_ps_width, dbcsr_cfg%mm_stack_size%val, nstacks))\n      ALLOCATE (this%stacks_fillcount(nstacks))\n      this%stacks_fillcount(:) = 0\n\n      ALLOCATE (most_common_m(this%nm_stacks))\n      ALLOCATE (most_common_n(this%nn_stacks))\n      ALLOCATE (most_common_k(this%nk_stacks))\n      CALL map_most_common(m_sizes, this%m_size_maps, this%nm_stacks, &\n                           most_common_m, &\n                           max_stack_block_size, this%max_m)\n      this%m_size_maps_size = SIZE(this%m_size_maps)\n      CALL map_most_common(n_sizes, this%n_size_maps, this%nn_stacks, &\n                           most_common_n, &\n                           max_stack_block_size, this%max_n)\n      this%n_size_maps_size = SIZE(this%n_size_maps)\n      CALL map_most_common(right_row_blk_size, &\n                           this%k_size_maps, this%nk_stacks, &\n                           most_common_k, &\n                           max_stack_block_size, this%max_k)\n      this%k_size_maps_size = SIZE(this%k_size_maps)\n\n      ! Creates the stack map--a mapping from (mapped) stack block sizes\n      ! (carrier%*_sizes) to a stack number.  Triples with even one\n      ! uncommon size will be mapped to a general, non-size-specific\n      ! stack.\n      ALLOCATE (this%stack_map(this%nn_stacks + 1, this%nk_stacks + 1, this%nm_stacks + 1))\n      default_stack = nstacks\n\n      DO m_map = 1, this%nm_stacks + 1\n         IF (m_map .LE. this%nm_stacks) THEN\n            m_size = most_common_m(m_map)\n         ELSE\n            m_size = 777\n         END IF\n         DO k_map = 1, this%nk_stacks + 1\n            IF (k_map .LE. this%nk_stacks) THEN\n               k_size = most_common_k(k_map)\n            ELSE\n               k_size = 888\n            END IF\n            DO n_map = 1, this%nn_stacks + 1\n               IF (n_map .LE. this%nn_stacks) THEN\n                  n_size = most_common_n(n_map)\n               ELSE\n                  n_size = 999\n               END IF\n               IF (m_map .LE. this%nm_stacks &\n                   .AND. k_map .LE. this%nk_stacks &\n                   .AND. n_map .LE. this%nn_stacks) THEN\n                  ! This is the case when m, n, and k are all defined.\n                  ps_g = (m_map - 1)*this%nn_stacks*this%nk_stacks + &\n                         (k_map - 1)*this%nn_stacks + n_map\n                  ps_g = nstacks - ps_g\n                  this%stack_map(n_map, k_map, m_map) = INT(ps_g, kind=int_1)\n                  ! Also take care of the stack m, n, k descriptors\n                  this%stacks_descr(ps_g)%m = m_size\n                  this%stacks_descr(ps_g)%n = n_size\n                  this%stacks_descr(ps_g)%k = k_size\n                  this%stacks_descr(ps_g)%max_m = m_size\n                  this%stacks_descr(ps_g)%max_n = n_size\n                  this%stacks_descr(ps_g)%max_k = k_size\n                  this%stacks_descr(ps_g)%defined_mnk = .TRUE.\n               ELSE\n                  ! This is the case when at least one of m, n, or k is\n                  ! undefined.\n                  ps_g = default_stack\n                  this%stack_map(n_map, k_map, m_map) = INT(default_stack, kind=int_1)\n                  ! Also take care of the stack m, n, k descriptors\n                  this%stacks_descr(ps_g)%m = 0\n                  this%stacks_descr(ps_g)%n = 0\n                  this%stacks_descr(ps_g)%k = 0\n                  this%stacks_descr(ps_g)%max_m = this%max_m\n                  this%stacks_descr(ps_g)%max_n = this%max_n\n                  this%stacks_descr(ps_g)%max_k = this%max_k\n                  this%stacks_descr(ps_g)%defined_mnk = .FALSE.\n               END IF\n            END DO\n         END DO\n      END DO\n      DEALLOCATE (most_common_m)\n      DEALLOCATE (most_common_n)\n      DEALLOCATE (most_common_k)\n\n      ! sort to make the order fixed... all defined stacks first, default stack\n      ! last. Next, sort according to flops, first stack lots of flops, last\n      ! stack, few flops\n      ! The default stack shall remain at the end of the gridcolumn\n      ALLOCATE (flop_list(nstacks - 1), flop_index(nstacks - 1), tmp_descr(nstacks))\n      DO istack = 1, nstacks - 1\n         flop_list(istack) = -2*this%stacks_descr(istack)%m &\n                             *this%stacks_descr(istack)%n &\n                             *this%stacks_descr(istack)%k\n      END DO\n\n      CALL sort(flop_list, nstacks - 1, flop_index)\n      tmp_descr(:) = this%stacks_descr\n      DO istack = 1, nstacks - 1\n         this%stacks_descr(istack) = tmp_descr(flop_index(istack))\n      END DO\n\n      DO m_map = 1, SIZE(this%stack_map, 1)\n         DO k_map = 1, SIZE(this%stack_map, 2)\n            map_loop: DO n_map = 1, SIZE(this%stack_map, 1)\n               DO istack = 1, nstacks - 1\n                  IF (this%stack_map(m_map, k_map, n_map) == flop_index(istack)) THEN\n                     this%stack_map(m_map, k_map, n_map) = INT(istack, kind=int_1)\n                     CYCLE map_loop\n                  END IF\n               END DO\n            END DO map_loop\n         END DO\n      END DO\n      DEALLOCATE (flop_list, flop_index, tmp_descr)\n\n      this%keep_product_data = keep_product_data\n\n      this%product_wm => product%wms(ithread + 1)\n      CALL dbcsr_mm_sched_init(this%sched, &\n                               product_wm=this%product_wm, &\n                               nlayers=nlayers, &\n                               keep_product_data=keep_product_data)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_mm_csr_init\n\n   SUBROUTINE fill_hash_tables(hashes, matrix, block_estimate, row_map, col_map)\n      !! Fills row hashtable from an existing matrix.\n\n      TYPE(hash_table_type), DIMENSION(:), INTENT(inout) :: hashes\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n      INTEGER                                            :: block_estimate\n         !! guess for the number of blocks in the product matrix, can be zero\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: row_map, col_map\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'fill_hash_tables'\n\n      INTEGER                                            :: col, handle, i, imat, n_rows, row\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      imat = 1\n!$    imat = OMP_GET_THREAD_NUM() + 1\n      n_rows = matrix%nblkrows_local\n      IF (SIZE(hashes) /= n_rows) &\n         DBCSR_ABORT(\"Local row count mismatch\")\n      DO row = 1, n_rows\n         ! create the hash table row with a reasonable initial size\n         CALL hash_table_create(hashes(row), &\n                                MAX(8, (3*block_estimate)/MAX(1, n_rows)))\n      END DO\n      ! We avoid using the iterator because we will use the existing\n      ! work matrix instead of the BCSR index.\n      DO i = 1, matrix%wms(imat)%lastblk\n         row = matrix%wms(imat)%row_i(i)\n         col = matrix%wms(imat)%col_i(i)\n         row = row_map(row)\n         col = col_map(col)\n         CALL hash_table_add(hashes(row), col, i)\n      END DO\n      CALL timestop(handle)\n   END SUBROUTINE fill_hash_tables\n\n   SUBROUTINE dbcsr_mm_csr_finalize(this)\n      !! Finalizes a multiplication cycle for a set of C-blocks.\n      TYPE(dbcsr_mm_csr_type), INTENT(INOUT)             :: this\n\n      INTEGER                                            :: i\n\n      CALL dbcsr_mm_sched_finalize(this%sched)\n\n      ! Clear hash tables\n      DO i = 1, SIZE(this%c_hashes)\n         CALL hash_table_release(this%c_hashes(i))\n      END DO\n      DEALLOCATE (this%c_hashes)\n      DEALLOCATE (this%stacks_descr)\n      DEALLOCATE (this%stack_map)\n      DEALLOCATE (this%m_size_maps)\n      DEALLOCATE (this%n_size_maps)\n      DEALLOCATE (this%k_size_maps)\n      DEALLOCATE (this%stacks_fillcount)\n      DEALLOCATE (this%stacks_data)\n   END SUBROUTINE dbcsr_mm_csr_finalize\n\n   SUBROUTINE dbcsr_mm_csr_dev2host_init(this)\n      TYPE(dbcsr_mm_csr_type), INTENT(INOUT)             :: this\n\n      CALL dbcsr_mm_sched_dev2host_init(this%sched)\n\n   END SUBROUTINE dbcsr_mm_csr_dev2host_init\n\n   SUBROUTINE dbcsr_mm_csr_red3D(this, meta_buffer, data_buffer, flop, m_sizes, n_sizes, &\n      !! Make the reduction of the 3D layers in the local csr object\n                                 g2l_map_rows, g2l_map_cols, original_lastblk, &\n                                 keep_sparsity)\n      TYPE(dbcsr_mm_csr_type), INTENT(INOUT)             :: this\n      INTEGER, DIMENSION(:), INTENT(IN), TARGET          :: meta_buffer\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: data_buffer\n      INTEGER(KIND=int_8), INTENT(INOUT)                 :: flop\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: m_sizes, n_sizes, g2l_map_rows, &\n                                                            g2l_map_cols\n      INTEGER, INTENT(IN)                                :: original_lastblk\n      LOGICAL, INTENT(IN)                                :: keep_sparsity\n\n      INTEGER                                            :: c_blk_id, iblock, ithread, lb, lb_data, &\n                                                            lb_meta, nblks_max, nblocks, nthreads, &\n                                                            nze, nze_max, ub_meta\n      INTEGER, DIMENSION(:), POINTER                     :: blk_p, col_i, row_i\n      LOGICAL                                            :: block_exists\n\n      ithread = 0; nthreads = 1\n!$    ithread = OMP_GET_THREAD_NUM(); nthreads = OMP_GET_NUM_THREADS()\n      lb_meta = meta_buffer(ithread + 1)\n      nblocks = (meta_buffer(ithread + 2) - lb_meta)/3\n      ub_meta = lb_meta + nblocks\n      row_i => meta_buffer(lb_meta + 1:ub_meta)\n      lb_meta = ub_meta\n      ub_meta = lb_meta + nblocks\n      col_i => meta_buffer(lb_meta + 1:ub_meta)\n      ! Make local indexing if needed\n      IF (keep_sparsity) THEN\n         DO iblock = 1, original_lastblk\n            row_i(iblock) = g2l_map_rows(row_i(iblock))\n            col_i(iblock) = g2l_map_cols(col_i(iblock))\n         END DO\n      END IF\n      lb_meta = ub_meta\n      ub_meta = lb_meta + nblocks\n      blk_p => meta_buffer(lb_meta + 1:ub_meta)\n      !\n      ! Get sizes\n      nze_max = this%product_wm%datasize\n      nblks_max = this%product_wm%lastblk\n      DO iblock = 1, nblocks\n         nze = m_sizes(row_i(iblock))*n_sizes(col_i(iblock))\n         IF (nze .EQ. 0) CYCLE\n         c_blk_id = hash_table_get(this%c_hashes(row_i(iblock)), col_i(iblock))\n         block_exists = c_blk_id .GT. 0\n         IF (block_exists) CYCLE\n         nblks_max = nblks_max + 1\n         nze_max = nze_max + nze\n      END DO\n      ! Resize buffers\n      CALL dbcsr_data_ensure_size(this%product_wm%data_area, &\n                                  nze_max, factor=default_resize_factor, nocopy=.FALSE., &\n                                  zero_pad=.TRUE.)\n      CALL ensure_array_size(this%product_wm%row_i, ub=nblks_max, &\n                             factor=default_resize_factor, nocopy=.FALSE.)\n      CALL ensure_array_size(this%product_wm%col_i, ub=nblks_max, &\n                             factor=default_resize_factor, nocopy=.FALSE.)\n      CALL ensure_array_size(this%product_wm%blk_p, ub=nblks_max, &\n                             factor=default_resize_factor, nocopy=.FALSE.)\n      DO iblock = 1, nblocks\n         nze = m_sizes(row_i(iblock))*n_sizes(col_i(iblock))\n         IF (nze .EQ. 0) CYCLE\n         lb_data = blk_p(iblock)\n         c_blk_id = hash_table_get(this%c_hashes(row_i(iblock)), col_i(iblock))\n         block_exists = c_blk_id .GT. 0\n         IF (block_exists) THEN\n            lb = this%product_wm%blk_p(c_blk_id)\n            CALL block_add(this%product_wm%data_area, data_buffer, &\n                           lb, lb_data, nze)\n            flop = flop + nze\n         ELSE\n            lb = this%product_wm%datasize + 1\n            this%product_wm%lastblk = this%product_wm%lastblk + 1\n            this%product_wm%datasize = this%product_wm%datasize + nze\n            c_blk_id = this%product_wm%lastblk ! assign a new c-block-id\n            CALL hash_table_add(this%c_hashes(row_i(iblock)), col_i(iblock), c_blk_id)\n            this%product_wm%row_i(this%product_wm%lastblk) = row_i(iblock)\n            this%product_wm%col_i(this%product_wm%lastblk) = col_i(iblock)\n            this%product_wm%blk_p(this%product_wm%lastblk) = lb\n            !\n            CALL dbcsr_block_copy_aa(this%product_wm%data_area, data_buffer, &\n                                     m_sizes(row_i(iblock)), n_sizes(col_i(iblock)), lb, lb_data)\n         END IF\n      END DO\n      CALL dbcsr_mm_sched_set_orig_datasize(this%sched, this%product_wm%datasize)\n   END SUBROUTINE dbcsr_mm_csr_red3D\n\n   SUBROUTINE dbcsr_mm_csr_purge_stacks(this, left, right)\n      TYPE(dbcsr_mm_csr_type), INTENT(INOUT)             :: this\n      TYPE(dbcsr_type), INTENT(IN)                       :: left, right\n\n      CALL flush_stacks(this, left, right, purge=.TRUE.)\n      CALL dbcsr_mm_sched_barrier()\n   END SUBROUTINE dbcsr_mm_csr_purge_stacks\n\n   SUBROUTINE flush_stacks(this, left, right, purge)\n      TYPE(dbcsr_mm_csr_type), INTENT(INOUT)             :: this\n      TYPE(dbcsr_type), INTENT(IN)                       :: left, right\n      LOGICAL, INTENT(IN), OPTIONAL                      :: purge\n\n      INTEGER                                            :: i, min_fill, n_stacks\n      INTEGER, DIMENSION(:, :), POINTER                  :: stack_data\n      INTEGER, POINTER                                   :: stack_fillcount\n      TYPE(stack_descriptor_type)                        :: stack_descr\n\n      n_stacks = SIZE(this%stacks_data, 3)\n      min_fill = SIZE(this%stacks_data, 2)*3/4 !TODO: play with this\n      IF (PRESENT(purge)) THEN\n         IF (purge) min_fill = 0\n      END IF\n\n      CALL dbcsr_mm_sched_begin_burst(this%sched)\n\n      DO i = 1, n_stacks\n         IF (this%stacks_fillcount(i) > min_fill) THEN\n            stack_data => this%stacks_data(:, :, i)\n            stack_fillcount => this%stacks_fillcount(i)\n            stack_descr = this%stacks_descr(i)\n\n            CALL dbcsr_mm_sched_process(this%sched, &\n                                        left, right, &\n                                        stack_data=stack_data, &\n                                        stack_fillcount=stack_fillcount, &\n                                        stack_descr=stack_descr)\n\n            stack_fillcount = 0\n         END IF\n      END DO\n\n      CALL dbcsr_mm_sched_end_burst()\n   END SUBROUTINE flush_stacks\n\n   SUBROUTINE build_csr_index(mi, mf, ai, af, row_p, blk_info, list_index, &\n      !! Builds and sorts a CSR index from a list index.\n                              nnorms, csr_norms, list_norms)\n      INTEGER, INTENT(IN)                                :: mi, mf, ai, af\n      INTEGER, DIMENSION(mi:mf + 1), INTENT(OUT)           :: row_p\n      INTEGER, DIMENSION(2, 1:af - ai + 1), INTENT(OUT)      :: blk_info\n      INTEGER, DIMENSION(3, 1:af), INTENT(IN)            :: list_index\n      INTEGER, INTENT(IN)                                :: nnorms\n      REAL(KIND=sp), DIMENSION(1:af - ai + 1), INTENT(OUT)   :: csr_norms\n      REAL(KIND=sp), DIMENSION(:), INTENT(IN)            :: list_norms\n\n      LOGICAL, PARAMETER                                 :: careful = .FALSE., dbg = .FALSE.\n\n      INTEGER                                            :: i, row\n      INTEGER, DIMENSION(mi:mf)                          :: counts\n\n!   ---------------------------------------------------------------------------\n! Counts blocks per row and calculates the offsets.\n\n      IF (dbg) THEN\n         WRITE (*, '(I7,1X,5(A,2(1X,I7)))') 0, \"bci\", mi, mf, \";\", ai, af\n         !write(*,'(3(I7))')list_index(:,ai:af)\n      END IF\n\n      counts(:) = 0\n      DO i = ai, af\n         IF (careful) THEN\n            IF (list_index(1, i) < mi) DBCSR_ABORT(\"Out of range\")\n            IF (list_index(1, i) > mf) DBCSR_ABORT(\"Out of range\")\n         END IF\n         counts(list_index(1, i)) = counts(list_index(1, i)) + 1\n      END DO\n      row_p(mi) = 0\n      DO i = mi + 1, mf + 1\n         row_p(i) = row_p(i - 1) + counts(i - 1)\n      END DO\n      ! Adds every block to its corresponding row.\n      counts(:) = 0\n      DO i = ai, af\n         row = list_index(1, i)\n         counts(row) = counts(row) + 1\n         IF (careful) THEN\n            IF (row_p(row) + counts(row) > af - ai + 1) DBCSR_ABORT(\"Out of range\")\n            IF (row_p(row) + counts(row) < 1) DBCSR_ABORT(\"Out of range\")\n         END IF\n         blk_info(1, row_p(row) + counts(row)) = list_index(2, i)\n         blk_info(2, row_p(row) + counts(row)) = list_index(3, i)\n         IF (nnorms .GT. 0) THEN\n            csr_norms(row_p(row) + counts(row)) = list_norms(i)\n         END IF\n      END DO\n      IF (nnorms .EQ. 0) THEN\n         csr_norms(:) = 0.0_sp\n      END IF\n   END SUBROUTINE build_csr_index\n\n   ELEMENTAL FUNCTION my_checker_tr(row, column) RESULT(transpose)\n      !! Determines whether a transpose must be applied\n      !!\n      !! Source\n      !! This function is copied from dbcsr_dist_operations for speed reasons.\n\n      INTEGER, INTENT(IN)                                :: row, column\n         !! The absolute matrix row.\n         !! The absolute matrix column.\n      LOGICAL                                            :: transpose\n\n      transpose = BTEST(column + row, 0) .EQV. column .GE. row\n\n   END FUNCTION my_checker_tr\n\n#include \"utils/dbcsr_hash_table.f90\"\n\nEND MODULE dbcsr_mm_csr\n"
  },
  {
    "path": "src/mm/dbcsr_mm_dist_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_dist_operations\n   !! DBCSR operations on distributions related to matrix multiplication\n\n   USE dbcsr_array_types, ONLY: &\n      array_data, array_equality, array_exists, array_hold, array_i1d_obj, array_new, &\n      array_nullify, array_release, array_size\n   USE dbcsr_dist_methods, ONLY: &\n      dbcsr_distribution_col_dist, dbcsr_distribution_has_threads, dbcsr_distribution_hold, &\n      dbcsr_distribution_make_threads, dbcsr_distribution_mp, dbcsr_distribution_ncols, &\n      dbcsr_distribution_new, dbcsr_distribution_no_threads, dbcsr_distribution_nrows, &\n      dbcsr_distribution_release, dbcsr_distribution_row_dist, dbcsr_distribution_thread_dist\n   USE dbcsr_dist_operations, ONLY: dbcsr_get_local_cols, &\n                                    dbcsr_get_local_rows, &\n                                    find_all_local_elements, &\n                                    rebin_distribution\n   USE dbcsr_methods, ONLY: dbcsr_distribution, &\n                            dbcsr_release_locals\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_mypcol, &\n                               dbcsr_mp_myprow, &\n                               dbcsr_mp_npcols, &\n                               dbcsr_mp_nprows\n   USE dbcsr_toollib, ONLY: gcd\n   USE dbcsr_types, ONLY: &\n      dbcsr_distribution_obj, dbcsr_imagedistribution_obj, dbcsr_mp_obj, dbcsr_slot_home_pcol, &\n      dbcsr_slot_home_prow, dbcsr_slot_home_vpcol, dbcsr_slot_home_vprow, &\n      dbcsr_slot_nblkcols_local, dbcsr_slot_nblkrows_local, dbcsr_type\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   INTEGER :: idid = 0\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_dist_operations'\n\n   PUBLIC :: dbcsr_create_image_dist, dbcsr_make_dists_dense\n   PUBLIC :: image_calculator, make_sizes_dense\n   PUBLIC :: dbcsr_reset_locals, dbcsr_reset_vlocals\n   PUBLIC :: dbcsr_get_local_vrows, dbcsr_get_local_vcols\n\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n\nCONTAINS\n\n   SUBROUTINE dbcsr_create_image_dist(imgdist, dist, &\n                                      match_row_pdist, match_row_idist, match_row_nbins, &\n                                      match_col_pdist, match_col_idist, match_col_nbins, &\n                                      nimages_rows, nimages_cols)\n      !! Creates an image distribution given the other compatibility images\n\n      TYPE(dbcsr_imagedistribution_obj), INTENT(OUT)     :: imgdist\n         !! distribution repetition\n      TYPE(dbcsr_distribution_obj), INTENT(IN)           :: dist\n         !! distribution for which to form the image distribution\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: match_row_pdist, match_row_idist\n         !! match the new row distribution to this row distribution\n         !! match the row distribution to these row images\n      INTEGER, INTENT(IN)                                :: match_row_nbins\n         !! number of bins in the distribution to match the local rows\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: match_col_pdist, match_col_idist\n         !! match the new column distribution to this column distribution\n         !! match the new column distribution to these column images\n      INTEGER, INTENT(IN)                                :: match_col_nbins, nimages_rows, &\n                                                            nimages_cols\n         !! number of bins in the distribution to match the local columns\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_create_image_dist'\n\n      INTEGER                                            :: ncols, npcols, nprows, nrows\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_dist_data, col_img_data, col_vdist, &\n                                                            row_dist_data, row_img_data, row_vdist\n      LOGICAL                                            :: new_col_dist, new_row_dist\n      TYPE(dbcsr_distribution_obj)                       :: new_dist\n      TYPE(dbcsr_mp_obj)                                 :: mp_env\n\n!   ---------------------------------------------------------------------------\n\n      idid = idid + 1\n      ALLOCATE (imgdist%i)\n      imgdist%i%refcount = 1\n      imgdist%i%id = idid\n      mp_env = dbcsr_distribution_mp(dist)\n      ! Determine the factors.\n      nrows = dbcsr_distribution_nrows(dist)\n      ncols = dbcsr_distribution_ncols(dist)\n      nprows = dbcsr_mp_nprows(mp_env)\n      npcols = dbcsr_mp_npcols(mp_env)\n      IF (debug_mod) WRITE (*, '(1X,A,I5,\"x\",I5)') routineN//\"pgrid\", &\n         nprows, npcols\n      !\n      ! Create the new row distribution and row image distribution\n      imgdist%i%row_decimation = nimages_rows/nprows\n      imgdist%i%row_multiplicity = nimages_rows/gcd(nimages_rows, match_row_nbins)\n      new_row_dist = .FALSE.\n      !\n      IF (debug_mod) WRITE (*, *) routineN//'row decimation, multiplicity', &\n         imgdist%i%row_decimation, imgdist%i%row_multiplicity\n      IF (debug_mod) WRITE (*, *) routineN//\" nprows, match prows\", nprows, match_row_nbins\n      ALLOCATE (row_img_data(nrows))\n      ALLOCATE (row_vdist(nrows))\n      !\n      IF (imgdist%i%row_decimation .EQ. 1 .AND. imgdist%i%row_multiplicity .EQ. 1 .AND. &\n          .NOT. PRESENT(match_row_pdist)) THEN\n         row_dist_data => dbcsr_distribution_row_dist(dist)\n         row_img_data(:) = 1\n      ELSE\n         IF (PRESENT(match_row_pdist)) THEN\n            ALLOCATE (row_dist_data(nrows))\n            new_row_dist = .TRUE.\n            IF (PRESENT(match_row_idist)) THEN\n               CALL rebin_imaged_distribution(row_dist_data, row_img_data, &\n                                              match_row_pdist, match_row_idist, &\n                                              nprows, &\n                                              imgdist%i%row_multiplicity, imgdist%i%row_decimation)\n            ELSE\n               CALL rebin_distribution(row_dist_data, row_img_data, &\n                                       match_row_pdist, &\n                                       nprows, &\n                                       imgdist%i%row_multiplicity, imgdist%i%row_decimation)\n            END IF\n         ELSE\n            row_dist_data => dbcsr_distribution_row_dist(dist)\n            CALL reimage_distribution(row_img_data, &\n                                      row_dist_data, nprows, imgdist%i%row_decimation)\n         END IF\n      END IF\n      CALL make_vdistribution(nrows, row_vdist, row_dist_data, &\n                              imgdist%i%row_decimation, row_img_data)\n      CALL array_new(imgdist%i%vrow_dist, row_vdist, gift=.TRUE.)\n      !\n      ! Create the new column distribution and column image distribution\n      imgdist%i%col_decimation = nimages_cols/npcols\n      imgdist%i%col_multiplicity = nimages_cols/gcd(nimages_cols, match_col_nbins)\n      new_col_dist = .FALSE.\n      !\n      IF (debug_mod) WRITE (*, *) routineN//'col decimation, multiplicity', &\n         imgdist%i%col_decimation, imgdist%i%col_multiplicity\n      IF (debug_mod) WRITE (*, *) routineN//\" npcols, match pcols\", npcols, match_col_nbins\n      ALLOCATE (col_img_data(ncols))\n      ALLOCATE (col_vdist(ncols))\n      !\n      IF (imgdist%i%col_decimation .EQ. 1 .AND. imgdist%i%col_multiplicity .EQ. 1 .AND. &\n          .NOT. PRESENT(match_col_pdist)) THEN\n         col_dist_data => dbcsr_distribution_col_dist(dist)\n         col_img_data(:) = 1\n      ELSE\n         IF (PRESENT(match_col_pdist)) THEN\n            ALLOCATE (col_dist_data(ncols))\n            new_col_dist = .TRUE.\n            IF (PRESENT(match_col_idist)) THEN\n               CALL rebin_imaged_distribution(col_dist_data, col_img_data, &\n                                              match_col_pdist, match_col_idist, &\n                                              npcols, &\n                                              imgdist%i%col_multiplicity, imgdist%i%col_decimation)\n            ELSE\n               CALL rebin_distribution(col_dist_data, col_img_data, &\n                                       match_col_pdist, &\n                                       npcols, &\n                                       imgdist%i%col_multiplicity, imgdist%i%col_decimation)\n            END IF\n         ELSE\n            col_dist_data => dbcsr_distribution_col_dist(dist)\n            CALL reimage_distribution(col_img_data, &\n                                      col_dist_data, &\n                                      npcols, imgdist%i%col_decimation)\n         END IF\n      END IF\n      CALL make_vdistribution(ncols, col_vdist, col_dist_data, &\n                              imgdist%i%col_decimation, col_img_data)\n      CALL array_new(imgdist%i%vcol_dist, col_vdist, gift=.TRUE.)\n      !\n      ! Copy the row & column distribution from old distribution\n      IF (new_row_dist .AND. new_col_dist) THEN\n         CALL dbcsr_distribution_new(new_dist, &\n                                     mp_env, &\n                                     row_dist_data, col_dist_data, &\n                                     reuse_arrays=.TRUE.)\n      ELSE\n         CALL dbcsr_distribution_new(new_dist, &\n                                     mp_env, &\n                                     row_dist_data, col_dist_data)\n         IF (new_row_dist) DEALLOCATE (row_dist_data)\n         IF (new_col_dist) DEALLOCATE (col_dist_data)\n      END IF\n      ! Now finish the distribution image.\n      imgdist%i%main = new_dist\n      CALL array_new(imgdist%i%col_image, col_img_data, gift=.TRUE.)\n      CALL array_new(imgdist%i%row_image, row_img_data, gift=.TRUE.)\n      !\n      imgdist%i%has_other_vl_rows = .FALSE.\n      imgdist%i%has_other_vl_cols = .FALSE.\n      imgdist%i%has_global_vrow_map = .FALSE.\n      imgdist%i%has_global_vcol_map = .FALSE.\n      !\n!$    IF (dbcsr_distribution_has_threads(dist)) THEN\n!$       imgdist%i%main%d%num_threads = dist%d%num_threads\n!$       imgdist%i%main%d%has_thread_dist = .TRUE.\n!$       imgdist%i%main%d%thread_dist = dist%d%thread_dist\n!$       CALL array_hold(imgdist%i%main%d%thread_dist)\n!$    END IF\n   END SUBROUTINE dbcsr_create_image_dist\n\n   SUBROUTINE dbcsr_new_image_dist(imgdist, dist, &\n                                   template)\n      TYPE(dbcsr_imagedistribution_obj), INTENT(OUT)     :: imgdist\n      TYPE(dbcsr_distribution_obj), INTENT(IN)           :: dist\n      TYPE(dbcsr_imagedistribution_obj), INTENT(IN)      :: template\n\n!   ---------------------------------------------------------------------------\n\n      idid = idid + 1\n      ALLOCATE (imgdist%i)\n      imgdist%i%refcount = 1\n      imgdist%i%id = idid\n      imgdist%i%row_decimation = template%i%row_decimation\n      imgdist%i%row_multiplicity = template%i%row_multiplicity\n      imgdist%i%col_decimation = template%i%col_decimation\n      imgdist%i%col_multiplicity = template%i%col_multiplicity\n      !\n      NULLIFY (imgdist%i%other_vl_rows)\n      NULLIFY (imgdist%i%other_vl_cols)\n      CALL array_nullify(imgdist%i%global_vrow_map)\n      CALL array_nullify(imgdist%i%global_vcol_map)\n      imgdist%i%has_other_vl_rows = .FALSE.\n      imgdist%i%has_other_vl_cols = .FALSE.\n      imgdist%i%has_global_vrow_map = .FALSE.\n      imgdist%i%has_global_vcol_map = .FALSE.\n      !\n      imgdist%i%main = dist\n      CALL dbcsr_distribution_hold(imgdist%i%main)\n      !\n   END SUBROUTINE dbcsr_new_image_dist\n\n   SUBROUTINE dbcsr_make_dists_dense(product_dist, left_rdist, right_rdist, &\n      !! Prepares distributions for making dense matrices.\n                                     dense_product_dist, dense_left_rdist, dense_right_rdist, &\n                                     partial, &\n                                     m_map, k_vmap, n_map, &\n                                     old_m_sizes)\n      TYPE(dbcsr_distribution_obj), INTENT(IN)           :: product_dist\n      TYPE(dbcsr_imagedistribution_obj), INTENT(IN)      :: left_rdist, right_rdist\n      TYPE(dbcsr_distribution_obj), INTENT(OUT)          :: dense_product_dist\n      TYPE(dbcsr_imagedistribution_obj), INTENT(OUT)     :: dense_left_rdist, dense_right_rdist\n      LOGICAL, INTENT(IN)                                :: partial\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: m_map, k_vmap, n_map\n      TYPE(array_i1d_obj), INTENT(IN)                    :: old_m_sizes\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_dists_dense'\n\n      INTEGER                                            :: error_handle, i, j, k_nbins, m_nbins, &\n                                                            n_nbins, nthreads\n      INTEGER, DIMENSION(:), POINTER                     :: tdist\n      TYPE(array_i1d_obj)                                :: new_k_idist, new_k_pdist, new_k_vdist, &\n                                                            new_m_dist, new_m_sizes, new_n_dist, &\n                                                            old_k_vdist, old_m_dist, old_n_dist\n      TYPE(dbcsr_distribution_obj)                       :: dense_left_dist, dense_right_dist\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      !\n      IF (.NOT. dbcsr_distribution_has_threads(product_dist)) &\n         DBCSR_ABORT(\"Product distribution must have threads.\")\n      tdist => array_data(dbcsr_distribution_thread_dist(product_dist))\n      old_m_dist = product_dist%d%row_dist_block\n      old_n_dist = product_dist%d%col_dist_block\n      old_k_vdist = right_rdist%i%vrow_dist\n      m_nbins = dbcsr_mp_nprows(product_dist%d%mp_env)\n      n_nbins = dbcsr_mp_npcols(product_dist%d%mp_env)\n      k_nbins = dbcsr_mp_nprows(right_rdist%i%main%d%mp_env)*right_rdist%i%row_decimation\n      IF (.NOT. array_equality(old_k_vdist, left_rdist%i%vcol_dist)) &\n         DBCSR_ABORT(\"k distribution mismatch\")\n      nthreads = product_dist%d%num_threads\n      !\n      IF (partial) THEN\n         new_m_dist = old_m_dist\n         CALL array_hold(new_m_dist)\n         new_n_dist = old_n_dist\n         CALL array_hold(new_n_dist)\n         dense_product_dist = product_dist\n         CALL dbcsr_distribution_hold(dense_product_dist)\n         CALL array_new(m_map, (/(i, i=1, array_size(new_m_dist))/), lb=1)\n         CALL array_new(n_map, (/(i, i=1, array_size(new_n_dist))/), lb=1)\n      ELSE\n         CALL dbcsr_make_1dist_dense(m_nbins, old_m_dist, new_m_dist, m_map, &\n                                     nthreads, tdist)\n         CALL dbcsr_make_1dist_dense(n_nbins, old_n_dist, new_n_dist, n_map, 0)\n         CALL dbcsr_distribution_new(dense_product_dist, product_dist%d%mp_env, &\n                                     new_m_dist, new_n_dist)\n         CALL make_sizes_dense(old_m_sizes, m_map, array_size(new_m_dist), new_m_sizes)\n         CALL dbcsr_distribution_make_threads(dense_product_dist, &\n                                              array_data(new_m_sizes))\n         CALL array_release(new_m_sizes)\n         tdist => array_data(dbcsr_distribution_thread_dist(dense_product_dist))\n         ! Resets the thread distribution to be in-order.\n         DO i = 1, m_nbins\n            tdist((i - 1)*nthreads + 1:(i)*nthreads) = (/(j, j=0, nthreads - 1)/)\n         END DO\n      END IF\n      !\n      CALL dbcsr_make_1dist_dense(k_nbins, old_k_vdist, new_k_vdist, k_vmap, 0)\n      CALL v_to_p_i_dist_o(new_k_vdist, &\n                           left_rdist%i%col_decimation, new_k_pdist, new_k_idist)\n      ! Left\n      CALL dbcsr_distribution_new(dense_left_dist, left_rdist%i%main%d%mp_env, &\n                                  new_m_dist, new_k_pdist)\n      CALL dbcsr_distribution_no_threads(dense_left_dist)\n      dense_left_dist%d%thread_dist = dbcsr_distribution_thread_dist(dense_product_dist)\n      CALL array_hold(dense_left_dist%d%thread_dist)\n      dense_left_dist%d%has_thread_dist = .TRUE.\n      CALL dbcsr_new_image_dist(dense_left_rdist, dense_left_dist, left_rdist)\n      CALL dbcsr_distribution_release(dense_left_dist)\n      CALL array_new(dense_left_rdist%i%row_image, &\n                     (/(1, i=1, array_size(new_m_dist))/), lb=1)\n      dense_left_rdist%i%col_image = new_k_idist\n      CALL array_hold(new_k_idist)\n      dense_left_rdist%i%vrow_dist = new_m_dist\n      CALL array_hold(new_m_dist)\n      dense_left_rdist%i%vcol_dist = new_k_vdist\n      CALL array_hold(new_k_vdist)\n      !\n      CALL array_release(new_k_pdist)\n      CALL array_release(new_k_idist)\n      ! Right\n      CALL v_to_p_i_dist_o(new_k_vdist, &\n                           right_rdist%i%row_decimation, new_k_pdist, new_k_idist)\n      CALL dbcsr_distribution_new(dense_right_dist, right_rdist%i%main%d%mp_env, &\n                                  new_k_pdist, new_n_dist)\n      CALL dbcsr_new_image_dist(dense_right_rdist, dense_right_dist, right_rdist)\n      CALL dbcsr_distribution_release(dense_right_dist)\n      CALL array_new(dense_right_rdist%i%col_image, &\n                     (/(1, i=1, array_size(new_n_dist))/), lb=1)\n      dense_right_rdist%i%row_image = new_k_idist\n      CALL array_hold(new_k_idist)\n      dense_right_rdist%i%vrow_dist = new_k_vdist\n      CALL array_hold(new_k_vdist)\n      dense_right_rdist%i%vcol_dist = new_n_dist\n      CALL array_hold(new_n_dist)\n      !\n      CALL array_release(new_k_idist)\n      CALL array_release(new_k_pdist)\n      CALL array_release(new_m_dist)\n      CALL array_release(new_n_dist)\n      CALL array_release(new_k_vdist)\n      !\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_make_dists_dense\n\n   SUBROUTINE dbcsr_reset_locals(matrix)\n      !! Resets local rows, columns to the correct arrays and values.\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      TYPE(dbcsr_distribution_obj)                       :: dist\n\n!   ---------------------------------------------------------------------------\n\n      dist = dbcsr_distribution(matrix)\n      CALL dbcsr_release_locals(matrix)\n      ! Rows\n      IF (dbg) &\n         WRITE (*, *) \"reset local rows for \", TRIM(matrix%name), &\n         matrix%nblkrows_local, \"prow\", matrix%index(dbcsr_slot_home_prow), &\n         dbcsr_mp_myprow(dbcsr_distribution_mp(matrix%dist))\n      CALL dbcsr_get_local_rows(dist, matrix%local_rows, &\n                                matrix%index(dbcsr_slot_home_prow))\n      CALL array_hold(matrix%local_rows)\n      IF (dbg) WRITE (*, *) \"local rows\", matrix%local_rows%low%data\n      matrix%nblkrows_local = array_size(matrix%local_rows)\n      CALL dbcsr_get_global_row_map(dist, matrix%global_rows)\n      CALL array_hold(matrix%global_rows)\n      matrix%has_local_rows = .TRUE.\n      matrix%has_global_rows = .TRUE.\n      ! Columns\n      IF (dbg) &\n         WRITE (*, *) \"reset local cols for \", TRIM(matrix%name), &\n         matrix%nblkcols_local, \"pcol\", matrix%index(dbcsr_slot_home_pcol), &\n         dbcsr_mp_mypcol(dbcsr_distribution_mp(matrix%dist))\n      CALL dbcsr_get_local_cols(dist, matrix%local_cols, &\n                                matrix%index(dbcsr_slot_home_pcol))\n      CALL array_hold(matrix%local_cols)\n      IF (dbg) WRITE (*, *) \"local cols\", matrix%local_cols%low%data\n      matrix%nblkcols_local = array_size(matrix%local_cols)\n      CALL dbcsr_get_global_col_map(dist, matrix%global_cols)\n      CALL array_hold(matrix%global_cols)\n      matrix%has_local_cols = .TRUE.\n      matrix%has_global_cols = .TRUE.\n      !\n   END SUBROUTINE dbcsr_reset_locals\n\n   SUBROUTINE dbcsr_reset_vlocals(matrix, imgdist, do_rows)\n      !! Resets local rows, columns to the correct arrays and values\n      !! for images.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n      LOGICAL, INTENT(IN), OPTIONAL                      :: do_rows\n\n      LOGICAL                                            :: my_do_rows\n\n!   ---------------------------------------------------------------------------\n\n      CALL dbcsr_release_locals(matrix)\n      my_do_rows = .TRUE.\n      IF (PRESENT(do_rows)) my_do_rows = do_rows\n      ! Rows\n      IF (.NOT. PRESENT(do_rows) .OR. my_do_rows) THEN\n         CALL dbcsr_get_local_vrows(imgdist, matrix%local_rows, &\n                                    matrix%index(dbcsr_slot_home_vprow))\n      ELSE\n         matrix%local_rows = imgdist%i%main%d%local_rows\n      END IF\n      CALL array_hold(matrix%local_rows)\n      matrix%has_local_rows = .TRUE.\n      matrix%nblkrows_local = array_size(matrix%local_rows)\n      matrix%index(dbcsr_slot_nblkrows_local) = array_size(matrix%local_rows)\n      CALL dbcsr_get_global_vrow_map(imgdist, matrix%global_rows)\n      CALL array_hold(matrix%global_rows)\n      matrix%has_global_rows = .TRUE.\n      ! Columns\n      IF (.NOT. PRESENT(do_rows) .OR. .NOT. my_do_rows) THEN\n         CALL dbcsr_get_local_vcols(imgdist, matrix%local_cols, &\n                                    matrix%index(dbcsr_slot_home_vpcol))\n      ELSE\n         matrix%local_cols = imgdist%i%main%d%local_cols\n      END IF\n      CALL array_hold(matrix%local_cols)\n      matrix%has_local_cols = .TRUE.\n      matrix%nblkcols_local = array_size(matrix%local_cols)\n      matrix%index(dbcsr_slot_nblkcols_local) = array_size(matrix%local_cols)\n      CALL dbcsr_get_global_vcol_map(imgdist, matrix%global_cols)\n      CALL array_hold(matrix%global_cols)\n      matrix%has_global_cols = .TRUE.\n   END SUBROUTINE dbcsr_reset_vlocals\n\n   SUBROUTINE dbcsr_get_local_vrows(imgdist, local_vrows, local_vprow)\n      !! Determines mapping from local to global virtual process rows\n\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n         !! image distribution\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: local_vrows\n         !! local rows\n      INTEGER, INTENT(IN)                                :: local_vprow\n         !! the local virtual process row\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_local_vrows'\n\n      INTEGER                                            :: el, error_handle, nvprows, vprow\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: itmp, nle\n      INTEGER, DIMENSION(:), POINTER                     :: vrow_dist\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n      ! If the current local row mappings do not exist, create them.\n      IF (.NOT. imgdist%i%has_other_vl_rows) THEN\n         imgdist%i%has_other_vl_rows = .TRUE.\n         nvprows = dbcsr_mp_nprows(dbcsr_distribution_mp(imgdist%i%main)) &\n                   *imgdist%i%row_decimation\n         ALLOCATE (imgdist%i%other_vl_rows(0:nvprows - 1))\n         ALLOCATE (nle(0:nvprows - 1))\n         vrow_dist => array_data(imgdist%i%vrow_dist)\n         ! Count the number of local elements per row.\n         nle(:) = 0\n         DO el = 1, SIZE(vrow_dist)\n            vprow = vrow_dist(el)\n            nle(vprow) = nle(vprow) + 1\n         END DO\n         DO vprow = 0, nvprows - 1\n            ALLOCATE (itmp(nle(vprow)))\n            itmp = 0\n            CALL array_new(imgdist%i%other_vl_rows(vprow), &\n                           itmp, lb=1)\n            DEALLOCATE (itmp)\n         END DO\n         DEALLOCATE (nle)\n         CALL find_all_local_elements(imgdist%i%other_vl_rows, vrow_dist, nvprows)\n      ELSE\n         IF (careful_mod .AND. .NOT. ASSOCIATED(imgdist%i%other_vl_rows)) &\n            DBCSR_ABORT(\"Local rows mapping does not exist.\")\n      END IF\n      local_vrows = imgdist%i%other_vl_rows(local_vprow)\n      IF (careful_mod) CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_get_local_vrows\n\n   SUBROUTINE dbcsr_get_local_vcols(imgdist, local_vcols, local_vpcol)\n      !! Determines mapping from local to global virtual process columns\n\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n         !! image distribution\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: local_vcols\n         !! local columns\n      INTEGER, INTENT(IN)                                :: local_vpcol\n         !! the local virtual process column\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_local_vcols'\n\n      INTEGER                                            :: el, error_handle, nvpcols, vpcol\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: nle\n      INTEGER, DIMENSION(:), POINTER                     :: itmp, vcol_dist\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n      ! If the current local col mappings do not exist, create them.\n      IF (.NOT. imgdist%i%has_other_vl_cols) THEN\n         imgdist%i%has_other_vl_cols = .TRUE.\n         nvpcols = dbcsr_mp_npcols(dbcsr_distribution_mp(imgdist%i%main)) &\n                   *imgdist%i%col_decimation\n         ALLOCATE (imgdist%i%other_vl_cols(0:nvpcols - 1))\n         ALLOCATE (nle(0:nvpcols - 1))\n         vcol_dist => array_data(imgdist%i%vcol_dist)\n         ! Count the number of local elements per col.\n         nle(:) = 0\n         DO el = 1, SIZE(vcol_dist)\n            vpcol = vcol_dist(el)\n            nle(vpcol) = nle(vpcol) + 1\n         END DO\n         DO vpcol = 0, nvpcols - 1\n            ALLOCATE (itmp(nle(vpcol)))\n            itmp = 0\n            CALL array_new(imgdist%i%other_vl_cols(vpcol), &\n                           itmp, lb=1)\n            DEALLOCATE (itmp)\n         END DO\n         DEALLOCATE (nle)\n         CALL find_all_local_elements(imgdist%i%other_vl_cols, vcol_dist, nvpcols)\n      ELSE\n         IF (careful_mod .AND. .NOT. ASSOCIATED(imgdist%i%other_vl_cols)) &\n            DBCSR_ABORT(\"Local cols mapping does not exist.\")\n      END IF\n      local_vcols = imgdist%i%other_vl_cols(local_vpcol)\n      IF (careful_mod) CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_get_local_vcols\n\n   SUBROUTINE image_calculator(image_dist, &\n                               prow, rowi, pcol, coli, vprow, vpcol, &\n                               myprow, mypcol, myrowi, mycoli, myvprow, myvpcol, &\n                               vprow_shift, vpcol_shift, &\n                               shifting)\n      !! Transform between virtual process rows/columns and actual process rows/columns and images therein.\n      !!\n      !! Shifting\n      !! (L)eft and (R)ight shifting are \"shifts from\", (l)eft and (r)ight\n      !! are \"shifts to\".  A caller (or the my* specifications) would use\n      !! L/R to see which data he has (i.e., from where his data was\n      !! shifted).  To see where the caller's data goes to, use l/r.\n\n      TYPE(dbcsr_imagedistribution_obj), INTENT(IN)      :: image_dist\n      INTEGER, INTENT(OUT), OPTIONAL                     :: prow, rowi, pcol, coli, vprow, vpcol\n      INTEGER, INTENT(IN), OPTIONAL                      :: myprow, mypcol, myrowi, mycoli, myvprow, &\n                                                            myvpcol, vprow_shift, vpcol_shift\n      CHARACTER, INTENT(IN), OPTIONAL                    :: shifting\n\n      INTEGER                                            :: col_mult, my_pcol, my_prow, ncol_images, &\n                                                            npcols, nprows, nrow_images, nvpcols, &\n                                                            nvprows, row_mult, vcol, vrow\n      TYPE(dbcsr_mp_obj)                                 :: mp\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod .AND. .NOT. PRESENT(myvprow) .AND. .NOT. PRESENT(mycoli)) THEN\n         CALL dbcsr_abort(__LOCATION__, &\n                          \"Must specify either (process row and row image) or (virtual process row)\")\n      END IF\n      IF (careful_mod .AND. .NOT. PRESENT(myvpcol) .AND. .NOT. PRESENT(mycoli)) THEN\n         CALL dbcsr_abort(__LOCATION__, &\n                          \"Must specify either (process col and col image) or (virtual process col)\")\n      END IF\n      !\n      mp = image_dist%i%main%d%mp_env\n      nprows = SIZE(mp%mp%pgrid, 1)\n      npcols = SIZE(mp%mp%pgrid, 2)\n      nrow_images = image_dist%i%row_decimation\n      ncol_images = image_dist%i%col_decimation\n      row_mult = image_dist%i%row_multiplicity\n      col_mult = image_dist%i%col_multiplicity\n      nvprows = nprows*nrow_images\n      nvpcols = npcols*ncol_images\n      !\n      IF (PRESENT(myprow)) THEN\n         my_prow = myprow\n      ELSE\n         my_prow = mp%mp%myprow\n      END IF\n      IF (PRESENT(mypcol)) THEN\n         my_pcol = mypcol\n      ELSE\n         my_pcol = mp%mp%mypcol\n      END IF\n      !\n      IF (.NOT. PRESENT(myvprow)) THEN\n         vrow = my_prow*nrow_images + myrowi - 1\n      ELSE\n         vrow = myvprow\n      END IF\n      IF (.NOT. PRESENT(myvpcol)) THEN\n         vcol = my_pcol*ncol_images + mycoli - 1\n      ELSE\n         vcol = myvpcol\n      END IF\n      !\n      IF (PRESENT(vprow_shift)) vrow = vrow + vprow_shift\n      IF (PRESENT(vpcol_shift)) vcol = vcol + vpcol_shift\n      IF (PRESENT(shifting)) THEN\n         SELECT CASE (shifting)\n         CASE ('R')\n            vrow = vrow + my_pcol*row_mult\n         CASE ('L')\n            vcol = vcol + my_prow*col_mult\n         CASE ('r')\n            vrow = vrow - my_pcol*row_mult\n         CASE ('l')\n            vcol = vcol - my_prow*col_mult\n         END SELECT\n      END IF\n      vrow = MODULO(vrow, nvprows)\n      vcol = MODULO(vcol, nvpcols)\n      IF (PRESENT(prow)) prow = vrow/nrow_images\n      IF (PRESENT(rowi)) rowi = MODULO(vrow, nrow_images) + 1\n      IF (PRESENT(pcol)) pcol = vcol/ncol_images\n      IF (PRESENT(coli)) coli = MODULO(vcol, ncol_images) + 1\n      IF (PRESENT(vprow)) vprow = vrow\n      IF (PRESENT(vpcol)) vpcol = vcol\n   END SUBROUTINE image_calculator\n\n   SUBROUTINE make_sizes_dense(old_sizes, mapping, nel_new, new_sizes)\n      !! Matches row/block sizes and offsets to a given distribution\n      !! @note\n      !! Used for making matrices dense/undense\n      !! @endnote\n\n      TYPE(array_i1d_obj), INTENT(IN)                    :: old_sizes, mapping\n      INTEGER, INTENT(IN)                                :: nel_new\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: new_sizes\n\n      INTEGER                                            :: el, nel_old\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: map, new_s, old_s\n\n!   ---------------------------------------------------------------------------\n\n      map => array_data(mapping)\n      old_s => array_data(old_sizes)\n      nel_old = array_size(old_sizes)\n      ALLOCATE (new_s(nel_new))\n      new_s(:) = 0\n      DO el = 1, nel_old\n         new_s(map(el)) = new_s(map(el)) + old_s(el)\n      END DO\n      CALL array_new(new_sizes, new_s, gift=.TRUE.)\n   END SUBROUTINE make_sizes_dense\n\n   SUBROUTINE dbcsr_make_1dist_dense(nbins, old_dist, dense_dist, dist_map, nsubdist, subdist)\n      !! Makes a 1-D distribution dense.\n\n      INTEGER, INTENT(IN)                                :: nbins\n         !! Number of bins in the main distribution\n      TYPE(array_i1d_obj), INTENT(IN)                    :: old_dist\n         !! Current distribution\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: dense_dist, dist_map\n         !! Dense distribution\n         !! Map from current to dense distribution\n      INTEGER, INTENT(IN)                                :: nsubdist\n         !! Number of bins in the subdistribution\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: subdist\n         !! Subdistribution\n\n      INTEGER                                            :: b, i, n_new_bins\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: dense, map, old_d\n\n!   ---------------------------------------------------------------------------\n\n      IF (nsubdist .EQ. 0) THEN\n         n_new_bins = nbins\n      ELSE\n         n_new_bins = nbins*nsubdist\n      END IF\n      old_d => array_data(old_dist)\n      ALLOCATE (dense(n_new_bins))\n      ALLOCATE (map(array_size(old_dist)))\n      !\n      IF (nsubdist .EQ. 0) THEN\n         dense(:) = (/(b, b=0, n_new_bins - 1)/)\n         map(:) = old_d(:) + 1\n      ELSE\n         DO i = 1, nbins\n            dense((i - 1)*nsubdist + 1:(i)*nsubdist) = i - 1\n         END DO\n         map(:) = old_d(:)*nsubdist + subdist(:) + 1\n      END IF\n      !\n      CALL array_new(dense_dist, dense, gift=.TRUE.)\n      CALL array_new(dist_map, map, gift=.TRUE.)\n   END SUBROUTINE dbcsr_make_1dist_dense\n\n   pure SUBROUTINE v_to_p_i_dist(nel, vdist, nim, pdist, idist)\n      !! Converts virtual 1-D distribution to process and image\n      INTEGER, INTENT(in)                                :: nel\n      INTEGER, DIMENSION(1:nel), INTENT(in)              :: vdist\n      INTEGER, INTENT(in)                                :: nim\n      INTEGER, DIMENSION(1:nel), INTENT(out)             :: pdist, idist\n\n      INTEGER                                            :: i\n\n      DO i = 1, nel\n         pdist(i) = vdist(i)/nim\n         idist(i) = MOD(vdist(i), nim) + 1\n      END DO\n   END SUBROUTINE v_to_p_i_dist\n\n   SUBROUTINE v_to_p_i_dist_o(vdist, nim, pdist, idist)\n      TYPE(array_i1d_obj), INTENT(in)                    :: vdist\n      INTEGER, INTENT(in)                                :: nim\n      TYPE(array_i1d_obj), INTENT(out)                   :: pdist, idist\n\n      INTEGER                                            :: nel\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: id, pd, vd\n\n      nel = array_size(vdist)\n      vd => array_data(vdist)\n      ALLOCATE (pd(nel), id(nel))\n      CALL v_to_p_i_dist(nel, vd, nim, pd, id)\n      CALL array_new(pdist, pd, gift=.TRUE.)\n      CALL array_new(idist, id, gift=.TRUE.)\n   END SUBROUTINE v_to_p_i_dist_o\n\n   SUBROUTINE dbcsr_get_global_row_map(dist, row_map)\n      !! Determines mapping from global to local rows\n\n      TYPE(dbcsr_distribution_obj), INTENT(INOUT)        :: dist\n         !! mapping for this distribution\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: row_map\n         !! mapping to local rows\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_global_row_map'\n\n      INTEGER                                            :: error_handle, nprows\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: rmap, row_dist\n\n      CALL timeset(routineN, error_handle)\n      ! If the current local row mappings do not exist, create them.\n      IF (.NOT. dist%d%has_global_row_map) THEN\n         row_dist => dbcsr_distribution_row_dist(dist)\n         ALLOCATE (rmap(SIZE(row_dist)))\n         nprows = dbcsr_mp_nprows(dbcsr_distribution_mp(dist))\n         CALL map_all_local_elements(rmap, row_dist, nprows)\n         CALL array_new(dist%d%global_row_map, rmap, gift=.TRUE.)\n         dist%d%has_global_row_map = .TRUE.\n      ELSE\n         IF (careful_mod .AND. .NOT. array_exists(dist%d%global_row_map)) &\n            DBCSR_ABORT(\"Row map does not exist.\")\n      END IF\n      row_map = dist%d%global_row_map\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_get_global_row_map\n\n   SUBROUTINE dbcsr_get_global_col_map(dist, col_map)\n      !! Determines mapping from global to local columns\n\n      TYPE(dbcsr_distribution_obj), INTENT(INOUT)        :: dist\n         !! mapping for this distribution\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: col_map\n         !! mapping to local columns\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_global_col_map'\n\n      INTEGER                                            :: error_handle, npcols\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: cmap, col_dist\n\n      CALL timeset(routineN, error_handle)\n      ! If the current local col mappings do not exist, create them.\n      IF (.NOT. dist%d%has_global_col_map) THEN\n         col_dist => dbcsr_distribution_col_dist(dist)\n         ALLOCATE (cmap(SIZE(col_dist)))\n         npcols = dbcsr_mp_npcols(dbcsr_distribution_mp(dist))\n         CALL map_all_local_elements(cmap, col_dist, npcols)\n         CALL array_new(dist%d%global_col_map, cmap, gift=.TRUE.)\n         dist%d%has_global_col_map = .TRUE.\n      ELSE\n         IF (careful_mod .AND. .NOT. array_exists(dist%d%global_col_map)) &\n            DBCSR_ABORT(\"Column map does not exist.\")\n      END IF\n      col_map = dist%d%global_col_map\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_get_global_col_map\n\n   SUBROUTINE dbcsr_get_global_vrow_map(imgdist, vrow_map)\n      !! Determines mapping from global to virtual local rows\n\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n         !! mapping for this image distribution\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: vrow_map\n         !! mapping to local rows\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_global_vrow_map'\n\n      INTEGER                                            :: error_handle, nvprows\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: rmap, vrow_dist\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n      ! If the current local row mappings do not exist, create them.\n      IF (.NOT. imgdist%i%has_global_vrow_map) THEN\n         vrow_dist => array_data(imgdist%i%vrow_dist)\n         ALLOCATE (rmap(SIZE(vrow_dist)))\n         nvprows = dbcsr_mp_nprows(dbcsr_distribution_mp(imgdist%i%main)) &\n                   *imgdist%i%row_decimation\n         CALL map_all_local_elements(rmap, vrow_dist, nvprows)\n         CALL array_new(imgdist%i%global_vrow_map, rmap, gift=.TRUE.)\n         imgdist%i%has_global_vrow_map = .TRUE.\n      ELSE\n         IF (careful_mod .AND. .NOT. array_exists(imgdist%i%global_vrow_map)) &\n            DBCSR_ABORT(\"Row map does not exist.\")\n      END IF\n      vrow_map = imgdist%i%global_vrow_map\n      IF (careful_mod) CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_get_global_vrow_map\n\n   SUBROUTINE dbcsr_get_global_vcol_map(imgdist, vcol_map)\n      !! Determines mapping from global to virtual local columns\n\n      TYPE(dbcsr_imagedistribution_obj), INTENT(INOUT)   :: imgdist\n         !! mapping for this image distribution\n      TYPE(array_i1d_obj), INTENT(OUT)                   :: vcol_map\n         !! mapping to local columns\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_global_vcol_map'\n\n      INTEGER                                            :: error_handle, nvpcols\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: rmap, vcol_dist\n\n      IF (careful_mod) CALL timeset(routineN, error_handle)\n      ! If the current local col mappings do not exist, create them.\n      IF (.NOT. imgdist%i%has_global_vcol_map) THEN\n         vcol_dist => array_data(imgdist%i%vcol_dist)\n         ALLOCATE (rmap(SIZE(vcol_dist)))\n         nvpcols = dbcsr_mp_npcols(dbcsr_distribution_mp(imgdist%i%main)) &\n                   *imgdist%i%col_decimation\n         CALL map_all_local_elements(rmap, vcol_dist, nvpcols)\n         CALL array_new(imgdist%i%global_vcol_map, rmap, gift=.TRUE.)\n         imgdist%i%has_global_vcol_map = .TRUE.\n      ELSE\n         IF (careful_mod .AND. .NOT. array_exists(imgdist%i%global_vcol_map)) &\n            DBCSR_ABORT(\"Col map does not exist.\")\n      END IF\n      vcol_map = imgdist%i%global_vcol_map\n      IF (careful_mod) CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_get_global_vcol_map\n\n   PURE SUBROUTINE map_all_local_elements(global_elements, &\n                                          bin_distribution, nbins)\n      !! Points to local virtual elements.\n      !! All elements are mapped at once.  Therefore an entry in the\n      !! resulting array can be used as a lookup index for any of the local\n      !! element arrays.  The distribution itself tells into which array to\n      !! look.\n\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: global_elements\n         !! enumerated local elements\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: bin_distribution\n         !! distribution of elements to bins\n      INTEGER, INTENT(IN)                                :: nbins\n         !! number of bins\n\n      INTEGER                                            :: bin, el\n      INTEGER, DIMENSION(0:nbins - 1)                      :: nlve\n\n      nlve(:) = 0\n      DO el = 1, SIZE(bin_distribution)\n         bin = bin_distribution(el)\n         nlve(bin) = nlve(bin) + 1\n         global_elements(el) = nlve(bin)\n      END DO\n   END SUBROUTINE map_all_local_elements\n\n   SUBROUTINE reimage_distribution(images, my_bins, &\n                                   nbins, nimages)\n      !! Makes new distribution with decimation and multiplicity\n      !! Multiplicity is being ignored, maybe this is a bug\n      !!\n      !! Definition of multiplicity and nimages\n      !! Multiplicity and decimation (number of images) are used to\n      !! match process grid coordinates on non-square process\n      !! grids. Given source_nbins and target_nbins, their relation is\n      !! source_nbins * target_multiplicity\n      !! = target_nbins * target_nimages.\n      !! It is best when both multiplicity and nimages are small. To\n      !! get these two factors, then, one can use the following formulas:\n      !! nimages      = lcm(source_nbins, target_nbins) / target_nbins\n      !! multiplicity = target_nbins / gcd(source_nbins, target_nbins)\n      !! from the target's point of view (nimages = target_nimages).\n      !!\n      !! Mapping\n      !! The new distribution comprises of real bins and images within\n      !! bins. These can be view as target_nbins*nimages virtual\n      !! columns. These same virtual columns are also\n      !! source_nbins*multiplicity in number. Therefore these virtual\n      !! columns are mapped from source_nbins*multiplicity onto\n      !! target_bins*nimages (each target bin has nimages images):\n      !! Source 4: |1 2 3|4 5 6|7 8 9|A B C| (4*3)\n      !! Target 6: |1 2|3 4|5 6|7 8|9 A|B C| (6*2)\n      !! multiplicity=3, nimages=2, 12 virtual columns (1-C).\n      !! Source bin elements are evenly mapped into one of multiplicity\n      !! virtual columns. Other (non-even, block-size aware) mappings\n      !! could be better.\n\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: images\n         !! new image distribution\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: my_bins\n         !! Basis for the new images\n      INTEGER, INTENT(IN)                                :: nbins, nimages\n         !! number of bins in the new real distribution\n         !! number of images in the new distribution\n\n      INTEGER                                            :: bin, i\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: bin_multiplier\n\n!   ---------------------------------------------------------------------------\n\n      ALLOCATE (bin_multiplier(0:nbins - 1))\n      bin_multiplier(:) = 0\n      DO i = 1, SIZE(my_bins)\n         bin = my_bins(i)\n         images(i) = 1 + bin_multiplier(bin)\n         bin_multiplier(bin) = bin_multiplier(bin) + 1\n         IF (bin_multiplier(bin) .GE. nimages) THEN\n            bin_multiplier(bin) = 0\n         END IF\n      END DO\n   END SUBROUTINE reimage_distribution\n\n   PURE SUBROUTINE make_vdistribution(nelements, vbins, bins, decimation, images)\n      !! Makes new virtual distribution of rows/columns.\n\n      INTEGER, INTENT(IN)                                :: nelements\n         !! number of elements\n      INTEGER, DIMENSION(nelements), INTENT(OUT)         :: vbins\n         !! virtual bins\n      INTEGER, DIMENSION(nelements), INTENT(IN)          :: bins\n         !! bins to which elements belong\n      INTEGER, INTENT(IN)                                :: decimation\n         !! matching between bins\n      INTEGER, DIMENSION(nelements), INTENT(IN)          :: images\n         !! images to which element belong\n\n      INTEGER                                            :: el\n\n!   ---------------------------------------------------------------------------\n\n      DO el = 1, nelements\n         vbins(el) = bins(el)*decimation + images(el) - 1\n      END DO\n   END SUBROUTINE make_vdistribution\n\n   SUBROUTINE rebin_imaged_distribution(new_bins, images, &\n                                        source_bins, source_images, nbins, multiplicity, nimages)\n      !! Makes new distribution with multiplicity\n      !!\n      !! Definition of multiplicity and nimages\n      !! Multiplicity and number of images are used to match process\n      !! grid coordinates on non-square process grids. Given\n      !! source_nbins and target_nbins, their relation is\n      !! source_nbins * multiplicity = target_nbins * nimages.\n      !! It is best when both multiplicity and nimages are small. To\n      !! get these two factors, then, one can use the following formulas:\n      !! nimages      = lcm(source_nbins, target_nbins) / target_nbins\n      !! multiplicity = target_nbins / gcd(source_nbins, target_nbins)\n      !!\n      !! Mapping\n      !! The new distribution comprises of real bins and images within\n      !! bins. These can be view as target_nbins*nimages virtual\n      !! columns. These same virtual columns are also\n      !! source_nbins*multiplicity in number. Therefore these virtual\n      !! columns are mapped from source_nbins*multiplicity onto\n      !! target_bins*nimages (each target bin has nimages images):\n      !! Source 4: |1 2 3|4 5 6|7 8 9|A B C| (4*3)\n      !! Target 6: |1 2|3 4|5 6|7 8|9 A|B C| (6*2)\n      !! multiplicity=3, nimages=2, 12 virtual columns (1-C).\n      !! Source bin elements are evenly mapped into one of multiplicity\n      !! virtual columns. Other (non-even, block-size aware) mappings\n      !! could be better.\n\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: new_bins, images\n         !! new real distribution\n         !! new image distribution\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: source_bins, source_images\n         !! Basis for the new distribution and images\n         !! Basis for the new distribution and images\n      INTEGER, INTENT(IN)                                :: nbins, multiplicity, nimages\n         !! number of bins in the new real distribution\n         !! multiplicity\n         !! number of images in the new distribution\n\n      INTEGER                                            :: i, virtual_bin\n\n!   ---------------------------------------------------------------------------\n\n      DO i = 1, SIZE(new_bins)\n         IF (i .LE. SIZE(source_bins)) THEN\n            virtual_bin = source_bins(i)*multiplicity + source_images(i) - 1\n         ELSE\n            ! Fill remainder with a cyclic distribution\n            virtual_bin = MOD(i, nbins*nimages)\n         END IF\n         new_bins(i) = virtual_bin/nimages\n         images(i) = 1 + MOD(virtual_bin, nimages)\n         IF (new_bins(i) .GE. nbins) &\n            DBCSR_ABORT(\"Wrong bin calculation\")\n         IF (images(i) .GT. nimages) &\n            DBCSR_ABORT(\"Wrong image calculation\")\n      END DO\n   END SUBROUTINE rebin_imaged_distribution\n\nEND MODULE dbcsr_mm_dist_operations\n"
  },
  {
    "path": "src/mm/dbcsr_mm_hostdrv.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_hostdrv\n   !! Stacks of small matrix multiplications\n   USE dbcsr_config, ONLY: dbcsr_cfg, &\n                           use_acc, &\n                           mm_driver_blas, &\n                           mm_driver_matmul, &\n                           mm_driver_smm, &\n                           mm_driver_xsmm\n   USE dbcsr_data_methods, ONLY: dbcsr_data_get_size\n   USE dbcsr_mm_types, ONLY: dbcsr_ps_width, &\n                             p_a_first, &\n                             p_b_first, &\n                             p_c_first, &\n                             p_k, &\n                             p_m, &\n                             p_n, &\n                             stack_descriptor_type\n   USE dbcsr_types, ONLY: dbcsr_data_obj, &\n                          dbcsr_type, &\n                          dbcsr_type_complex_4, &\n                          dbcsr_type_complex_8, &\n                          dbcsr_type_real_4, &\n                          dbcsr_type_real_8, &\n                          dbcsr_work_type\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_8, &\n                          real_4, &\n                          real_8, &\n                          sp\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_hostdrv'\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: int_print = \"(10(1X,I7))\"\n\n   PUBLIC :: dbcsr_mm_hostdrv_lib_init, dbcsr_mm_hostdrv_lib_finalize\n   PUBLIC :: dbcsr_mm_hostdrv_process\n   PUBLIC :: dbcsr_mm_hostdrv_type\n   PUBLIC :: dbcsr_mm_hostdrv_init\n\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   TYPE dbcsr_mm_hostdrv_type\n      TYPE(dbcsr_data_obj)          :: data_area = dbcsr_data_obj()\n   END TYPE dbcsr_mm_hostdrv_type\n\nCONTAINS\n\n   SUBROUTINE dbcsr_mm_hostdrv_lib_init()\n      !! Initialize the library\n   END SUBROUTINE dbcsr_mm_hostdrv_lib_init\n\n   SUBROUTINE dbcsr_mm_hostdrv_lib_finalize()\n      !! Finalize the library\n   END SUBROUTINE dbcsr_mm_hostdrv_lib_finalize\n\n   SUBROUTINE dbcsr_mm_hostdrv_init(this, product_wm)\n      !! Initialize the library\n      TYPE(dbcsr_mm_hostdrv_type), INTENT(INOUT)         :: this\n      TYPE(dbcsr_work_type), POINTER                     :: product_wm\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_hostdrv_init'\n\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n\n      this%data_area = product_wm%data_area\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_mm_hostdrv_init\n\n   SUBROUTINE dbcsr_mm_hostdrv_process(this, left, right, params, stack_size, &\n                                       stack_descr, success, used_smm)\n      !! Calls the various drivers that process the stack.\n\n      TYPE(dbcsr_mm_hostdrv_type), INTENT(INOUT)         :: this\n      TYPE(dbcsr_type), INTENT(IN)                       :: left, right\n         !! Left-matrix data\n         !! Right-matrix data\n      INTEGER, INTENT(IN)                                :: stack_size\n      INTEGER, DIMENSION(1:dbcsr_ps_width, stack_size), &\n         INTENT(INOUT)                                   :: params\n         !! Stack of GEMM parameters\n      TYPE(stack_descriptor_type), INTENT(IN)            :: stack_descr\n      LOGICAL, INTENT(OUT)                               :: success, used_smm\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_hostdrv_process'\n      LOGICAL, PARAMETER                                 :: careful = careful_mod, dbg = debug_mod\n\n      INTEGER                                            :: error_handle, sp\n      REAL(KIND=dp)                                      :: rnd\n\n      IF (use_acc()) & !for cpu-only runs this is called too often\n         CALL timeset(routineN, error_handle)\n\n      success = .TRUE. !host driver never fails...hopefully\n      used_smm = .FALSE.\n\n      IF (dbg) THEN\n         CALL RANDOM_NUMBER(rnd)\n         IF (rnd < 0.01_dp) THEN\n            WRITE (*, *) routineN//\" Stack size\", stack_size, dbcsr_ps_width\n            CALL print_gemm_parameters(params(:, 1:stack_size))\n         END IF\n      END IF\n\n      ! Verify stack consistency.  Only the upper bound is verified.\n      IF (careful) THEN\n         DO sp = 1, stack_size\n            IF (params(p_a_first, sp) + params(p_m, sp)*params(p_k, sp) - 1 > dbcsr_data_get_size(left%data_area)) &\n               DBCSR_ABORT(\"A data out of bounds.\")\n            IF (params(p_b_first, sp) + params(p_k, sp)*params(p_n, sp) - 1 > dbcsr_data_get_size(right%data_area)) &\n               DBCSR_ABORT(\"B data out of bounds.\")\n            IF (params(p_c_first, sp) + params(p_m, sp)*params(p_n, sp) - 1 > dbcsr_data_get_size(this%data_area)) &\n               DBCSR_ABORT(\"C data out of bounds.\")\n         END DO\n      END IF\n\n      SELECT CASE (dbcsr_cfg%mm_driver%val)\n      CASE (mm_driver_matmul)\n         SELECT CASE (this%data_area%d%data_type)\n         CASE (dbcsr_type_real_4)\n            CALL internal_process_mm_stack_s(params, &\n                                             stack_size, &\n                                             left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp)\n         CASE (dbcsr_type_real_8)\n            CALL internal_process_mm_stack_d(params, &\n                                             stack_size, &\n                                             left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp)\n         CASE (dbcsr_type_complex_4)\n            CALL internal_process_mm_stack_c(params, &\n                                             stack_size, &\n                                             left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp)\n         CASE (dbcsr_type_complex_8)\n            CALL internal_process_mm_stack_z(params, &\n                                             stack_size, &\n                                             left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp)\n         CASE default\n            DBCSR_ABORT(\"Invalid data type\")\n         END SELECT\n      CASE (mm_driver_smm)\n         SELECT CASE (this%data_area%d%data_type)\n         CASE (dbcsr_type_real_4)\n            CALL smm_process_mm_stack_s(stack_descr, params, &\n                                        stack_size, &\n                                        left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp, used_smm)\n         CASE (dbcsr_type_real_8)\n            CALL smm_process_mm_stack_d(stack_descr, params, &\n                                        stack_size, &\n                                        left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp, used_smm)\n         CASE (dbcsr_type_complex_4)\n            CALL smm_process_mm_stack_c(stack_descr, params, &\n                                        stack_size, &\n                                        left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp, used_smm)\n         CASE (dbcsr_type_complex_8)\n            CALL smm_process_mm_stack_z(stack_descr, params, &\n                                        stack_size, &\n                                        left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp, used_smm)\n         CASE default\n            DBCSR_ABORT(\"Invalid data type\")\n         END SELECT\n#if defined(__LIBXSMM)\n      CASE (mm_driver_xsmm)\n         SELECT CASE (this%data_area%d%data_type)\n#if TO_VERSION(1, 10) < TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n         CASE (dbcsr_type_real_4)\n            CALL xsmm_process_mm_batch_s(stack_descr, params, stack_size, &\n                                         left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp, used_smm)\n         CASE (dbcsr_type_real_8)\n            CALL xsmm_process_mm_batch_d(stack_descr, params, stack_size, &\n                                         left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp, used_smm)\n         CASE (dbcsr_type_complex_4)\n            CALL xsmm_process_mm_batch_c(stack_descr, params, stack_size, &\n                                         left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp, used_smm)\n         CASE (dbcsr_type_complex_8)\n            CALL xsmm_process_mm_batch_z(stack_descr, params, stack_size, &\n                                         left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp, used_smm)\n#else\n         CASE (dbcsr_type_real_4)\n            CALL xsmm_process_mm_stack_s(stack_descr, params, stack_size, &\n                                         left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp, used_smm)\n         CASE (dbcsr_type_real_8)\n            CALL xsmm_process_mm_stack_d(stack_descr, params, stack_size, &\n                                         left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp, used_smm)\n         CASE (dbcsr_type_complex_4)\n            CALL xsmm_process_mm_stack_c(stack_descr, params, stack_size, &\n                                         left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp, used_smm)\n         CASE (dbcsr_type_complex_8)\n            CALL xsmm_process_mm_stack_z(stack_descr, params, stack_size, &\n                                         left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp, used_smm)\n#endif\n         CASE default\n            DBCSR_ABORT(\"Invalid data type\")\n         END SELECT\n#endif\n      CASE (mm_driver_blas)\n         SELECT CASE (this%data_area%d%data_type)\n         CASE (dbcsr_type_real_4)\n            CALL blas_process_mm_stack_s(params, &\n                                         stack_size, &\n                                         left%data_area%d%r_sp, right%data_area%d%r_sp, this%data_area%d%r_sp)\n         CASE (dbcsr_type_real_8)\n            CALL blas_process_mm_stack_d(params, &\n                                         stack_size, &\n                                         left%data_area%d%r_dp, right%data_area%d%r_dp, this%data_area%d%r_dp)\n         CASE (dbcsr_type_complex_4)\n            CALL blas_process_mm_stack_c(params, &\n                                         stack_size, &\n                                         left%data_area%d%c_sp, right%data_area%d%c_sp, this%data_area%d%c_sp)\n         CASE (dbcsr_type_complex_8)\n            CALL blas_process_mm_stack_z(params, &\n                                         stack_size, &\n                                         left%data_area%d%c_dp, right%data_area%d%c_dp, this%data_area%d%c_dp)\n         CASE default\n            DBCSR_ABORT(\"Invalid data type\")\n         END SELECT\n      CASE default\n         DBCSR_ABORT(\"Invalid multiplication driver\")\n      END SELECT\n\n      IF (use_acc()) & !for cpu-only runs this is called too often\n         CALL timestop(error_handle)\n\n   END SUBROUTINE dbcsr_mm_hostdrv_process\n\n   SUBROUTINE print_gemm_parameters(params)\n      !! Helper-routine used by dbcsr_mm_hostdrv_process to print debug info.\n      INTEGER, DIMENSION(:, :), INTENT(in)               :: params\n\n      INTEGER                                            :: sp\n\n      DO sp = 1, SIZE(params, 2)\n         WRITE (*, '(1X,A,1X,I7,\":\",3(1X,I4,\",\"),\".\",3(1X,I12,\",\"))') &\n            \"GEMM PARAMETERS\", &\n            sp, &\n            params(p_m, sp), &\n            params(p_k, sp), &\n            params(p_n, sp), &\n            params(p_a_first, sp), &\n            params(p_b_first, sp), &\n            params(p_c_first, sp)\n      END DO\n   END SUBROUTINE print_gemm_parameters\n\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float\n      SUBROUTINE blas_process_mm_stack_${nametype1}$ (params, &\n                                                      stack_size, &\n                                                      a_data, b_data, c_data)\n     !! Processes MM stack and issues BLAS xGEMM calls\n\n         INTEGER, INTENT(IN)                       :: stack_size\n        !! Number of parameters\n         INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), &\n            INTENT(IN)                              :: params\n        !! Stack of MM parameters\n         ${type1}$, DIMENSION(*), INTENT(IN)         :: a_data, &\n            b_data\n        !! Left-matrix data\n        !! Right-matrix data\n         ${type1}$, DIMENSION(*), INTENT(INOUT)      :: c_data\n        !! Product data\n\n         INTEGER                                   :: sp\n\n!   ---------------------------------------------------------------------------\n\n         DO sp = 1, stack_size\n            CALL ${gemmname1[n]}$ ('N', &\n                                   'N', &\n                                   params(p_m, sp), params(p_n, sp), & !m, n\n                                   params(p_k, sp), & ! k\n                                   ${one1[n]}$, & ! alpha\n                                   a_data(params(p_a_first, sp)), & ! A\n                                   params(p_m, sp), & !lda\n                                   b_data(params(p_b_first, sp)), & ! B\n                                   params(p_k, sp), & !ldb\n                                   ${one1[n]}$, & ! beta\n                                   c_data(params(p_c_first, sp)), params(p_m, sp))\n         END DO\n      END SUBROUTINE blas_process_mm_stack_${nametype1}$\n\n      SUBROUTINE internal_process_mm_stack_${nametype1}$ (params, stack_size, &\n                                                          a_data, b_data, c_data)\n     !! Processes MM stack and issues internal MM calls.\n\n         INTEGER, INTENT(IN)                       :: stack_size\n        !! Number of parameters\n         INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), &\n            INTENT(IN)                              :: params\n        !! Stack of MM parameters\n         ${type1}$, DIMENSION(*), INTENT(IN)         :: a_data, &\n            b_data\n        !! Left-matrix data\n        !! Right-matrix data\n         ${type1}$, DIMENSION(*), INTENT(INOUT)      :: c_data\n        !! Product data\n\n         INTEGER                                   :: sp\n\n!   ---------------------------------------------------------------------------\n\n         DO sp = 1, stack_size\n            CALL internal_mm_${nametype1}$_nn( &\n               params(p_m, sp), &\n               params(p_n, sp), &\n               params(p_k, sp), &\n               a_data(params(p_a_first, sp)), &\n               b_data(params(p_b_first, sp)), &\n               c_data(params(p_c_first, sp)))\n         END DO\n      END SUBROUTINE internal_process_mm_stack_${nametype1}$\n\n      SUBROUTINE smm_process_mm_stack_${nametype1}$ (stack_descr, params, &\n                                                     stack_size, &\n                                                     a_data, b_data, c_data, used_smm)\n     !! Processes MM stack and issues SMM library calls\n\n         INTEGER, INTENT(IN)                       :: stack_size\n        !! Number of parameters\n         TYPE(stack_descriptor_type), INTENT(IN)   :: stack_descr\n         INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), &\n            INTENT(IN)                              :: params\n        !! Stack of MM parameters\n         ${type1}$, DIMENSION(*), INTENT(IN)         :: a_data, &\n            b_data\n        !! Left-matrix data\n        !! Right-matrix data\n         ${type1}$, DIMENSION(*), INTENT(INOUT)      :: c_data\n        !! Product data\n         LOGICAL, INTENT(OUT)                      :: used_smm\n\n#if defined(__HAS_smm_${nametype1}$nn)\n\n         INTEGER                                   :: sp\n\n         ! TODO we have no way of knowing which calls to libsmm actually resolve to BLAS\n         ! Fixing this requires an interface change to libsmm.\n         used_smm = .TRUE.\n\n#if defined(__HAS_smm_vec)\n         IF (stack_descr%defined_mnk) THEN\n            CALL smm_vec_${nametype1}$nn(stack_descr%m, stack_descr%n, stack_descr%k, &\n                                         a_data, b_data, c_data, stack_size, &\n                                         dbcsr_ps_width, params, p_a_first, p_b_first, p_c_first)\n            RETURN\n         END IF\n#endif\n\n         DO sp = 1, stack_size\n            CALL smm_${nametype1}$nn( &\n               params(p_m, sp), &\n               params(p_n, sp), &\n               params(p_k, sp), &\n               a_data(params(p_a_first, sp)), &\n               b_data(params(p_b_first, sp)), &\n               c_data(params(p_c_first, sp)))\n         END DO\n\n#else\n         ! We do not want to abort here, fall back to BLAS.\n         used_smm = .FALSE.\n         CALL blas_process_mm_stack_${nametype1}$ (params, stack_size, a_data, b_data, c_data)\n#endif\n\n         MARK_USED(stack_descr)\n      END SUBROUTINE smm_process_mm_stack_${nametype1}$\n\n#if defined(__LIBXSMM) && TO_VERSION(1, 10) < TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n      SUBROUTINE xsmm_process_mm_batch_${nametype1}$ (stack_descr, params, &\n                                                      stack_size, a_data, b_data, c_data, used_smm)\n     !! Processes MM stack and issues libxsmm calls\n#if ${xsmm_supported[n]}$\n#if !defined(DBCSR_LIBXSMM_GEMM_BATCH)\n#define DBCSR_LIBXSMM_GEMM_BATCH libxsmm_gemm_batch\n#endif\n         ! Caution: This dependency is ignored by makedep.py, because libxsmm.F is kinda empty.\n         USE libxsmm, ONLY: LIBXSMM_GEMM_PRECISION => ${'LIBXSMM_DATATYPE_F'+bits1[n]}$, &\n                            libxsmm_gemm => libxsmm_${nametype1}$gemm, &\n                            libxsmm_gemm_batch => DBCSR_LIBXSMM_GEMM_BATCH, &\n                            libxsmm_ptr0\n         REAL(${kind1}$), PARAMETER :: one = 1.0_${kind1}$\n         INTEGER :: sp\n#endif\n         INTEGER, INTENT(IN)                            :: stack_size\n        !! Number of parameters\n         TYPE(stack_descriptor_type), INTENT(IN)        :: stack_descr\n         INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), &\n            INTENT(IN)                                  :: params\n        !! Stack of MM parameters\n         ${type1}$, DIMENSION(*), TARGET, INTENT(IN)    :: a_data\n        !! Left-matrix data\n         ${type1}$, DIMENSION(*), TARGET, INTENT(IN)    :: b_data\n        !! Right-matrix data\n         ${type1}$, DIMENSION(*), TARGET, INTENT(INOUT) :: c_data\n        !! Product data\n         LOGICAL, INTENT(OUT)                           :: used_smm\n        !! Flag to signal if an efficient kernel was used\n\n#if ${xsmm_supported[n]}$\n         IF (stack_descr%defined_mnk) THEN ! homogeneous stack\n            CALL libxsmm_gemm_batch(LIBXSMM_GEMM_PRECISION, LIBXSMM_GEMM_PRECISION, 'N', 'N', &\n                                    m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, &\n                                    alpha=libxsmm_ptr0(one), a=libxsmm_ptr0(a_data(LBOUND(a_data, 1))), &\n                                    lda=stack_descr%m, &\n                                    b=libxsmm_ptr0(b_data(LBOUND(b_data, 1))), &\n                                    ldb=stack_descr%k, &\n                                    beta=libxsmm_ptr0(one), c=libxsmm_ptr0(c_data(LBOUND(c_data, 1))), &\n                                    ldc=stack_descr%m, index_base=1, &\n                                    index_stride=KIND(params)*dbcsr_ps_width, &\n                                    stride_a=libxsmm_ptr0(params(p_a_first, 1)), &\n                                    stride_b=libxsmm_ptr0(params(p_b_first, 1)), &\n                                    stride_c=libxsmm_ptr0(params(p_c_first, 1)), &\n                                    batchsize=stack_size)\n            used_smm = .TRUE.\n         ELSE ! Dispatch for every (different) matrix\n            DO sp = 1, stack_size\n               CALL libxsmm_gemm(m=params(p_m, sp), n=params(p_n, sp), k=params(p_k, sp), &\n                                 a=a_data(params(p_a_first, sp)), &\n                                 b=b_data(params(p_b_first, sp)), &\n                                 c=c_data(params(p_c_first, sp)), &\n                                 alpha=one, beta=one)\n            END DO\n            used_smm = .FALSE.\n         END IF\n#else\n         MARK_USED(stack_descr)\n         ! We do not want to abort here, fall back to BLAS.\n         CALL blas_process_mm_stack_${nametype1}$ (params, stack_size, a_data, b_data, c_data)\n         used_smm = .FALSE.\n#endif\n      END SUBROUTINE xsmm_process_mm_batch_${nametype1}$\n#endif\n\n#if defined(__LIBXSMM) && TO_VERSION(1, 10) >= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n\n      SUBROUTINE xsmm_process_mm_stack_${nametype1}$ (stack_descr, params, &\n                                                      stack_size, a_data, b_data, c_data, used_smm)\n     !! Processes MM stack and issues libxsmm calls\n#if ${xsmm_supported[n]}$\n         ! Caution: This dependency is ignored by makedep.py, because libxsmm.F is kinda empty.\n         USE libxsmm, ONLY: libxsmm_function => libxsmm_${nametype1}$mmfunction, &\n                            libxsmm_dispatch => libxsmm_${nametype1}$mmdispatch, &\n                            libxsmm_available => libxsmm_${nametype1}$mmavailable, &\n                            libxsmm_call => libxsmm_${nametype1}$mmcall, &\n                            libxsmm_gemm => libxsmm_${nametype1}$gemm, &\n                            LIBXSMM_PREFETCH_NONE, &\n                            LIBXSMM_PREFETCH, &\n                            LIBXSMM_MAX_MNK, &\n                            LIBXSMM_FLAGS\n         INTEGER, PARAMETER :: LIBXSMM_DEFAULT_PREFETCH = LIBXSMM_PREFETCH\n         INTEGER, PARAMETER :: LIBXSMM_DEFAULT_FLAGS = LIBXSMM_FLAGS\n         REAL(${kind1}$), PARAMETER :: one = 1.0_${kind1}$\n         REAL(${kind1}$), DIMENSION(:, :), POINTER :: a_ptr, b_ptr, c_ptr\n         INTEGER :: m, n, k, sp, fa, fb, fc\n         LOGICAL :: processed\n         TYPE(libxsmm_function) :: func\n         INTEGER(int_8) :: threshold\n         INTEGER :: pa, pb, pc\n#endif\n         INTEGER, INTENT(IN)                            :: stack_size\n        !! Number of parameters\n         TYPE(stack_descriptor_type), INTENT(IN)        :: stack_descr\n         INTEGER, DIMENSION(dbcsr_ps_width, 1:stack_size), &\n            INTENT(IN)                                  :: params\n        !! Stack of MM parameters\n         ${type1}$, DIMENSION(*), TARGET, INTENT(IN)    :: a_data\n        !! Left-matrix data\n         ${type1}$, DIMENSION(*), TARGET, INTENT(IN)    :: b_data\n        !! Right-matrix data\n         ${type1}$, DIMENSION(*), TARGET, INTENT(INOUT) :: c_data\n        !! Product data\n         LOGICAL, INTENT(OUT)                           :: used_smm\n        !! Flag to signal if an efficient kernel was used\n\n#if ${xsmm_supported[n]}$\n         processed = .FALSE.\n         used_smm = .FALSE.\n\n         ! check whether the matrix stack is homogeneous or not\n         IF (stack_descr%defined_mnk) THEN\n            threshold = INT(stack_descr%m, int_8)* &\n                        INT(stack_descr%n, int_8)* &\n                        INT(stack_descr%k, int_8)\n\n            ! check if matrices are too large for LIBXSMM (BLAS is likely more efficient)\n            IF (threshold <= LIBXSMM_MAX_MNK) THEN\n               ! try to get a function pointer from libxsmm\n               CALL libxsmm_dispatch(func, &\n                                     m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, alpha=one, beta=one, &\n                                     flags=LIBXSMM_DEFAULT_FLAGS, prefetch=LIBXSMM_DEFAULT_PREFETCH)\n\n               IF (libxsmm_available(func)) THEN\n                  ! load first stack entry\n                  DBCSR_ASSERT(stack_size > 0)\n                  pa = params(p_a_first, 1)\n                  pb = params(p_b_first, 1)\n                  pc = params(p_c_first, 1)\n\n                  DO sp = 1, stack_size - 1\n                     fa = pa; fb = pb; fc = pc\n                     ! prefetch next blocks\n                     pa = params(p_a_first, sp + 1)\n                     pb = params(p_b_first, sp + 1)\n                     pc = params(p_c_first, sp + 1)\n\n                     ! condition evaluates at compile-time (PARAMETER)\n                     IF (LIBXSMM_DEFAULT_PREFETCH /= LIBXSMM_PREFETCH_NONE) THEN\n                        CALL libxsmm_call(func, &\n                                          a=a_data(fa), b=b_data(fb), c=c_data(fc), &\n                                          ! provide locations of the next operand set\n                                          pa=a_data(pa), pb=b_data(pb), pc=c_data(pc))\n                     ELSE\n                        CALL libxsmm_call(func, &\n                                          a=a_data(fa), b=b_data(fb), c=c_data(fc))\n                     END IF\n                  END DO\n\n                  ! handle last stack entry without out-of-bounds access\n                  fa = pa; fb = pb; fc = pc\n\n                  ! condition evaluates at compile-time (PARAMETER)\n                  IF (LIBXSMM_DEFAULT_PREFETCH /= LIBXSMM_PREFETCH_NONE) THEN\n                     CALL libxsmm_call(func, &\n                                       a=a_data(fa), b=b_data(fb), c=c_data(fc), &\n                                       ! prefetch same blocks\n                                       pa=a_data(pa), pb=b_data(pb), pc=c_data(pc))\n                  ELSE\n                     CALL libxsmm_call(func, &\n                                       a=a_data(fa), b=b_data(fb), c=c_data(fc))\n                  END IF\n\n                  processed = .TRUE.\n                  used_smm = .TRUE.\n               END IF\n            ELSE\n               CALL blas_process_mm_stack_${nametype1}$ (params, stack_size, a_data, b_data, c_data)\n               processed = .TRUE.\n            END IF\n         END IF\n\n         IF (.NOT. processed) THEN\n            ! Dispatch interface was not used, call regular interface.\n            ! Should only happen for inhomogeneous stacks.\n            ! Counted as used_smm = .FALSE.\n            DO sp = 1, stack_size\n               m = params(p_m, sp)\n               n = params(p_n, sp)\n               k = params(p_k, sp)\n               fa = params(p_a_first, sp)\n               fb = params(p_b_first, sp)\n               fc = params(p_c_first, sp)\n               ! somewhat expensive pointer remapping required\n               a_ptr(1:m, 1:k) => a_data(fa:fa + (m*k))\n               b_ptr(1:k, 1:n) => b_data(fb:fb + (k*n))\n               c_ptr(1:m, 1:n) => c_data(fc:fc + (m*n))\n               CALL libxsmm_gemm(m=m, n=n, k=k, a=a_ptr, b=b_ptr, c=c_ptr, &\n                                 alpha=one, beta=one)\n            END DO\n         END IF\n#else\n         MARK_USED(stack_descr)\n         ! We do not want to abort here, fall back to BLAS.\n         CALL blas_process_mm_stack_${nametype1}$ (params, stack_size, a_data, b_data, c_data)\n         used_smm = .FALSE.\n#endif\n      END SUBROUTINE xsmm_process_mm_stack_${nametype1}$\n#endif\n\n      PURE SUBROUTINE internal_mm_${nametype1}$_nn( &\n         M, N, K, A, B, C)\n         INTEGER, INTENT(IN)                      :: M, N, K\n         ${type1}$, INTENT(INOUT)                   :: C(M, N)\n         ${type1}$, INTENT(IN)                      :: B(K, N)\n         ${type1}$, INTENT(IN)                      :: A(M, K)\n         C(:, :) = C(:, :) + MATMUL(A, B)\n      END SUBROUTINE internal_mm_${nametype1}$_nn\n   #:endfor\n\nEND MODULE dbcsr_mm_hostdrv\n"
  },
  {
    "path": "src/mm/dbcsr_mm_multrec.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_multrec\n   !! Second layer of the dbcsr matrix-matrix multiplication.\n   !! It divides the multiplication in a cache-oblivious manner.\n   !! <b>Modification history:</b>\n   !! - 2010-02-23 Moved from dbcsr_operations\n   !! - 2011-11    Moved parameter-stack processing routines to\n   !! dbcsr_mm_methods.\n   !! - 2013-01    extensive refactoring (Ole Schuett)\n\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_equality\n   USE dbcsr_block_operations, ONLY: dbcsr_data_set\n   USE dbcsr_config, ONLY: dbcsr_cfg\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, &\n                                 dbcsr_distribution_has_threads, &\n                                 dbcsr_distribution_local_cols, &\n                                 dbcsr_distribution_local_cols_obj, &\n                                 dbcsr_distribution_local_rows, &\n                                 dbcsr_distribution_local_rows_obj, &\n                                 dbcsr_distribution_row_dist, &\n                                 dbcsr_distribution_thread_dist\n   USE dbcsr_mm_csr, ONLY: &\n      dbcsr_mm_csr_dev2host_init, dbcsr_mm_csr_finalize, dbcsr_mm_csr_init, &\n      dbcsr_mm_csr_lib_finalize, dbcsr_mm_csr_lib_init, dbcsr_mm_csr_multiply, &\n      dbcsr_mm_csr_purge_stacks, dbcsr_mm_csr_red3D, dbcsr_mm_csr_type\n   USE dbcsr_types, ONLY: dbcsr_data_obj, &\n                          dbcsr_type, &\n                          dbcsr_work_type, &\n                          dbcsr_type_complex_4, dbcsr_type_complex_8, &\n                          dbcsr_type_real_4, dbcsr_type_real_8\n   USE dbcsr_kinds, ONLY: int_8, &\n                          real_4, &\n                          real_8, &\n                          sp\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_multrec'\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   TYPE dbcsr_mm_multrec_type\n      !! Used to carry data among the various calls.  Each thread has\n      !! its own private copy.\n\n      PRIVATE\n      LOGICAL :: c_has_symmetry = .FALSE., keep_sparsity = .FALSE., keep_product_data = .FALSE., use_eps = .FALSE.\n         !! The product matrix has symmetry\n         !! Sparsity of C matrix should be kept\n         !! Use on-the-fly filtering\n      INTEGER, DIMENSION(:), POINTER :: m_sizes => NULL(), n_sizes => NULL(), k_sizes => NULL()\n         !! Block sizes of A and C matrix rows, indexed locally\n         !! Block sizes of B and C matrix columns, indexed locally\n         !! Block sizes of A matrix columns and B matrix rows, indexed locally\n      INTEGER, DIMENSION(:), POINTER :: m_global_sizes => NULL(), n_global_sizes => NULL()\n      INTEGER, DIMENSION(:), POINTER :: c_local_rows => NULL(), c_local_cols => NULL(), k_locals => NULL(), &\n                                        c_global_rows => NULL(), c_global_cols => NULL()\n         !! C and A matrix local rows.  Map from local row (index) to global row (value).\n         !! C and B matrix local columns.  Map from local column (index) to global column (value).\n         !! A matrix local columns and B matrix local rows.  Map from local row/column (index) to global row/column (value).\n         !! C and A matrix global rows.  Map from global rows (index) to local rows (value).\n         !! C and B matrix global columns.  Map from global columns (index) to local columns (value).\n\n      REAL(KIND=sp), DIMENSION(:), POINTER :: row_max_epss => NULL(), a_norms => NULL(), b_norms => NULL()\n         !! Maximum eps to be used for one row.\n         !! Norms of A matrix blocks.\n         !! Norms of B matrix blocks.\n      REAL(KIND=real_8)     :: eps = -1.0_real_8\n      INTEGER               :: original_lastblk = -1\n         !! Number of work matrix blocks before addition\n      INTEGER(kind=int_8)   :: flop = -1_int_8\n         !! flop count\n      TYPE(dbcsr_work_type), POINTER :: product_wm => Null()\n      TYPE(dbcsr_mm_csr_type)        :: csr = dbcsr_mm_csr_type()\n      LOGICAL                        :: new_row_max_epss = .FALSE.\n      LOGICAL                        :: initialized = .FALSE.\n   END TYPE dbcsr_mm_multrec_type\n\n   ! **************************************************************************************************\n   PUBLIC :: dbcsr_mm_multrec_type\n   PUBLIC :: dbcsr_mm_multrec_lib_init, dbcsr_mm_multrec_lib_finalize\n   PUBLIC :: dbcsr_mm_multrec_init, dbcsr_mm_multrec_finalize\n   PUBLIC :: dbcsr_mm_multrec_multiply\n   PUBLIC :: dbcsr_mm_multrec_dev2host_init, dbcsr_mm_multrec_red3D\n   PUBLIC :: dbcsr_mm_multrec_get_nblks, dbcsr_mm_multrec_get_nze\n\nCONTAINS\n\n   SUBROUTINE dbcsr_mm_multrec_lib_init()\n      !! Initialize the library\n\n      CALL dbcsr_mm_csr_lib_init()\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_mm_multrec_lib_finalize()\n      !! Finalize the library\n      CALL dbcsr_mm_csr_lib_finalize()\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_mm_multrec_init(this, left, right, product, &\n                                    keep_sparsity, eps, row_max_epss, block_estimate, right_row_blk_size, &\n                                    m_sizes, n_sizes, nlayers, keep_product_data)\n      !! Sets up recursive multiplication\n\n      TYPE(dbcsr_mm_multrec_type), INTENT(out)           :: this\n      TYPE(dbcsr_type), INTENT(IN), OPTIONAL             :: left, right\n         !! left DBCSR matrix\n         !! right DBCSR matrix\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: product\n         !! resulting DBCSR product matrix\n      LOGICAL, INTENT(IN)                                :: keep_sparsity\n         !! retain the sparsity of the existing product matrix, default is no\n      LOGICAL, INTENT(IN), OPTIONAL                      :: keep_product_data\n         !! Perform final reduction on C data, default is yes\n      REAL(kind=real_8), INTENT(in), OPTIONAL            :: eps\n         !! on-the-fly filtering epsilon\n      REAL(kind=sp), DIMENSION(:), INTENT(IN), TARGET    :: row_max_epss\n      INTEGER, INTENT(IN)                                :: block_estimate\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: right_row_blk_size\n      INTEGER, DIMENSION(:), INTENT(IN), POINTER         :: m_sizes, n_sizes\n      INTEGER, OPTIONAL                                  :: nlayers\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_multrec_init'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: c_nblkcols_local, c_nblkrows_local, &\n                                                            handle, ithread\n      INTEGER, DIMENSION(:), POINTER                     :: c_local_cols, c_local_rows\n\n!$    INTEGER, DIMENSION(:), POINTER           :: product_thread_dist\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      !\n      IF (this%initialized) &\n         DBCSR_ABORT(\"multrec already initialized.\")\n\n      IF (PRESENT(left) .NEQV. PRESENT(right)) &\n         DBCSR_ABORT(\"Must both left and right provided or not.\")\n\n      IF (PRESENT(left) .AND. PRESENT(right)) THEN\n         ! Ensures that the index is correctly defined.\n         IF (.NOT. left%list_indexing) &\n            DBCSR_ABORT(\"Must use list indexing for this routine.\")\n         IF (left%bcsc) &\n            DBCSR_ABORT(\"Wrong routine for BCSC matrices.\")\n\n         IF (right%bcsc) &\n            DBCSR_ABORT(\"Wrong routine for BCSC matrices.\")\n         IF (.NOT. right%local_indexing) &\n            DBCSR_ABORT(\"Matrices must have local indexing.\")\n         IF (.NOT. left%local_indexing) &\n            DBCSR_ABORT(\"Matrices must have local indexing.\")\n      END IF\n      !\n      ! Fill result data structure.\n      this%keep_sparsity = keep_sparsity\n      this%c_has_symmetry = product%symmetry\n      this%keep_product_data = .TRUE.\n      IF (PRESENT(keep_product_data)) THEN\n         this%keep_product_data = keep_product_data\n      END IF\n      this%use_eps = PRESENT(eps)\n      this%original_lastblk = product%wms(ithread + 1)%lastblk\n      this%flop = INT(0, int_8)\n      this%product_wm => product%wms(ithread + 1)\n\n      IF (PRESENT(eps)) THEN\n         this%eps = eps\n      ELSE\n         this%eps = 0.0_real_8\n      END IF\n      !\n      !\n!$    NULLIFY (product_thread_dist)\n!$    IF (.NOT. dbcsr_distribution_has_threads(product%dist)) &\n!$       DBCSR_ABORT(\"Missing thread distribution.\")\n!$    product_thread_dist => array_data( &\n!$                           dbcsr_distribution_thread_dist(product%dist))\n      !\n      ! Find out the C/A rows and C/B columns and sizes.\n      c_nblkrows_local = product%nblkrows_local\n      c_local_rows => array_data(product%local_rows)\n      c_nblkcols_local = product%nblkcols_local\n      c_local_cols => array_data(product%local_cols)\n      this%c_local_rows => c_local_rows\n      this%c_local_cols => c_local_cols\n      IF (dbg) WRITE (*, *) \"setting up for product\", product%name\n      IF (careful_mod) THEN\n         IF (.NOT. array_equality(dbcsr_distribution_local_rows_obj(product%dist), &\n                                  product%local_rows)) THEN\n            WRITE (*, *) \"row dist\", dbcsr_distribution_row_dist(product%dist)\n            WRITE (*, *) \"dist local rows\", dbcsr_distribution_local_rows(product%dist)\n            WRITE (*, *) \" mat local rows\", array_data(product%local_rows)\n            DBCSR_ABORT(\"Array mismatch.\")\n         END IF\n         IF (.NOT. array_equality(dbcsr_distribution_local_cols_obj(product%dist), &\n                                  product%local_cols)) THEN\n            WRITE (*, *) \"col dist\", dbcsr_distribution_col_dist(product%dist)\n            WRITE (*, *) \"dist local cols\", dbcsr_distribution_local_cols(product%dist)\n            WRITE (*, *) \" mat local cols\", array_data(product%local_cols)\n            DBCSR_ABORT(\"Array mismatch.\")\n         END IF\n         IF (SIZE(c_local_rows) /= c_nblkrows_local) &\n            DBCSR_ABORT(\"Row count mismatch.\")\n         IF (SIZE(c_local_cols) /= c_nblkcols_local) &\n            DBCSR_ABORT(\"Column count mismatch.\")\n      END IF\n      !\n      ! And the k epsilons\n      IF ((PRESENT(left) .AND. PRESENT(right)) .OR. .NOT. this%use_eps) THEN\n         ALLOCATE (this%row_max_epss(c_nblkrows_local))\n         this%new_row_max_epss = .TRUE.\n      END IF\n      IF (this%use_eps) THEN\n         IF (PRESENT(left) .AND. PRESENT(right)) THEN\n            CALL local_filter_sp(row_max_epss, c_nblkrows_local, c_local_rows, &\n                                 this%row_max_epss)\n         ELSE\n            this%row_max_epss => row_max_epss\n         END IF\n      ELSE\n         this%row_max_epss(:) = -HUGE(0.0_sp)\n      END IF\n      !\n      this%m_sizes => m_sizes\n      this%n_sizes => n_sizes\n      this%m_global_sizes => array_data(product%row_blk_size)\n      this%n_global_sizes => array_data(product%col_blk_size)\n      NULLIFY (this%k_locals)\n      NULLIFY (this%k_sizes)\n\n      !TODO: should we move this up?\n      CALL dbcsr_mm_csr_init(this%csr, &\n                             left=left, right=right, product=product, &\n                             m_sizes=this%m_sizes, n_sizes=this%n_sizes, &\n                             block_estimate=block_estimate, &\n                             right_row_blk_size=right_row_blk_size, &\n                             nlayers=nlayers, &\n                             keep_product_data=this%keep_product_data)\n\n      this%initialized = .TRUE.\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_mm_multrec_init\n\n   SUBROUTINE dbcsr_mm_multrec_multiply(this, left, right, flop, &\n                                        a_norms, b_norms, k_sizes)\n      !! Multiplies two DBCSR matrices using recursive algorithm\n      !! This routine sets up the multiplication.  Specifically, it <ul>\n      !! <li> verifies input sanity\n      !! <li> converts everything into \"local indexing\"\n      !! </ul>\n\n      TYPE(dbcsr_mm_multrec_type), INTENT(inout)         :: this\n      TYPE(dbcsr_type), INTENT(IN)                       :: left, right\n         !! left DBCSR matrix\n         !! right DBCSR matrix\n      INTEGER(KIND=int_8), INTENT(INOUT)                 :: flop\n         !! number of effective double-precision floating point operations performed\n      REAL(kind=sp), DIMENSION(:), INTENT(in), TARGET    :: a_norms, b_norms\n         !! norms of left-matrix blocks\n         !! norms of right-matrix blocks\n      INTEGER, DIMENSION(:), INTENT(IN), POINTER         :: k_sizes\n\n!$    INTEGER                                            :: ithread\n      INTEGER                                            :: t_a_f, t_a_l, t_b_f, t_b_l\n      INTEGER, DIMENSION(:), POINTER                     :: k_locals\n\n!   ---------------------------------------------------------------------------\n\n      IF (.NOT. this%initialized) &\n         DBCSR_ABORT(\"multrec not initialized.\")\n\n      this%flop = 0\n\n      ! Find out the local A columns / B rows and sizes\n      ! The right%local_rows is setup by the communication engine.\n      k_locals => array_data(right%local_rows)\n      this%k_locals => k_locals\n      this%k_sizes => k_sizes\n      ! Setup the block norms\n      this%a_norms => a_norms\n      this%b_norms => b_norms\n\n      ! Start local multiplication\n      t_a_f = 1\n      t_a_l = left%nblks\n      t_b_f = 1\n      t_b_l = right%nblks\n!$    IF (ASSOCIATED(left%thr_c)) THEN\n!$       ithread = OMP_GET_THREAD_NUM()\n!$       t_a_f = left%thr_c(ithread + 1) + 1\n!$       t_a_l = left%thr_c(ithread + 2)\n!$    END IF\n      CALL sparse_multrec(this, left, right, &\n                          1, left%nblkrows_local, &\n                          1, right%nblkcols_local, &\n                          1, SIZE(k_locals), &\n                          t_a_f, t_a_l, left%coo_l, &\n                          t_b_f, t_b_l, right%coo_l, &\n                          0)\n\n      CALL dbcsr_mm_csr_purge_stacks(this%csr, left, right)\n\n      flop = flop + this%flop\n      !\n   END SUBROUTINE dbcsr_mm_multrec_multiply\n\n   SUBROUTINE dbcsr_mm_multrec_dev2host_init(this)\n      !! Sets up recursive multiplication\n      TYPE(dbcsr_mm_multrec_type), INTENT(inout)         :: this\n\n!   ---------------------------------------------------------------------------\n\n      IF (.NOT. this%initialized) &\n         DBCSR_ABORT(\"multrec not initialized.\")\n      CALL dbcsr_mm_csr_dev2host_init(this%csr)\n   END SUBROUTINE dbcsr_mm_multrec_dev2host_init\n\n   SUBROUTINE dbcsr_mm_multrec_finalize(this, meta_buffer)\n      !! Sets up recursive multiplication\n      TYPE(dbcsr_mm_multrec_type), INTENT(inout)         :: this\n      INTEGER, DIMENSION(:), INTENT(INOUT), OPTIONAL     :: meta_buffer\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_multrec_finalize'\n\n      INTEGER                                            :: handle, ithread, lb_meta, &\n                                                            nblocks, nthreads, ub_meta\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. this%initialized) &\n         DBCSR_ABORT(\"multrec not initialized.\")\n\n      CALL dbcsr_mm_csr_finalize(this%csr)\n\n      ! Release the carrier\n      IF (this%new_row_max_epss) DEALLOCATE (this%row_max_epss)\n\n      IF (PRESENT(meta_buffer)) THEN\n         ithread = 0; nthreads = 1\n!$       ithread = OMP_GET_THREAD_NUM(); nthreads = OMP_GET_NUM_THREADS()\n         ! Copy wms data into matrix\n         lb_meta = meta_buffer(ithread + 1)\n         nblocks = (meta_buffer(ithread + 2) - lb_meta)/3\n         ub_meta = lb_meta + nblocks\n         meta_buffer(lb_meta + 1:ub_meta) = this%product_wm%row_i(1:nblocks)\n         lb_meta = ub_meta\n         ub_meta = lb_meta + nblocks\n         meta_buffer(lb_meta + 1:ub_meta) = this%product_wm%col_i(1:nblocks)\n         lb_meta = ub_meta\n         ub_meta = lb_meta + nblocks\n         meta_buffer(lb_meta + 1:ub_meta) = this%product_wm%blk_p(1:nblocks)\n      ELSE\n         CALL remap_local2global(this%product_wm%row_i, &\n                                 this%product_wm%col_i, &\n                                 this%c_local_rows, this%c_local_cols, &\n                                 this%original_lastblk + 1, this%product_wm%lastblk)\n\n         ! if filtering is requested remove small blocks, unless the sparsity needs to be kept\n         IF (this%use_eps .AND. .NOT. this%keep_sparsity) THEN\n            CALL multrec_filtering(this)\n         ELSE\n            this%product_wm%datasize_after_filtering = this%product_wm%datasize\n         END IF\n      END IF\n\n      this%initialized = .FALSE.\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_mm_multrec_finalize\n\n   SUBROUTINE multrec_filtering(this)\n      !! Applying in-place filtering on the workspace\n      TYPE(dbcsr_mm_multrec_type), INTENT(inout)         :: this\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'multrec_filtering'\n\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n\n      SELECT CASE (this%product_wm%data_area%d%data_type)\n      CASE (dbcsr_type_real_4)\n         CALL multrec_filtering_s(this%eps, &\n                                  this%product_wm%lastblk, &\n                                  this%product_wm%row_i, &\n                                  this%product_wm%col_i, &\n                                  this%product_wm%blk_p, &\n                                  this%m_global_sizes, this%n_global_sizes, &\n                                  this%product_wm%datasize_after_filtering, &\n                                  this%product_wm%data_area%d%r_sp)\n      CASE (dbcsr_type_real_8)\n         CALL multrec_filtering_d(this%eps, &\n                                  this%product_wm%lastblk, &\n                                  this%product_wm%row_i, &\n                                  this%product_wm%col_i, &\n                                  this%product_wm%blk_p, &\n                                  this%m_global_sizes, this%n_global_sizes, &\n                                  this%product_wm%datasize_after_filtering, &\n                                  this%product_wm%data_area%d%r_dp)\n      CASE (dbcsr_type_complex_4)\n         CALL multrec_filtering_c(this%eps, &\n                                  this%product_wm%lastblk, &\n                                  this%product_wm%row_i, &\n                                  this%product_wm%col_i, &\n                                  this%product_wm%blk_p, &\n                                  this%m_global_sizes, this%n_global_sizes, &\n                                  this%product_wm%datasize_after_filtering, &\n                                  this%product_wm%data_area%d%c_sp)\n      CASE (dbcsr_type_complex_8)\n         CALL multrec_filtering_z(this%eps, &\n                                  this%product_wm%lastblk, &\n                                  this%product_wm%row_i, &\n                                  this%product_wm%col_i, &\n                                  this%product_wm%blk_p, &\n                                  this%m_global_sizes, this%n_global_sizes, &\n                                  this%product_wm%datasize_after_filtering, &\n                                  this%product_wm%data_area%d%c_dp)\n      CASE DEFAULT\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n\n      CALL timestop(handle)\n\n   END SUBROUTINE multrec_filtering\n\n   SUBROUTINE dbcsr_mm_multrec_red3D(this, meta_buffer, data_buffer, flop, g2l_map_rows, g2l_map_cols)\n      !! Make the reduction of the 3D layers in the local multrec object\n      TYPE(dbcsr_mm_multrec_type), INTENT(inout)         :: this\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: meta_buffer\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: data_buffer\n      INTEGER(KIND=int_8), INTENT(INOUT)                 :: flop\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: g2l_map_rows, g2l_map_cols\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_multrec_red3D'\n\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. this%initialized) &\n         DBCSR_ABORT(\"multrec not initialized.\")\n      CALL dbcsr_mm_csr_red3D(this%csr, meta_buffer, data_buffer, flop, &\n                              m_sizes=this%m_sizes, n_sizes=this%n_sizes, &\n                              g2l_map_rows=g2l_map_rows, &\n                              g2l_map_cols=g2l_map_cols, &\n                              original_lastblk=this%original_lastblk, &\n                              keep_sparsity=this%keep_sparsity)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_mm_multrec_red3D\n\n   FUNCTION dbcsr_mm_multrec_get_nblks(this) RESULT(nblks)\n      !! Return number of blocks\n      TYPE(dbcsr_mm_multrec_type), INTENT(IN)            :: this\n      INTEGER                                            :: nblks\n\n      nblks = this%product_wm%lastblk\n\n   END FUNCTION dbcsr_mm_multrec_get_nblks\n\n   FUNCTION dbcsr_mm_multrec_get_nze(this) RESULT(nze)\n      !! Return data size\n      TYPE(dbcsr_mm_multrec_type), INTENT(IN)            :: this\n      INTEGER                                            :: nze\n\n      nze = this%product_wm%datasize\n\n   END FUNCTION dbcsr_mm_multrec_get_nze\n\n   RECURSIVE SUBROUTINE sparse_multrec(this, left, right, mi, mf, ni, nf, ki, kf, &\n      !! Performs recursive multiplication\n                                       ai, af, a_index, bi, bf, b_index, &\n                                       d)\n      TYPE(dbcsr_mm_multrec_type), INTENT(INOUT)         :: this\n      TYPE(dbcsr_type), INTENT(IN)                       :: left, right\n      INTEGER, INTENT(IN)                                :: mi, mf, ni, nf, ki, kf, ai, af\n      INTEGER, DIMENSION(3, 1:af), INTENT(IN)            :: a_index\n      INTEGER, INTENT(IN)                                :: bi, bf\n      INTEGER, DIMENSION(3, 1:bf), INTENT(IN)            :: b_index\n      INTEGER, INTENT(IN)                                :: d\n\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: acut, bcut, cut, K, M, N, s1\n\n!   ---------------------------------------------------------------------------\n\n      IF (dbg) THEN\n         WRITE (*, '(I7,1X,5(A,2(1X,I7)))') d, \" rm\", mi, mf, \",\", ni, nf, \",\", ki, kf, \"/\", ai, af, \",\", bi, bf\n      END IF\n      IF (.TRUE.) THEN\n         IF (af .LT. ai .OR. bf .LT. bi .OR. mf .LT. mi .OR. nf .LT. ni .OR. kf .LT. ki) THEN\n            IF (dbg) WRITE (*, *) \"Empty\"\n            RETURN\n         END IF\n      END IF\n\n      IF (af - ai + 1 <= dbcsr_cfg%multrec_limit%val .AND. bf - bi + 1 <= dbcsr_cfg%multrec_limit%val) THEN\n         IF (af - ai + 1 .GT. 0 .AND. bf - bi + 1 .GT. 0) &\n            CALL dbcsr_mm_csr_multiply(this%csr, left, right, &\n                                       mi=mi, mf=mf, ni=ni, nf=nf, ki=ki, kf=kf, &\n                                       ai=ai, af=af, &\n                                       bi=bi, bf=bf, &\n                                       m_sizes=this%m_sizes, n_sizes=this%n_sizes, k_sizes=this%k_sizes, &\n                                       c_local_rows=this%c_local_rows, c_local_cols=this%c_local_cols, &\n                                       c_has_symmetry=this%c_has_symmetry, keep_sparsity=this%keep_sparsity, &\n                                       use_eps=this%use_eps, row_max_epss=this%row_max_epss, &\n                                       flop=this%flop, &\n                                       a_index=a_index, b_index=b_index, &\n                                       a_norms=this%a_norms, b_norms=this%b_norms)\n         RETURN\n      END IF\n\n      M = mf - mi + 1\n      N = nf - ni + 1\n      K = kf - ki + 1\n      IF (dbg) THEN\n         WRITE (*, *) 'm,k,n', M, K, N\n      END IF\n      IF (M >= MAX(N, K)) cut = 1\n      IF (K >= MAX(N, M)) cut = 2\n      IF (N >= MAX(M, K)) cut = 3\n      SELECT CASE (cut)\n      CASE (1)\n         s1 = M/2\n         acut = find_cut_row(ai, af, a_index, mi + s1 - 1)\n         CALL sparse_multrec(this, left, right, mi, mi + s1 - 1, ni, nf, ki, kf, &\n                             ai, acut - 1, a_index, bi, bf, b_index, d + 1)\n         CALL sparse_multrec(this, left, right, mi + s1, mf, ni, nf, ki, kf, &\n                             acut, af, a_index, bi, bf, b_index, d + 1)\n      CASE (2)\n         s1 = K/2\n         acut = find_cut_col(ai, af, a_index, ki + s1 - 1)\n         IF (dbg) THEN\n            WRITE (*, *) N, s1, ni + s1 - 1, \"/\", ai, af, acut\n            WRITE (*, '(3(I7))') a_index\n         END IF\n         bcut = find_cut_row(bi, bf, b_index, ki + s1 - 1)\n         IF (dbg) THEN\n            WRITE (*, *) N, s1, ni + s1 - 1, \"/\", bi, bf, bcut\n            WRITE (*, '(3(I7))') b_index\n         END IF\n         CALL sparse_multrec(this, left, right, mi, mf, ni, nf, ki, ki + s1 - 1, &\n                             ai, acut - 1, a_index, bi, bcut - 1, b_index, d + 1)\n         CALL sparse_multrec(this, left, right, mi, mf, ni, nf, ki + s1, kf, &\n                             acut, af, a_index, bcut, bf, b_index, d + 1)\n      CASE (3)\n         s1 = N/2\n         bcut = find_cut_col(bi, bf, b_index, ni + s1 - 1)\n         IF (dbg) THEN\n            WRITE (*, *) N, s1, ni + s1 - 1, \"/\", bi, bf, bcut\n            WRITE (*, '(3(I7))') b_index\n         END IF\n         CALL sparse_multrec(this, left, right, mi, mf, ni, ni + s1 - 1, ki, kf, &\n                             ai, af, a_index, bi, bcut - 1, b_index, d + 1)\n         CALL sparse_multrec(this, left, right, mi, mf, ni + s1, nf, ki, kf, &\n                             ai, af, a_index, bcut, bf, b_index, d + 1)\n      END SELECT\n   END SUBROUTINE sparse_multrec\n\n! ***************************************************************************************************\n   PURE FUNCTION find_cut_row(ai, af, a, val) RESULT(res)\n      INTEGER, INTENT(IN)                                :: ai, af\n      INTEGER, DIMENSION(3, 1:af), INTENT(IN)            :: a\n      INTEGER, INTENT(IN)                                :: val\n      INTEGER                                            :: res\n\n      INTEGER                                            :: i, ihigh, ilow\n\n! do a log(N) search along the ordered index\n\n      ilow = ai\n      IF (a(1, ilow) > val) THEN\n         res = ilow\n         RETURN\n      END IF\n\n      ihigh = af\n      IF (a(1, ihigh) <= val) THEN\n         res = ihigh + 1\n         RETURN\n      END IF\n\n      DO\n         IF (ihigh - ilow == 1) EXIT\n         i = (ilow + ihigh)/2\n         IF (a(1, i) > val) THEN\n            ihigh = i\n         ELSE\n            ilow = i\n         END IF\n      END DO\n      res = ihigh\n\n      ! the linear search version\n      ! DO i=ai,af\n      !    IF (a(i)%r>val) EXIT\n      !ENDDO\n      !res=i\n   END FUNCTION find_cut_row\n\n! ***************************************************************************************************\n   PURE FUNCTION find_cut_col(ai, af, a, val) RESULT(res)\n      INTEGER, INTENT(IN)                                :: ai, af\n      INTEGER, DIMENSION(3, 1:af), INTENT(IN)            :: a\n      INTEGER, INTENT(IN)                                :: val\n      INTEGER                                            :: res\n\n      INTEGER                                            :: i, ihigh, ilow\n\n! do a log(N) search along the ordered index\n\n      ilow = ai\n      IF (a(2, ilow) > val) THEN\n         res = ilow\n         RETURN\n      END IF\n\n      ihigh = af\n      IF (a(2, ihigh) <= val) THEN\n         res = ihigh + 1\n         RETURN\n      END IF\n\n      DO\n         IF (ihigh - ilow == 1) EXIT\n         i = (ilow + ihigh)/2\n         IF (a(2, i) > val) THEN\n            ihigh = i\n         ELSE\n            ilow = i\n         END IF\n      END DO\n      res = ihigh\n\n      ! the linear search version\n      ! DO i=ai,af\n      !    IF (a(i)%c>val) EXIT\n      !ENDDO\n      !res=i\n   END FUNCTION find_cut_col\n\n   PURE SUBROUTINE remap_local2global(row_i, col_i, local_rows, local_cols, &\n                                      first, last)\n      !! Packs a globally-indexed array into a locally-indexed array.\n      INTEGER, INTENT(in)                                :: last, first\n      INTEGER, DIMENSION(:), INTENT(in)                  :: local_cols, local_rows\n      INTEGER, DIMENSION(1:last), INTENT(inout)          :: col_i, row_i\n\n      INTEGER                                            :: i\n\n      DO i = first, last\n         row_i(i) = local_rows(row_i(i))\n         col_i(i) = local_cols(col_i(i))\n      END DO\n   END SUBROUTINE remap_local2global\n\n   PURE SUBROUTINE local_filter_sp(full_data, nle, local_elements, local_data)\n      !! Gathers the local elements from all data (full_data) for\n      !! single precision elements.\n\n      REAL(KIND=sp), DIMENSION(:), INTENT(IN)            :: full_data\n      INTEGER, INTENT(IN)                                :: nle\n      INTEGER, DIMENSION(1:nle), INTENT(IN)              :: local_elements\n      REAL(KIND=sp), DIMENSION(1:nle), INTENT(OUT)       :: local_data\n\n      INTEGER                                            :: l\n\n      DO l = 1, SIZE(local_data)\n         local_data(l) = full_data(local_elements(l))\n      END DO\n   END SUBROUTINE local_filter_sp\n\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1, normname1 in inst_params_float\n\n      SUBROUTINE multrec_filtering_${nametype1}$ (filter_eps, nblks, rowi, coli, blkp, &\n                                                  rbs, cbs, nze, DATA)\n     !! Applying in-place filtering on the workspace.\n     !! \\brief Use Frobenius norm\n\n         REAL(kind=real_8), INTENT(IN)              :: filter_eps\n         INTEGER, INTENT(INOUT)                     :: nblks, nze\n         INTEGER, DIMENSION(1:nblks), INTENT(INOUT) :: rowi, coli, blkp\n         INTEGER, DIMENSION(:), INTENT(IN)          :: rbs, cbs\n         ${type1}$, DIMENSION(:), &\n            INTENT(INOUT)                            :: DATA\n\n         INTEGER                                    :: blk, lastblk, blk_nze, blk_p\n         REAL(kind=real_8)                          :: nrm\n\n         REAL(KIND=real_8), EXTERNAL                :: DZNRM2, DDOT\n#if defined (__ACCELERATE)\n         REAL(KIND=real_8), EXTERNAL                :: SCNRM2, SDOT\n#else\n         REAL(KIND=real_4), EXTERNAL                :: SCNRM2, SDOT\n#endif\n\n         REAL(kind=real_8)                          :: filter_eps_opt\n\n         #:if nametype1 in ['d', 's']\n            ! Avoid square root\n            filter_eps_opt = filter_eps**2\n         #:else\n            filter_eps_opt = filter_eps\n         #:endif\n\n         lastblk = 0\n         nze = 0\n         !\n         DO blk = 1, nblks\n            blk_p = blkp(blk)\n            IF (blk_p .EQ. 0) CYCLE\n            blk_nze = rbs(rowi(blk))*cbs(coli(blk))\n            IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks\n            nrm = REAL(${normname1}$ (blk_nze, data(blk_p), 1, data(blk_p), 1)), KIND = real_8)\n            IF (nrm .GE. filter_eps_opt) THEN\n               ! Keep block\n               lastblk = lastblk + 1\n               IF (lastblk .LT. blk) THEN\n                  rowi(lastblk) = rowi(blk)\n                  coli(lastblk) = coli(blk)\n                  blkp(lastblk) = blkp(blk)\n               END IF\n               nze = nze + blk_nze\n            END IF\n         END DO\n         !\n         nblks = lastblk\n\n      END SUBROUTINE multrec_filtering_${nametype1}$\n   #:endfor\n\nEND MODULE dbcsr_mm_multrec\n"
  },
  {
    "path": "src/mm/dbcsr_mm_sched.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_sched\n   !! Fourth layer of the dbcsr matrix-matrix multiplication.\n   !! It hides the differences between performing calculations on the\n   !! accelerator device or on the CPU.\n   !! <b>Modification history:</b>\n   !! - 2010-02-23 Moved from dbcsr_operations\n   !! - 2011-11    Moved parameter-stack processing routines to\n   !! dbcsr_mm_methods.\n   !! - 2013-01    extensive refactoring (Ole Schuett)\n\n   USE dbcsr_block_operations, ONLY: dbcsr_data_clear\n   USE dbcsr_config, ONLY: dbcsr_cfg, &\n                           default_resize_factor, &\n                           use_acc\n   USE dbcsr_data_methods, ONLY: dbcsr_data_ensure_size, &\n                                 dbcsr_data_get_size\n   USE dbcsr_kinds, ONLY: int_4, int_8, real_8\n   USE dbcsr_mm_accdrv, ONLY: &\n      dbcsr_mm_accdrv_barrier, dbcsr_mm_accdrv_dev2host_init, dbcsr_mm_accdrv_finalize, &\n      dbcsr_mm_accdrv_init, dbcsr_mm_accdrv_lib_finalize, dbcsr_mm_accdrv_lib_init, &\n      dbcsr_mm_accdrv_process, dbcsr_mm_accdrv_type\n   USE dbcsr_mm_hostdrv, ONLY: dbcsr_mm_hostdrv_init, &\n                               dbcsr_mm_hostdrv_lib_finalize, &\n                               dbcsr_mm_hostdrv_lib_init, &\n                               dbcsr_mm_hostdrv_process, &\n                               dbcsr_mm_hostdrv_type\n   USE dbcsr_mm_types, ONLY: p_a_first, &\n                             p_b_first, &\n                             p_c_first, &\n                             p_k, &\n                             p_m, &\n                             p_n, &\n                             stack_descriptor_type\n   USE dbcsr_mpiwrap, ONLY: mp_bcast, &\n                            mp_environ, &\n                            mp_max, &\n                            mp_sum, mp_comm_type\n   USE dbcsr_toollib, ONLY: sort\n   USE dbcsr_types, ONLY: dbcsr_type, &\n                          dbcsr_work_type\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_sched'\n\n   PUBLIC :: dbcsr_mm_sched_type\n   PUBLIC :: dbcsr_mm_sched_lib_init, dbcsr_mm_sched_lib_finalize\n   PUBLIC :: dbcsr_mm_sched_init, dbcsr_mm_sched_finalize\n   PUBLIC :: dbcsr_mm_sched_print_statistics\n   PUBLIC :: dbcsr_mm_sched_process\n   PUBLIC :: dbcsr_mm_sched_begin_burst, dbcsr_mm_sched_end_burst\n   PUBLIC :: dbcsr_mm_sched_barrier\n   PUBLIC :: dbcsr_mm_sched_set_orig_datasize\n   PUBLIC :: dbcsr_mm_sched_dev2host_init\n\n   ! **************************************************************************************************\n   TYPE dbcsr_mm_sched_type\n      PRIVATE\n      TYPE(dbcsr_work_type), POINTER  :: product_wm => Null()\n      TYPE(dbcsr_mm_accdrv_type)      :: accdrv = dbcsr_mm_accdrv_type()\n      TYPE(dbcsr_mm_hostdrv_type)     :: hostdrv = dbcsr_mm_hostdrv_type()\n      LOGICAL                         :: avoid_accdrv = .FALSE.\n      LOGICAL                         :: product_wm_cleared = .FALSE.\n      LOGICAL                         :: keep_product_data = .TRUE.\n      INTEGER                         :: product_wm_orig_datasize = -1\n   END TYPE dbcsr_mm_sched_type\n\n   ! **************************************************************************************************\n   TYPE stats_type\n      INTEGER(kind=int_8)                              :: cpu_num_stacks = 0\n      INTEGER(kind=int_8)                              :: smm_num_stacks = 0\n      INTEGER(kind=int_8)                              :: acc_num_stacks = 0\n      INTEGER(kind=int_8)                              :: cpu_flop = 0\n      INTEGER(kind=int_8)                              :: smm_flop = 0\n      INTEGER(kind=int_8)                              :: acc_flop = 0\n      INTEGER(kind=int_8)                              :: max_cpu_flop = 0\n      INTEGER(kind=int_8)                              :: max_smm_flop = 0\n      INTEGER(kind=int_8)                              :: max_acc_flop = 0\n      INTEGER(kind=int_8), DIMENSION(:, :), ALLOCATABLE :: num_mnk_stacks\n      ! ensure that array-elements are on different cache lines\n      INTEGER(kind=int_4), DIMENSION(64)               :: padding = -1_int_4\n   END TYPE stats_type\n\n   TYPE(stats_type), DIMENSION(:), ALLOCATABLE, TARGET, SAVE :: stats_per_thread\n      !! Counters for each thread to collect statistics\n\nCONTAINS\n\n   SUBROUTINE stats_init(stats)\n      !! Initialize a stats_type\n      TYPE(stats_type), INTENT(INOUT)                    :: stats\n\n      ALLOCATE (stats%num_mnk_stacks(1, 10))\n      stats%num_mnk_stacks(1, :) = 0 ! entry for the default stack\n   END SUBROUTINE stats_init\n\n   SUBROUTINE dbcsr_mm_sched_lib_init()\n      !! Initialize the library\n\n      INTEGER                                            :: ithread, nthreads\n\n      nthreads = 1; ithread = 0\n!$    nthreads = OMP_GET_NUM_THREADS(); ithread = OMP_GET_THREAD_NUM()\n\n!$OMP     MASTER\n      ALLOCATE (stats_per_thread(0:nthreads - 1))\n!$OMP     END MASTER\n\n!$OMP     BARRIER\n\n      CALL stats_init(stats_per_thread(ithread))\n      CALL dbcsr_mm_accdrv_lib_init()\n      CALL dbcsr_mm_hostdrv_lib_init()\n\n   END SUBROUTINE dbcsr_mm_sched_lib_init\n\n   SUBROUTINE dbcsr_mm_sched_lib_finalize()\n      !! Finalize the library and prints DBCSR statistics\n      CALL dbcsr_mm_accdrv_lib_finalize()\n      CALL dbcsr_mm_hostdrv_lib_finalize()\n!$OMP    MASTER\n      DEALLOCATE (stats_per_thread)\n!$OMP    END MASTER\n   END SUBROUTINE dbcsr_mm_sched_lib_finalize\n\n   SUBROUTINE dbcsr_mm_sched_print_statistics(group, output_unit)\n      !! Prints DBCSR statistics\n      TYPE(mp_comm_type), INTENT(IN)                     :: group\n      INTEGER, INTENT(IN)                                :: output_unit\n\n      TYPE(stats_type)                                   :: report\n      ! Collect and output statistics ---------------------------------------------\n\n      CALL stats_init(report)\n      CALL stats_collect_from_threads(report)\n      CALL stats_collect_from_ranks(report, group)\n      CALL stats_print_report(report, output_unit)\n   END SUBROUTINE dbcsr_mm_sched_print_statistics\n\n   SUBROUTINE ensure_product_wm_cleared(this)\n      !! Makes sure that the product_wm is cleared.\n      TYPE(dbcsr_mm_sched_type), INTENT(INOUT)           :: this\n\n      INTEGER                                            :: allocated_datasize, used_datasize\n\n      IF (this%product_wm_cleared) RETURN\n\n      ! The product's data_area could already contain some data.\n      ! ( see: keep_product_data in dbcsr_operations.F )\n      ! But this data might not occupy all the allocated memory in the data_area.\n      ! Since, we don't want to keep track of uninitialized memory we just zero it now.\n\n      used_datasize = this%product_wm_orig_datasize\n      allocated_datasize = dbcsr_data_get_size(this%product_wm%data_area)\n      CALL dbcsr_data_clear(this%product_wm%data_area, lb=used_datasize + 1, ub=allocated_datasize)\n      this%product_wm_cleared = .TRUE.\n   END SUBROUTINE ensure_product_wm_cleared\n\n   SUBROUTINE dbcsr_mm_sched_init(this, product_wm, nlayers, keep_product_data)\n      !! Initializes a multiplication cycle for new set of C-blocks.\n      TYPE(dbcsr_mm_sched_type), INTENT(INOUT)           :: this\n      TYPE(dbcsr_work_type), POINTER                     :: product_wm\n      INTEGER, OPTIONAL                                  :: nlayers\n      LOGICAL, INTENT(IN)                                :: keep_product_data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_sched_init'\n\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n\n      this%keep_product_data = keep_product_data\n\n      this%product_wm => product_wm\n\n      ! Clearing the product_wm takes too long, we gonna do it later and\n      ! return now to allow for MPI to progress.\n      ! We just have to remember its datasize, in case it already contains data.\n      this%product_wm_orig_datasize = this%product_wm%datasize\n\n      CALL dbcsr_mm_hostdrv_init(this%hostdrv, product_wm)\n\n      IF (use_acc()) &\n         CALL dbcsr_mm_accdrv_init(this%accdrv, product_wm, nlayers, keep_product_data)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_mm_sched_init\n\n   SUBROUTINE dbcsr_mm_sched_finalize(this)\n      !! Finalizes a multiplication cycle for a set of C-blocks.\n      TYPE(dbcsr_mm_sched_type), INTENT(INOUT)           :: this\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_sched_finalize'\n\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n\n      ! Just in case dbcsr_mm_sched_process was never called (really needed?)\n      CALL ensure_product_wm_cleared(this)\n\n      !CALL dbcsr_mm_hostdrv_finalize(this%hostdrv) ! not needed\n      IF (use_acc()) &\n         CALL dbcsr_mm_accdrv_finalize(this%accdrv)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_mm_sched_finalize\n\n   SUBROUTINE dbcsr_mm_sched_dev2host_init(this)\n      !! Finalizes a multiplication cycle for a set of C-blocks.\n      TYPE(dbcsr_mm_sched_type), INTENT(INOUT)           :: this\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_sched_dev2host_init'\n\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n\n      IF (use_acc()) &\n         CALL dbcsr_mm_accdrv_dev2host_init(this%accdrv)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_mm_sched_dev2host_init\n\n   SUBROUTINE dbcsr_mm_sched_begin_burst(this)\n      !! Signal begin of a burst of calls to dbcsr_mm_sched_process.\n      TYPE(dbcsr_mm_sched_type), INTENT(INOUT)           :: this\n\n      this%avoid_accdrv = .FALSE.\n   END SUBROUTINE dbcsr_mm_sched_begin_burst\n\n   SUBROUTINE dbcsr_mm_sched_end_burst()\n      !! Signal end of a burst of calls to dbcsr_mm_sched_process.\n\n!nothing to do here\n\n   END SUBROUTINE dbcsr_mm_sched_end_burst\n\n   SUBROUTINE dbcsr_mm_sched_barrier()\n      !! Signal that previous stacks should be processed first\n\n!CALL dbcsr_mm_hostdrv_barrier(this%hostdrv) ! not needed\n\n      IF (use_acc()) &\n         CALL dbcsr_mm_accdrv_barrier()\n\n   END SUBROUTINE dbcsr_mm_sched_barrier\n\n   SUBROUTINE dbcsr_mm_sched_process(this, left, right, stack_data, &\n                                     stack_fillcount, stack_descr)\n      !! Processes a given stack.\n      TYPE(dbcsr_mm_sched_type), INTENT(INOUT)           :: this\n      TYPE(dbcsr_type), INTENT(IN)                       :: left, right\n      INTEGER, DIMENSION(:, :), POINTER                  :: stack_data\n      INTEGER, POINTER                                   :: stack_fillcount\n      TYPE(stack_descriptor_type), INTENT(IN)            :: stack_descr\n\n      INTEGER                                            :: ithread, sp, stacked_datasize\n      INTEGER(kind=int_8)                                :: flop_per_entry, total_flop\n      LOGICAL                                            :: success, generated_acc_untuned, used_smm\n      TYPE(stats_type), POINTER                          :: mystats\n\n      IF (stack_fillcount <= 0) &\n         DBCSR_ABORT(\"dbcsr_mm_sched_process: got empty stack\")\n\n      ithread = 0\n!$    ithread = OMP_GET_THREAD_NUM()\n      mystats => stats_per_thread(ithread)\n\n      CALL ensure_product_wm_cleared(this)\n\n      stacked_datasize = this%product_wm%datasize\n      CALL dbcsr_data_ensure_size(this%product_wm%data_area, stacked_datasize, &\n                                  factor=default_resize_factor, zero_pad=.TRUE.)\n\n      !!From here on there is no boundary checking due to assumed-SIZE-arguments.\n      !!This is useful to check stack parameters, BUT it works only for kind=dp\n      IF (.FALSE.) THEN\n         DO sp = 1, stack_fillcount\n            IF (stack_data(p_a_first, sp) > SIZE(left%data_area%d%r_dp)) &\n               DBCSR_ABORT(\"left data out of range\")\n            IF (stack_data(p_b_first, sp) > SIZE(right%data_area%d%r_dp)) &\n               DBCSR_ABORT(\"right data out of range\")\n            IF (stack_data(p_c_first, sp) > SIZE(this%product_wm%data_area%d%r_dp)) THEN\n               WRITE (*, *) \"blub: \", stack_data(p_c_first, sp), SIZE(this%product_wm%data_area%d%r_dp), &\n                  dbcsr_data_get_size(this%product_wm%data_area), stacked_datasize\n               DBCSR_ABORT(\"product data out of range\")\n            END IF\n         END DO\n      END IF\n\n      IF (.FALSE.) THEN\n         ! Check if homogeneous stacks are indeed homogeneous\n         IF (stack_descr%defined_mnk) THEN\n            DO sp = 1, stack_fillcount\n               IF (stack_data(p_m, sp) /= stack_descr%m) &\n                  DBCSR_ABORT(\"homogeneous stacks check failed\")\n               IF (stack_data(p_n, sp) /= stack_descr%n) &\n                  DBCSR_ABORT(\"homogeneous stacks check failed\")\n               IF (stack_data(p_k, sp) /= stack_descr%k) &\n                  DBCSR_ABORT(\"homogeneous stacks check failed\")\n            END DO\n         END IF\n      END IF\n\n      ! Submitting the stack for processing -------------------------------------\n      flop_per_entry = INT(2, KIND=int_8)*stack_descr%max_m*stack_descr%max_n*stack_descr%max_k\n      total_flop = stack_fillcount*flop_per_entry\n\n      IF (use_acc() .AND. &\n          flop_per_entry > dbcsr_cfg%accdrv_min_flop_process%val .AND. &\n          (.NOT. this%avoid_accdrv) .AND. &\n          (stack_descr%defined_mnk .OR. dbcsr_cfg%accdrv_do_inhomogenous%val)) THEN\n         CALL dbcsr_mm_accdrv_process( &\n            this%accdrv, &\n            left, right, &\n            params=stack_data, &\n            stack_size=stack_fillcount, &\n            stack_descr=stack_descr, &\n            success=success, &\n            generated_acc_untuned=generated_acc_untuned)\n\n         IF (success) THEN\n            ! update statistics\n            mystats%acc_num_stacks = mystats%acc_num_stacks + 1\n            mystats%acc_flop = mystats%acc_flop + total_flop\n            CALL stats_add(mystats, &\n                           m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, &\n                           stacksize_acc=INT(stack_fillcount, kind=int_8), &\n                           generated_acc_untuned=generated_acc_untuned)\n            RETURN\n         ELSE\n            this%avoid_accdrv = dbcsr_cfg%accdrv_avoid_after_busy%val\n         END IF\n      END IF\n\n      !WRITE (*,*) \"dbcsr_mm_sched_process: running hostdrv_process, stack_fillcount:\", stack_fillcount\n\n      CALL dbcsr_mm_hostdrv_process( &\n         this%hostdrv, &\n         left, right, &\n         params=stack_data, &\n         stack_size=stack_fillcount, &\n         stack_descr=stack_descr, &\n         success=success, &\n         used_smm=used_smm)\n\n      IF (.NOT. success) DBCSR_ABORT(\"dbcsr_mm_sched_process_stack failed\")\n\n      ! update statistics\n      IF (used_smm) THEN\n         mystats%smm_num_stacks = mystats%smm_num_stacks + 1\n         mystats%smm_flop = mystats%smm_flop + total_flop\n         CALL stats_add(mystats, &\n                        m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, &\n                        stacksize_smm=INT(stack_fillcount, kind=int_8))\n      ELSE\n         mystats%cpu_num_stacks = mystats%cpu_num_stacks + 1\n         mystats%cpu_flop = mystats%cpu_flop + total_flop\n         CALL stats_add(mystats, &\n                        m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, &\n                        stacksize_cpu=INT(stack_fillcount, kind=int_8))\n      END IF\n\n   END SUBROUTINE dbcsr_mm_sched_process\n\n   SUBROUTINE dbcsr_mm_sched_set_orig_datasize(this, newsize)\n      !! Change the datasize of the original workspace buffer\n      TYPE(dbcsr_mm_sched_type), INTENT(INOUT)           :: this\n      INTEGER, INTENT(IN)                                :: newsize\n\n      this%product_wm_orig_datasize = newsize\n   END SUBROUTINE dbcsr_mm_sched_set_orig_datasize\n\n   SUBROUTINE stats_add(stats, m, n, k, stacksize_cpu, stacksize_smm, stacksize_acc, &\n                        nstacks_cpu, nstacks_smm, nstacks_acc, generated_acc_untuned)\n      !! Helper-routine used by dbcsr_mm_sched_process to supply statistics.\n\n      TYPE(stats_type), INTENT(INOUT)                    :: stats\n      INTEGER, INTENT(IN)                                :: m, n, k\n      INTEGER(kind=int_8), OPTIONAL                      :: stacksize_cpu, stacksize_smm, &\n                                                            stacksize_acc, nstacks_cpu, &\n                                                            nstacks_smm, nstacks_acc\n      LOGICAL, OPTIONAL                                  :: generated_acc_untuned\n\n      INTEGER                                            :: i, s\n      INTEGER(kind=int_8)                                :: my_nstacks_acc, my_nstacks_cpu, &\n                                                            my_nstacks_smm, my_stacksize_acc, &\n                                                            my_stacksize_cpu, my_stacksize_smm, &\n                                                            my_nstacks_acc_default\n      INTEGER(kind=int_8), ALLOCATABLE, DIMENSION(:, :)  :: tmp\n\n      my_stacksize_cpu = 0\n      my_stacksize_smm = 0\n      my_stacksize_acc = 0\n      IF (PRESENT(stacksize_cpu)) my_stacksize_cpu = stacksize_cpu\n      IF (PRESENT(stacksize_smm)) my_stacksize_smm = stacksize_smm\n      IF (PRESENT(stacksize_acc)) my_stacksize_acc = stacksize_acc\n\n      my_nstacks_cpu = MERGE(1, 0, my_stacksize_cpu > 0)\n      my_nstacks_smm = MERGE(1, 0, my_stacksize_smm > 0)\n      my_nstacks_acc = MERGE(1, 0, my_stacksize_acc > 0)\n      my_nstacks_acc_default = 0\n      IF (PRESENT(nstacks_cpu)) my_nstacks_cpu = nstacks_cpu\n      IF (PRESENT(nstacks_smm)) my_nstacks_smm = nstacks_smm\n      IF (PRESENT(nstacks_acc)) my_nstacks_acc = nstacks_acc\n      IF (PRESENT(generated_acc_untuned)) THEN\n         IF (generated_acc_untuned) my_nstacks_acc_default = 1\n      END IF\n\n      DO i = 1, SIZE(stats%num_mnk_stacks, 1)\n         IF (stats%num_mnk_stacks(i, 1) == m .AND. &\n             stats%num_mnk_stacks(i, 2) == n .AND. &\n             stats%num_mnk_stacks(i, 3) == k) THEN\n            stats%num_mnk_stacks(i, 4) = stats%num_mnk_stacks(i, 4) + my_stacksize_cpu\n            stats%num_mnk_stacks(i, 5) = stats%num_mnk_stacks(i, 5) + my_stacksize_smm\n            stats%num_mnk_stacks(i, 6) = stats%num_mnk_stacks(i, 6) + my_stacksize_acc\n            stats%num_mnk_stacks(i, 7) = stats%num_mnk_stacks(i, 7) + my_nstacks_cpu\n            stats%num_mnk_stacks(i, 8) = stats%num_mnk_stacks(i, 8) + my_nstacks_smm\n            stats%num_mnk_stacks(i, 9) = stats%num_mnk_stacks(i, 9) + my_nstacks_acc\n            stats%num_mnk_stacks(i, 10) = stats%num_mnk_stacks(i, 10) + my_nstacks_acc_default\n            RETURN\n         END IF\n      END DO\n\n      !not found, ok lets grow the list\n      s = SIZE(stats%num_mnk_stacks, 1)\n      ALLOCATE (tmp(s, 10))\n      tmp(:, :) = stats%num_mnk_stacks(:, :)\n      DEALLOCATE (stats%num_mnk_stacks)\n      ALLOCATE (stats%num_mnk_stacks(s + 1, 10))\n      stats%num_mnk_stacks(1:s, :) = tmp(:, :)\n      stats%num_mnk_stacks(s + 1, 1) = m\n      stats%num_mnk_stacks(s + 1, 2) = n\n      stats%num_mnk_stacks(s + 1, 3) = k\n      stats%num_mnk_stacks(s + 1, 4) = my_stacksize_cpu\n      stats%num_mnk_stacks(s + 1, 5) = my_stacksize_smm\n      stats%num_mnk_stacks(s + 1, 6) = my_stacksize_acc\n      stats%num_mnk_stacks(s + 1, 7) = my_nstacks_cpu\n      stats%num_mnk_stacks(s + 1, 8) = my_nstacks_smm\n      stats%num_mnk_stacks(s + 1, 9) = my_nstacks_acc\n      stats%num_mnk_stacks(s + 1, 10) = my_nstacks_acc_default\n      DEALLOCATE (tmp)\n   END SUBROUTINE stats_add\n\n   SUBROUTINE stats_collect_from_threads(report)\n      !! Collects statistics from all OpenMP-threads into report\n      TYPE(stats_type), INTENT(INOUT)                    :: report\n\n      INTEGER                                            :: i, j, nthreads\n      TYPE(stats_type), POINTER                          :: istats\n\n!$OMP PARALLEL DEFAULT(NONE) SHARED(nthreads)\n!$OMP MASTER\n      nthreads = 1\n!$    nthreads = OMP_GET_NUM_THREADS()\n!$OMP END MASTER\n!$OMP END PARALLEL\n\n      DO i = 0, nthreads - 1\n         istats => stats_per_thread(i)\n         report%cpu_num_stacks = report%cpu_num_stacks + istats%cpu_num_stacks\n         report%smm_num_stacks = report%smm_num_stacks + istats%smm_num_stacks\n         report%acc_num_stacks = report%acc_num_stacks + istats%acc_num_stacks\n         report%acc_flop = report%acc_flop + istats%acc_flop\n         report%smm_flop = report%smm_flop + istats%smm_flop\n         report%cpu_flop = report%cpu_flop + istats%cpu_flop\n\n         DO j = 1, SIZE(istats%num_mnk_stacks, 1)\n            CALL stats_add(report, &\n                           m=INT(istats%num_mnk_stacks(j, 1), kind=int_4), &\n                           n=INT(istats%num_mnk_stacks(j, 2), kind=int_4), &\n                           k=INT(istats%num_mnk_stacks(j, 3), kind=int_4), &\n                           stacksize_cpu=istats%num_mnk_stacks(j, 4), &\n                           stacksize_smm=istats%num_mnk_stacks(j, 5), &\n                           stacksize_acc=istats%num_mnk_stacks(j, 6), &\n                           nstacks_cpu=istats%num_mnk_stacks(j, 7), &\n                           nstacks_smm=istats%num_mnk_stacks(j, 8), &\n                           nstacks_acc=istats%num_mnk_stacks(j, 9), &\n                           generated_acc_untuned=istats%num_mnk_stacks(j, 10) .GT. 0)\n         END DO\n      END DO\n\n   END SUBROUTINE stats_collect_from_threads\n\n   SUBROUTINE stats_collect_from_ranks(report, group)\n      !! Collects statistics from all MPI-ranks\n      TYPE(stats_type), INTENT(INOUT)                    :: report\n      TYPE(mp_comm_type), INTENT(IN)                                :: group\n\n      INTEGER                                            :: i, myrank, nranks, sending_rank\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: mnk_collected\n      INTEGER, DIMENSION(3)                              :: mnk\n\n!$OMP     MASTER\n\n      CALL mp_environ(nranks, myrank, group)\n\n      report%max_acc_flop = report%acc_flop\n      CALL mp_max(report%max_acc_flop, group)\n      report%max_smm_flop = report%smm_flop\n      CALL mp_max(report%max_smm_flop, group)\n      report%max_cpu_flop = report%cpu_flop\n      CALL mp_max(report%max_cpu_flop, group)\n\n      CALL mp_sum(report%acc_flop, group)\n      CALL mp_sum(report%smm_flop, group)\n      CALL mp_sum(report%cpu_flop, group)\n      CALL mp_sum(report%cpu_num_stacks, group)\n      CALL mp_sum(report%smm_num_stacks, group)\n      CALL mp_sum(report%acc_num_stacks, group)\n\n      ! array mnk_collected is used as a logical-array, allows to use minloc\n      ALLOCATE (mnk_collected(SIZE(report%num_mnk_stacks, 1)))\n      mnk_collected = 0 ! init all to false\n\n      ! broadcast stats of all mnk-combinations, which occurred on any mpi rank\n      DO\n         ! each rank with uncollected stats tries to become the sending_rank\n         sending_rank = -1\n         IF (.NOT. ALL(mnk_collected == 1)) sending_rank = myrank\n         CALL mp_max(sending_rank, group)\n         IF (sending_rank < 0) EXIT ! every rank got all mnk collected\n\n         IF (sending_rank == myrank) THEN\n            i = MINLOC(mnk_collected, dim=1)\n            mnk = INT(report%num_mnk_stacks(i, 1:3), kind=int_4)\n         END IF\n         CALL mp_bcast(msg=mnk, source=sending_rank, gid=group)\n\n         CALL stats_add(report, m=mnk(1), n=mnk(2), k=mnk(3), stacksize_cpu=0_int_8, stacksize_acc=0_int_8)\n         DO i = 1, SIZE(report%num_mnk_stacks, 1)\n            IF (ALL(report%num_mnk_stacks(i, 1:3) == mnk)) THEN\n               IF (i <= SIZE(mnk_collected)) mnk_collected(i) = 1\n               CALL mp_sum(report%num_mnk_stacks(i, 4:10), group)\n            END IF\n         END DO\n      END DO\n!$OMP     END MASTER\n   END SUBROUTINE stats_collect_from_ranks\n\n   SUBROUTINE stats_print_report(report, output_unit)\n      !! Prints collected statistics\n      TYPE(stats_type), INTENT(INOUT)                    :: report\n      INTEGER, INTENT(IN)                                :: output_unit\n\n      INTEGER                                            :: i, j\n      INTEGER(KIND=int_8)                                :: flops, total, total_flops_homo\n      INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:)     :: sort_key\n      INTEGER(KIND=int_8), DIMENSION(3)                  :: flops_homo\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: sort_idx\n      CHARACTER(LEN=4)                                   :: generated_acc_untuned_label\n      LOGICAL                                            :: has_acc_untuned_kernel, &\n                                                            use_cpu_kernels\n\n      IF (output_unit <= 0) RETURN\n\n      WRITE (output_unit, \"(1X,A,T45,A,T57,A,T68,A,T78,A)\") \"COUNTER\", \"TOTAL\", \"BLAS\", \"SMM\", \"ACC\"\n\n      !sorting stat entries by flops per multiplication\n      ALLOCATE (sort_key(SIZE(report%num_mnk_stacks, 1) - 1))\n      sort_key(:) = 2*PRODUCT(report%num_mnk_stacks(2:, 1:3), DIM=2)*SUM(report%num_mnk_stacks(2:, 4:6), DIM=2)\n      ALLOCATE (sort_idx(SIZE(sort_key)))\n      CALL sort(sort_key, SIZE(sort_key), sort_idx)\n\n      total_flops_homo = 0\n      flops_homo(:) = 0\n      has_acc_untuned_kernel = .FALSE.\n      use_cpu_kernels = .FALSE.\n\n      DO i = 1, SIZE(sort_idx)\n         j = sort_idx(i) + 1\n         total = SUM(report%num_mnk_stacks(j, 4:6))\n         flops = 2*total*PRODUCT(report%num_mnk_stacks(j, 1:3))\n         total_flops_homo = total_flops_homo + flops\n         flops_homo(:) = flops_homo(:) + 2*report%num_mnk_stacks(j, 4:6)*PRODUCT(report%num_mnk_stacks(j, 1:3))\n         IF (report%num_mnk_stacks(j, 10) .EQ. 0) THEN\n            generated_acc_untuned_label = \"\"\n         ELSE\n            generated_acc_untuned_label = \"(*)\"\n            has_acc_untuned_kernel = .TRUE.\n         END IF\n\n         IF (SUM(report%num_mnk_stacks(j, 4:5)) .GT. 0) THEN\n            use_cpu_kernels = .TRUE.\n         END IF\n\n         WRITE (output_unit, \"(A,I5,' x ',I5,' x ',I5,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'% ',A)\") &\n            \" flops \", report%num_mnk_stacks(j, 1:3), &\n            flops, &\n            100*REAL(report%num_mnk_stacks(j, 4:6))/REAL(MAX(INT(1, KIND=int_8), total)), &\n            generated_acc_untuned_label\n      END DO\n\n      IF (has_acc_untuned_kernel) THEN\n         CALL dbcsr_warn(__LOCATION__, &\n                         \" (*) ACC Untuned kernels, consider to run the ACC tuning procedure for them\")\n      END IF\n\n      IF (use_cpu_kernels .AND. use_acc()) THEN\n         CALL dbcsr_warn(__LOCATION__, &\n                         \" Some kernels are running on the CPU, consider to run the ACC tuning procedure for them\")\n      END IF\n\n      total = report%cpu_flop + report%smm_flop + report%acc_flop\n      WRITE (output_unit, \"(A,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')\") &\n         \" flops inhomo. stacks\", total - total_flops_homo, &\n         100*REAL(report%cpu_flop - flops_homo(1))/REAL(MAX(INT(1, KIND=int_8), total - total_flops_homo)), &\n         100*REAL(report%smm_flop - flops_homo(2))/REAL(MAX(INT(1, KIND=int_8), total - total_flops_homo)), &\n         100*REAL(report%acc_flop - flops_homo(3))/REAL(MAX(INT(1, KIND=int_8), total - total_flops_homo))\n\n      WRITE (output_unit, \"(A,T30,EN20.6,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')\") &\n         \" flops total\", REAL(total, KIND=real_8), &\n         100*REAL(report%cpu_flop)/REAL(MAX(INT(1, KIND=int_8), total)), &\n         100*REAL(report%smm_flop)/REAL(MAX(INT(1, KIND=int_8), total)), &\n         100*REAL(report%acc_flop)/REAL(MAX(INT(1, KIND=int_8), total))\n\n      total = report%max_cpu_flop + report%max_smm_flop + report%max_acc_flop\n      WRITE (output_unit, \"(A,T30,EN20.6,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')\") &\n         \" flops max/rank\", REAL(total, KIND=real_8), &\n         100*REAL(report%max_cpu_flop)/REAL(MAX(INT(1, KIND=int_8), total)), &\n         100*REAL(report%max_smm_flop)/REAL(MAX(INT(1, KIND=int_8), total)), &\n         100*REAL(report%max_acc_flop)/REAL(MAX(INT(1, KIND=int_8), total))\n\n      total = SUM(report%num_mnk_stacks(1, 4:6))\n      WRITE (output_unit, \"(A,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')\") &\n         \" matmuls inhomo. stacks\", total, &\n         100*REAL(report%num_mnk_stacks(1, 4:6))/REAL(MAX(INT(1, KIND=int_8), total))\n\n      total = SUM(report%num_mnk_stacks(:, 4:6))\n      WRITE (output_unit, \"(A,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')\") &\n         \" matmuls total\", total, &\n         100*REAL(SUM(report%num_mnk_stacks(:, 4:6), DIM=1))/REAL(MAX(INT(1, KIND=int_8), total))\n\n      total = report%cpu_num_stacks + report%smm_num_stacks + report%acc_num_stacks\n      WRITE (output_unit, \"(A,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')\") &\n         \" number of processed stacks\", total, &\n         100*REAL(report%cpu_num_stacks)/REAL(MAX(INT(1, KIND=int_8), total)), &\n         100*REAL(report%smm_num_stacks)/REAL(MAX(INT(1, KIND=int_8), total)), &\n         100*REAL(report%acc_num_stacks)/REAL(MAX(INT(1, KIND=int_8), total))\n\n      WRITE (output_unit, '(A,T51,F9.1,1X,F9.1,1X,F9.1)') \" average stack size\", &\n         REAL(SUM(report%num_mnk_stacks(:, 4)))/REAL(MAX(INT(1, KIND=int_8), SUM(report%num_mnk_stacks(:, 7)))), &\n         REAL(SUM(report%num_mnk_stacks(:, 5)))/REAL(MAX(INT(1, KIND=int_8), SUM(report%num_mnk_stacks(:, 8)))), &\n         REAL(SUM(report%num_mnk_stacks(:, 6)))/REAL(MAX(INT(1, KIND=int_8), SUM(report%num_mnk_stacks(:, 9))))\n\n   END SUBROUTINE stats_print_report\n\nEND MODULE dbcsr_mm_sched\n"
  },
  {
    "path": "src/mm/dbcsr_mm_types.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mm_types\n   !! Datatypes used by the dbcsr matrix-matrix multiplication machinery.\n   !! <b>Modification history:</b>\n   !! - 2013-01    reorganized code (Ole Schuett)\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mm_types'\n\n   PUBLIC :: stack_descriptor_type\n\n   ! Definitions for the members of a parameter stack.\n   INTEGER, PARAMETER, PUBLIC :: dbcsr_ps_width = 7\n   INTEGER, PARAMETER, PUBLIC :: dbcsr_ps_acc_width = 3\n   INTEGER, PARAMETER, PUBLIC :: p_m = 1\n   INTEGER, PARAMETER, PUBLIC :: p_n = 2\n   INTEGER, PARAMETER, PUBLIC :: p_k = 3\n   INTEGER, PARAMETER, PUBLIC :: p_a_first = 4\n   INTEGER, PARAMETER, PUBLIC :: p_b_first = 5\n   INTEGER, PARAMETER, PUBLIC :: p_c_first = 6\n   INTEGER, PARAMETER, PUBLIC :: p_c_blk = 7\n\n   TYPE stack_descriptor_type\n      INTEGER :: m = -1, n = -1, k = -1, max_m = -1, max_n = -1, max_k = -1\n      LOGICAL :: defined_mnk = .FALSE.\n   END TYPE stack_descriptor_type\n\nEND MODULE dbcsr_mm_types\n"
  },
  {
    "path": "src/mm/dbcsr_multiply_api.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_multiply_api\n   USE dbcsr_data_methods, ONLY: dbcsr_scalar\n   USE dbcsr_kinds, ONLY: int_8, &\n                          real_4, &\n                          real_8\n   USE dbcsr_methods, ONLY: dbcsr_get_data_type\n   USE dbcsr_mm, ONLY: dbcsr_multiply_generic\n   USE dbcsr_types, ONLY: dbcsr_type, &\n                          dbcsr_type_real_4, &\n                          dbcsr_type_real_8\n\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_multiply_api'\n\n   PUBLIC :: dbcsr_multiply\n\n   INTERFACE dbcsr_multiply\n      MODULE PROCEDURE dbcsr_multiply_generic\n      MODULE PROCEDURE dbcsr_multiply_s, dbcsr_multiply_d, &\n         dbcsr_multiply_c, dbcsr_multiply_z\n   END INTERFACE\n\nCONTAINS\n\n   SUBROUTINE dbcsr_multiply_s(transa, transb, &\n                               alpha, matrix_a, matrix_b, beta, matrix_c, &\n                               first_row, last_row, first_column, last_column, first_k, last_k, &\n                               retain_sparsity, filter_eps, &\n                               flop)\n      CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb\n      REAL(KIND=real_4), INTENT(IN)                      :: alpha\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b\n      REAL(KIND=real_4), INTENT(IN)                      :: beta\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c\n      INTEGER, INTENT(IN), OPTIONAL                      :: first_row, last_row, first_column, &\n                                                            last_column, first_k, last_k\n      LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: filter_eps\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL         :: flop\n\n      CALL dbcsr_multiply_generic(transa, transb, &\n                                  dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, &\n                                  first_row, last_row, first_column, last_column, first_k, last_k, &\n                                  retain_sparsity, &\n                                  filter_eps=filter_eps, &\n                                  flop=flop)\n   END SUBROUTINE dbcsr_multiply_s\n\n   SUBROUTINE dbcsr_multiply_d(transa, transb, &\n                               alpha, matrix_a, matrix_b, beta, matrix_c, &\n                               first_row, last_row, first_column, last_column, first_k, last_k, &\n                               retain_sparsity, filter_eps, &\n                               flop)\n      CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb\n      REAL(KIND=real_8), INTENT(IN)                      :: alpha\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b\n      REAL(KIND=real_8), INTENT(IN)                      :: beta\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c\n      INTEGER, INTENT(IN), OPTIONAL                      :: first_row, last_row, first_column, &\n                                                            last_column, first_k, last_k\n      LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: filter_eps\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL         :: flop\n\n      IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. &\n          dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4 .AND. &\n          dbcsr_get_data_type(matrix_c) .EQ. dbcsr_type_real_4) THEN\n         CALL dbcsr_multiply_generic(transa, transb, &\n                                     dbcsr_scalar(REAL(alpha, real_4)), matrix_a, matrix_b, &\n                                     dbcsr_scalar(REAL(beta, real_4)), matrix_c, &\n                                     first_row, last_row, first_column, last_column, first_k, last_k, &\n                                     retain_sparsity, &\n                                     filter_eps=filter_eps, &\n                                     flop=flop)\n      ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8 .AND. &\n              dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_8 .AND. &\n              dbcsr_get_data_type(matrix_c) .EQ. dbcsr_type_real_8) THEN\n         CALL dbcsr_multiply_generic(transa, transb, &\n                                     dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, &\n                                     first_row, last_row, first_column, last_column, first_k, last_k, &\n                                     retain_sparsity, &\n                                     filter_eps=filter_eps, &\n                                     flop=flop)\n      ELSE\n         DBCSR_ABORT(\"This combination of data types NYI\")\n      END IF\n   END SUBROUTINE dbcsr_multiply_d\n\n   SUBROUTINE dbcsr_multiply_c(transa, transb, &\n                               alpha, matrix_a, matrix_b, beta, matrix_c, &\n                               first_row, last_row, first_column, last_column, first_k, last_k, &\n                               retain_sparsity, filter_eps, &\n                               flop)\n      CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb\n      COMPLEX(KIND=real_4), INTENT(IN)                   :: alpha\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b\n      COMPLEX(KIND=real_4), INTENT(IN)                   :: beta\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c\n      INTEGER, INTENT(IN), OPTIONAL                      :: first_row, last_row, first_column, &\n                                                            last_column, first_k, last_k\n      LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: filter_eps\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL         :: flop\n\n      CALL dbcsr_multiply_generic(transa, transb, &\n                                  dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, &\n                                  first_row, last_row, first_column, last_column, first_k, last_k, &\n                                  retain_sparsity, &\n                                  filter_eps=filter_eps, &\n                                  flop=flop)\n   END SUBROUTINE dbcsr_multiply_c\n\n   SUBROUTINE dbcsr_multiply_z(transa, transb, &\n                               alpha, matrix_a, matrix_b, beta, matrix_c, &\n                               first_row, last_row, first_column, last_column, first_k, last_k, &\n                               retain_sparsity, filter_eps, &\n                               flop)\n      CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb\n      COMPLEX(KIND=real_8), INTENT(IN)                   :: alpha\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b\n      COMPLEX(KIND=real_8), INTENT(IN)                   :: beta\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c\n      INTEGER, INTENT(IN), OPTIONAL                      :: first_row, last_row, first_column, &\n                                                            last_column, first_k, last_k\n      LOGICAL, INTENT(IN), OPTIONAL                      :: retain_sparsity\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: filter_eps\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL         :: flop\n\n      CALL dbcsr_multiply_generic(transa, transb, &\n                                  dbcsr_scalar(alpha), matrix_a, matrix_b, dbcsr_scalar(beta), matrix_c, &\n                                  first_row, last_row, first_column, last_column, first_k, last_k, &\n                                  retain_sparsity, &\n                                  filter_eps=filter_eps, &\n                                  flop=flop)\n   END SUBROUTINE dbcsr_multiply_z\n\nEND MODULE dbcsr_multiply_api\n"
  },
  {
    "path": "src/mpi/PACKAGE",
    "content": "{\n\"description\": \"wrappers of the mpi routines\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../base\", \"../data\", \"../core\"],\n\"implicit\": \"MPI_.*\",\n}\n"
  },
  {
    "path": "src/mpi/dbcsr_mp_methods.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mp_methods\n   USE dbcsr_methods, ONLY: dbcsr_mp_grid_remove, &\n                            dbcsr_mp_release\n   USE dbcsr_mpiwrap, ONLY: mp_cart_create, &\n                            mp_cart_sub, &\n                            mp_comm_free, &\n                            mp_environ, &\n                            mp_cart_rank, &\n                            mp_dims_create, &\n                            mp_comm_null, mp_comm_type\n   USE dbcsr_types, ONLY: dbcsr_mp_obj\n\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mp_methods'\n\n   PUBLIC :: dbcsr_mp_new, dbcsr_mp_hold, dbcsr_mp_release, &\n             dbcsr_mp_pgrid, dbcsr_mp_numnodes, dbcsr_mp_mynode, dbcsr_mp_group, &\n             dbcsr_mp_new_transposed, dbcsr_mp_nprows, dbcsr_mp_npcols, &\n             dbcsr_mp_myprow, dbcsr_mp_mypcol, &\n             dbcsr_mp_my_row_group, dbcsr_mp_my_col_group, &\n             dbcsr_mp_has_subgroups, dbcsr_mp_get_process, &\n             dbcsr_mp_grid_setup, dbcsr_mp_grid_remove, &\n             dbcsr_mp_init, dbcsr_mp_active, dbcsr_mp_make_env\n\n   INTERFACE dbcsr_mp_new\n      MODULE PROCEDURE dbcsr_mp_new_grid\n      MODULE PROCEDURE dbcsr_mp_new_group\n   END INTERFACE dbcsr_mp_new\n\nCONTAINS\n\n   SUBROUTINE dbcsr_mp_init(mp_env)\n      !! Initializes a new process grid\n      TYPE(dbcsr_mp_obj), INTENT(OUT)                    :: mp_env\n\n      NULLIFY (mp_env%mp)\n   END SUBROUTINE dbcsr_mp_init\n\n   FUNCTION dbcsr_mp_active(mp_env) RESULT(active)\n      !! Checks whether this process is part of the message passing environment\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      LOGICAL                                            :: active\n\n      active = ASSOCIATED(mp_env%mp)\n   END FUNCTION dbcsr_mp_active\n\n   SUBROUTINE dbcsr_mp_new_grid(mp_env, mp_group, pgrid, mynode, &\n                                numnodes, myprow, mypcol, source)\n      !! Creates new process grid\n\n      TYPE(dbcsr_mp_obj), INTENT(OUT)                    :: mp_env\n         !! multiprocessor environment\n      TYPE(mp_comm_type), INTENT(IN)                     :: mp_group\n      INTEGER, INTENT(IN)                                :: mynode\n         !! my processor number\n      INTEGER, DIMENSION(0:, 0:), INTENT(IN)             :: pgrid\n         !! process grid\n      INTEGER, INTENT(IN), OPTIONAL                      :: numnodes, myprow, mypcol, source\n         !! total number of processors (processes)\n\n      INTEGER                                            :: pcol, prow\n\n!   ---------------------------------------------------------------------------\n\n      ALLOCATE (mp_env%mp)\n      mp_env%mp%refcount = 1\n      ALLOCATE (mp_env%mp%pgrid(0:SIZE(pgrid, 1) - 1, 0:SIZE(pgrid, 2) - 1))\n      mp_env%mp%pgrid(:, :) = pgrid(:, :)\n      mp_env%mp%mynode = mynode\n      mp_env%mp%mp_group = mp_group\n      mp_env%mp%source = 0\n      IF (PRESENT(source)) mp_env%mp%source = source\n      IF (PRESENT(numnodes)) THEN\n         mp_env%mp%numnodes = numnodes\n      ELSE\n         mp_env%mp%numnodes = SIZE(pgrid)\n      END IF\n      IF (PRESENT(myprow) .AND. PRESENT(mypcol)) THEN\n         mp_env%mp%myprow = myprow\n         mp_env%mp%mypcol = mypcol\n      ELSE\n         mp_env%mp%myprow = -33777\n         mp_env%mp%mypcol = -33777\n         column_loop: DO pcol = LBOUND(pgrid, 2), UBOUND(pgrid, 2)\n            row_loop: DO prow = LBOUND(pgrid, 1), UBOUND(pgrid, 1)\n               test_position: IF (pgrid(prow, pcol) .EQ. mynode) THEN\n                  mp_env%mp%myprow = prow\n                  mp_env%mp%mypcol = pcol\n                  EXIT column_loop\n               END IF test_position\n            END DO row_loop\n         END DO column_loop\n      END IF\n      mp_env%mp%subgroups_defined = .FALSE.\n      !call dbcsr_mp_grid_setup(mp_env)\n   END SUBROUTINE dbcsr_mp_new_grid\n\n   SUBROUTINE dbcsr_mp_new_group(mp_env, mp_group, pgrid)\n      !! Creates a new dbcsr_mp_obj based on a input template\n\n      TYPE(dbcsr_mp_obj), INTENT(OUT)                    :: mp_env\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_group\n      INTEGER, DIMENSION(:, :), OPTIONAL, POINTER        :: pgrid\n         !! Optional, if not provided group is assumed to be a 2D cartesian communicator\n\n      INTEGER                                            :: mynode, mypcol, myprow, numnodes, pcol, &\n                                                            prow\n      INTEGER, DIMENSION(2)                              :: coord, mycoord, pdims\n      INTEGER, DIMENSION(:, :), POINTER                  :: mypgrid\n      LOGICAL, DIMENSION(2)                              :: periods\n\n      CALL mp_environ(numnodes, mynode, mp_group)\n\n      IF (PRESENT(pgrid)) THEN\n         mypgrid => pgrid\n         DBCSR_ASSERT(LBOUND(pgrid, 1) == 0 .AND. LBOUND(pgrid, 2) == 0)\n         pdims(1) = SIZE(pgrid, 1)\n         pdims(2) = SIZE(pgrid, 2)\n         myprow = -1; mypcol = -1\n         outer: &\n            DO prow = 0, pdims(1) - 1\n            DO pcol = 0, pdims(2) - 1\n               IF (pgrid(prow, pcol) == mynode) THEN\n                  myprow = prow\n                  mypcol = pcol\n                  EXIT outer\n               END IF\n            END DO\n         END DO outer\n\n      ELSE\n         CALL mp_environ(mp_group, 2, pdims, mycoord, periods)\n         DBCSR_ASSERT(pdims(1)*pdims(2) == numnodes)\n         myprow = mycoord(1)\n         mypcol = mycoord(2)\n         ALLOCATE (mypgrid(0:pdims(1) - 1, 0:pdims(2) - 1))\n         DO prow = 0, pdims(1) - 1\n            DO pcol = 0, pdims(2) - 1\n               coord = (/prow, pcol/)\n               CALL mp_cart_rank(mp_group, coord, mypgrid(prow, pcol))\n            END DO\n         END DO\n      END IF\n\n      DBCSR_ASSERT(mynode == mypgrid(myprow, mypcol))\n\n      ! create the new mp environment\n      CALL dbcsr_mp_new(mp_env, mp_group, mypgrid, &\n                        mynode=mynode, numnodes=numnodes, myprow=myprow, mypcol=mypcol)\n\n      IF (.NOT. PRESENT(pgrid)) DEALLOCATE (mypgrid)\n\n   END SUBROUTINE dbcsr_mp_new_group\n\n   SUBROUTINE dbcsr_mp_grid_setup(mp_env)\n      !! Sets up MPI cartesian process grid\n\n      TYPE(dbcsr_mp_obj), INTENT(INOUT)                  :: mp_env\n         !! multiprocessor environment\n\n      INTEGER                                            :: ndims\n      INTEGER, DIMENSION(2)                              :: dims, my_pos\n      LOGICAL, DIMENSION(2)                              :: remain\n      TYPE(mp_comm_type)                                 :: tmp_group\n\n!   ---------------------------------------------------------------------------\n\n      IF (.NOT. mp_env%mp%subgroups_defined) THEN\n         ! KG workaround.\n         ! This will be deleted (replaced by code in mp_new).\n         ndims = 2\n         dims(1:2) = (/SIZE(mp_env%mp%pgrid, 1), SIZE(mp_env%mp%pgrid, 2)/)\n         CALL mp_cart_create(mp_env%mp%mp_group, ndims, &\n                             dims, my_pos, &\n                             tmp_group)\n         IF (my_pos(1) .NE. mp_env%mp%myprow) &\n            DBCSR_ABORT(\"Got different MPI process grid\")\n         IF (my_pos(2) .NE. mp_env%mp%mypcol) &\n            DBCSR_ABORT(\"Got different MPI process grid\")\n         !\n         remain = (/.FALSE., .TRUE./)\n         CALL mp_cart_sub(tmp_group, remain, mp_env%mp%prow_group)\n         remain = (/.TRUE., .FALSE./)\n         CALL mp_cart_sub(tmp_group, remain, mp_env%mp%pcol_group)\n         CALL mp_comm_free(tmp_group)\n         mp_env%mp%subgroups_defined = .TRUE.\n      END IF\n   END SUBROUTINE dbcsr_mp_grid_setup\n\n   SUBROUTINE dbcsr_mp_make_env(mp_env, cart_group, mp_group, &\n                                nprocs, pgrid_dims)\n      !! Creates a sane mp_obj from the given MPI comm that is not a cartesian one (hack)\n\n      TYPE(dbcsr_mp_obj), INTENT(OUT)                    :: mp_env\n         !! Message-passing environment object to create\n      TYPE(mp_comm_type), INTENT(OUT)                               :: cart_group\n         !! the created cartesian group (to be freed by the user)\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_group\n         !! MPI group\n      INTEGER, INTENT(IN), OPTIONAL                      :: nprocs\n         !! Number of processes\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: pgrid_dims\n         !! Dimensions of MPI group\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mp_make_env'\n\n      INTEGER                                            :: error_handle, mynode, numnodes, pcol, &\n                                                            prow\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: pgrid\n      INTEGER, DIMENSION(2)                              :: coord, myploc, npdims\n      LOGICAL                                            :: alive\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      CALL mp_environ(numnodes, mynode, mp_group)\n      IF (PRESENT(nprocs)) THEN\n         IF (nprocs > numnodes) &\n            DBCSR_ABORT(\"Can not grow processes.\")\n         numnodes = nprocs\n      END IF\n      !\n      IF (PRESENT(pgrid_dims)) THEN\n         npdims(:) = pgrid_dims\n      ELSE\n         npdims(:) = 0\n         CALL mp_dims_create(numnodes, npdims)\n      END IF\n      CALL mp_cart_create(mp_group, 2, npdims, myploc, cart_group)\n      alive = cart_group .NE. mp_comm_null\n      IF (alive) THEN\n         CALL mp_environ(numnodes, mynode, cart_group)\n         ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1))\n         DO prow = 0, npdims(1) - 1\n            DO pcol = 0, npdims(2) - 1\n               coord = (/prow, pcol/)\n               CALL mp_cart_rank(cart_group, coord, pgrid(prow, pcol))\n            END DO\n         END DO\n         CALL dbcsr_mp_new(mp_env, cart_group, pgrid, &\n                           mynode, numnodes, &\n                           myprow=myploc(1), mypcol=myploc(2))\n      ELSE\n         CALL dbcsr_mp_init(mp_env)\n      END IF\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_mp_make_env\n\n   PURE SUBROUTINE dbcsr_mp_hold(mp_env)\n      !! Marks another use of the mp_env\n\n      TYPE(dbcsr_mp_obj), INTENT(INOUT)                  :: mp_env\n         !! multiprocessor environment\n\n      mp_env%mp%refcount = mp_env%mp%refcount + 1\n   END SUBROUTINE dbcsr_mp_hold\n\n   PURE FUNCTION dbcsr_mp_get_process(mp_env, prow, pcol) RESULT(process)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, INTENT(IN)                                :: prow, pcol\n      INTEGER                                            :: process\n\n      process = mp_env%mp%pgrid(prow, pcol)\n   END FUNCTION dbcsr_mp_get_process\n\n   FUNCTION dbcsr_mp_pgrid(mp_env) RESULT(pgrid)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, DIMENSION(:, :), POINTER, CONTIGUOUS      :: pgrid\n\n      pgrid => mp_env%mp%pgrid\n   END FUNCTION dbcsr_mp_pgrid\n\n   PURE FUNCTION dbcsr_mp_numnodes(mp_env) RESULT(numnodes)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER                                            :: numnodes\n\n      numnodes = mp_env%mp%numnodes\n   END FUNCTION dbcsr_mp_numnodes\n\n   PURE FUNCTION dbcsr_mp_mynode(mp_env) RESULT(mynode)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER                                            :: mynode\n\n      mynode = mp_env%mp%mynode\n   END FUNCTION dbcsr_mp_mynode\n\n   PURE FUNCTION dbcsr_mp_group(mp_env) RESULT(mp_group)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      TYPE(mp_comm_type)                                            :: mp_group\n\n      mp_group = mp_env%mp%mp_group\n   END FUNCTION dbcsr_mp_group\n\n   PURE FUNCTION dbcsr_mp_nprows(mp_env) RESULT(nprows)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER                                            :: nprows\n\n      nprows = SIZE(mp_env%mp%pgrid, 1)\n   END FUNCTION dbcsr_mp_nprows\n\n   PURE FUNCTION dbcsr_mp_npcols(mp_env) RESULT(npcols)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER                                            :: npcols\n\n      npcols = SIZE(mp_env%mp%pgrid, 2)\n   END FUNCTION dbcsr_mp_npcols\n\n   PURE FUNCTION dbcsr_mp_myprow(mp_env) RESULT(myprow)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER                                            :: myprow\n\n      myprow = mp_env%mp%myprow\n   END FUNCTION dbcsr_mp_myprow\n\n   PURE FUNCTION dbcsr_mp_mypcol(mp_env) RESULT(mypcol)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER                                            :: mypcol\n\n      mypcol = mp_env%mp%mypcol\n   END FUNCTION dbcsr_mp_mypcol\n\n   PURE FUNCTION dbcsr_mp_has_subgroups(mp_env) RESULT(has_subgroups)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      LOGICAL                                            :: has_subgroups\n\n      has_subgroups = mp_env%mp%subgroups_defined\n   END FUNCTION dbcsr_mp_has_subgroups\n\n   PURE FUNCTION dbcsr_mp_my_row_group(mp_env) RESULT(row_group)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      TYPE(mp_comm_type)                                            :: row_group\n\n      row_group = mp_env%mp%prow_group\n   END FUNCTION dbcsr_mp_my_row_group\n\n   PURE FUNCTION dbcsr_mp_my_col_group(mp_env) RESULT(col_group)\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      TYPE(mp_comm_type)                                            :: col_group\n\n      col_group = mp_env%mp%pcol_group\n   END FUNCTION dbcsr_mp_my_col_group\n\n   SUBROUTINE dbcsr_mp_new_transposed(mp_t, mp)\n      !! Transposes a multiprocessor environment\n\n      TYPE(dbcsr_mp_obj), INTENT(OUT)                    :: mp_t\n         !! transposed multiprocessor environment\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp\n         !! original multiprocessor environment\n\n      CALL dbcsr_mp_new(mp_t, dbcsr_mp_group(mp), &\n                        TRANSPOSE(dbcsr_mp_pgrid(mp)), &\n                        dbcsr_mp_mynode(mp), dbcsr_mp_numnodes(mp), &\n                        dbcsr_mp_mypcol(mp), dbcsr_mp_myprow(mp))\n   END SUBROUTINE dbcsr_mp_new_transposed\n\nEND MODULE dbcsr_mp_methods\n"
  },
  {
    "path": "src/mpi/dbcsr_mp_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mp_operations\n   !! Wrappers to message passing calls.\n\n   USE dbcsr_config, ONLY: has_MPI\n   USE dbcsr_data_methods, ONLY: dbcsr_data_get_type\n   USE dbcsr_mp_methods, ONLY: &\n      dbcsr_mp_get_process, dbcsr_mp_grid_setup, dbcsr_mp_group, dbcsr_mp_has_subgroups, &\n      dbcsr_mp_my_col_group, dbcsr_mp_my_row_group, dbcsr_mp_mynode, dbcsr_mp_mypcol, &\n      dbcsr_mp_myprow, dbcsr_mp_npcols, dbcsr_mp_nprows, dbcsr_mp_numnodes, dbcsr_mp_pgrid\n   USE dbcsr_ptr_util, ONLY: memory_copy\n   USE dbcsr_types, ONLY: dbcsr_data_obj, &\n                          dbcsr_mp_obj, &\n                          dbcsr_type_complex_4, &\n                          dbcsr_type_complex_8, &\n                          dbcsr_type_int_4, &\n                          dbcsr_type_real_4, &\n                          dbcsr_type_real_8\n   USE dbcsr_kinds, ONLY: real_4, &\n                          real_8\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_allgather, mp_alltoall, mp_gatherv, mp_ibcast, mp_irecv, mp_iscatter, mp_isend, &\n      mp_isendrecv, mp_rget, mp_sendrecv, mp_type_descriptor_type, mp_type_indexed_make_c, &\n      mp_type_indexed_make_d, mp_type_indexed_make_r, mp_type_indexed_make_z, mp_type_make, &\n      mp_waitall, mp_win_create, mp_comm_type, mp_request_type, mp_win_type\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mp_operations'\n\n   ! MP routines\n   PUBLIC :: hybrid_alltoall_s1, hybrid_alltoall_d1, &\n             hybrid_alltoall_c1, hybrid_alltoall_z1, &\n             hybrid_alltoall_i1, hybrid_alltoall_any\n   PUBLIC :: dbcsr_allgatherv\n   PUBLIC :: dbcsr_sendrecv_any\n   PUBLIC :: dbcsr_isend_any, dbcsr_irecv_any\n   PUBLIC :: dbcsr_win_create_any, dbcsr_rget_any, dbcsr_ibcast_any\n   PUBLIC :: dbcsr_iscatterv_any, dbcsr_gatherv_any\n   PUBLIC :: dbcsr_isendrecv_any\n   ! Type helpers\n   PUBLIC :: dbcsr_mp_type_from_anytype\n\n   INTERFACE dbcsr_hybrid_alltoall\n      MODULE PROCEDURE hybrid_alltoall_s1, hybrid_alltoall_d1, &\n         hybrid_alltoall_c1, hybrid_alltoall_z1\n      MODULE PROCEDURE hybrid_alltoall_i1\n      MODULE PROCEDURE hybrid_alltoall_any\n   END INTERFACE\n\nCONTAINS\n\n   SUBROUTINE hybrid_alltoall_any(sb, scount, sdispl, &\n                                  rb, rcount, rdispl, mp_env, most_ptp, remainder_ptp, no_hybrid)\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: sb\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN)      :: scount, sdispl\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: rb\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN)      :: rcount, rdispl\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      LOGICAL, INTENT(in), OPTIONAL                      :: most_ptp, remainder_ptp, no_hybrid\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'hybrid_alltoall_any'\n\n      INTEGER                                            :: error_handle\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n\n      SELECT CASE (dbcsr_data_get_type(sb))\n      CASE (dbcsr_type_real_4)\n         CALL hybrid_alltoall_s1(sb%d%r_sp, scount, sdispl, &\n                                 rb%d%r_sp, rcount, rdispl, mp_env, &\n                                 most_ptp, remainder_ptp, no_hybrid)\n      CASE (dbcsr_type_real_8)\n         CALL hybrid_alltoall_d1(sb%d%r_dp, scount, sdispl, &\n                                 rb%d%r_dp, rcount, rdispl, mp_env, &\n                                 most_ptp, remainder_ptp, no_hybrid)\n      CASE (dbcsr_type_complex_4)\n         CALL hybrid_alltoall_c1(sb%d%c_sp, scount, sdispl, &\n                                 rb%d%c_sp, rcount, rdispl, mp_env, &\n                                 most_ptp, remainder_ptp, no_hybrid)\n      CASE (dbcsr_type_complex_8)\n         CALL hybrid_alltoall_z1(sb%d%c_dp, scount, sdispl, &\n                                 rb%d%c_dp, rcount, rdispl, mp_env, &\n                                 most_ptp, remainder_ptp, no_hybrid)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n\n      CALL timestop(error_handle)\n   END SUBROUTINE hybrid_alltoall_any\n\n   SUBROUTINE hybrid_alltoall_i1(sb, scount, sdispl, &\n                                 rb, rcount, rdispl, mp_env, most_ptp, remainder_ptp, no_hybrid)\n      !! Row/column and global all-to-all\n      !!\n      !! Communicator selection\n      !! Uses row and column communicators for row/column\n      !! sends. Remaining sends are performed using the global\n      !! communicator.  Point-to-point isend/irecv are used if ptp is\n      !! set, otherwise a alltoall collective call is issued.\n      !! see mp_alltoall\n\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(in), &\n         TARGET                                 :: sb\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: scount, sdispl\n      INTEGER, DIMENSION(:), CONTIGUOUS, &\n         INTENT(INOUT), TARGET                  :: rb\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: rcount, rdispl\n      TYPE(dbcsr_mp_obj), INTENT(IN)           :: mp_env\n         !! MP Environment\n      LOGICAL, INTENT(IN), OPTIONAL            :: most_ptp, remainder_ptp, &\n                                                  no_hybrid\n         !! Use point-to-point for row/column; default is no\n         !! Use point-to-point for remaining; default is no\n         !! Use regular global collective; default is no\n\n      INTEGER :: mynode, mypcol, myprow, nall_rr, nall_sr, ncol_rr, &\n                 ncol_sr, npcols, nprows, nrow_rr, nrow_sr, numnodes, dst, src, &\n                 prow, pcol, send_cnt, recv_cnt, tag, i\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: new_rcount, new_rdispl, new_scount, new_sdispl\n      INTEGER, DIMENSION(:, :), POINTER        :: pgrid\n      LOGICAL                                  :: most_collective, &\n                                                  remainder_collective, no_h\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: send_data_p, recv_data_p\n      TYPE(dbcsr_mp_obj)                       :: mpe\n      TYPE(mp_comm_type)                       :: all_group, grp\n      TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:) :: all_rr, all_sr, col_rr, col_sr, row_rr, row_sr\n\n      IF (.NOT. dbcsr_mp_has_subgroups(mp_env)) THEN\n         mpe = mp_env\n         CALL dbcsr_mp_grid_setup(mpe)\n      END IF\n      most_collective = .TRUE.\n      remainder_collective = .TRUE.\n      no_h = .FALSE.\n      IF (PRESENT(most_ptp)) most_collective = .NOT. most_ptp\n      IF (PRESENT(remainder_ptp)) remainder_collective = .NOT. remainder_ptp\n      IF (PRESENT(no_hybrid)) no_h = no_hybrid\n      all_group = dbcsr_mp_group(mp_env)\n      ! Don't use subcommunicators if they're not defined.\n      no_h = no_h .OR. .NOT. dbcsr_mp_has_subgroups(mp_env) .OR. .NOT. has_MPI\n      subgrouped: IF (mp_env%mp%subgroups_defined .AND. .NOT. no_h) THEN\n         mynode = dbcsr_mp_mynode(mp_env)\n         numnodes = dbcsr_mp_numnodes(mp_env)\n         nprows = dbcsr_mp_nprows(mp_env)\n         npcols = dbcsr_mp_npcols(mp_env)\n         myprow = dbcsr_mp_myprow(mp_env)\n         mypcol = dbcsr_mp_mypcol(mp_env)\n         pgrid => dbcsr_mp_pgrid(mp_env)\n         ALLOCATE (row_sr(0:npcols - 1)); nrow_sr = 0\n         ALLOCATE (row_rr(0:npcols - 1)); nrow_rr = 0\n         ALLOCATE (col_sr(0:nprows - 1)); ncol_sr = 0\n         ALLOCATE (col_rr(0:nprows - 1)); ncol_rr = 0\n         ALLOCATE (all_sr(0:numnodes - 1)); nall_sr = 0\n         ALLOCATE (all_rr(0:numnodes - 1)); nall_rr = 0\n         ALLOCATE (new_scount(numnodes), new_rcount(numnodes))\n         ALLOCATE (new_sdispl(numnodes), new_rdispl(numnodes))\n         IF (.NOT. remainder_collective) THEN\n            CALL remainder_point_to_point()\n         END IF\n         IF (.NOT. most_collective) THEN\n            CALL most_point_to_point()\n         ELSE\n            CALL most_alltoall()\n         END IF\n         IF (remainder_collective) THEN\n            CALL remainder_alltoall()\n         END IF\n         ! Wait for all issued sends and receives.\n         IF (.NOT. most_collective) THEN\n            CALL mp_waitall(row_sr(0:nrow_sr - 1))\n            CALL mp_waitall(col_sr(0:ncol_sr - 1))\n            CALL mp_waitall(row_rr(0:nrow_rr - 1))\n            CALL mp_waitall(col_rr(0:ncol_rr - 1))\n         END IF\n         IF (.NOT. remainder_collective) THEN\n            CALL mp_waitall(all_sr(1:nall_sr))\n            CALL mp_waitall(all_rr(1:nall_rr))\n         END IF\n      ELSE\n         CALL mp_alltoall(sb, scount, sdispl, &\n                          rb, rcount, rdispl, &\n                          all_group)\n      END IF subgrouped\n   CONTAINS\n      SUBROUTINE most_alltoall()\n         DO pcol = 0, npcols - 1\n            new_scount(1 + pcol) = scount(1 + pgrid(myprow, pcol))\n            new_rcount(1 + pcol) = rcount(1 + pgrid(myprow, pcol))\n            new_sdispl(1 + pcol) = sdispl(1 + pgrid(myprow, pcol))\n            new_rdispl(1 + pcol) = rdispl(1 + pgrid(myprow, pcol))\n         END DO\n         CALL mp_alltoall(sb, new_scount(1:npcols), new_sdispl(1:npcols), &\n                          rb, new_rcount(1:npcols), new_rdispl(1:npcols), &\n                          dbcsr_mp_my_row_group(mp_env))\n         DO prow = 0, nprows - 1\n            new_scount(1 + prow) = scount(1 + pgrid(prow, mypcol))\n            new_rcount(1 + prow) = rcount(1 + pgrid(prow, mypcol))\n            new_sdispl(1 + prow) = sdispl(1 + pgrid(prow, mypcol))\n            new_rdispl(1 + prow) = rdispl(1 + pgrid(prow, mypcol))\n         END DO\n         CALL mp_alltoall(sb, new_scount(1:nprows), new_sdispl(1:nprows), &\n                          rb, new_rcount(1:nprows), new_rdispl(1:nprows), &\n                          dbcsr_mp_my_col_group(mp_env))\n      END SUBROUTINE most_alltoall\n      SUBROUTINE most_point_to_point()\n         ! Go through my prow and exchange.\n         DO i = 0, npcols - 1\n            pcol = MOD(mypcol + i, npcols)\n            grp = dbcsr_mp_my_row_group(mp_env)\n            !\n            dst = dbcsr_mp_get_process(mp_env, myprow, pcol)\n            send_cnt = scount(dst + 1)\n            send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1)\n            tag = 4*mypcol\n            IF (send_cnt .GT. 0) THEN\n               CALL mp_isend(send_data_p, pcol, grp, row_sr(nrow_sr), tag)\n               nrow_sr = nrow_sr + 1\n            END IF\n            !\n            pcol = MODULO(mypcol - i, npcols)\n            src = dbcsr_mp_get_process(mp_env, myprow, pcol)\n            recv_cnt = rcount(src + 1)\n            recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1)\n            tag = 4*pcol\n            IF (recv_cnt .GT. 0) THEN\n               CALL mp_irecv(recv_data_p, pcol, grp, row_rr(nrow_rr), tag)\n               nrow_rr = nrow_rr + 1\n            END IF\n         END DO\n         ! go through my pcol and exchange\n         DO i = 0, nprows - 1\n            prow = MOD(myprow + i, nprows)\n            grp = dbcsr_mp_my_col_group(mp_env)\n            !\n            dst = dbcsr_mp_get_process(mp_env, prow, mypcol)\n            send_cnt = scount(dst + 1)\n            IF (send_cnt .GT. 0) THEN\n               send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1)\n               tag = 4*myprow + 1\n               CALL mp_isend(send_data_p, prow, grp, col_sr(ncol_sr), tag)\n               ncol_sr = ncol_sr + 1\n            END IF\n            !\n            prow = MODULO(myprow - i, nprows)\n            src = dbcsr_mp_get_process(mp_env, prow, mypcol)\n            recv_cnt = rcount(src + 1)\n            IF (recv_cnt .GT. 0) THEN\n               recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1)\n               tag = 4*prow + 1\n               CALL mp_irecv(recv_data_p, prow, grp, col_rr(ncol_rr), tag)\n               ncol_rr = ncol_rr + 1\n            END IF\n         END DO\n      END SUBROUTINE most_point_to_point\n      SUBROUTINE remainder_alltoall()\n         new_scount(:) = scount(:)\n         new_rcount(:) = rcount(:)\n         DO prow = 0, nprows - 1\n            new_scount(1 + pgrid(prow, mypcol)) = 0\n            new_rcount(1 + pgrid(prow, mypcol)) = 0\n         END DO\n         DO pcol = 0, npcols - 1\n            new_scount(1 + pgrid(myprow, pcol)) = 0\n            new_rcount(1 + pgrid(myprow, pcol)) = 0\n         END DO\n         CALL mp_alltoall(sb, new_scount, sdispl, &\n                          rb, new_rcount, rdispl, all_group)\n      END SUBROUTINE remainder_alltoall\n      SUBROUTINE remainder_point_to_point()\n         INTEGER                                            :: col, row\n\n         DO row = 0, nprows - 1\n            prow = MOD(row + myprow, nprows)\n            IF (prow .EQ. myprow) CYCLE\n            DO col = 0, npcols - 1\n               pcol = MOD(col + mypcol, npcols)\n               IF (pcol .EQ. mypcol) CYCLE\n               dst = dbcsr_mp_get_process(mp_env, prow, pcol)\n               send_cnt = scount(dst + 1)\n               IF (send_cnt .GT. 0) THEN\n                  tag = 4*mynode + 2\n                  send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1)\n                  CALL mp_isend(send_data_p, dst, all_group, all_sr(nall_sr + 1), tag)\n                  nall_sr = nall_sr + 1\n               END IF\n               !\n               src = dbcsr_mp_get_process(mp_env, prow, pcol)\n               recv_cnt = rcount(src + 1)\n               IF (recv_cnt .GT. 0) THEN\n                  recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1)\n                  tag = 4*src + 2\n                  CALL mp_irecv(recv_data_p, src, all_group, all_rr(nall_rr + 1), tag)\n                  nall_rr = nall_rr + 1\n               END IF\n            END DO\n         END DO\n      END SUBROUTINE remainder_point_to_point\n   END SUBROUTINE hybrid_alltoall_i1\n\n   FUNCTION dbcsr_mp_type_from_anytype(data_area) RESULT(mp_type)\n      !! Creates an MPI combined type from the given anytype.\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: data_area\n         !! Data area of any type\n      TYPE(mp_type_descriptor_type)                      :: mp_type\n         !! Type descriptor\n\n      SELECT CASE (data_area%d%data_type)\n      CASE (dbcsr_type_int_4)\n         mp_type = mp_type_make(data_area%d%i4)\n      CASE (dbcsr_type_real_4)\n         mp_type = mp_type_make(data_area%d%r_sp)\n      CASE (dbcsr_type_real_8)\n         mp_type = mp_type_make(data_area%d%r_dp)\n      CASE (dbcsr_type_complex_4)\n         mp_type = mp_type_make(data_area%d%c_sp)\n      CASE (dbcsr_type_complex_8)\n         mp_type = mp_type_make(data_area%d%c_dp)\n      END SELECT\n   END FUNCTION dbcsr_mp_type_from_anytype\n\n   SUBROUTINE dbcsr_sendrecv_any(msgin, dest, msgout, source, comm)\n      !! sendrecv of encapsulated data.\n      !! @note\n      !! see mp_sendrecv\n      !! @endnote\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: msgin\n      INTEGER, INTENT(IN)                                :: dest\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: msgout\n      INTEGER, INTENT(IN)                                :: source\n      TYPE(mp_comm_type), INTENT(IN)                     :: comm\n\n      IF (dbcsr_data_get_type(msgin) .NE. dbcsr_data_get_type(msgout)) &\n         DBCSR_ABORT(\"Different data type for msgin and msgout\")\n\n      SELECT CASE (dbcsr_data_get_type(msgin))\n      CASE (dbcsr_type_real_4)\n         CALL mp_sendrecv(msgin%d%r_sp, dest, msgout%d%r_sp, source, comm)\n      CASE (dbcsr_type_real_8)\n         CALL mp_sendrecv(msgin%d%r_dp, dest, msgout%d%r_dp, source, comm)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_sendrecv(msgin%d%c_sp, dest, msgout%d%c_sp, source, comm)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_sendrecv(msgin%d%c_dp, dest, msgout%d%c_dp, source, comm)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_sendrecv_any\n\n   SUBROUTINE dbcsr_isend_any(msgin, dest, comm, request, tag)\n      !! Non-blocking send of encapsulated data.\n      !! @note\n      !! see mp_isend_iv\n      !! @endnote\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: msgin\n      INTEGER, INTENT(IN)                                :: dest\n      TYPE(mp_comm_type), INTENT(IN)                     :: comm\n      TYPE(mp_request_type), INTENT(OUT)                 :: request\n      INTEGER, INTENT(IN), OPTIONAL                      :: tag\n\n      SELECT CASE (dbcsr_data_get_type(msgin))\n      CASE (dbcsr_type_real_4)\n         CALL mp_isend(msgin%d%r_sp, dest, comm, request, tag)\n      CASE (dbcsr_type_real_8)\n         CALL mp_isend(msgin%d%r_dp, dest, comm, request, tag)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_isend(msgin%d%c_sp, dest, comm, request, tag)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_isend(msgin%d%c_dp, dest, comm, request, tag)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_isend_any\n\n   SUBROUTINE dbcsr_irecv_any(msgin, source, comm, request, tag)\n      !! Non-blocking recv of encapsulated data.\n      !! @note\n      !! see mp_irecv_iv\n      !! @endnote\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: msgin\n      INTEGER, INTENT(IN)                                :: source\n      TYPE(mp_comm_type), INTENT(IN)                     :: comm\n      TYPE(mp_request_type), INTENT(OUT)                 :: request\n      INTEGER, INTENT(IN), OPTIONAL                      :: tag\n\n      SELECT CASE (dbcsr_data_get_type(msgin))\n      CASE (dbcsr_type_real_4)\n         CALL mp_irecv(msgin%d%r_sp, source, comm, request, tag)\n      CASE (dbcsr_type_real_8)\n         CALL mp_irecv(msgin%d%r_dp, source, comm, request, tag)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_irecv(msgin%d%c_sp, source, comm, request, tag)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_irecv(msgin%d%c_dp, source, comm, request, tag)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_irecv_any\n\n   SUBROUTINE dbcsr_win_create_any(base, comm, win)\n      !! Window initialization function of encapsulated data.\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: base\n      TYPE(mp_comm_type), INTENT(IN)                     :: comm\n      TYPE(mp_win_type), INTENT(OUT)                     :: win\n\n      SELECT CASE (dbcsr_data_get_type(base))\n      CASE (dbcsr_type_real_4)\n         CALL mp_win_create(base%d%r_sp, comm, win)\n      CASE (dbcsr_type_real_8)\n         CALL mp_win_create(base%d%r_dp, comm, win)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_win_create(base%d%c_sp, comm, win)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_win_create(base%d%c_dp, comm, win)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_win_create_any\n\n   SUBROUTINE dbcsr_rget_any(base, source, win, win_data, myproc, disp, request, &\n      !! Single-sided Get function of encapsulated data.\n                             origin_datatype, target_datatype)\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: base\n      INTEGER, INTENT(IN)                                :: source\n      TYPE(mp_win_type), INTENT(IN)                      :: win\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: win_data\n      INTEGER, INTENT(IN), OPTIONAL                      :: myproc, disp\n      TYPE(mp_request_type), INTENT(OUT)                 :: request\n      TYPE(mp_type_descriptor_type), INTENT(IN), &\n         OPTIONAL                                        :: origin_datatype, target_datatype\n\n      IF (dbcsr_data_get_type(base) /= dbcsr_data_get_type(win_data)) &\n         DBCSR_ABORT(\"Mismatch data type between buffer and window\")\n\n      SELECT CASE (dbcsr_data_get_type(base))\n      CASE (dbcsr_type_real_4)\n         CALL mp_rget(base%d%r_sp, source, win, win_data%d%r_sp, myproc, &\n                      disp, request, origin_datatype, target_datatype)\n      CASE (dbcsr_type_real_8)\n         CALL mp_rget(base%d%r_dp, source, win, win_data%d%r_dp, myproc, &\n                      disp, request, origin_datatype, target_datatype)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_rget(base%d%c_sp, source, win, win_data%d%c_sp, myproc, &\n                      disp, request, origin_datatype, target_datatype)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_rget(base%d%c_dp, source, win, win_data%d%c_dp, myproc, &\n                      disp, request, origin_datatype, target_datatype)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_rget_any\n\n   SUBROUTINE dbcsr_ibcast_any(base, source, grp, request)\n      !! Bcast function of encapsulated data.\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: base\n      INTEGER, INTENT(IN)                                :: source\n      TYPE(mp_comm_type), INTENT(IN)                     :: grp\n      TYPE(mp_request_type), INTENT(INOUT)               :: request\n\n      SELECT CASE (dbcsr_data_get_type(base))\n      CASE (dbcsr_type_real_4)\n         CALL mp_ibcast(base%d%r_sp, source, grp, request)\n      CASE (dbcsr_type_real_8)\n         CALL mp_ibcast(base%d%r_dp, source, grp, request)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_ibcast(base%d%c_sp, source, grp, request)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_ibcast(base%d%c_dp, source, grp, request)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_ibcast_any\n\n   SUBROUTINE dbcsr_iscatterv_any(base, counts, displs, msg, recvcount, root, grp, request)\n      !! Scatter function of encapsulated data.\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: base\n      INTEGER, DIMENSION(:), INTENT(IN), CONTIGUOUS      :: counts, displs\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: msg\n      INTEGER, INTENT(IN)                                :: recvcount, root\n      TYPE(mp_comm_type), INTENT(IN)                     :: grp\n      TYPE(mp_request_type), INTENT(INOUT)               :: request\n\n      IF (dbcsr_data_get_type(base) .NE. dbcsr_data_get_type(msg)) &\n         DBCSR_ABORT(\"Different data type for msgin and msgout\")\n\n      SELECT CASE (dbcsr_data_get_type(base))\n      CASE (dbcsr_type_real_4)\n         CALL mp_iscatter(base%d%r_sp, counts, displs, msg%d%r_sp, recvcount, root, grp, request)\n      CASE (dbcsr_type_real_8)\n         CALL mp_iscatter(base%d%r_dp, counts, displs, msg%d%r_dp, recvcount, root, grp, request)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_iscatter(base%d%c_sp, counts, displs, msg%d%c_sp, recvcount, root, grp, request)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_iscatter(base%d%c_dp, counts, displs, msg%d%c_dp, recvcount, root, grp, request)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_iscatterv_any\n\n   SUBROUTINE dbcsr_gatherv_any(base, ub_base, msg, counts, displs, root, grp)\n      !! Gather function of encapsulated data.\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: base\n      INTEGER, INTENT(IN)                                :: ub_base\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: msg\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN)      :: counts, displs\n      INTEGER, INTENT(IN)                                :: root\n      TYPE(mp_comm_type), INTENT(IN)                     :: grp\n\n      IF (dbcsr_data_get_type(base) .NE. dbcsr_data_get_type(msg)) &\n         DBCSR_ABORT(\"Different data type for msgin and msgout\")\n\n      SELECT CASE (dbcsr_data_get_type(base))\n      CASE (dbcsr_type_real_4)\n         CALL mp_gatherv(base%d%r_sp(:ub_base), msg%d%r_sp, counts, displs, root, grp)\n      CASE (dbcsr_type_real_8)\n         CALL mp_gatherv(base%d%r_dp(:ub_base), msg%d%r_dp, counts, displs, root, grp)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_gatherv(base%d%c_sp(:ub_base), msg%d%c_sp, counts, displs, root, grp)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_gatherv(base%d%c_dp(:ub_base), msg%d%c_dp, counts, displs, root, grp)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_gatherv_any\n\n   SUBROUTINE dbcsr_isendrecv_any(msgin, dest, msgout, source, grp, send_request, recv_request)\n      !! Send/Recv function of encapsulated data.\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: msgin\n      INTEGER, INTENT(IN)                                :: dest\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: msgout\n      INTEGER, INTENT(IN)                                :: source\n      TYPE(mp_comm_type), INTENT(IN)                     :: grp\n      TYPE(mp_request_type), INTENT(OUT)                 :: send_request, recv_request\n\n      IF (dbcsr_data_get_type(msgin) .NE. dbcsr_data_get_type(msgout)) &\n         DBCSR_ABORT(\"Different data type for msgin and msgout\")\n\n      SELECT CASE (dbcsr_data_get_type(msgin))\n      CASE (dbcsr_type_real_4)\n         CALL mp_isendrecv(msgin%d%r_sp, dest, &\n                           msgout%d%r_sp, source, &\n                           grp, send_request, recv_request)\n      CASE (dbcsr_type_real_8)\n         CALL mp_isendrecv(msgin%d%r_dp, dest, &\n                           msgout%d%r_dp, source, &\n                           grp, send_request, recv_request)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_isendrecv(msgin%d%c_sp, dest, &\n                           msgout%d%c_sp, source, &\n                           grp, send_request, recv_request)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_isendrecv(msgin%d%c_dp, dest, &\n                           msgout%d%c_dp, source, &\n                           grp, send_request, recv_request)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_isendrecv_any\n\n   SUBROUTINE dbcsr_allgatherv(send_data, scount, recv_data, recv_count, recv_displ, gid)\n      !! Allgather of encapsulated data\n      !! @note\n      !! see mp_allgatherv_dv\n      !! @endnote\n\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: send_data\n      INTEGER, INTENT(IN)                                :: scount\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: recv_data\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN)      :: recv_count, recv_displ\n      TYPE(mp_comm_type), INTENT(IN)                     :: gid\n\n      IF (dbcsr_data_get_type(send_data) /= dbcsr_data_get_type(recv_data)) &\n         DBCSR_ABORT(\"Data type mismatch\")\n      SELECT CASE (dbcsr_data_get_type(send_data))\n      CASE (dbcsr_type_real_4)\n         CALL mp_allgather(send_data%d%r_sp(1:scount), recv_data%d%r_sp, &\n                           recv_count, recv_displ, gid)\n      CASE (dbcsr_type_real_8)\n         CALL mp_allgather(send_data%d%r_dp(1:scount), recv_data%d%r_dp, &\n                           recv_count, recv_displ, gid)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_allgather(send_data%d%c_sp(1:scount), recv_data%d%c_sp, &\n                           recv_count, recv_displ, gid)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_allgather(send_data%d%c_dp(1:scount), recv_data%d%c_dp, &\n                           recv_count, recv_displ, gid)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_allgatherv\n\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float\n      SUBROUTINE hybrid_alltoall_${nametype1}$1(sb, scount, sdispl, &\n                                                rb, rcount, rdispl, mp_env, most_ptp, remainder_ptp, no_hybrid)\n      !! Row/column and global all-to-all\n      !!\n      !! Communicator selection\n      !! Uses row and column communicators for row/column\n      !! sends. Remaining sends are performed using the global\n      !! communicator.  Point-to-point isend/irecv are used if ptp is\n      !! set, otherwise a alltoall collective call is issued.\n      !! see mp_alltoall\n\n         ${type1}$, DIMENSION(:), &\n            CONTIGUOUS, INTENT(in), TARGET        :: sb\n         INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: scount, sdispl\n         ${type1}$, DIMENSION(:), &\n            CONTIGUOUS, INTENT(INOUT), TARGET     :: rb\n         INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN) :: rcount, rdispl\n         TYPE(dbcsr_mp_obj), INTENT(IN)           :: mp_env\n         !! MP Environment\n         LOGICAL, INTENT(in), OPTIONAL            :: most_ptp, remainder_ptp, &\n                                                     no_hybrid\n         !! Use point-to-point for row/column; default is no\n         !! Use point-to-point for remaining; default is no\n         !! Use regular global collective; default is no\n\n         INTEGER :: mynode, mypcol, myprow, nall_rr, nall_sr, ncol_rr, &\n                    ncol_sr, npcols, nprows, nrow_rr, nrow_sr, numnodes, dst, src, &\n                    prow, pcol, send_cnt, recv_cnt, tag, i\n         INTEGER, ALLOCATABLE, DIMENSION(:) :: new_rcount, new_rdispl, new_scount, new_sdispl\n         INTEGER, DIMENSION(:, :), CONTIGUOUS, POINTER :: pgrid\n         LOGICAL                                  :: most_collective, &\n                                                     remainder_collective, no_h\n         ${type1}$, DIMENSION(:), CONTIGUOUS, POINTER :: send_data_p, recv_data_p\n         TYPE(dbcsr_mp_obj)                       :: mpe\n         TYPE(mp_comm_type)                       :: all_group, grp\n         TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:) :: all_rr, all_sr, col_rr, col_sr, row_rr, row_sr\n\n         IF (.NOT. dbcsr_mp_has_subgroups(mp_env)) THEN\n            mpe = mp_env\n            CALL dbcsr_mp_grid_setup(mpe)\n         END IF\n         most_collective = .TRUE.\n         remainder_collective = .TRUE.\n         no_h = .FALSE.\n         IF (PRESENT(most_ptp)) most_collective = .NOT. most_ptp\n         IF (PRESENT(remainder_ptp)) remainder_collective = .NOT. remainder_ptp\n         IF (PRESENT(no_hybrid)) no_h = no_hybrid\n         all_group = dbcsr_mp_group(mp_env)\n         ! Don't use subcommunicators if they're not defined.\n         no_h = no_h .OR. .NOT. dbcsr_mp_has_subgroups(mp_env) .OR. .NOT. has_MPI\n         subgrouped: IF (mp_env%mp%subgroups_defined .AND. .NOT. no_h) THEN\n            mynode = dbcsr_mp_mynode(mp_env)\n            numnodes = dbcsr_mp_numnodes(mp_env)\n            nprows = dbcsr_mp_nprows(mp_env)\n            npcols = dbcsr_mp_npcols(mp_env)\n            myprow = dbcsr_mp_myprow(mp_env)\n            mypcol = dbcsr_mp_mypcol(mp_env)\n            pgrid => dbcsr_mp_pgrid(mp_env)\n            ALLOCATE (row_sr(0:npcols - 1)); nrow_sr = 0\n            ALLOCATE (row_rr(0:npcols - 1)); nrow_rr = 0\n            ALLOCATE (col_sr(0:nprows - 1)); ncol_sr = 0\n            ALLOCATE (col_rr(0:nprows - 1)); ncol_rr = 0\n            ALLOCATE (all_sr(0:numnodes - 1)); nall_sr = 0\n            ALLOCATE (all_rr(0:numnodes - 1)); nall_rr = 0\n            ALLOCATE (new_scount(numnodes), new_rcount(numnodes))\n            ALLOCATE (new_sdispl(numnodes), new_rdispl(numnodes))\n            IF (.NOT. remainder_collective) THEN\n               CALL remainder_point_to_point()\n            END IF\n            IF (.NOT. most_collective) THEN\n               CALL most_point_to_point()\n            ELSE\n               CALL most_alltoall()\n            END IF\n            IF (remainder_collective) THEN\n               CALL remainder_alltoall()\n            END IF\n            DEALLOCATE (new_scount, new_rcount, new_sdispl, new_rdispl)\n            ! Wait for all issued sends and receives.\n            IF (.NOT. most_collective) THEN\n               CALL mp_waitall(row_sr(0:nrow_sr - 1))\n               CALL mp_waitall(col_sr(0:ncol_sr - 1))\n               CALL mp_waitall(row_rr(0:nrow_rr - 1))\n               CALL mp_waitall(col_rr(0:ncol_rr - 1))\n            END IF\n            DEALLOCATE (row_sr, row_rr, col_sr, col_rr)\n            IF (.NOT. remainder_collective) THEN\n               CALL mp_waitall(all_sr(1:nall_sr))\n               CALL mp_waitall(all_rr(1:nall_rr))\n            END IF\n            DEALLOCATE (all_sr, all_rr)\n         ELSE\n            CALL mp_alltoall(sb, scount, sdispl, &\n                             rb, rcount, rdispl, &\n                             all_group)\n         END IF subgrouped\n      CONTAINS\n         SUBROUTINE most_alltoall()\n            DO pcol = 0, npcols - 1\n               new_scount(1 + pcol) = scount(1 + pgrid(myprow, pcol))\n               new_rcount(1 + pcol) = rcount(1 + pgrid(myprow, pcol))\n               new_sdispl(1 + pcol) = sdispl(1 + pgrid(myprow, pcol))\n               new_rdispl(1 + pcol) = rdispl(1 + pgrid(myprow, pcol))\n            END DO\n            CALL mp_alltoall(sb, new_scount(1:npcols), new_sdispl(1:npcols), &\n                             rb, new_rcount(1:npcols), new_rdispl(1:npcols), &\n                             dbcsr_mp_my_row_group(mp_env))\n            DO prow = 0, nprows - 1\n               new_scount(1 + prow) = scount(1 + pgrid(prow, mypcol))\n               new_rcount(1 + prow) = rcount(1 + pgrid(prow, mypcol))\n               new_sdispl(1 + prow) = sdispl(1 + pgrid(prow, mypcol))\n               new_rdispl(1 + prow) = rdispl(1 + pgrid(prow, mypcol))\n            END DO\n            CALL mp_alltoall(sb, new_scount(1:nprows), new_sdispl(1:nprows), &\n                             rb, new_rcount(1:nprows), new_rdispl(1:nprows), &\n                             dbcsr_mp_my_col_group(mp_env))\n         END SUBROUTINE most_alltoall\n         SUBROUTINE most_point_to_point()\n            ! Go through my prow and exchange.\n            DO i = 0, npcols - 1\n               pcol = MOD(mypcol + i, npcols)\n               grp = dbcsr_mp_my_row_group(mp_env)\n               !\n               dst = dbcsr_mp_get_process(mp_env, myprow, pcol)\n               send_cnt = scount(dst + 1)\n               IF (send_cnt .GT. 0) THEN\n                  send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1)\n                  IF (pcol .NE. mypcol) THEN\n                     tag = 4*mypcol\n                     CALL mp_isend(send_data_p, pcol, grp, row_sr(nrow_sr), tag)\n                     nrow_sr = nrow_sr + 1\n                  END IF\n               END IF\n               !\n               pcol = MODULO(mypcol - i, npcols)\n               src = dbcsr_mp_get_process(mp_env, myprow, pcol)\n               recv_cnt = rcount(src + 1)\n               IF (recv_cnt .GT. 0) THEN\n                  recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1)\n                  IF (pcol .NE. mypcol) THEN\n                     tag = 4*pcol\n                     CALL mp_irecv(recv_data_p, pcol, grp, row_rr(nrow_rr), tag)\n                     nrow_rr = nrow_rr + 1\n                  ELSE\n                     CALL memory_copy(recv_data_p, send_data_p, recv_cnt)\n                  END IF\n               END IF\n            END DO\n            ! go through my pcol and exchange\n            DO i = 0, nprows - 1\n               prow = MOD(myprow + i, nprows)\n               grp = dbcsr_mp_my_col_group(mp_env)\n               !\n               dst = dbcsr_mp_get_process(mp_env, prow, mypcol)\n               send_cnt = scount(dst + 1)\n               IF (send_cnt .GT. 0) THEN\n                  send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1)\n                  IF (prow .NE. myprow) THEN\n                     tag = 4*myprow + 1\n                     CALL mp_isend(send_data_p, prow, grp, col_sr(ncol_sr), tag)\n                     ncol_sr = ncol_sr + 1\n                  END IF\n               END IF\n               !\n               prow = MODULO(myprow - i, nprows)\n               src = dbcsr_mp_get_process(mp_env, prow, mypcol)\n               recv_cnt = rcount(src + 1)\n               IF (recv_cnt .GT. 0) THEN\n                  recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1)\n                  IF (prow .NE. myprow) THEN\n                     tag = 4*prow + 1\n                     CALL mp_irecv(recv_data_p, prow, grp, col_rr(ncol_rr), tag)\n                     ncol_rr = ncol_rr + 1\n                  ELSE\n                     CALL memory_copy(recv_data_p, send_data_p, recv_cnt)\n                  END IF\n               END IF\n            END DO\n         END SUBROUTINE most_point_to_point\n         SUBROUTINE remainder_alltoall()\n            new_scount(:) = scount(:)\n            new_rcount(:) = rcount(:)\n            DO prow = 0, nprows - 1\n               new_scount(1 + pgrid(prow, mypcol)) = 0\n               new_rcount(1 + pgrid(prow, mypcol)) = 0\n            END DO\n            DO pcol = 0, npcols - 1\n               new_scount(1 + pgrid(myprow, pcol)) = 0\n               new_rcount(1 + pgrid(myprow, pcol)) = 0\n            END DO\n            CALL mp_alltoall(sb, new_scount, sdispl, &\n                             rb, new_rcount, rdispl, all_group)\n         END SUBROUTINE remainder_alltoall\n         SUBROUTINE remainder_point_to_point()\n            INTEGER                                  :: col, row\n\n            DO row = 0, nprows - 1\n               prow = MOD(row + myprow, nprows)\n               IF (prow .EQ. myprow) CYCLE\n               DO col = 0, npcols - 1\n                  pcol = MOD(col + mypcol, npcols)\n                  IF (pcol .EQ. mypcol) CYCLE\n                  dst = dbcsr_mp_get_process(mp_env, prow, pcol)\n                  send_cnt = scount(dst + 1)\n                  IF (send_cnt .GT. 0) THEN\n                     send_data_p => sb(1 + sdispl(dst + 1):1 + sdispl(dst + 1) + send_cnt - 1)\n                     tag = 4*mynode + 2\n                     CALL mp_isend(send_data_p, dst, all_group, all_sr(nall_sr + 1), tag)\n                     nall_sr = nall_sr + 1\n                  END IF\n                  !\n                  src = dbcsr_mp_get_process(mp_env, prow, pcol)\n                  recv_cnt = rcount(src + 1)\n                  IF (recv_cnt .GT. 0) THEN\n                     recv_data_p => rb(1 + rdispl(src + 1):1 + rdispl(src + 1) + recv_cnt - 1)\n                     tag = 4*src + 2\n                     CALL mp_irecv(recv_data_p, src, all_group, all_rr(nall_rr + 1), tag)\n                     nall_rr = nall_rr + 1\n                  END IF\n               END DO\n            END DO\n         END SUBROUTINE remainder_point_to_point\n      END SUBROUTINE hybrid_alltoall_${nametype1}$1\n   #:endfor\n\nEND MODULE dbcsr_mp_operations\n"
  },
  {
    "path": "src/mpi/dbcsr_mpiwrap.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_mpiwrap\n   !! Interface to the message passing library MPI\n   USE ISO_C_BINDING, ONLY: C_F_POINTER, &\n                            C_PTR\n   USE dbcsr_kinds, ONLY: &\n      dp, int_4, int_4_size, int_8, int_8_size, real_4, real_4_size, real_8, &\n      real_8_size\n   USE dbcsr_machine, ONLY: m_abort, m_hostnm\n\n#include \"base/dbcsr_base_uses.f90\"\n   #:include 'dbcsr_mpiwrap.fypp'\n\n#if defined(__parallel) && defined(__USE_MPI_F08)\n   USE mpi_f08, ONLY: mpi_datatype, mpi_comm, mpi_request, mpi_win, mpi_file, mpi_info, mpi_status, mpi_group, MPI_ANY_TAG, &\n                      MPI_ANY_SOURCE, MPI_COMM_NULL, MPI_COMM_SELF, MPI_COMM_WORLD, MPI_REQUEST_NULL, MPI_WIN_NULL, &\n                      MPI_FILE_NULL, MPI_INFO_NULL, MPI_DATATYPE_NULL, MPI_STATUS_SIZE, MPI_PROC_NULL, &\n                      MPI_MAX_LIBRARY_VERSION_STRING, MPI_OFFSET_KIND, MPI_ADDRESS_KIND, MPI_MODE_CREATE, &\n                      MPI_MODE_RDONLY, MPI_MODE_WRONLY, MPI_MODE_RDWR, MPI_MODE_EXCL, MPI_MODE_APPEND, &\n                      MPI_MAX_ERROR_STRING, MPI_IDENT, MPI_CONGRUENT, MPI_SIMILAR, MPI_UNEQUAL, MPI_COMPLEX, MPI_DOUBLE_COMPLEX, &\n                      MPI_INTEGER, MPI_LOGICAL, MPI_DOUBLE_PRECISION, MPI_STATUS_IGNORE, MPI_TYPE_SIZE, MPI_FILE_READ_AT_ALL, &\n                      MPI_FILE_READ_AT, mpi_type_indexed, mpi_irecv, mpi_recv, mpi_isend, mpi_send, mpi_sendrecv, mpi_allreduce, &\n                      mpi_reduce, mpi_barrier, mpi_ibarrier, mpi_iallreduce, mpi_test, mpi_probe, mpi_wait, mpi_iprobe, &\n                      mpi_testany, mpi_testall, mpi_waitany, mpi_waitall, mpi_allgather, mpi_allgatherv, mpi_iallgather, &\n                      mpi_iallgatherv, mpi_gather, mpi_gatherv, mpi_scatter, mpi_scatterv, mpi_iscatterv, mpi_iscatter, &\n                      mpi_scan, mpi_alltoall, mpi_alltoallv, mpi_type_indexed, mpi_bcast, mpi_ibcast, mpi_group_free, &\n                      mpi_comm_free, mpi_comm_create, mpi_win_create, mpi_rget, mpi_free_mem, mpi_get_address, &\n                      MPI_FILE_WRITE_AT, MPI_FILE_WRITE_AT_ALL, mpi_comm_group, mpi_init, mpi_init_thread, mpi_bottom, &\n                      MPI_IN_PLACE, MPI_MIN, MPI_MAX, MPI_SUM, MPI_PROD, MPI_SOURCE, MPI_TAG, MPI_REAL, MPI_INTEGER8, &\n                      MPI_MODE_NOCHECK, MPI_CHARACTER, MPI_ERRORS_RETURN, MPI_2DOUBLE_PRECISION, MPI_MAXLOC, MPI_LOR, &\n                      MPI_MINLOC, MPI_SUCCESS, MPI_THREAD_FUNNELED\n#endif\n#if defined(__parallel) && ! defined(__USE_MPI_F08)\n   USE mpi\n#endif\n! subroutines: unfortunately, mpi implementations do not provide interfaces for all subroutines (problems with types and ranks explosion),\n!              we do not quite know what is in the module, so we can not include any....\n!              to nevertheless get checking for what is included, we use the mpi module without use clause, getting all there is\n! USE mpi, ONLY: mpi_allgather, mpi_allgatherv, mpi_alloc_mem, mpi_allreduce, mpi_alltoall, mpi_alltoallv, mpi_bcast,&\n!                mpi_cart_coords, mpi_cart_create, mpi_cart_get, mpi_cart_rank, mpi_cart_sub, mpi_dims_create, mpi_file_close,&\n!                mpi_file_get_size, mpi_file_open, mpi_file_read_at_all, mpi_file_read_at, mpi_file_write_at_all,&\n!                mpi_file_write_at, mpi_free_mem, mpi_gather, mpi_gatherv, mpi_get_address, mpi_group_translate_ranks, mpi_irecv,&\n!                mpi_isend, mpi_recv, mpi_reduce, mpi_reduce_scatter, mpi_rget, mpi_scatter, mpi_send,&\n!                mpi_sendrecv, mpi_sendrecv_replace, mpi_testany, mpi_waitall, mpi_waitany, mpi_win_create\n! functions\n! USE mpi, ONLY: mpi_wtime\n! constants\n! USE mpi, ONLY: MPI_DOUBLE_PRECISION, MPI_DOUBLE_COMPLEX, MPI_REAL, MPI_COMPLEX, MPI_ANY_TAG,&\n!                MPI_ANY_SOURCE, MPI_COMM_NULL, MPI_REQUEST_NULL, MPI_WIN_NULL, MPI_STATUS_SIZE, MPI_STATUS_IGNORE, MPI_STATUSES_IGNORE, &\n!                MPI_ADDRESS_KIND, MPI_OFFSET_KIND, MPI_MODE_CREATE, MPI_MODE_RDONLY, MPI_MODE_WRONLY,&\n!                MPI_MODE_RDWR, MPI_MODE_EXCL, MPI_COMM_SELF, MPI_COMM_WORLD, MPI_THREAD_FUNNELED,&\n!                MPI_ERRORS_RETURN, MPI_SUCCESS, MPI_MAX_PROCESSOR_NAME, MPI_MAX_ERROR_STRING, MPI_IDENT,&\n!                MPI_UNEQUAL, MPI_MAX, MPI_SUM, MPI_INFO_NULL, MPI_IN_PLACE, MPI_CONGRUENT, MPI_SIMILAR, MPI_MIN, MPI_SOURCE,&\n!                MPI_TAG, MPI_INTEGER8, MPI_INTEGER, MPI_MAXLOC, MPI_2INTEGER, MPI_MINLOC, MPI_LOGICAL, MPI_2DOUBLE_PRECISION,&\n!                MPI_LOR, MPI_CHARACTER, MPI_BOTTOM, MPI_MODE_NOCHECK, MPI_2REAL\n\n! 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\n! Unfortunately, Fortran does not offer something like typedef in C/C++\n!\n! MPI_STATUS_ARRAY is a macro to provide the appropriate type of arrays of status variables because with mpi.\n!\n! 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.\n! Use it as \"<name of status variable> MPI_STATUS_EXTRACT(<name of component of interest>)\".\n! The space before MPI_STATUS_EXTRACT is compulsory to allow the C-preprocessor to identify the macro.\n! In Fortran, this space is ignored according to the standards.\n#if defined(__parallel) && defined(__USE_MPI_F08)\n#define MPI_DATA_TYPE TYPE(MPI_Datatype)\n#define MPI_COMM_TYPE TYPE(MPI_Comm)\n#define MPI_REQUEST_TYPE TYPE(MPI_Request)\n#define MPI_WIN_TYPE TYPE(MPI_Win)\n#define MPI_FILE_TYPE TYPE(MPI_File)\n#define MPI_INFO_TYPE TYPE(MPI_Info)\n#define MPI_STATUS_TYPE TYPE(MPI_Status)\n#define MPI_STATUS_TYPE_ARRAY(X) TYPE(MPI_Status),DIMENSION(X)\n#define MPI_GROUP_TYPE TYPE(MPI_Group)\n#define MPI_STATUS_EXTRACT(X) %X\n#else\n#define MPI_DATA_TYPE INTEGER\n#define MPI_COMM_TYPE INTEGER\n#define MPI_REQUEST_TYPE INTEGER\n#define MPI_WIN_TYPE INTEGER\n#define MPI_FILE_TYPE INTEGER\n#define MPI_INFO_TYPE INTEGER\n#define MPI_STATUS_TYPE INTEGER,DIMENSION(MPI_STATUS_SIZE)\n#define MPI_STATUS_TYPE_ARRAY(X) INTEGER,DIMENSION(MPI_STATUS_SIZE,X)\n#define MPI_GROUP_TYPE INTEGER\n#define MPI_STATUS_EXTRACT(X) (X)\n#endif\n\n   IMPLICIT NONE\n   PRIVATE\n\n   ! parameters that might be needed\n#if defined(__parallel)\n   LOGICAL, PARAMETER :: dbcsr_is_parallel = .TRUE.\n   INTEGER, PARAMETER, PUBLIC :: mp_any_tag = MPI_ANY_TAG\n   INTEGER, PARAMETER, PUBLIC :: mp_any_source = MPI_ANY_SOURCE\n   MPI_COMM_TYPE, PARAMETER :: mp_comm_null_handle = MPI_COMM_NULL\n   MPI_COMM_TYPE, PARAMETER :: mp_comm_self_handle = MPI_COMM_SELF\n   MPI_COMM_TYPE, PARAMETER :: mp_comm_world_handle = MPI_COMM_WORLD\n   MPI_REQUEST_TYPE, PARAMETER :: mp_request_null_handle = MPI_REQUEST_NULL\n   MPI_WIN_TYPE, PARAMETER :: mp_win_null_handle = MPI_WIN_NULL\n   MPI_FILE_TYPE, PARAMETER :: mp_file_null_handle = MPI_FILE_NULL\n   MPI_INFO_TYPE, PARAMETER :: mp_info_null_handle = MPI_INFO_NULL\n   MPI_DATA_TYPE, PARAMETER :: mp_datatype_null_handle = MPI_DATATYPE_NULL\n   INTEGER, PARAMETER, PUBLIC :: mp_status_size = MPI_STATUS_SIZE\n   INTEGER, PARAMETER, PUBLIC :: mp_proc_null = MPI_PROC_NULL\n   ! Set max allocatable memory by MPI to 2 GiByte\n   INTEGER(KIND=MPI_ADDRESS_KIND), PARAMETER, PRIVATE :: mp_max_memory_size = HUGE(INT(1, KIND=int_4))\n\n   INTEGER, PARAMETER, PUBLIC :: mp_max_library_version_string = MPI_MAX_LIBRARY_VERSION_STRING\n\n   INTEGER, PARAMETER, PUBLIC :: file_offset = MPI_OFFSET_KIND\n   INTEGER, PARAMETER, PUBLIC :: address_kind = MPI_ADDRESS_KIND\n   INTEGER, PARAMETER, PUBLIC :: file_amode_create = MPI_MODE_CREATE\n   INTEGER, PARAMETER, PUBLIC :: file_amode_rdonly = MPI_MODE_RDONLY\n   INTEGER, PARAMETER, PUBLIC :: file_amode_wronly = MPI_MODE_WRONLY\n   INTEGER, PARAMETER, PUBLIC :: file_amode_rdwr = MPI_MODE_RDWR\n   INTEGER, PARAMETER, PUBLIC :: file_amode_excl = MPI_MODE_EXCL\n   INTEGER, PARAMETER, PUBLIC :: file_amode_append = MPI_MODE_APPEND\n#else\n   LOGICAL, PARAMETER :: dbcsr_is_parallel = .FALSE.\n   INTEGER, PARAMETER, PUBLIC :: mp_any_tag = -1\n   INTEGER, PARAMETER, PUBLIC :: mp_any_source = -2\n   MPI_COMM_TYPE, PARAMETER :: mp_comm_null_handle = -3\n   MPI_COMM_TYPE, PARAMETER :: mp_comm_self_handle = -11\n   MPI_COMM_TYPE, PARAMETER :: mp_comm_world_handle = -12\n   MPI_REQUEST_TYPE, PARAMETER :: mp_request_null_handle = -4\n   MPI_WIN_TYPE, PARAMETER :: mp_win_null_handle = -5\n   MPI_FILE_TYPE, PARAMETER :: mp_file_null_handle = -6\n   MPI_INFO_TYPE, PARAMETER :: mp_info_null_handle = -7\n   MPI_DATA_TYPE, PARAMETER :: mp_datatype_null_handle = -13\n   INTEGER, PARAMETER, PUBLIC :: mp_status_size = -7\n   INTEGER, PARAMETER, PUBLIC :: mp_proc_null = -8\n   INTEGER, PARAMETER, PUBLIC :: mp_max_library_version_string = 1\n\n   INTEGER, PARAMETER, PUBLIC :: file_offset = int_8\n   INTEGER, PARAMETER, PUBLIC :: address_kind = int_8\n   INTEGER, PARAMETER, PUBLIC :: file_amode_create = 1\n   INTEGER, PARAMETER, PUBLIC :: file_amode_rdonly = 2\n   INTEGER, PARAMETER, PUBLIC :: file_amode_wronly = 4\n   INTEGER, PARAMETER, PUBLIC :: file_amode_rdwr = 8\n   INTEGER, PARAMETER, PUBLIC :: file_amode_excl = 64\n   INTEGER, PARAMETER, PUBLIC :: file_amode_append = 128\n#endif\n\n   ! MPI wrapper types (keep the handles private for to switch between serial mode/old mpi module and mpi_f08!)\n   TYPE mp_comm_type\n      PRIVATE\n      MPI_COMM_TYPE :: handle = mp_comm_null_handle\n   CONTAINS\n      PROCEDURE, PUBLIC, PASS(comm), NON_OVERRIDABLE :: get_handle => mp_get_comm_handle\n      PROCEDURE, PUBLIC, PASS(comm), NON_OVERRIDABLE :: set_handle => mp_set_comm_handle\n      PROCEDURE, PRIVATE, PASS(comm1), NON_OVERRIDABLE :: mp_comm_op_eq\n      GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_comm_op_eq\n      PROCEDURE, PRIVATE, PASS(comm1), NON_OVERRIDABLE :: mp_comm_op_ne\n      GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_comm_op_ne\n   END TYPE mp_comm_type\n\n   TYPE mp_request_type\n      PRIVATE\n      MPI_REQUEST_TYPE :: handle = mp_request_null_handle\n   CONTAINS\n      PROCEDURE, PUBLIC, PASS(request), NON_OVERRIDABLE :: get_handle => mp_get_request_handle\n      PROCEDURE, PUBLIC, PASS(request), NON_OVERRIDABLE :: set_handle => mp_set_request_handle\n      PROCEDURE, PRIVATE, PASS(request1), NON_OVERRIDABLE :: mp_request_op_eq\n      GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_request_op_eq\n      PROCEDURE, PRIVATE, PASS(request1), NON_OVERRIDABLE :: mp_request_op_ne\n      GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_request_op_ne\n   END TYPE mp_request_type\n\n   TYPE mp_win_type\n      PRIVATE\n      MPI_WIN_TYPE :: handle = mp_win_null_handle\n   CONTAINS\n      PROCEDURE, PUBLIC, PASS(win), NON_OVERRIDABLE :: get_handle => mp_get_win_handle\n      PROCEDURE, PUBLIC, PASS(win), NON_OVERRIDABLE :: set_handle => mp_set_win_handle\n      PROCEDURE, PRIVATE, PASS(win1), NON_OVERRIDABLE :: mp_win_op_eq\n      GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_win_op_eq\n      PROCEDURE, PRIVATE, PASS(win1), NON_OVERRIDABLE :: mp_win_op_ne\n      GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_win_op_ne\n   END TYPE mp_win_type\n\n   TYPE mp_file_type\n      PRIVATE\n      MPI_FILE_TYPE :: handle = mp_file_null_handle\n   CONTAINS\n      PROCEDURE, PUBLIC, PASS(file), NON_OVERRIDABLE :: get_handle => mp_get_file_handle\n      PROCEDURE, PUBLIC, PASS(file), NON_OVERRIDABLE :: set_handle => mp_set_file_handle\n      PROCEDURE, PRIVATE, PASS(file1), NON_OVERRIDABLE :: mp_file_op_eq\n      GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_file_op_eq\n      PROCEDURE, PRIVATE, PASS(file1), NON_OVERRIDABLE :: mp_file_op_ne\n      GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_file_op_ne\n   END TYPE mp_file_type\n\n   TYPE mp_info_type\n      PRIVATE\n      MPI_INFO_TYPE :: handle = mp_info_null_handle\n   CONTAINS\n      PROCEDURE, PUBLIC, PASS(info), NON_OVERRIDABLE :: get_handle => mp_get_info_handle\n      PROCEDURE, PUBLIC, PASS(info), NON_OVERRIDABLE :: set_handle => mp_set_info_handle\n      PROCEDURE, PRIVATE, PASS(info1), NON_OVERRIDABLE :: mp_info_op_eq\n      GENERIC, PUBLIC :: OPERATOR(.EQ.) => mp_info_op_eq\n      PROCEDURE, PRIVATE, PASS(info1), NON_OVERRIDABLE :: mp_info_op_ne\n      GENERIC, PUBLIC :: OPERATOR(.NE.) => mp_info_op_ne\n   END TYPE mp_info_type\n\n   ! The actual MPI wrapper constants\n   TYPE(mp_comm_type), PARAMETER, PUBLIC :: mp_comm_null = mp_comm_type(mp_comm_null_handle)\n   TYPE(mp_comm_type), PARAMETER, PUBLIC :: mp_comm_self = mp_comm_type(mp_comm_self_handle)\n   TYPE(mp_comm_type), PARAMETER, PUBLIC :: mp_comm_world = mp_comm_type(mp_comm_world_handle)\n   TYPE(mp_request_type), PARAMETER, PUBLIC :: mp_request_null = mp_request_type(mp_request_null_handle)\n   TYPE(mp_win_type), PARAMETER, PUBLIC :: mp_win_null = mp_win_type(mp_win_null_handle)\n   TYPE(mp_file_type), PARAMETER, PUBLIC :: mp_file_null = mp_file_type(mp_file_null_handle)\n   TYPE(mp_info_type), PARAMETER, PUBLIC :: mp_info_null = mp_info_type(mp_info_null_handle)\n\n   ! we need to fix this to a given number (crossing fingers)\n   ! so that the serial code using Fortran stream IO and the MPI have the same sizes.\n   INTEGER, PARAMETER, PUBLIC :: mpi_character_size = 1\n   INTEGER, PARAMETER, PUBLIC :: mpi_integer_size = 4\n\n   CHARACTER(LEN=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_mpiwrap'\n\n#if defined(__parallel)\n   ! internal reference counter used to debug communicator leaks\n   INTEGER, PRIVATE, SAVE :: debug_comm_count = 0\n#endif\n\n   ! types\n   PUBLIC :: mp_comm_type\n   PUBLIC :: mp_request_type\n   PUBLIC :: mp_win_type\n   PUBLIC :: mp_file_type\n   PUBLIC :: mp_info_type\n\n   ! init and error\n   PUBLIC :: mp_world_init, mp_world_finalize\n   PUBLIC :: mp_get_comm_count\n   PUBLIC :: mp_abort\n\n   ! performance gathering\n   PUBLIC :: mp_perf_env_type\n   PUBLIC :: mp_perf_env_retain, mp_perf_env_release\n   PUBLIC :: add_mp_perf_env, rm_mp_perf_env, get_mp_perf_env, describe_mp_perf_env\n   PUBLIC :: has_mp_perf_env\n\n   ! informational / generation of sub comms\n   PUBLIC :: mp_environ, mp_comm_compare, mp_cart_coords, mp_rank_compare\n   PUBLIC :: mp_cart_create, mp_dims_create, mp_cart_rank, mp_cart_sub, mp_comm_free\n   PUBLIC :: mp_comm_dup, mp_comm_split, mp_comm_split_direct\n   PUBLIC :: dbcsr_is_parallel\n   PUBLIC :: mp_probe\n\n   ! message passing\n   PUBLIC :: mp_bcast, mp_sum, mp_sum_partial, mp_max, mp_maxloc, mp_minloc, mp_min, mp_prod, mp_sync\n   PUBLIC :: mp_isync, mp_isum\n   PUBLIC :: mp_gather, mp_alltoall, mp_sendrecv, mp_allgather, mp_iallgather\n   PUBLIC :: mp_isend, mp_irecv, mp_ibcast\n   PUBLIC :: mp_isendrecv, mp_wait, mp_waitall, mp_waitany, mp_testany\n   PUBLIC :: mp_testall, mp_iscatter, mp_test\n   PUBLIC :: mp_gatherv\n   PUBLIC :: mp_send, mp_recv\n\n   ! Memory management\n   PUBLIC :: mp_allocate, mp_deallocate\n\n   ! MPI re-ordering\n   PUBLIC :: mp_reordering\n\n   ! I/O\n   PUBLIC :: mp_file_open, mp_file_close\n   PUBLIC :: mp_file_delete\n   PUBLIC :: mp_file_write_at\n   PUBLIC :: mp_file_write_at_all, mp_file_read_at_all\n   PUBLIC :: mp_file_get_size\n   PUBLIC :: mp_file_get_position\n\n   ! some 'advanced types' currently only used for dbcsr\n   PUBLIC :: mp_type_descriptor_type\n   PUBLIC :: mp_type_make\n   PUBLIC :: mp_type_size\n\n   ! one-sided communication\n   PUBLIC :: mp_win_create, mp_win_free, mp_win_lock_all, &\n             mp_win_unlock_all, mp_rget, mp_win_flush_all\n\n   ! vector types\n   PUBLIC :: mp_type_indexed_make_r, mp_type_indexed_make_d, &\n             mp_type_indexed_make_c, mp_type_indexed_make_z, &\n             mp_type_indexed_make_i, mp_type_indexed_make_l\n\n   ! misc\n   PUBLIC :: mp_get_library_version, mp_get_processor_name\n\n   ! assumed to be private\n\n! Interface declarations for non-data-oriented subroutines.\n\n   INTERFACE mp_environ\n      MODULE PROCEDURE mp_environ_l, mp_environ_c, mp_environ_c2\n   END INTERFACE\n\n   INTERFACE mp_waitall\n      MODULE PROCEDURE mp_waitall_1, mp_waitall_2\n   END INTERFACE\n\n   INTERFACE mp_testall\n      MODULE PROCEDURE mp_testall_tv\n   END INTERFACE\n\n   INTERFACE mp_test\n      MODULE PROCEDURE mp_test_1\n   END INTERFACE\n\n   INTERFACE mp_testany\n      MODULE PROCEDURE mp_testany_1, mp_testany_2\n   END INTERFACE\n\n   !\n   ! interfaces to deal easily with scalars / vectors / matrices / ...\n   ! of the different types (integers, doubles, logicals, characters)\n   !\n   INTERFACE mp_minloc\n      MODULE PROCEDURE mp_minloc_dv\n   END INTERFACE\n\n   INTERFACE mp_maxloc\n      MODULE PROCEDURE mp_maxloc_dv\n   END INTERFACE\n\n   $:gen_mp_iface('bcast', suffixes=['', 'v', 'm', '3'], extra_suffixes=['b', 'bv', 'av', 'am'])\n   $:gen_mp_iface('ibcast', suffixes=['', 'v'])\n\n   INTERFACE mp_sum\n      MODULE PROCEDURE mp_sum_i, mp_sum_iv, mp_sum_im, mp_sum_im3, mp_sum_im4, &\n         mp_sum_l, mp_sum_lv, mp_sum_lm, mp_sum_lm3, mp_sum_lm4, &\n         mp_sum_r, mp_sum_rv, mp_sum_rm, mp_sum_rm3, mp_sum_rm4, &\n         mp_sum_d, mp_sum_dv, mp_sum_dm, mp_sum_dm3, mp_sum_dm4, &\n         mp_sum_c, mp_sum_cv, mp_sum_cm, mp_sum_cm3, mp_sum_cm4, &\n         mp_sum_z, mp_sum_zv, mp_sum_zm, mp_sum_zm3, mp_sum_zm4, &\n         mp_sum_root_iv, mp_sum_root_im, &\n         mp_sum_root_lv, mp_sum_root_lm, &\n         mp_sum_root_rv, mp_sum_root_rm, &\n         mp_sum_root_dv, mp_sum_root_dm, &\n         mp_sum_root_cv, mp_sum_root_cm, &\n         mp_sum_root_zv, mp_sum_root_zm\n      MODULE PROCEDURE mp_sum_b, mp_sum_bv\n   END INTERFACE\n\n   $:gen_mp_iface('isum', suffixes=['v'], extra_suffixes=['bv'])\n   $:gen_mp_iface('sum_partial', suffixes=['m'])\n   $:gen_mp_iface('max', suffixes=['', 'v'])\n   $:gen_mp_iface('min', suffixes=['', 'v'])\n   $:gen_mp_iface('prod')\n   $:gen_mp_iface('gather', suffixes=['', 'm', 'v'])\n   $:gen_mp_iface('gatherv', suffixes=['v'])\n\n   INTERFACE mp_allgather\n     !! @todo move allgatherv to a separate declaration\n      MODULE PROCEDURE &\n         mp_allgather_i, mp_allgather_i2, &\n         mp_allgather_i12, mp_allgather_i23, mp_allgather_i34, &\n         mp_allgather_i22, &\n         mp_allgather_l, mp_allgather_l2, &\n         mp_allgather_l12, mp_allgather_l23, mp_allgather_l34, &\n         mp_allgather_l22, &\n         mp_allgather_r, mp_allgather_r2, &\n         mp_allgather_r12, mp_allgather_r23, mp_allgather_r34, &\n         mp_allgather_r22, &\n         mp_allgather_d, mp_allgather_d2, &\n         mp_allgather_d12, mp_allgather_d23, mp_allgather_d34, &\n         mp_allgather_d22, &\n         mp_allgather_c, mp_allgather_c2, &\n         mp_allgather_c12, mp_allgather_c23, mp_allgather_c34, &\n         mp_allgather_c22, &\n         mp_allgather_z, mp_allgather_z2, &\n         mp_allgather_z12, mp_allgather_z23, mp_allgather_z34, &\n         mp_allgather_z22, &\n         mp_allgatherv_iv, &\n         mp_allgatherv_lv, &\n         mp_allgatherv_rv, &\n         mp_allgatherv_dv, &\n         mp_allgatherv_cv, &\n         mp_allgatherv_zv\n   END INTERFACE\n\n   INTERFACE mp_iallgather\n      MODULE PROCEDURE &\n         mp_iallgather_i, mp_iallgather_l, &\n         mp_iallgather_r, mp_iallgather_d, &\n         mp_iallgather_c, mp_iallgather_z, &\n         mp_iallgather_i11, mp_iallgather_l11, &\n         mp_iallgather_r11, mp_iallgather_d11, &\n         mp_iallgather_c11, mp_iallgather_z11, &\n         mp_iallgather_i13, mp_iallgather_l13, &\n         mp_iallgather_r13, mp_iallgather_d13, &\n         mp_iallgather_c13, mp_iallgather_z13, &\n         mp_iallgather_i22, mp_iallgather_l22, &\n         mp_iallgather_r22, mp_iallgather_d22, &\n         mp_iallgather_c22, mp_iallgather_z22, &\n         mp_iallgather_i24, mp_iallgather_l24, &\n         mp_iallgather_r24, mp_iallgather_d24, &\n         mp_iallgather_c24, mp_iallgather_z24, &\n         mp_iallgather_i33, mp_iallgather_l33, &\n         mp_iallgather_r33, mp_iallgather_d33, &\n         mp_iallgather_c33, mp_iallgather_z33, &\n         mp_iallgatherv_iv, mp_iallgatherv_iv2, &\n         mp_iallgatherv_lv, mp_iallgatherv_lv2, &\n         mp_iallgatherv_rv, mp_iallgatherv_rv2, &\n         mp_iallgatherv_dv, mp_iallgatherv_dv2, &\n         mp_iallgatherv_cv, mp_iallgatherv_cv2, &\n         mp_iallgatherv_zv, mp_iallgatherv_zv2\n   END INTERFACE\n\n   INTERFACE mp_iscatter\n      MODULE PROCEDURE mp_iscatter_i, &\n         mp_iscatter_l, &\n         mp_iscatter_r, &\n         mp_iscatter_d, &\n         mp_iscatter_c, &\n         mp_iscatter_z, &\n         mp_iscatter_iv2, &\n         mp_iscatter_lv2, &\n         mp_iscatter_rv2, &\n         mp_iscatter_dv2, &\n         mp_iscatter_cv2, &\n         mp_iscatter_zv2, &\n         mp_iscatterv_iv, &\n         mp_iscatterv_lv, &\n         mp_iscatterv_rv, &\n         mp_iscatterv_dv, &\n         mp_iscatterv_cv, &\n         mp_iscatterv_zv\n   END INTERFACE\n\n   $:gen_mp_iface('alltoall', suffixes=['', '22', '44', '11v'])\n\n   $:gen_mp_iface('send', suffixes=['', 'v'])\n   $:gen_mp_iface('recv', suffixes=['', 'v'])\n   $:gen_mp_iface('sendrecv', suffixes=['v', ])\n   $:gen_mp_iface('isendrecv', suffixes=['', 'v'])\n\n   $:gen_mp_iface('isend', suffixes=['v', 'm2'], extra_suffixes=['bv', 'custom'])\n   $:gen_mp_iface('irecv', suffixes=['v', 'm2'], extra_suffixes=['bv', 'custom'])\n\n   $:gen_mp_iface('win_create', suffixes=['v'])\n   $:gen_mp_iface('rget', suffixes=['v'])\n   $:gen_mp_iface('allocate')\n   $:gen_mp_iface('deallocate')\n\n   $:gen_mp_iface('type_make', extra_suffixes=['struct'])\n\n   $:gen_mp_iface('file_write_at', suffixes=['', 'v'], extra_suffixes=['ch'])\n   $:gen_mp_iface('file_write_at_all', suffixes=['', 'v'], extra_suffixes=['ch'])\n   $:gen_mp_iface('file_read_at_all', suffixes=['', 'v'], extra_suffixes=['ch'])\n\n#if defined(__parallel)\n   $:gen_mp_iface('alloc_mem')\n   $:gen_mp_iface('free_mem')\n#endif\n\n! Type declarations\n   TYPE mp_indexing_meta_type\n      INTEGER, DIMENSION(:), POINTER :: index => NULL(), chunks => NULL()\n   END TYPE mp_indexing_meta_type\n\n   TYPE mp_type_descriptor_type\n      MPI_DATA_TYPE :: type_handle = mp_datatype_null_handle\n      INTEGER :: length = -1\n#if defined(__parallel)\n      INTEGER(kind=mpi_address_kind) :: base = -1_mpi_address_kind\n#endif\n      INTEGER(kind=int_4), DIMENSION(:), POINTER :: data_i => NULL()\n      INTEGER(kind=int_8), DIMENSION(:), POINTER :: data_l => NULL()\n      REAL(kind=real_4), DIMENSION(:), POINTER :: data_r => NULL()\n      REAL(kind=real_8), DIMENSION(:), POINTER :: data_d => NULL()\n      COMPLEX(kind=real_4), DIMENSION(:), POINTER :: data_c => NULL()\n      COMPLEX(kind=real_8), DIMENSION(:), POINTER :: data_z => NULL()\n      TYPE(mp_type_descriptor_type), DIMENSION(:), POINTER :: subtype => NULL()\n      INTEGER :: vector_descriptor(2) = -1\n      LOGICAL :: has_indexing = .FALSE.\n      TYPE(mp_indexing_meta_type) :: index_descriptor = mp_indexing_meta_type()\n   END TYPE mp_type_descriptor_type\n\n   TYPE mp_file_indexing_meta_type\n      INTEGER, DIMENSION(:), POINTER   :: index => NULL()\n      INTEGER(kind=address_kind), &\n         DIMENSION(:), POINTER         :: chunks => NULL()\n   END TYPE mp_file_indexing_meta_type\n\n   ! type internally used to store message passing performance indicators\n! **************************************************************************************************\n   TYPE mp_perf_type\n      CHARACTER(LEN=20) :: name = \"\"\n      INTEGER :: count = -1\n      REAL(KIND=dp) :: msg_size = -1.0_dp\n   END TYPE mp_perf_type\n\n   INTEGER, PARAMETER :: MAX_PERF = 28\n\n! **************************************************************************************************\n   TYPE mp_perf_env_type\n      !private\n      INTEGER :: ref_count = -1, id_nr = -1\n      TYPE(mp_perf_type), DIMENSION(MAX_PERF) :: mp_perfs = mp_perf_type()\n   END TYPE mp_perf_env_type\n\n! **************************************************************************************************\n   TYPE mp_perf_env_p_type\n      TYPE(mp_perf_env_type), POINTER         :: mp_perf_env => Null()\n   END TYPE mp_perf_env_p_type\n\n   ! introduce a stack of mp_perfs, first index is the stack pointer, for convenience is replacing\n   INTEGER, PARAMETER :: max_stack_size = 10\n   INTEGER            :: stack_pointer = 0\n   ! target attribute needed as a hack around ifc 7.1 bug\n   TYPE(mp_perf_env_p_type), DIMENSION(max_stack_size), TARGET, SAVE :: mp_perf_stack\n\n   CHARACTER(LEN=20), PARAMETER :: sname(MAX_PERF) = &\n                                   (/\"MP_Group            \", \"MP_Bcast            \", \"MP_Allreduce        \", &\n                                     \"MP_Gather           \", \"MP_Sync             \", \"MP_Alltoall         \", &\n                                     \"MP_SendRecv         \", \"MP_ISendRecv        \", \"MP_Wait             \", &\n                                     \"MP_comm_split       \", \"MP_ISend            \", \"MP_IRecv            \", &\n                                     \"MP_Send             \", \"MP_Recv             \", \"MP_Memory           \", &\n                                     \"MP_Put              \", \"MP_Get              \", \"MP_Fence            \", &\n                                     \"MP_Win_Lock         \", \"MP_Win_Create       \", \"MP_Win_Free         \", &\n                                     \"MP_IBcast           \", \"MP_IAllreduce       \", \"MP_IScatter         \", &\n                                     \"MP_RGet             \", \"MP_Isync            \", \"MP_Read_All         \", &\n                                     \"MP_Write_All        \"/)\n\n   ! we make some assumptions on the length of INTEGERS, REALS and LOGICALS\n   INTEGER, PARAMETER :: intlen = BIT_SIZE(0)/8\n   INTEGER, PARAMETER :: reallen = 8\n   INTEGER, PARAMETER :: loglen = BIT_SIZE(0)/8\n   INTEGER, PARAMETER :: charlen = 1\n   INTEGER, SAVE, PRIVATE :: last_mp_perf_env_id = 0\n\nCONTAINS\n\n   #:mute\n      #:set types = [\"comm\", \"request\", \"win\", \"file\", \"info\"]\n   #:endmute\n   #:for type in types\n      ELEMENTAL INTEGER FUNCTION mp_get_${type}$_handle(${type}$)\n         CLASS(mp_${type}$_type), INTENT(IN) :: ${type}$\n\n#if defined(__parallel) && defined(__USE_MPI_F08)\n         mp_get_${type}$_handle = ${type}$%handle%mpi_val\n#else\n         mp_get_${type}$_handle = ${type}$%handle\n#endif\n\n      END FUNCTION mp_get_${type}$_handle\n\n      ELEMENTAL SUBROUTINE mp_set_${type}$_handle(${type}$, handle)\n         CLASS(mp_${type}$_type), INTENT(INOUT) :: ${type}$\n         INTEGER, INTENT(IN) :: handle\n\n#if defined(__parallel) && defined(__USE_MPI_F08)\n         ${type}$%handle%mpi_val = handle\n#else\n         ${type}$%handle = handle\n#endif\n\n      END SUBROUTINE mp_set_${type}$_handle\n\n      ELEMENTAL IMPURE LOGICAL FUNCTION mp_${type}$_op_eq(${type}$1, ${type}$2)\n         CLASS(mp_${type}$_type), INTENT(IN) :: ${type}$1, ${type}$2\n\n#if defined(__parallel) && defined(__USE_MPI_F08)\n         mp_${type}$_op_eq = (${type}$1%handle%mpi_val .EQ. ${type}$2%handle%mpi_val)\n#else\n         mp_${type}$_op_eq = (${type}$1%handle .EQ. ${type}$2%handle)\n#endif\n\n      END FUNCTION mp_${type}$_op_eq\n\n      ELEMENTAL IMPURE LOGICAL FUNCTION mp_${type}$_op_ne(${type}$1, ${type}$2)\n         CLASS(mp_${type}$_type), INTENT(IN) :: ${type}$1, ${type}$2\n\n#if defined(__parallel) && defined(__USE_MPI_F08)\n         mp_${type}$_op_ne = (${type}$1%handle%mpi_val .NE. ${type}$2%handle%mpi_val)\n#else\n         mp_${type}$_op_ne = (${type}$1%handle .NE. ${type}$2%handle)\n#endif\n\n      END FUNCTION mp_${type}$_op_ne\n   #:endfor\n\n   SUBROUTINE mp_world_init(mp_comm)\n      !! initializes the system default communicator\n      !! @note\n      !! should only be called once\n      !! @endnote\n\n      TYPE(mp_comm_type), INTENT(OUT)          :: mp_comm\n         !! [output] : handle of the default communicator\n#if defined(__parallel)\n      INTEGER                                  :: ierr\n!$    INTEGER                                  :: provided_tsl\n!$    LOGICAL                                  :: no_threading_support\n\n#if defined(__NO_MPI_THREAD_SUPPORT_CHECK)\n      ! Hack that does not request or check MPI thread support level.\n      ! User asserts that the MPI library will work correctly with\n      ! threads.\n!\n!$    no_threading_support = .TRUE.\n#else\n      ! Does the right thing when using OpenMP: requests that the MPI\n      ! library supports funneled mode and verifies that the MPI library\n      ! provides that support.\n      !\n      ! Developers: Only the master thread will ever make calls to the\n      ! MPI library.\n!\n!$    no_threading_support = .FALSE.\n#endif\n!$    IF (no_threading_support) THEN\n         CALL mpi_init(ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_init @ mp_world_init\")\n!$    ELSE\n!$OMP MASTER\n!$       CALL mpi_init_thread(MPI_THREAD_FUNNELED, provided_tsl, ierr)\n!$       IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_init_thread @ mp_world_init\")\n!$       IF (provided_tsl .LT. MPI_THREAD_FUNNELED) THEN\n!$          CALL mp_stop(0, \"MPI library does not support the requested level of threading (MPI_THREAD_FUNNELED).\")\n!$       END IF\n!$OMP END MASTER\n!$    END IF\n      CALL mpi_comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_set_errhandler @ mp_world_init\")\n      debug_comm_count = 1\n#endif\n      mp_comm = mp_comm_world\n      CALL add_mp_perf_env()\n   END SUBROUTINE mp_world_init\n\n   FUNCTION mp_get_comm_count()\n     !! Return the current number of communicators\n      INTEGER :: mp_get_comm_count\n\n      mp_get_comm_count = 0\n#if defined(__parallel)\n      mp_get_comm_count = debug_comm_count\n#endif\n   END FUNCTION mp_get_comm_count\n\n   SUBROUTINE mp_reordering(mp_comm, mp_new_comm, ranks_order)\n      !! re-create the system default communicator with a different MPI\n      !! rank order\n      !! @note\n      !! should only be called once, at very beginning of CP2K run\n      !! @endnote\n\n      TYPE(mp_comm_type), INTENT(IN)                      :: mp_comm\n         !! [output] : handle of the default communicator\n      TYPE(mp_comm_type), INTENT(out)                     :: mp_new_comm\n      INTEGER, DIMENSION(:), CONTIGUOUS        :: ranks_order\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_reordering'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      MPI_GROUP_TYPE                           :: newgroup, oldgroup\n      TYPE(mp_comm_type)                       :: newcomm\n#endif\n\n      CALL timeset(routineN, handle)\n      ierr = 0\n#if defined(__parallel)\n\n      CALL mpi_comm_group(mp_comm%handle, oldgroup, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_group @ \"//routineN)\n      CALL mpi_group_incl(oldgroup, SIZE(ranks_order), ranks_order, newgroup, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_group_incl @ \"//routineN)\n\n      CALL mpi_comm_create(mp_comm%handle, newgroup, newcomm%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_create @ \"//routineN)\n\n      CALL mpi_group_free(oldgroup, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_group_free @ \"//routineN)\n      CALL mpi_group_free(newgroup, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_group_free @ \"//routineN)\n\n      ! update the system default communicator\n      mp_new_comm = newcomm\n      debug_comm_count = debug_comm_count + 1\n\n#else\n      MARK_USED(ranks_order)\n      mp_new_comm = mp_comm\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_reordering\n\n   SUBROUTINE mp_world_finalize()\n      !! finalizes the system default communicator\n\n#if defined(__parallel)\n      INTEGER                                  :: ierr\n      CALL mpi_barrier(MPI_COMM_WORLD, ierr) ! call mpi directly to avoid 0 stack pointer\n      CALL rm_mp_perf_env()\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_barrier @ mp_world_finalize\")\n      debug_comm_count = debug_comm_count - 1\n      IF (debug_comm_count .NE. 0) THEN\n         ! A bug, we're leaking or double-freeing communicators. Needs to be fixed where the leak happens.\n         ! Memory leak checking might be helpful to locate the culprit\n         DBCSR_ABORT(\"mp_world_finalize: assert failed: leaking communicators\")\n      END IF\n      CALL mpi_finalize(ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_finalize @ mp_world_finalize\")\n#else\n      CALL rm_mp_perf_env()\n#endif\n\n   END SUBROUTINE mp_world_finalize\n\n! all the following routines should work for a given communicator, not MPI_WORLD\n\n   SUBROUTINE add_mp_perf_env(perf_env)\n      !! start and stop the performance indicators\n      !! for every call to start there has to be (exactly) one call to stop\n      !! @note\n      !! can be used to measure performance of a sub-part of a program.\n      !! timings measured here will not show up in the outer start/stops\n      !! Doesn't need a fresh communicator\n      !! @endnote\n\n      TYPE(mp_perf_env_type), OPTIONAL, POINTER          :: perf_env\n\n      stack_pointer = stack_pointer + 1\n      IF (stack_pointer > max_stack_size) THEN\n         DBCSR_ABORT(\"stack_pointer too large : mpiwrap @ add_mp_perf_env\")\n      END IF\n      NULLIFY (mp_perf_stack(stack_pointer)%mp_perf_env)\n      IF (PRESENT(perf_env)) THEN\n         mp_perf_stack(stack_pointer)%mp_perf_env => perf_env\n         IF (ASSOCIATED(perf_env)) CALL mp_perf_env_retain(perf_env)\n      END IF\n      IF (.NOT. ASSOCIATED(mp_perf_stack(stack_pointer)%mp_perf_env)) THEN\n         CALL mp_perf_env_create(mp_perf_stack(stack_pointer)%mp_perf_env)\n      END IF\n   END SUBROUTINE add_mp_perf_env\n\n   SUBROUTINE mp_perf_env_create(perf_env)\n      TYPE(mp_perf_env_type), OPTIONAL, POINTER          :: perf_env\n\n      INTEGER                                            :: i, stat\n\n      NULLIFY (perf_env)\n      ALLOCATE (perf_env, stat=stat)\n      IF (stat /= 0) THEN\n         DBCSR_ABORT(\"allocation failed in mp_perf_env_create\")\n      END IF\n      last_mp_perf_env_id = last_mp_perf_env_id + 1\n      perf_env%id_nr = last_mp_perf_env_id\n      perf_env%ref_count = 1\n      DO i = 1, MAX_PERF\n         perf_env%mp_perfs(i)%name = sname(i)\n         perf_env%mp_perfs(i)%count = 0\n         perf_env%mp_perfs(i)%msg_size = 0.0_dp\n      END DO\n\n   END SUBROUTINE mp_perf_env_create\n\n   SUBROUTINE mp_perf_env_release(perf_env)\n      TYPE(mp_perf_env_type), POINTER                    :: perf_env\n\n      IF (ASSOCIATED(perf_env)) THEN\n         IF (perf_env%ref_count < 1) THEN\n            DBCSR_ABORT(\"invalid ref_count: mpiwrap @ mp_perf_env_release\")\n         END IF\n         perf_env%ref_count = perf_env%ref_count - 1\n         IF (perf_env%ref_count == 0) THEN\n            DEALLOCATE (perf_env)\n         END IF\n      END IF\n      NULLIFY (perf_env)\n   END SUBROUTINE mp_perf_env_release\n\n   SUBROUTINE mp_perf_env_retain(perf_env)\n      TYPE(mp_perf_env_type), POINTER                    :: perf_env\n\n      IF (.NOT. ASSOCIATED(perf_env)) THEN\n         DBCSR_ABORT(\"unassociated perf_env: mpiwrap @ mp_perf_env_retain\")\n      END IF\n      IF (perf_env%ref_count < 1) THEN\n         DBCSR_ABORT(\"invalid ref_count: mpiwrap @ mp_perf_env_retain\")\n      END IF\n      perf_env%ref_count = perf_env%ref_count + 1\n   END SUBROUTINE mp_perf_env_retain\n\n!.. reports the performance counters for the MPI run\n   SUBROUTINE mp_perf_env_describe(perf_env, iw)\n      TYPE(mp_perf_env_type), POINTER          :: perf_env\n      INTEGER, INTENT(IN)                      :: iw\n\n#if defined(__parallel)\n      INTEGER                                  :: i\n      REAL(KIND=dp)                            :: vol\n#endif\n\n      IF (.NOT. ASSOCIATED(perf_env)) THEN\n         DBCSR_ABORT(\"unassociated perf_env : mpiwrap @ mp_perf_env_describe\")\n      END IF\n      IF (perf_env%ref_count < 1) THEN\n         DBCSR_ABORT(\"invalid perf_env%ref_count : mpiwrap @ mp_perf_env_describe\")\n      END IF\n#if defined(__parallel)\n      IF (iw > 0) THEN\n         WRITE (iw, '( \" -\", 77X, \"-\" )')\n         WRITE (iw, '( \" -\", 21X, A, 21X, \"-\" )') ' DBCSR MESSAGE PASSING PERFORMANCE '\n         WRITE (iw, '( \" -\", 77X, \"-\" )')\n         WRITE (iw, '( 1X, 79(\"-\"))')\n         WRITE (iw, '( A, A, A )') ' ROUTINE', '             CALLS ', &\n            '     AVE VOLUME [Bytes]'\n         DO i = 1, MAX_PERF\n\n            IF (perf_env%mp_perfs(i)%count > 0) THEN\n               vol = perf_env%mp_perfs(i)%msg_size/REAL(perf_env%mp_perfs(i)%count, KIND=dp)\n               IF (vol < 1.0_dp) THEN\n                  WRITE (iw, '(1X,A15,T17,I10)') &\n                     ADJUSTL(perf_env%mp_perfs(i)%name), perf_env%mp_perfs(i)%count\n               ELSE\n                  WRITE (iw, '(1X,A15,T17,I10,T40,F11.0)') &\n                     ADJUSTL(perf_env%mp_perfs(i)%name), perf_env%mp_perfs(i)%count, &\n                     vol\n               END IF\n            END IF\n\n         END DO\n         WRITE (iw, '( 1X, 79(\"-\"))')\n      END IF\n#else\n      MARK_USED(iw)\n#endif\n   END SUBROUTINE mp_perf_env_describe\n\n   SUBROUTINE rm_mp_perf_env()\n      IF (stack_pointer < 1) THEN\n         DBCSR_ABORT(\"no perf_env in the stack : mpiwrap @ rm_mp_perf_env\")\n      END IF\n      CALL mp_perf_env_release(mp_perf_stack(stack_pointer)%mp_perf_env)\n      stack_pointer = stack_pointer - 1\n   END SUBROUTINE rm_mp_perf_env\n\n   PURE FUNCTION has_mp_perf_env() RESULT(res)\n      LOGICAL :: res\n\n      res = .FALSE.\n      IF (stack_pointer < 1) RETURN\n      IF (.NOT. ASSOCIATED(mp_perf_stack(stack_pointer)%mp_perf_env)) RETURN\n      res = .TRUE.\n   END FUNCTION has_mp_perf_env\n\n   FUNCTION get_mp_perf_env() RESULT(res)\n      TYPE(mp_perf_env_type), POINTER                    :: res\n\n      IF (stack_pointer < 1) THEN\n         DBCSR_ABORT(\"no perf_env in the stack : mpiwrap @ get_mp_perf_env\")\n      END IF\n      res => mp_perf_stack(stack_pointer)%mp_perf_env\n   END FUNCTION get_mp_perf_env\n\n   SUBROUTINE describe_mp_perf_env(scr)\n      INTEGER, INTENT(in)                                :: scr\n\n      TYPE(mp_perf_env_type), POINTER                    :: perf_env\n\n      perf_env => get_mp_perf_env()\n      CALL mp_perf_env_describe(perf_env, scr)\n   END SUBROUTINE describe_mp_perf_env\n\n#if defined(__parallel)\n   SUBROUTINE add_perf(perf_id, msg_size)\n      !! adds the performance informations of one call\n      INTEGER, INTENT(in)                      :: perf_id\n      INTEGER, INTENT(in)                      :: msg_size\n\n      TYPE(mp_perf_type), POINTER              :: mp_perf\n\n      IF (stack_pointer < 1) return\n      IF (.NOT. ASSOCIATED(mp_perf_stack(stack_pointer)%mp_perf_env)) return\n\n      mp_perf => mp_perf_stack(stack_pointer)%mp_perf_env%mp_perfs(perf_id)\n      mp_perf%count = mp_perf%count + 1\n      mp_perf%msg_size = mp_perf%msg_size + REAL(msg_size, dp)\n   END SUBROUTINE add_perf\n#endif\n\n   SUBROUTINE mp_abort()\n      !! globally stops all tasks\n      !! this is intended to be low level, most of CP2K should call dbcsr_abort()\n\n      INTEGER                                            :: ierr\n\n      ierr = 0\n\n#if !defined(__NO_ABORT)\n#if defined(__parallel)\n      CALL mpi_abort(MPI_COMM_WORLD, 1, ierr)\n#else\n      CALL m_abort()\n#endif\n#endif\n      ! this routine never returns and levels with non-zero exit code\n      STOP 1\n   END SUBROUTINE mp_abort\n\n   SUBROUTINE mp_stop(ierr, prg_code)\n      !! stops *after an mpi error* translating the error code\n      !! @note\n      !! this function is private to mpiwrap.F\n      !! @endnote\n\n      INTEGER, INTENT(IN)                       :: ierr\n         !! an error code * returned by an mpi call *\n      CHARACTER(LEN=*)                          :: prg_code\n\n#if defined(__parallel)\n      INTEGER                                   :: istat, len\n      CHARACTER(LEN=MPI_MAX_ERROR_STRING)       :: error_string\n      CHARACTER(LEN=MPI_MAX_ERROR_STRING + 512) :: full_error\n#else\n      CHARACTER(LEN=512)                        :: full_error\n#endif\n\n#if defined(__parallel)\n      CALL mpi_error_string(ierr, error_string, len, istat)\n      WRITE (full_error, '(A,I0,A)') ' MPI error ', ierr, ' in '//TRIM(prg_code)//' : '//error_string(1:len)\n#else\n      WRITE (full_error, '(A,I0,A)') ' MPI error (!?) ', ierr, ' in '//TRIM(prg_code)\n#endif\n\n      DBCSR_ABORT(full_error)\n\n   END SUBROUTINE mp_stop\n\n   SUBROUTINE mp_sync(group)\n      !! synchronizes with a barrier a given group of mpi tasks\n\n      TYPE(mp_comm_type), INTENT(IN)                                :: group\n         !! mpi communicator\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sync'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      CALL mpi_barrier(group%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_barrier @ \"//routineN)\n#else\n      MARK_USED(group)\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_sync\n\n   SUBROUTINE mp_isync(group, request)\n      !! synchronizes with a barrier a given group of mpi tasks\n\n      TYPE(mp_comm_type), INTENT(IN)                                :: group\n         !! mpi communicator\n      TYPE(mp_request_type), INTENT(OUT)                               :: request\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isync'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      CALL mpi_ibarrier(group%handle, request%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_ibarrier @ \"//routineN)\n#else\n      MARK_USED(group)\n      request = mp_request_null\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_isync\n\n   RECURSIVE SUBROUTINE mp_environ_l(numtask, taskid, groupid)\n      !! returns number of tasks and task id for a given mpi group\n      !! simple and cartesian version.. recursive needed in case of failing mpi_comm_rank.\n      !! @note\n      !! mp_world_setup is gone, use mp_environ instead (i.e. give a groupid explicitly)\n      !! @endnote\n\n      INTEGER, OPTIONAL, INTENT(OUT)                     :: numtask, taskid\n      TYPE(mp_comm_type), INTENT(IN)                                :: groupid\n         !! mpi communicator\n\n      INTEGER                                            :: ierr\n\n      ierr = 0\n\n      IF (PRESENT(numtask)) numtask = 1\n      IF (PRESENT(taskid)) taskid = 0\n#if defined(__parallel)\n      IF (PRESENT(taskid)) THEN\n         CALL mpi_comm_rank(groupid%handle, taskid, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_rank @ mp_environ_l\")\n      END IF\n\n      IF (PRESENT(numtask)) THEN\n         CALL mpi_comm_size(groupid%handle, numtask, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_size @ mp_environ_l\")\n      END IF\n#else\n      MARK_USED(groupid)\n#endif\n\n   END SUBROUTINE mp_environ_l\n\n   SUBROUTINE mp_environ_c(numtask, dims, task_coor, groupid)\n\n      INTEGER, INTENT(OUT)                     :: numtask, dims(2), &\n                                                  task_coor(2)\n      TYPE(mp_comm_type), INTENT(IN)                      :: groupid\n\n      INTEGER                                  :: ierr\n#if defined(__parallel)\n      LOGICAL, DIMENSION(2)                    :: periods\n#endif\n\n      ierr = 0\n      numtask = 1\n      task_coor = 0\n      dims = 1\n#if defined(__parallel)\n      CALL mpi_comm_size(groupid%handle, numtask, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_size @ mp_environ_c\")\n\n      CALL mpi_cart_get(groupid%handle, 2, dims, periods, task_coor, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_cart_get @ mp_environ_c\")\n#else\n      MARK_USED(groupid)\n#endif\n\n   END SUBROUTINE mp_environ_c\n\n   SUBROUTINE mp_environ_c2(comm, ndims, dims, task_coor, periods)\n\n      TYPE(mp_comm_type), INTENT(IN)                     :: comm\n      INTEGER, INTENT(IN)                                :: ndims\n      INTEGER, INTENT(OUT)                               :: dims(ndims), task_coor(ndims)\n      LOGICAL, INTENT(out)                               :: periods(ndims)\n\n      INTEGER                                            :: ierr\n\n      ierr = 0\n\n      task_coor = 0\n      dims = 1\n      periods = .FALSE.\n#if defined(__parallel)\n      CALL mpi_cart_get(comm%handle, ndims, dims, periods, task_coor, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_cart_get @ mp_environ_c\")\n#else\n      MARK_USED(comm)\n#endif\n\n   END SUBROUTINE mp_environ_c2\n\n!..mp_cart_create\n   SUBROUTINE mp_cart_create(comm_old, ndims, dims, pos, comm_cart)\n\n      TYPE(mp_comm_type), INTENT(IN)           :: comm_old\n      INTEGER, INTENT(IN)                      :: ndims\n      INTEGER, CONTIGUOUS, INTENT(INOUT)       :: dims(:)\n      INTEGER, CONTIGUOUS, INTENT(OUT)         :: pos(:)\n      TYPE(mp_comm_type), INTENT(OUT)                     :: comm_cart\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_cart_create'\n\n      INTEGER                                  :: handle, ierr, nodes\n#if defined(__parallel)\n      LOGICAL, DIMENSION(1:ndims)              :: period\n      LOGICAL                                  :: reorder\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n      nodes = 0\n      pos(1:ndims) = -1\n      comm_cart = comm_old\n#if defined(__parallel)\n\n      CALL mpi_comm_size(comm_old%handle, nodes, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_size @ \"//routineN)\n\n      IF (ANY(dims == 0)) CALL mpi_dims_create(nodes, ndims, dims, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_dims_create @ \"//routineN)\n\n      ! FIX ME.  Quick hack to avoid problems with realspace grids for compilers\n      ! like IBM that actually reorder the processors when creating the new\n      ! communicator\n      reorder = .FALSE.\n      period = .TRUE.\n      CALL mpi_cart_create(comm_old%handle, ndims, dims, period, reorder, comm_cart%handle, &\n                           ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_cart_create @ \"//routineN)\n\n      IF (comm_cart /= MP_COMM_NULL) THEN\n         debug_comm_count = debug_comm_count + 1\n         CALL mpi_cart_get(comm_cart%handle, ndims, dims, period, pos, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_cart_get @ \"//routineN)\n      END IF\n#else\n      pos(1:ndims) = 0\n      dims = 1\n      comm_cart = mp_comm_self\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_cart_create\n\n!..mp_cart_coords\n   SUBROUTINE mp_cart_coords(comm, rank, coords)\n\n      TYPE(mp_comm_type), INTENT(IN)                     :: comm\n      INTEGER, INTENT(IN)                                :: rank\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(OUT)     :: coords\n\n      INTEGER                                            :: ierr, m\n\n      ierr = 0\n\n      m = SIZE(coords)\n#if defined(__parallel)\n      CALL mpi_cart_coords(comm%handle, rank, m, coords, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_cart_coords @ mp_cart_coords\")\n#else\n      coords = 0\n      MARK_USED(rank)\n      MARK_USED(comm)\n#endif\n\n   END SUBROUTINE mp_cart_coords\n\n!..mp_comm_compare\n   SUBROUTINE mp_comm_compare(comm1, comm2, res)\n\n      TYPE(mp_comm_type), INTENT(IN)                                :: comm1, comm2\n      INTEGER, INTENT(OUT)                               :: res\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_compare'\n\n      INTEGER                                            :: handle, ierr, iout\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n      iout = 0\n      res = 0\n#if defined(__parallel)\n      CALL mpi_comm_compare(comm1%handle, comm2%handle, iout, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_compare @ \"//routineN)\n      SELECT CASE (iout)\n      CASE (MPI_IDENT)\n         res = 0\n      CASE (MPI_CONGRUENT)\n         res = 1\n      CASE (MPI_SIMILAR)\n         res = 2\n      CASE (MPI_UNEQUAL)\n         res = 3\n      CASE default\n         res = 4\n      END SELECT\n#else\n      MARK_USED(comm1)\n      MARK_USED(comm2)\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_comm_compare\n\n!..mp_cart_sub\n   SUBROUTINE mp_cart_sub(comm, rdim, sub_comm)\n\n      TYPE(mp_comm_type), INTENT(IN)                                :: comm\n      LOGICAL, DIMENSION(:), CONTIGUOUS, INTENT(IN)      :: rdim\n      TYPE(mp_comm_type), INTENT(OUT)                               :: sub_comm\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_cart_sub'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n      sub_comm = comm\n#if defined(__parallel)\n      CALL mpi_cart_sub(comm%handle, rdim, sub_comm%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_cart_sub @ \"//routineN)\n      debug_comm_count = debug_comm_count + 1\n#else\n      MARK_USED(comm)\n      MARK_USED(rdim)\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_cart_sub\n\n!..mp_comm_free\n   SUBROUTINE mp_comm_free(comm)\n\n      TYPE(mp_comm_type), INTENT(INOUT)                             :: comm\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_free'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      CALL mpi_comm_free(comm%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_free @ \"//routineN)\n      debug_comm_count = debug_comm_count - 1\n#else\n      MARK_USED(comm)\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_comm_free\n\n!..mp_comm_dup\n   SUBROUTINE mp_comm_dup(comm1, comm2)\n\n      TYPE(mp_comm_type), INTENT(IN)                                :: comm1\n      TYPE(mp_comm_type), INTENT(OUT)                               :: comm2\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_dup'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      CALL mpi_comm_dup(comm1%handle, comm2%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_dup @ \"//routineN)\n      debug_comm_count = debug_comm_count + 1\n#else\n      comm2 = comm1\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_comm_dup\n\n!..mp_rank_compare\n   SUBROUTINE mp_rank_compare(comm1, comm2, rank)\n\n      TYPE(mp_comm_type), INTENT(IN)                      :: comm1, comm2\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(OUT) :: rank\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_rank_compare'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: i, n, n1, n2\n      INTEGER, ALLOCATABLE, DIMENSION(:)       :: rin\n      MPI_GROUP_TYPE                           :: g1, g2\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n      rank = 0\n#if defined(__parallel)\n      CALL mpi_comm_size(comm1%handle, n1, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_size @ \"//routineN)\n      CALL mpi_comm_size(comm2%handle, n2, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_size @ \"//routineN)\n      n = MAX(n1, n2)\n      CALL mpi_comm_group(comm1%handle, g1, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_group @ \"//routineN)\n      CALL mpi_comm_group(comm2%handle, g2, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_group @ \"//routineN)\n      ALLOCATE (rin(0:n - 1), STAT=ierr)\n      IF (ierr /= 0) &\n         DBCSR_ABORT(\"allocate @ \"//routineN)\n      DO i = 0, n - 1\n         rin(i) = i\n      END DO\n      CALL mpi_group_translate_ranks(g1, n, rin, g2, rank, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, &\n                                  \"mpi_group_translate_rank @ \"//routineN)\n      CALL mpi_group_free(g1, ierr)\n      IF (ierr /= 0) &\n         DBCSR_ABORT(\"group_free @ \"//routineN)\n      CALL mpi_group_free(g2, ierr)\n      IF (ierr /= 0) &\n         DBCSR_ABORT(\"group_free @ \"//routineN)\n      DEALLOCATE (rin)\n#else\n      MARK_USED(comm1)\n      MARK_USED(comm2)\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_rank_compare\n\n!..mp_dims_create\n   SUBROUTINE mp_dims_create(nodes, dims)\n\n      INTEGER, INTENT(IN)                                :: nodes\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(INOUT)   :: dims\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_dims_create'\n\n      INTEGER                                            :: handle, ierr, ndim\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n      ndim = SIZE(dims)\n#if defined(__parallel)\n      IF (ANY(dims == 0)) CALL mpi_dims_create(nodes, ndim, dims, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_dims_create @ \"//routineN)\n#else\n      dims = 1\n      MARK_USED(nodes)\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_dims_create\n\n!..mp_cart_rank\n   SUBROUTINE mp_cart_rank(group, pos, rank)\n      TYPE(mp_comm_type), INTENT(IN)                                :: group\n      INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN)      :: pos\n      INTEGER, INTENT(OUT)                               :: rank\n\n      INTEGER                                            :: ierr\n\n      ierr = 0\n\n#if defined(__parallel)\n      CALL mpi_cart_rank(group%handle, pos, rank, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_cart_rank @ mp_cart_rank\")\n#else\n      rank = 0\n      MARK_USED(group)\n      MARK_USED(pos)\n#endif\n\n   END SUBROUTINE mp_cart_rank\n\n   SUBROUTINE mp_wait(request)\n      !! waits for completion of the given request\n      !! @note\n      !! see isendrecv\n      !! @endnote\n\n      TYPE(mp_request_type), INTENT(inout)                             :: request\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_wait'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      CALL mpi_wait(request%handle, MPI_STATUS_IGNORE, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_wait @ \"//routineN)\n#else\n      MARK_USED(request)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_wait\n\n   SUBROUTINE mp_waitall_1(requests)\n      !! waits for completion of the given requests\n      !! @note\n      !! see isendrecv\n      !! @endnote\n\n      TYPE(mp_request_type), DIMENSION(:), INTENT(inout) :: requests\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_waitall_1'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: count\n      MPI_STATUS_TYPE_ARRAY(SIZE(requests))    :: status\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      count = SIZE(requests)\n      CALL mpi_waitall_internal(count, requests, status, ierr) ! MPI_STATUSES_IGNORE openmpi workaround\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_waitall @ \"//routineN)\n#else\n      MARK_USED(requests)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_waitall_1\n\n   SUBROUTINE mp_waitall_2(requests)\n      !! waits for completion of the given requests\n      TYPE(mp_request_type), DIMENSION(:, :), INTENT(inout)  :: requests\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_waitall_2'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: count\n      MPI_STATUS_TYPE_ARRAY(SIZE(requests))    :: status\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      count = SIZE(requests)\n\n      CALL mpi_waitall_internal(count, requests, status, ierr) ! MPI_STATUSES_IGNORE openmpi workaround\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_waitall @ \"//routineN)\n#else\n      MARK_USED(requests)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_waitall_2\n\n#if defined(__parallel)\n   SUBROUTINE mpi_waitall_internal(count, array_of_requests, array_of_statuses, ierr)\n      !! wrapper needed to deal with interfaces as present in openmpi 1.8.1\n      !! the issue is with the rank or requests\n\n      INTEGER, INTENT(in)                                :: count\n      TYPE(mp_request_type), DIMENSION(count), INTENT(inout)           :: array_of_requests\n      MPI_STATUS_TYPE_ARRAY(*), INTENT(inout)            :: array_of_statuses\n      INTEGER, INTENT(out)                               :: ierr\n\n      INTEGER :: i\n      MPI_REQUEST_TYPE, DIMENSION(count) :: request_handles\n\n      DO i = 1, count\n         request_handles(i) = array_of_requests(i)%handle\n      END DO\n\n      CALL mpi_waitall(count, request_handles, array_of_statuses, ierr)\n\n      DO i = 1, count\n         array_of_requests(i)%handle = request_handles(i)\n      END DO\n\n   END SUBROUTINE mpi_waitall_internal\n#endif\n\n   SUBROUTINE mp_waitany(requests, completed)\n      !! waits for completion of any of the given requests\n      TYPE(mp_request_type), DIMENSION(:), INTENT(inout) :: requests\n      INTEGER, INTENT(out)                     :: completed\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_waitany'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: count, i\n      MPI_REQUEST_TYPE, DIMENSION(SIZE(requests))       :: request_handles\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      count = SIZE(requests)\n\n      DO i = 1, count\n         request_handles(i) = requests(i)%handle\n      END DO\n\n      CALL mpi_waitany(count, request_handles, completed, MPI_STATUS_IGNORE, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_waitany @ \"//routineN)\n\n      DO i = 1, count\n         requests(i)%handle = request_handles(i)\n      END DO\n#else\n      MARK_USED(requests)\n      completed = 1\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_waitany\n\n   FUNCTION mp_testall_tv(requests) RESULT(flag)\n      !! Tests for completion of the given requests.\n      !! We use mpi_test so that we can use a single status.\n\n      TYPE(mp_request_type), DIMENSION(:)   :: requests\n         !! the list of requests to test\n      LOGICAL                               :: flag\n         !! logical which determines if requests are complete\n\n      INTEGER                               :: ierr\n\n#if defined(__parallel)\n      INTEGER                               :: i\n      LOGICAL, DIMENSION(:), ALLOCATABLE    :: flags\n#endif\n\n      ierr = 0\n      flag = .TRUE.\n\n#if defined(__parallel)\n      ALLOCATE (flags(SIZE(requests)))\n      DO i = 1, SIZE(requests)\n         CALL mpi_test(requests(i)%handle, flags(i), MPI_STATUS_IGNORE, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_test @ mp_testall_tv\")\n         flag = flag .AND. flags(i)\n      END DO\n      DEALLOCATE (flags)\n#else\n      requests = mp_request_null\n#endif\n   END FUNCTION mp_testall_tv\n\n   SUBROUTINE mp_test_1(request, flag)\n      !! Tests for completion of the given request.\n\n      TYPE(mp_request_type), INTENT(inout)               :: request\n         !! the request\n      LOGICAL, INTENT(out)                               :: flag\n         !! logical which determines if the request is completed\n\n      INTEGER                                            :: ierr\n\n      ierr = 0\n\n#if defined(__parallel)\n      CALL mpi_test(request%handle, flag, MPI_STATUS_IGNORE, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_test @ mp_test_1\")\n#else\n      MARK_USED(request)\n      flag = .TRUE.\n#endif\n   END SUBROUTINE mp_test_1\n\n   SUBROUTINE mp_testany_1(requests, completed, flag)\n      !! tests for completion of the given requests\n      TYPE(mp_request_type), DIMENSION(:), INTENT(inout) :: requests\n      INTEGER, INTENT(out), OPTIONAL           :: completed\n      LOGICAL, INTENT(out), OPTIONAL           :: flag\n\n      INTEGER                                  :: ierr\n#if defined(__parallel)\n      INTEGER                                  :: completed_l, count\n      LOGICAL                                  :: flag_l\n#endif\n\n      ierr = 0\n\n#if defined(__parallel)\n      count = SIZE(requests)\n\n      CALL mpi_testany_internal(count, requests, completed_l, flag_l, MPI_STATUS_IGNORE, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_testany_1 @ mp_testany\")\n\n      IF (PRESENT(completed)) completed = completed_l\n      IF (PRESENT(flag)) flag = flag_l\n#else\n      MARK_USED(requests)\n      IF (PRESENT(completed)) completed = 1\n      IF (PRESENT(flag)) flag = .TRUE.\n#endif\n   END SUBROUTINE mp_testany_1\n\n   SUBROUTINE mp_testany_2(requests, completed, flag)\n      !! tests for completion of the given requests\n      TYPE(mp_request_type), DIMENSION(:, :), INTENT(inout)   :: requests\n      INTEGER, INTENT(out), OPTIONAL           :: completed\n      LOGICAL, INTENT(out), OPTIONAL           :: flag\n\n      INTEGER                                  :: ierr\n#if defined(__parallel)\n      INTEGER                                  :: completed_l, count\n      LOGICAL                                  :: flag_l\n#endif\n\n      ierr = 0\n\n#if defined(__parallel)\n      count = SIZE(requests)\n\n      CALL mpi_testany_internal(count, requests, completed_l, flag_l, MPI_STATUS_IGNORE, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_testany_2 @ mp_testany\")\n\n      IF (PRESENT(completed)) completed = completed_l\n      IF (PRESENT(flag)) flag = flag_l\n#else\n      MARK_USED(requests)\n      IF (PRESENT(completed)) completed = 1\n      IF (PRESENT(flag)) flag = .TRUE.\n#endif\n   END SUBROUTINE mp_testany_2\n\n#if defined(__parallel)\n   SUBROUTINE mpi_testany_internal(count, array_of_requests, index, flag, status, ierr)\n      !! wrapper needed to deal with interfaces as present in openmpi 1.8.1\n      !! the issue is with the rank or requests\n\n      INTEGER, INTENT(in)                                :: count\n      TYPE(mp_request_type), DIMENSION(count), INTENT(inout)           :: array_of_requests\n      INTEGER, INTENT(out)                               :: index\n      LOGICAL, INTENT(out)                               :: flag\n      MPI_STATUS_TYPE                                    :: status\n      INTEGER, INTENT(out)                               :: ierr\n\n      INTEGER :: i\n      MPI_REQUEST_TYPE, DIMENSION(count) :: request_handles\n\n      DO i = 1, count\n         request_handles(i) = array_of_requests(i)%handle\n      END DO\n\n      CALL mpi_testany(count, request_handles, index, flag, status, ierr)\n\n      DO i = 1, count\n         array_of_requests(i)%handle = request_handles(i)\n      END DO\n\n   END SUBROUTINE mpi_testany_internal\n#endif\n\n   SUBROUTINE mp_comm_split_direct(comm, sub_comm, color, key)\n      !! the direct way to split a communicator each color is a sub_comm,\n      !! the rank order is accoring to the order in the orig comm\n\n      TYPE(mp_comm_type), INTENT(in)                                :: comm\n      TYPE(mp_comm_type), INTENT(OUT)                               :: sub_comm\n      INTEGER, INTENT(in)                                :: color\n      INTEGER, INTENT(in), OPTIONAL                      :: key\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_split_direct'\n\n      INTEGER                                            :: handle, ierr, my_key\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n      my_key = 0\n#if defined(__parallel)\n      IF (PRESENT(key)) my_key = key\n      CALL mpi_comm_split(comm%handle, color, my_key, sub_comm%handle, ierr)\n      debug_comm_count = debug_comm_count + 1\n      IF (ierr /= mpi_success) CALL mp_stop(ierr, routineN)\n#else\n      CALL mp_comm_dup(comm, sub_comm)\n      MARK_USED(color)\n      MARK_USED(key)\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_comm_split_direct\n\n   SUBROUTINE mp_comm_split(comm, sub_comm, ngroups, group_distribution, &\n                            subgroup_min_size, n_subgroups, group_partition, stride)\n      !! splits the given communicator in group in subgroups trying to organize\n      !! them in a way that the communication within each subgroup is\n      !! efficient (but not necessarily the communication between subgroups)\n      !! @note\n      !! at least one of subgroup_min_size and n_subgroups is needed,\n      !! the other default to the value needed to use most processors.\n      !! if less cpus are present than needed for subgroup min size, n_subgroups,\n      !! just one comm is created that contains all cpus\n      !! @endnote\n\n      TYPE(mp_comm_type), INTENT(in)                      :: comm\n         !! the mpi communicator that you want to split\n      TYPE(mp_comm_type), INTENT(out)                     :: sub_comm\n         !! the communicator for the subgroup (created, needs to be freed later)\n      INTEGER, INTENT(out)                     :: ngroups\n         !! actual number of groups\n      INTEGER, DIMENSION(0:)                   :: group_distribution\n         !! input  : allocated with array with the nprocs entries (0 .. nprocs-1)\n      INTEGER, INTENT(in), OPTIONAL            :: subgroup_min_size, n_subgroups\n         !! the minimum size of the subgroup\n         !! the number of subgroups wanted\n      INTEGER, DIMENSION(0:), OPTIONAL         :: group_partition\n         !! n_subgroups sized array containing the number of cpus wanted per group. should match the total number of cpus (only used\n         !! if present and associated) (0..ngroups-1)\n      INTEGER, OPTIONAL                        :: stride\n         !! create groups using a stride (default=1) through the ranks of the comm to be split.\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_comm_split', routineP = moduleN//':'//routineN\n\n      INTEGER                                  :: handle, ierr, mepos, nnodes\n#if defined(__parallel)\n      INTEGER                                  :: color, i, j, k, &\n                                                  my_subgroup_min_size, &\n                                                  istride, local_stride, irank\n      INTEGER, DIMENSION(:), ALLOCATABLE       :: rank_permutation\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n      ! actual number of groups\n\n      IF (.NOT. PRESENT(subgroup_min_size) .AND. .NOT. PRESENT(n_subgroups)) THEN\n         DBCSR_ABORT(routineP//\" missing arguments\")\n      END IF\n      IF (PRESENT(subgroup_min_size) .AND. PRESENT(n_subgroups)) THEN\n         DBCSR_ABORT(routineP//\" too many arguments\")\n      END IF\n\n      CALL mp_environ(nnodes, mepos, comm)\n\n      IF (UBOUND(group_distribution, 1) .NE. nnodes - 1) THEN\n         DBCSR_ABORT(routineP//\" group_distribution wrong bounds\")\n      END IF\n\n#if defined(__parallel)\n      IF (PRESENT(subgroup_min_size)) THEN\n         IF (subgroup_min_size < 0 .OR. subgroup_min_size > nnodes) THEN\n            DBCSR_ABORT(routineP//\" subgroup_min_size too small or too large\")\n         END IF\n         ngroups = nnodes/subgroup_min_size\n         my_subgroup_min_size = subgroup_min_size\n      ELSE ! n_subgroups\n         IF (n_subgroups <= 0) THEN\n            DBCSR_ABORT(routineP//\" n_subgroups too small\")\n         END IF\n         IF (nnodes/n_subgroups > 0) THEN ! we have a least one cpu per group\n            ngroups = n_subgroups\n         ELSE ! well, only one group then\n            ngroups = 1\n         END IF\n         my_subgroup_min_size = nnodes/ngroups\n      END IF\n\n      ! rank_permutation: is a permutation of ranks, so that groups are not necessarily continuous in rank of the master group\n      ! 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\n      ! (by setting stride equal to the number of mpi ranks per node), or by sharing  a node between two groups (stride 2).\n      ALLOCATE (rank_permutation(0:nnodes - 1))\n      local_stride = 1\n      IF (PRESENT(stride)) local_stride = stride\n      k = 0\n      DO istride = 1, local_stride\n         DO irank = istride - 1, nnodes - 1, local_stride\n            rank_permutation(k) = irank\n            k = k + 1\n         END DO\n      END DO\n\n      DO i = 0, nnodes - 1\n         group_distribution(rank_permutation(i)) = MIN(i/my_subgroup_min_size, ngroups - 1)\n      END DO\n      ! even the user gave a partition, see if we can use it to overwrite this choice\n      IF (PRESENT(group_partition)) THEN\n         IF (ALL(group_partition > 0) .AND. (SUM(group_partition) .EQ. nnodes) .AND. (ngroups == SIZE(group_partition))) THEN\n            k = 0\n            DO i = 0, SIZE(group_partition) - 1\n               DO j = 1, group_partition(i)\n                  group_distribution(rank_permutation(k)) = i\n                  k = k + 1\n               END DO\n            END DO\n         ELSE\n            ! just ignore silently as we have reasonable defaults. Probably a warning would not be to bad\n         END IF\n      END IF\n      color = group_distribution(mepos)\n      CALL mpi_comm_split(comm%handle, color, 0, sub_comm%handle, ierr)\n      debug_comm_count = debug_comm_count + 1\n      IF (ierr /= mpi_success) CALL mp_stop(ierr, \"in \"//routineP//\" split\")\n#else\n      CALL mp_comm_dup(comm, sub_comm)\n      group_distribution(0) = 0\n      ngroups = 1\n      MARK_USED(stride)\n      MARK_USED(group_partition)\n#endif\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_comm_split\n\n   SUBROUTINE mp_probe(source, comm, tag)\n      !! probes for an incoming message with any tag\n\n      INTEGER                                  :: source\n         !! the source of the possible incoming message, if MP_ANY_SOURCE it is a blocking one and return value is the source of the\n         !! next incoming message if source is a different value it is a non-blocking probe retuning MP_ANY_SOURCE if there is no\n         !! incoming message\n      TYPE(mp_comm_type), INTENT(IN)           :: comm\n         !! the communicator\n      INTEGER, INTENT(OUT)                     :: tag\n         !! the tag of the incoming message\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_probe'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      MPI_STATUS_TYPE                          :: status_single\n      LOGICAL                                  :: flag\n#endif\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      ierr = 0\n#if defined(__parallel)\n      IF (source .EQ. mp_any_source) THEN\n         CALL mpi_probe(mp_any_source, mp_any_tag, comm%handle, status_single, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_probe @ \"//routineN)\n         source = status_single MPI_STATUS_EXTRACT(MPI_SOURCE)\n         tag = status_single MPI_STATUS_EXTRACT(MPI_TAG)\n      ELSE\n         flag = .FALSE.\n         CALL mpi_iprobe(source, mp_any_tag, comm%handle, flag, status_single, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iprobe @ \"//routineN)\n         IF (flag .EQV. .FALSE.) THEN\n            source = mp_any_source\n            tag = -1 !status_single MPI_STATUS_EXTRACT(MPI_TAG) ! in case of flag==false status is undefined\n         ELSE\n            tag = status_single MPI_STATUS_EXTRACT(MPI_TAG)\n         END IF\n      END IF\n#else\n      tag = -1\n      MARK_USED(comm)\n      MARK_USED(source)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_probe\n\n! **************************************************************************************************\n! Here come the data routines with none of the standard data types.\n! **************************************************************************************************\n\n   SUBROUTINE mp_bcast_b(msg, source, gid)\n      LOGICAL                                            :: msg\n      INTEGER                                            :: source\n      TYPE(mp_comm_type), INTENT(IN)                     :: gid\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_b'\n\n      INTEGER                                            :: handle, ierr, msglen\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n      msglen = 1\n#if defined(__parallel)\n      CALL mpi_bcast(msg, msglen, MPI_LOGICAL, source, gid%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_bcast @ \"//routineN)\n      CALL add_perf(perf_id=2, msg_size=msglen*loglen)\n#else\n      MARK_USED(msg)\n      MARK_USED(source)\n      MARK_USED(gid)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_bcast_b\n\n   SUBROUTINE mp_bcast_bv(msg, source, gid)\n      LOGICAL, CONTIGUOUS                                :: msg(:)\n      INTEGER                                            :: source\n      TYPE(mp_comm_type), INTENT(IN)                     :: gid\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_bv'\n\n      INTEGER                                            :: handle, ierr, msglen\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n      msglen = SIZE(msg)\n#if defined(__parallel)\n      CALL mpi_bcast(msg, msglen, MPI_LOGICAL, source, gid%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_bcast @ \"//routineN)\n      CALL add_perf(perf_id=2, msg_size=msglen*loglen)\n#else\n      MARK_USED(source)\n      MARK_USED(gid)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_bcast_bv\n\n   SUBROUTINE mp_isend_bv(msgin, dest, comm, request, tag)\n      !! Non-blocking send of logical vector data\n      !! @note\n      !! see mp_irecv_iv\n      !! arrays can be pointers or assumed shape, but they must be contiguous!\n      !! @endnote\n\n      LOGICAL, DIMENSION(:), CONTIGUOUS        :: msgin\n         !! the input message\n      INTEGER, INTENT(IN)                      :: dest\n         !! the destination processor\n      TYPE(mp_comm_type), INTENT(IN)           :: comm\n         !! the communicator object\n      TYPE(mp_request_type), INTENT(out)       :: request\n         !! communication request index\n      INTEGER, INTENT(in), OPTIONAL            :: tag\n         !! message tag\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isend_bv'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: msglen, my_tag\n      LOGICAL                                  :: foo(1)\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      my_tag = 0\n      IF (PRESENT(tag)) my_tag = tag\n\n      msglen = SIZE(msgin, 1)\n      IF (msglen > 0) THEN\n         CALL mpi_isend(msgin, msglen, MPI_LOGICAL, dest, my_tag, &\n                        comm%handle, request%handle, ierr)\n      ELSE\n         CALL mpi_isend(foo, msglen, MPI_LOGICAL, dest, my_tag, &\n                        comm%handle, request%handle, ierr)\n      END IF\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_isend @ \"//routineN)\n\n      CALL add_perf(perf_id=11, msg_size=msglen*loglen)\n#else\n      DBCSR_ABORT(\"mp_isend called in non parallel case\")\n      MARK_USED(msgin)\n      MARK_USED(dest)\n      MARK_USED(comm)\n      MARK_USED(request)\n      MARK_USED(tag)\n      request = mp_request_null\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_isend_bv\n\n   SUBROUTINE mp_irecv_bv(msgout, source, comm, request, tag)\n      !! Non-blocking receive of logical vector data\n      !! @note\n      !! see mp_irecv_iv\n      !! arrays can be pointers or assumed shape, but they must be contiguous!\n      !! @endnote\n\n      LOGICAL, DIMENSION(:), CONTIGUOUS        :: msgout\n         !! the received message\n      INTEGER, INTENT(IN)                      :: source\n         !! the source processor\n      TYPE(mp_comm_type), INTENT(IN)           :: comm\n         !! the communicator object\n      TYPE(mp_request_type), INTENT(out)                     :: request\n         !! communication request index\n      INTEGER, INTENT(in), OPTIONAL            :: tag\n         !! message tag\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_irecv_bv'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: msglen, my_tag\n      LOGICAL                                  :: foo(1)\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      my_tag = 0\n      IF (PRESENT(tag)) my_tag = tag\n\n      msglen = SIZE(msgout, 1)\n      IF (msglen > 0) THEN\n         CALL mpi_irecv(msgout, msglen, MPI_LOGICAL, source, my_tag, &\n                        comm%handle, request%handle, ierr)\n      ELSE\n         CALL mpi_irecv(foo, msglen, MPI_LOGICAL, source, my_tag, &\n                        comm%handle, request%handle, ierr)\n      END IF\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_ircv @ \"//routineN)\n\n      CALL add_perf(perf_id=12, msg_size=msglen*loglen)\n#else\n      DBCSR_ABORT(\"mp_irecv called in non parallel case\")\n      MARK_USED(msgout)\n      MARK_USED(source)\n      MARK_USED(comm)\n      MARK_USED(request)\n      MARK_USED(tag)\n      request = mp_request_null\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_irecv_bv\n\n   SUBROUTINE mp_bcast_av(msg, source, gid)\n      CHARACTER(LEN=*)                         :: msg\n      INTEGER                                  :: source\n      TYPE(mp_comm_type), INTENT(IN)           :: gid\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_av'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: i, msglen, numtask, taskid\n      INTEGER, DIMENSION(:), ALLOCATABLE       :: imsg\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n\n      CALL mp_environ(numtask, taskid, gid)\n      IF (taskid == source) msglen = LEN_TRIM(msg)\n\n      CALL mp_bcast(msglen, source, gid)\n      ! this is a workaround to avoid problems on the T3E\n      ! at the moment we have a data alignment error when trying to\n      ! broadcast characters on the T3E (not always!)\n      ! JH 19/3/99 on galileo\n      ! CALL mpi_bcast(msg,msglen,MPI_CHARACTER,source,gid,ierr)\n      ALLOCATE (imsg(1:msglen))\n      DO i = 1, msglen\n         imsg(i) = ICHAR(msg(i:i))\n      END DO\n      CALL mpi_bcast(imsg, msglen, MPI_INTEGER, source, gid%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_bcast @ \"//routineN)\n      msg = \"\"\n      DO i = 1, msglen\n         msg(i:i) = CHAR(imsg(i))\n      END DO\n      DEALLOCATE (imsg)\n      CALL add_perf(perf_id=2, msg_size=msglen*charlen)\n#else\n      MARK_USED(msg)\n      MARK_USED(source)\n      MARK_USED(gid)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_bcast_av\n\n   SUBROUTINE mp_bcast_am(msg, source, gid)\n      CHARACTER(LEN=*)                         :: msg(:)\n      INTEGER                                  :: source\n      TYPE(mp_comm_type), INTENT(IN)           :: gid\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_am'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: i, j, k, msglen, msgsiz, &\n                                                  numtask, taskid\n      INTEGER, ALLOCATABLE                     :: imsg(:), imsglen(:)\n#endif\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      CALL mp_environ(numtask, taskid, gid)\n      msgsiz = SIZE(msg)\n      ! Determine size of the minimum array of integers to broadcast the string\n      ALLOCATE (imsglen(1:msgsiz))\n      DO j = 1, msgsiz\n         IF (taskid == source) imsglen(j) = LEN_TRIM(msg(j))\n      END DO\n      CALL mp_bcast(imsglen, source, gid)\n      msglen = SUM(imsglen)\n      ! this is a workaround to avoid problems on the T3E\n      ! at the moment we have a data alignment error when trying to\n      ! broadcast characters on the T3E (not always!)\n      ! JH 19/3/99 on galileo\n      ! CALL mpi_bcast(msg,msglen,MPI_CHARACTER,source,gid,ierr)\n      ALLOCATE (imsg(1:msglen))\n      k = 0\n      DO j = 1, msgsiz\n         DO i = 1, imsglen(j)\n            k = k + 1\n            imsg(k) = ICHAR(msg(j) (i:i))\n         END DO\n      END DO\n      CALL mpi_bcast(imsg, msglen, MPI_INTEGER, source, gid%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_bcast @ \"//routineN)\n      msg = \"\"\n      k = 0\n      DO j = 1, msgsiz\n         DO i = 1, imsglen(j)\n            k = k + 1\n            msg(j) (i:i) = CHAR(imsg(k))\n         END DO\n      END DO\n      DEALLOCATE (imsg)\n      DEALLOCATE (imsglen)\n      CALL add_perf(perf_id=2, msg_size=msglen*charlen*msgsiz)\n#else\n      MARK_USED(msg)\n      MARK_USED(source)\n      MARK_USED(gid)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_bcast_am\n\n   SUBROUTINE mp_minloc_dv(msg, gid)\n      !! Finds the location of the minimal element in a vector.\n      !!\n      !! MPI mapping\n      !! mpi_allreduce with the MPI_MINLOC reduction function identifier\n      !!\n      !! Invalid data types\n      !! This routine is invalid for (int_8) data!\n\n      REAL(kind=real_8), CONTIGUOUS, INTENT(INOUT)         :: msg(:)\n         !! Find location of maximum element among these data (input).\n      TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! Message passing environment identifier\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_minloc_dv'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: msglen\n      REAL(kind=real_8), ALLOCATABLE           :: res(:)\n#endif\n\n      ierr = 0\n      IF (\"d\" .EQ. \"l\" .AND. real_8 .EQ. int_8) THEN\n         DBCSR_ABORT(\"Minimal location not available with long integers @ \"//routineN)\n      END IF\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      msglen = SIZE(msg)\n      ALLOCATE (res(1:msglen), STAT=ierr)\n      IF (ierr /= 0) &\n         DBCSR_ABORT(\"allocate @ \"//routineN)\n      CALL mpi_allreduce(msg, res, msglen/2, MPI_2DOUBLE_PRECISION, MPI_MINLOC, gid%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n      msg = res\n      DEALLOCATE (res)\n      CALL add_perf(perf_id=3, msg_size=msglen*real_8_size)\n#else\n      MARK_USED(msg)\n      MARK_USED(gid)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_minloc_dv\n\n   SUBROUTINE mp_maxloc_dv(msg, gid)\n      !! Finds the location of the maximal element in a vector.\n      !!\n      !! MPI mapping\n      !! mpi_allreduce with the MPI_MAXLOC reduction function identifier\n      !!\n      !! Invalid data types\n      !! This routine is invalid for (int_8) data!\n\n      REAL(kind=real_8), CONTIGUOUS, INTENT(INOUT)         :: msg(:)\n         !! Find location of maximum element among these data (input).\n      TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! Message passing environment identifier\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_maxloc_dv'\n\n      INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n      INTEGER                                  :: msglen\n      REAL(kind=real_8), ALLOCATABLE           :: res(:)\n#endif\n\n      ierr = 0\n      IF (\"d\" .EQ. \"l\" .AND. real_8 .EQ. int_8) THEN\n         DBCSR_ABORT(\"Maximal location not available with long integers @ \"//routineN)\n      END IF\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      msglen = SIZE(msg)\n      ALLOCATE (res(1:msglen))\n      CALL mpi_allreduce(msg, res, msglen/2, MPI_2DOUBLE_PRECISION, MPI_MAXLOC, gid%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n      msg = res\n      DEALLOCATE (res)\n      CALL add_perf(perf_id=3, msg_size=msglen*real_8_size)\n#else\n      MARK_USED(msg)\n      MARK_USED(gid)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_maxloc_dv\n\n   SUBROUTINE mp_sum_b(msg, gid)\n      !! Logical OR reduction\n      !!\n      !! MPI mapping\n      !! mpi_allreduce\n\n      LOGICAL, INTENT(INOUT)                             :: msg\n         !! Datum to perform inclusive disjunction (input) and resultant inclusive disjunction (output)\n      TYPE(mp_comm_type), INTENT(IN)                                :: gid\n         !! Message passing environment identifier\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_b'\n\n      INTEGER                                            :: handle, ierr, msglen\n\n      CALL timeset(routineN, handle)\n      ierr = 0\n      msglen = 1\n#if defined(__parallel)\n      CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, MPI_LOGICAL, MPI_LOR, gid%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n#else\n      MARK_USED(msg)\n      MARK_USED(gid)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_sum_b\n\n   SUBROUTINE mp_sum_bv(msg, gid)\n      !! Logical OR reduction\n      !!\n      !! MPI mapping\n      !! mpi_allreduce\n\n      LOGICAL, DIMENSION(:), CONTIGUOUS, INTENT(INOUT)   :: msg\n         !! Datum to perform inclusive disjunction (input) and resultant inclusive disjunction (output)\n      TYPE(mp_comm_type), INTENT(IN)                                :: gid\n         !! Message passing environment identifier\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_bv'\n\n      INTEGER                                            :: handle, ierr, msglen\n\n      CALL timeset(routineN, handle)\n      ierr = 0\n      msglen = SIZE(msg)\n#if defined(__parallel)\n      IF (msglen .GT. 0) THEN\n         CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, MPI_LOGICAL, MPI_LOR, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n      END IF\n#else\n      MARK_USED(msg)\n      MARK_USED(gid)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_sum_bv\n\n   SUBROUTINE mp_isum_bv(msg, gid, request)\n      !! Logical OR reduction\n      !!\n      !! MPI mapping\n      !! mpi_allreduce\n\n      LOGICAL, DIMENSION(:), CONTIGUOUS, INTENT(INOUT)   :: msg\n         !! Datum to perform inclusive disjunction (input) and resultant inclusive disjunction (output)\n      TYPE(mp_comm_type), INTENT(IN)                     :: gid\n         !! Message passing environment identifier\n      TYPE(mp_request_type), INTENT(INOUT)               :: request\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isum_bv'\n\n      INTEGER                                            :: handle, ierr, msglen\n\n      CALL timeset(routineN, handle)\n      ierr = 0\n      msglen = SIZE(msg)\n#if defined(__parallel)\n      IF (msglen .GT. 0) THEN\n         CALL mpi_iallreduce(MPI_IN_PLACE, msg, msglen, MPI_LOGICAL, MPI_LOR, gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallreduce @ \"//routineN)\n      ELSE\n         request = mp_request_null\n      END IF\n#else\n      MARK_USED(msg)\n      MARK_USED(gid)\n      MARK_USED(request)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_isum_bv\n\n   SUBROUTINE mp_get_library_version(version, resultlen)\n      !! Get Version of the MPI Library (MPI 3)\n\n      CHARACTER(LEN=*), INTENT(OUT)                      :: version\n         !! Version of the library, declared as CHARACTER(LEN=mp_max_library_version_string)\n      INTEGER, INTENT(OUT)                               :: resultlen\n         !! Length (in printable characters) of the result returned in version (integer)\n\n#if defined(__parallel)\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_get_library_version'\n\n      INTEGER                                            :: ierr\n\n      ierr = 0\n      CALL mpi_get_library_version(version, resultlen, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_get_library_version @ \"//routineN)\n#else\n      version = ''\n      resultlen = 0\n#endif\n   END SUBROUTINE mp_get_library_version\n\n   SUBROUTINE mp_get_processor_name(procname, resultlen)\n      !! Get a unique specifier for the actual (as opposed to virtual) node (MPI 2.1)\n\n      CHARACTER(LEN=*), INTENT(OUT)                      :: procname\n         !! Name of processor\n      INTEGER, OPTIONAL, INTENT(OUT)                     :: resultlen\n         !! Length (in characters) of procname (INTEGER)\n\n#if defined(__parallel)\n      INTEGER                                            :: namelen, ierr\n\n      CALL mpi_get_processor_name(procname, namelen, ierr)\n      IF (ierr .EQ. 0) THEN\n         IF (PRESENT(resultlen)) resultlen = namelen\n      ELSE\n#endif\n         CALL m_hostnm(procname)\n         IF (PRESENT(resultlen)) resultlen = LEN_TRIM(procname)\n#if defined(__parallel)\n      END IF\n#endif\n   END SUBROUTINE mp_get_processor_name\n\n   SUBROUTINE mp_file_open(groupid, fh, filepath, amode_status, info)\n      !! Opens a file\n      !!\n      !! MPI-I/O mapping  mpi_file_open\n      !!\n      !! STREAM-I/O mapping  OPEN\n\n      TYPE(mp_comm_type), INTENT(IN)           :: groupid\n         !! message passing environment identifier\n      TYPE(mp_file_type), INTENT(OUT)          :: fh\n         !! file handle (file storage unit)\n      CHARACTER(LEN=*), INTENT(IN)             :: filepath\n         !! path to the file\n      INTEGER, INTENT(IN)                      :: amode_status\n         !! access mode\n      TYPE(mp_info_type), INTENT(IN), OPTIONAL :: info\n         !! info object\n\n      INTEGER                                  :: ierr, istat\n#if defined(__parallel)\n      MPI_INFO_TYPE                            :: my_info\n#else\n      CHARACTER(LEN=10)                        :: fstatus, fposition\n      INTEGER                                  :: amode, file_handle\n      LOGICAL                                  :: exists, is_open\n#endif\n\n      ierr = 0\n      istat = 0\n#if defined(__parallel)\n      my_info = mpi_info_null\n      IF (PRESENT(info)) my_info = info%handle\n      CALL mpi_file_open(groupid%handle, filepath, amode_status, my_info, fh%handle, ierr)\n      CALL mpi_file_set_errhandler(fh%handle, MPI_ERRORS_RETURN, ierr)\n      IF (ierr .NE. 0) CALL mp_stop(ierr, \"mpi_file_set_errhandler @ mp_file_open\")\n#else\n      MARK_USED(groupid)\n      MARK_USED(info)\n      amode = amode_status\n      IF (amode .GT. file_amode_append) THEN\n         fposition = \"APPEND\"\n         amode = amode - file_amode_append\n      ELSE\n         fposition = \"REWIND\"\n      END IF\n      IF ((amode .EQ. file_amode_create) .OR. &\n          (amode .EQ. file_amode_create + file_amode_wronly) .OR. &\n          (amode .EQ. file_amode_create + file_amode_wronly + file_amode_excl)) THEN\n         fstatus = \"UNKNOWN\"\n      ELSE\n         fstatus = \"OLD\"\n      END IF\n      ! Get a new unit number\n      DO file_handle = 1, 999\n         INQUIRE (UNIT=file_handle, EXIST=exists, OPENED=is_open, IOSTAT=istat)\n         IF (exists .AND. (.NOT. is_open) .AND. (istat == 0)) EXIT\n      END DO\n      fh%handle = file_handle\n      OPEN (UNIT=fh%handle, FILE=filepath, STATUS=fstatus, ACCESS=\"STREAM\", POSITION=fposition)\n#endif\n   END SUBROUTINE mp_file_open\n\n   SUBROUTINE mp_file_delete(filepath, info)\n      !! Deletes a file. Auxiliary routine to emulate 'replace' action for mp_file_open.\n      !! Only the master processor should call this routine.\n\n      CHARACTER(LEN=*), INTENT(IN)             :: filepath\n         !! path to the file\n      TYPE(mp_info_type), INTENT(IN), OPTIONAL :: info\n         !! info object\n\n#if defined(__parallel)\n      INTEGER                                  :: ierr\n      MPI_INFO_TYPE                            :: my_info\n      LOGICAL                                  :: exists\n#endif\n\n#if defined(__parallel)\n      ierr = 0\n      my_info = mpi_info_null\n      IF (PRESENT(info)) my_info = info%handle\n      INQUIRE (FILE=filepath, EXIST=exists)\n      IF (exists) CALL mpi_file_delete(filepath, my_info, ierr)\n      IF (ierr .NE. 0) CALL mp_stop(ierr, \"mpi_file_set_errhandler @ mp_file_delete\")\n#else\n      MARK_USED(filepath)\n      MARK_USED(info)\n      ! Explicit file delete not necessary, handled by subsequent call to open_file with action 'replace'\n#endif\n\n   END SUBROUTINE mp_file_delete\n\n   SUBROUTINE mp_file_close(fh)\n      !! Closes a file\n      !!\n      !! MPI-I/O mapping   mpi_file_close\n      !!\n      !! STREAM-I/O mapping   CLOSE\n\n      TYPE(mp_file_type), INTENT(INOUT)                  :: fh\n         !! file handle (file storage unit)\n\n      INTEGER                                            :: ierr\n\n      ierr = 0\n#if defined(__parallel)\n      CALL mpi_file_set_errhandler(fh%handle, MPI_ERRORS_RETURN, ierr)\n      CALL mpi_file_close(fh%handle, ierr)\n      IF (ierr .NE. 0) CALL mp_stop(ierr, \"mpi_file_set_errhandler @ mp_file_close\")\n#else\n      CLOSE (fh%handle)\n#endif\n   END SUBROUTINE mp_file_close\n\n   SUBROUTINE mp_file_get_size(fh, file_size)\n      !! Returns the file size\n      !!\n      !! MPI-I/O mapping   mpi_file_get_size\n      !!\n      !! STREAM-I/O mapping   INQUIRE\n\n      TYPE(mp_file_type), INTENT(IN)                     :: fh\n         !! file handle (file storage unit)\n      INTEGER(kind=file_offset), INTENT(OUT)             :: file_size\n         !! the file size\n\n      INTEGER                                            :: ierr\n\n      ierr = 0\n#if defined(__parallel)\n      CALL mpi_file_set_errhandler(fh%handle, MPI_ERRORS_RETURN, ierr)\n      CALL mpi_file_get_size(fh%handle, file_size, ierr)\n      IF (ierr .NE. 0) CALL mp_stop(ierr, \"mpi_file_set_errhandler @ mp_file_get_size\")\n#else\n      INQUIRE (UNIT=fh%handle, SIZE=file_size)\n#endif\n   END SUBROUTINE mp_file_get_size\n\n   SUBROUTINE mp_file_get_position(fh, pos)\n      !! Returns the file position\n      !!\n      !! MPI-I/O mapping   mpi_file_get_position\n      !!\n      !! STREAM-I/O mapping   INQUIRE\n\n      TYPE(mp_file_type), INTENT(IN)                     :: fh\n         !! file handle (file storage unit)\n      INTEGER(kind=file_offset), INTENT(OUT)             :: pos\n         !! the file position\n\n      INTEGER                                            :: ierr\n\n      ierr = 0\n#if defined(__parallel)\n      CALL mpi_file_set_errhandler(fh%handle, MPI_ERRORS_RETURN, ierr)\n      CALL mpi_file_get_position(fh%handle, pos, ierr)\n      IF (ierr .NE. 0) CALL mp_stop(ierr, \"mpi_file_set_errhandler @ mp_file_get_position\")\n#else\n      INQUIRE (UNIT=fh%handle, POS=pos)\n#endif\n   END SUBROUTINE mp_file_get_position\n\n   SUBROUTINE mp_file_write_at_ch(fh, offset, msg)\n      CHARACTER(LEN=*), INTENT(IN)               :: msg\n      TYPE(mp_file_type), INTENT(IN)             :: fh\n      INTEGER(kind=file_offset), INTENT(IN)      :: offset\n\n#if defined(__parallel)\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_ch'\n\n      INTEGER                                    :: ierr\n\n      CALL MPI_FILE_WRITE_AT(fh%handle, offset, msg, LEN(msg), MPI_CHARACTER, MPI_STATUS_IGNORE, ierr)\n      IF (ierr .NE. 0) &\n         DBCSR_ABORT(\"mpi_file_write_at_ch @ \"//routineN)\n#else\n      WRITE (UNIT=fh%handle, POS=offset + 1) msg\n#endif\n   END SUBROUTINE mp_file_write_at_ch\n\n   SUBROUTINE mp_file_write_at_all_ch(fh, offset, msg)\n      CHARACTER(LEN=*), INTENT(IN)               :: msg\n      TYPE(mp_file_type), INTENT(IN)             :: fh\n      INTEGER(kind=file_offset), INTENT(IN)      :: offset\n\n#if defined(__parallel)\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_all_ch'\n\n      INTEGER                                    :: ierr\n\n      CALL MPI_FILE_WRITE_AT_ALL(fh%handle, offset, msg, LEN(msg), MPI_CHARACTER, MPI_STATUS_IGNORE, ierr)\n      IF (ierr .NE. 0) &\n         DBCSR_ABORT(\"mpi_file_write_at_all_ch @ \"//routineN)\n#else\n      WRITE (UNIT=fh%handle, POS=offset + 1) msg\n#endif\n   END SUBROUTINE mp_file_write_at_all_ch\n\n   SUBROUTINE mp_file_read_at_all_ch(fh, offset, msg)\n      CHARACTER(LEN=*), INTENT(OUT)              :: msg\n      TYPE(mp_file_type), INTENT(IN)             :: fh\n      INTEGER(kind=file_offset), INTENT(IN)      :: offset\n\n#if defined(__parallel)\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_read_at_all_ch'\n\n      INTEGER                                    :: ierr\n\n      CALL MPI_FILE_READ_AT_ALL(fh%handle, offset, msg, LEN(msg), MPI_CHARACTER, MPI_STATUS_IGNORE, ierr)\n      IF (ierr .NE. 0) &\n         DBCSR_ABORT(\"mpi_file_read_at_all_ch @ \"//routineN)\n#else\n      READ (UNIT=fh%handle, POS=offset + 1) msg\n#endif\n   END SUBROUTINE mp_file_read_at_all_ch\n\n   SUBROUTINE mp_type_size(type_descriptor, type_size)\n      !! Returns the size of a data type in bytes\n      !!\n      !! MPI mapping\n      !! mpi_type_size\n\n      TYPE(mp_type_descriptor_type), INTENT(IN)          :: type_descriptor\n         !! data type\n      INTEGER, INTENT(OUT)                               :: type_size\n         !! size of the data type\n\n#if defined(__parallel)\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_size'\n      INTEGER                                            :: ierr\n\n      ierr = 0\n      CALL MPI_TYPE_SIZE(type_descriptor%type_handle, type_size, ierr)\n      IF (ierr .NE. 0) &\n         DBCSR_ABORT(\"mpi_type_size @ \"//routineN)\n#else\n      SELECT CASE (type_descriptor%type_handle)\n      CASE (1)\n         type_size = real_4_size\n      CASE (3)\n         type_size = real_8_size\n      CASE (5)\n         type_size = 2*real_4_size\n      CASE (7)\n         type_size = 2*real_8_size\n      END SELECT\n#endif\n   END SUBROUTINE mp_type_size\n\n   FUNCTION mp_type_make_struct(subtypes, &\n                                vector_descriptor, index_descriptor) &\n      RESULT(type_descriptor)\n      TYPE(mp_type_descriptor_type), &\n         DIMENSION(:), INTENT(IN)               :: subtypes\n      INTEGER, DIMENSION(2), INTENT(IN), &\n         OPTIONAL                               :: vector_descriptor\n      TYPE(mp_indexing_meta_type), &\n         INTENT(IN), OPTIONAL                   :: index_descriptor\n      TYPE(mp_type_descriptor_type)            :: type_descriptor\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_make_struct'\n\n      INTEGER                                  :: i, ierr, n\n#if defined(__parallel)\n      INTEGER(kind=mpi_address_kind), &\n         ALLOCATABLE, DIMENSION(:)              :: displacements\n#endif\n      INTEGER, DIMENSION(SIZE(subtypes))       :: lengths\n      MPI_DATA_TYPE, DIMENSION(SIZE(subtypes)) :: old_types\n\n      ierr = 0\n      n = SIZE(subtypes)\n      !type_descriptor%mpi_type_handle = MPI_DATATYPE_NULL\n      type_descriptor%length = 1\n#if defined(__parallel)\n      CALL mpi_get_address(MPI_BOTTOM, type_descriptor%base, ierr)\n      IF (ierr /= 0) &\n         DBCSR_ABORT(\"MPI_get_address @ \"//routineN)\n      ALLOCATE (displacements(n))\n#endif\n      type_descriptor%vector_descriptor(1:2) = 1\n      type_descriptor%has_indexing = .FALSE.\n      ALLOCATE (type_descriptor%subtype(n))\n      type_descriptor%subtype(:) = subtypes(:)\n      DO i = 1, SIZE(subtypes)\n#if defined(__parallel)\n         displacements(i) = subtypes(i)%base\n#endif\n         old_types(i) = subtypes(i)%type_handle\n         lengths(i) = subtypes(i)%length\n      END DO\n#if defined(__parallel)\n      CALL MPI_Type_create_struct(n, &\n                                  lengths, displacements, old_types, &\n                                  type_descriptor%type_handle, ierr)\n      IF (ierr /= 0) &\n         DBCSR_ABORT(\"MPI_Type_create_struct @ \"//routineN)\n      CALL MPI_Type_commit(type_descriptor%type_handle, ierr)\n      IF (ierr /= 0) &\n         DBCSR_ABORT(\"MPI_Type_commit @ \"//routineN)\n#endif\n      IF (PRESENT(vector_descriptor) .OR. PRESENT(index_descriptor)) THEN\n         DBCSR_ABORT(routineN//\" Vectors and indices NYI\")\n      END IF\n   END FUNCTION mp_type_make_struct\n\n   RECURSIVE SUBROUTINE mp_type_free_m(type_descriptor)\n      TYPE(mp_type_descriptor_type), INTENT(inout)       :: type_descriptor\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_free_m'\n\n      INTEGER                                            :: handle, i, ierr\n\n      CALL timeset(routineN, handle)\n      ierr = 0\n\n      ! If the subtype is associated, then it's a user-defined data type.\n\n      IF (ASSOCIATED(type_descriptor%subtype)) THEN\n         DO i = 1, SIZE(type_descriptor%subtype)\n            CALL mp_type_free_m(type_descriptor%subtype(i))\n         END DO\n         DEALLOCATE (type_descriptor%subtype)\n      END IF\n#if defined(__parallel)\n      CALL MPI_Type_free(type_descriptor%type_handle, ierr)\n      IF (ierr /= 0) &\n         DBCSR_ABORT(\"MPI_Type_free @ \"//routineN)\n#endif\n\n      CALL timestop(handle)\n\n   END SUBROUTINE mp_type_free_m\n\n   SUBROUTINE mp_isend_custom(msgin, dest, comm, request, tag)\n      !! Non-blocking send of custom type\n      TYPE(mp_type_descriptor_type), INTENT(IN)          :: msgin\n      INTEGER, INTENT(IN)                                :: dest\n      TYPE(mp_comm_type), INTENT(IN)                     :: comm\n      TYPE(mp_request_type), INTENT(out)                 :: request\n      INTEGER, INTENT(in), OPTIONAL                      :: tag\n\n      INTEGER                                            :: ierr\n\n#if defined(__parallel)\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isend_custom'\n      INTEGER                                            :: my_tag\n      my_tag = 0\n      IF (PRESENT(tag)) my_tag = tag\n\n      ierr = 0\n      CALL mpi_isend(MPI_BOTTOM, 1, msgin%type_handle, dest, my_tag, &\n                     comm%handle, request%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_isend @ \"//routineN)\n#else\n      MARK_USED(msgin)\n      MARK_USED(dest)\n      MARK_USED(comm)\n      MARK_USED(request)\n      MARK_USED(tag)\n      ierr = 1\n      request = mp_request_null\n      CALL mp_stop(ierr, \"mp_isend called in non parallel case\")\n#endif\n   END SUBROUTINE mp_isend_custom\n\n   SUBROUTINE mp_irecv_custom(msgout, source, comm, request, tag)\n      !! Non-blocking receive of vector data\n      TYPE(mp_type_descriptor_type), INTENT(INOUT)       :: msgout\n      INTEGER, INTENT(IN)                                :: source\n      TYPE(mp_comm_type), INTENT(IN)                     :: comm\n      TYPE(mp_request_type), INTENT(out)                 :: request\n      INTEGER, INTENT(in), OPTIONAL                      :: tag\n\n      INTEGER                                            :: ierr\n\n#if defined(__parallel)\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_irecv_custom'\n      INTEGER                                            :: my_tag\n      ierr = 0\n      my_tag = 0\n\n      IF (PRESENT(tag)) my_tag = tag\n\n      CALL mpi_irecv(MPI_BOTTOM, 1, msgout%type_handle, source, my_tag, &\n                     comm%handle, request%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_irecv @ \"//routineN)\n#else\n      MARK_USED(msgout)\n      MARK_USED(source)\n      MARK_USED(comm)\n      MARK_USED(request)\n      MARK_USED(tag)\n      ierr = 1\n      request = mp_request_null\n      DBCSR_ABORT(\"mp_irecv called in non parallel case\")\n#endif\n   END SUBROUTINE mp_irecv_custom\n\n   SUBROUTINE mp_win_free(win)\n      !! Window free\n      TYPE(mp_win_type), INTENT(INOUT)                   :: win\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_free'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n\n      CALL mpi_win_free(win%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_win_free @ \"//routineN)\n#else\n      MARK_USED(win)\n      win = mp_win_null\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_win_free\n\n   SUBROUTINE mp_win_flush_all(win)\n      !! Window flush\n      TYPE(mp_win_type), INTENT(IN)                      :: win\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_flush_all'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n      CALL mpi_win_flush_all(win%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_win_flush_all @ \"//routineN)\n#else\n      MARK_USED(win)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_win_flush_all\n\n   SUBROUTINE mp_win_lock_all(win)\n      !! Window lock\n      TYPE(mp_win_type), INTENT(INOUT)                   :: win\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_lock_all'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n\n      CALL mpi_win_lock_all(MPI_MODE_NOCHECK, win%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_win_lock_all @ \"//routineN)\n#else\n      MARK_USED(win)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_win_lock_all\n\n   SUBROUTINE mp_win_unlock_all(win)\n      !! Window lock\n      TYPE(mp_win_type), INTENT(INOUT)                   :: win\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_unlock_all'\n\n      INTEGER                                            :: handle, ierr\n\n      ierr = 0\n      CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n\n      CALL mpi_win_unlock_all(win%handle, ierr)\n      IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_win_unlock_all @ \"//routineN)\n#else\n      MARK_USED(win)\n#endif\n      CALL timestop(handle)\n   END SUBROUTINE mp_win_unlock_all\n\n   #:for nametype1, type1, mpi_type1, mpi_2type1, kind1, bytes1, handle1, zero1, one1 in inst_params\n      SUBROUTINE mp_alltoall_${nametype1}$11v(sb, scount, sdispl, rb, rcount, rdispl, group)\n      !! All-to-all data exchange, rank-1 data of different sizes\n      !!\n      !! MPI mapping\n      !! mpi_alltoallv\n      !!\n      !! Array sizes\n      !! The scount, rcount, and the sdispl and rdispl arrays have a\n      !! size equal to the number of processes.\n      !!\n      !! Offsets\n      !! Values in sdispl and rdispl start with 0.\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: sb(:)\n         !! Data to send\n         INTEGER, CONTIGUOUS, INTENT(IN)          :: scount(:), sdispl(:)\n         !! Data counts for data sent to other processes\n         !! Respective data offsets for data sent to process\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: rb(:)\n         !! Buffer into which to receive data\n         INTEGER, CONTIGUOUS, INTENT(IN)          :: rcount(:), rdispl(:)\n         !! Data counts for data received from other processes\n         !! Respective data offsets for data received from other processes\n         TYPE(mp_comm_type), INTENT(IN)                      :: group\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_${nametype1}$11v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen\n#else\n         INTEGER                                  :: i\n#endif\n\n         CALL timeset(routineN, handle)\n\n         ierr = 0\n#if defined(__parallel)\n         CALL mpi_alltoallv(sb, scount, sdispl, ${mpi_type1}$, &\n                            rb, rcount, rdispl, ${mpi_type1}$, group%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_alltoallv @ \"//routineN)\n         msglen = SUM(scount) + SUM(rcount)\n         CALL add_perf(perf_id=6, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(group)\n         MARK_USED(scount)\n         MARK_USED(sdispl)\n!$OMP     PARALLEL DO DEFAULT(NONE) PRIVATE(i) SHARED(rcount,rdispl,sdispl,rb,sb)\n         DO i = 1, rcount(1)\n            rb(rdispl(1) + i) = sb(sdispl(1) + i)\n         END DO\n#endif\n         CALL timestop(handle)\n\n      END SUBROUTINE mp_alltoall_${nametype1}$11v\n\n      SUBROUTINE mp_alltoall_${nametype1}$ (sb, rb, count, group)\n      !! All-to-all data exchange, rank 1 arrays, equal sizes\n      !!\n      !! Index meaning\n      !!\n      !! The first two indices specify the data while the last index counts\n      !! the processes\n      !!\n      !! Sizes of ranks\n      !! All processes have the same data size.\n      !!\n      !! MPI mapping\n      !! mpi_alltoall\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: sb(:)\n         !! array with data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: rb(:)\n         !! array into which data is received\n         INTEGER, INTENT(IN)                      :: count\n         !! number of elements to send/receive (product of the extents of the first two dimensions)\n         TYPE(mp_comm_type), INTENT(IN)           :: group\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen, np\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         CALL mpi_alltoall(sb, count, ${mpi_type1}$, &\n                           rb, count, ${mpi_type1}$, group%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_alltoall @ \"//routineN)\n         CALL mpi_comm_size(group%handle, np, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_size @ \"//routineN)\n         msglen = 2*count*np\n         CALL add_perf(perf_id=6, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(count)\n         MARK_USED(group)\n         rb = sb\n#endif\n         CALL timestop(handle)\n\n      END SUBROUTINE mp_alltoall_${nametype1}$\n\n      SUBROUTINE mp_alltoall_${nametype1}$22(sb, rb, count, group)\n      !! All-to-all data exchange, rank-2 arrays, equal sizes\n      !! @note\n      !! see mp_alltoall_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: sb(:, :)\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: rb(:, :)\n         INTEGER, INTENT(IN)                      :: count\n         TYPE(mp_comm_type), INTENT(IN)           :: group\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_${nametype1}$22'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen, np\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         CALL mpi_alltoall(sb, count, ${mpi_type1}$, &\n                           rb, count, ${mpi_type1}$, group%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_alltoall @ \"//routineN)\n         CALL mpi_comm_size(group%handle, np, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_size @ \"//routineN)\n         msglen = 2*SIZE(sb)*np\n         CALL add_perf(perf_id=6, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(count)\n         MARK_USED(group)\n         rb = sb\n#endif\n         CALL timestop(handle)\n\n      END SUBROUTINE mp_alltoall_${nametype1}$22\n\n      SUBROUTINE mp_alltoall_${nametype1}$44(sb, rb, count, group)\n      !! All-to-all data exchange, rank 4 data, equal sizes\n      !! @note\n      !! see mp_alltoall_${nametype1}$\n      !! @endnote\n\n         ${type1}$, DIMENSION(:, :, :, :), CONTIGUOUS, &\n            INTENT(IN)                            :: sb\n         ${type1}$, DIMENSION(:, :, :, :), CONTIGUOUS, &\n            INTENT(OUT)                           :: rb\n         INTEGER, INTENT(IN)                      :: count\n         TYPE(mp_comm_type), INTENT(IN)           :: group\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_${nametype1}$44'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen, np\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         CALL mpi_alltoall(sb, count, ${mpi_type1}$, &\n                           rb, count, ${mpi_type1}$, group%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_alltoall @ \"//routineN)\n         CALL mpi_comm_size(group%handle, np, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_size @ \"//routineN)\n         msglen = 2*count*np\n         CALL add_perf(perf_id=6, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(count)\n         MARK_USED(group)\n         rb = sb\n#endif\n         CALL timestop(handle)\n\n      END SUBROUTINE mp_alltoall_${nametype1}$44\n\n      SUBROUTINE mp_send_${nametype1}$ (msg, dest, tag, gid)\n      !! Send one datum to another process\n      !!\n      !! MPI mapping\n      !! mpi_send\n\n         ${type1}$                                :: msg\n         !! Scalar to send\n         INTEGER                                  :: dest, tag\n         !! Destination process\n         !! Transfer identifier\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_send_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_send(msg, msglen, ${mpi_type1}$, dest, tag, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_send @ \"//routineN)\n         CALL add_perf(perf_id=13, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(dest)\n         MARK_USED(tag)\n         MARK_USED(gid)\n         ! only defined in parallel\n         DBCSR_ABORT(\"not in parallel mode\")\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_send_${nametype1}$\n\n      SUBROUTINE mp_send_${nametype1}$v(msg, dest, tag, gid)\n      !! Send rank-1 data to another process\n      !! @note\n      !! see mp_send_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS                    :: msg(:)\n         !! Rank-1 data to send\n         INTEGER                                  :: dest, tag\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_send_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_send(msg, msglen, ${mpi_type1}$, dest, tag, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_send @ \"//routineN)\n         CALL add_perf(perf_id=13, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(dest)\n         MARK_USED(tag)\n         MARK_USED(gid)\n         ! only defined in parallel\n         DBCSR_ABORT(\"not in parallel mode\")\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_send_${nametype1}$v\n\n      SUBROUTINE mp_recv_${nametype1}$ (msg, source, tag, gid)\n      !! Receive one datum from another process\n      !!\n      !! MPI mapping\n      !! mpi_send\n\n         ${type1}$, INTENT(INOUT)                 :: msg\n         !! Place received data into this variable\n         INTEGER, INTENT(INOUT)                   :: source, tag\n         !! Process to receive from\n         !! Transfer identifier\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_recv_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr, msglen\n#if defined(__parallel)\n         MPI_STATUS_TYPE                          :: status\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_recv(msg, msglen, ${mpi_type1}$, source, tag, gid%handle, status, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_recv @ \"//routineN)\n         CALL add_perf(perf_id=14, msg_size=msglen*${bytes1}$)\n         source = status MPI_STATUS_EXTRACT(MPI_SOURCE)\n         tag = status MPI_STATUS_EXTRACT(MPI_TAG)\n#else\n         MARK_USED(msg)\n         MARK_USED(source)\n         MARK_USED(tag)\n         MARK_USED(gid)\n         ! only defined in parallel\n         DBCSR_ABORT(\"not in parallel mode\")\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_recv_${nametype1}$\n\n      SUBROUTINE mp_recv_${nametype1}$v(msg, source, tag, gid)\n      !! Receive rank-1 data from another process\n      !! @note\n      !! see mp_recv_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:)\n         !! Place received data into this rank-1 array\n         INTEGER, INTENT(INOUT)                   :: source, tag\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_recv_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr, msglen\n#if defined(__parallel)\n         MPI_STATUS_TYPE                          :: status\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_recv(msg, msglen, ${mpi_type1}$, source, tag, gid%handle, status, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_recv @ \"//routineN)\n         CALL add_perf(perf_id=14, msg_size=msglen*${bytes1}$)\n         source = status MPI_STATUS_EXTRACT(MPI_SOURCE)\n         tag = status MPI_STATUS_EXTRACT(MPI_TAG)\n#else\n         MARK_USED(msg)\n         MARK_USED(source)\n         MARK_USED(tag)\n         MARK_USED(gid)\n         ! only defined in parallel\n         DBCSR_ABORT(\"not in parallel mode\")\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_recv_${nametype1}$v\n\n      SUBROUTINE mp_bcast_${nametype1}$ (msg, source, gid)\n      !! Broadcasts a datum to all processes.\n      !!\n      !! MPI mapping\n      !! mpi_bcast\n\n         ${type1}$                                :: msg\n         !! Datum to broadcast\n         INTEGER                                  :: source\n         !! Processes which broadcasts\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_bcast(msg, msglen, ${mpi_type1}$, source, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_bcast @ \"//routineN)\n         CALL add_perf(perf_id=2, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(source)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_bcast_${nametype1}$\n\n      SUBROUTINE mp_ibcast_${nametype1}$ (msg, source, gid, request)\n      !! Broadcasts a datum to all processes.\n      !!\n      !! MPI mapping\n      !! mpi_bcast\n\n         ${type1}$                                :: msg\n         !! Datum to broadcast\n         INTEGER                                  :: source\n         !! Processes which broadcasts\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Message passing environment identifier\n         TYPE(mp_request_type), INTENT(INOUT)     :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_ibcast_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_ibcast(msg, msglen, ${mpi_type1}$, source, gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_ibcast @ \"//routineN)\n         CALL add_perf(perf_id=22, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(source)\n         MARK_USED(gid)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_ibcast_${nametype1}$\n\n      SUBROUTINE mp_bcast_${nametype1}$v(msg, source, gid)\n      !! Broadcasts rank-1 data to all processes\n      !! @note\n      !! see mp_bcast_${nametype1}$1\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS                    :: msg(:)\n         !! Data to broadcast\n         INTEGER                                  :: source\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_bcast(msg, msglen, ${mpi_type1}$, source, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_bcast @ \"//routineN)\n         CALL add_perf(perf_id=2, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(source)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_bcast_${nametype1}$v\n\n      SUBROUTINE mp_ibcast_${nametype1}$v(msg, source, gid, request)\n      !! Broadcasts rank-1 data to all processes\n      !! @note\n      !! see mp_bcast_${nametype1}$1\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS                    :: msg(:)\n         !! Data to broadcast\n         INTEGER                                  :: source\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         TYPE(mp_request_type), INTENT(INOUT)     :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_ibcast_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_ibcast(msg, msglen, ${mpi_type1}$, source, gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_ibcast @ \"//routineN)\n         CALL add_perf(perf_id=22, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(source)\n         MARK_USED(gid)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_ibcast_${nametype1}$v\n\n      SUBROUTINE mp_bcast_${nametype1}$m(msg, source, gid)\n      !! Broadcasts rank-2 data to all processes\n      !! @note\n      !! see mp_bcast_${nametype1}$1\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS                    :: msg(:, :)\n         !! Data to broadcast\n         INTEGER                                  :: source\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_im'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_bcast(msg, msglen, ${mpi_type1}$, source, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_bcast @ \"//routineN)\n         CALL add_perf(perf_id=2, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(source)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_bcast_${nametype1}$m\n\n      SUBROUTINE mp_bcast_${nametype1}$3(msg, source, gid)\n      !! Broadcasts rank-3 data to all processes\n      !! @note\n      !! see mp_bcast_${nametype1}$1\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS                    :: msg(:, :, :)\n         !! Data to broadcast\n         INTEGER                                  :: source\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_bcast_${nametype1}$3'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_bcast(msg, msglen, ${mpi_type1}$, source, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_bcast @ \"//routineN)\n         CALL add_perf(perf_id=2, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(source)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_bcast_${nametype1}$3\n\n      SUBROUTINE mp_sum_${nametype1}$ (msg, gid)\n      !! Sums a datum from all processes with result left on all processes.\n      !!\n      !! MPI mapping\n      !! mpi_allreduce\n\n         ${type1}$, INTENT(INOUT)    :: msg\n         !! Datum to sum (input) and result (output)\n         TYPE(mp_comm_type), INTENT(IN)         :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$'\n\n         INTEGER                     :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_sum_${nametype1}$\n\n      SUBROUTINE mp_sum_${nametype1}$v(msg, gid)\n      !! Element-wise sum of a rank-1 array on all processes.\n      !! @note\n      !! see mp_sum_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:)\n         !! Vector to sum and result\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         msglen = SIZE(msg)\n         IF (msglen > 0) THEN\n            CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr)\n            IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n         END IF\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_sum_${nametype1}$v\n\n      SUBROUTINE mp_isum_${nametype1}$v(msg, gid, request)\n      !! Element-wise sum of a rank-1 array on all processes.\n      !! @note\n      !! see mp_sum_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:)\n         !! Vector to sum and result\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         TYPE(mp_request_type), INTENT(INOUT)     :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isum_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         msglen = SIZE(msg)\n         IF (msglen > 0) THEN\n            CALL mpi_iallreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, request%handle, ierr)\n            IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallreduce @ \"//routineN)\n         ELSE\n            request = mp_request_null\n         END IF\n         CALL add_perf(perf_id=23, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(gid)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_isum_${nametype1}$v\n\n      SUBROUTINE mp_sum_${nametype1}$m(msg, gid)\n      !! Element-wise sum of a rank-2 array on all processes.\n      !! @note\n      !! see mp_sum_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:, :)\n         !! Matrix to sum and result\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$m'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER, PARAMETER :: max_msg = 2**25\n         INTEGER                                  :: m1, msglen, step, msglensum\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         ! chunk up the call so that message sizes are limited, to avoid overflows in mpich triggered in large rpa calcs\n         step = MAX(1, SIZE(msg, 2)/MAX(1, SIZE(msg)/max_msg))\n         msglensum = 0\n         DO m1 = LBOUND(msg, 2), UBOUND(msg, 2), step\n            msglen = SIZE(msg, 1)*(MIN(UBOUND(msg, 2), m1 + step - 1) - m1 + 1)\n            msglensum = msglensum + msglen\n            IF (msglen > 0) THEN\n               CALL mpi_allreduce(MPI_IN_PLACE, msg(LBOUND(msg, 1), m1), msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr)\n               IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n            END IF\n         END DO\n         CALL add_perf(perf_id=3, msg_size=msglensum*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_sum_${nametype1}$m\n\n      SUBROUTINE mp_sum_${nametype1}$m3(msg, gid)\n      !! Element-wise sum of a rank-3 array on all processes.\n      !! @note\n      !! see mp_sum_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:, :, :)\n         !! Array to sum and result\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$m3'\n\n         INTEGER                                  :: handle, ierr, &\n                                                     msglen\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         IF (msglen > 0) THEN\n            CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr)\n            IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n         END IF\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_sum_${nametype1}$m3\n\n      SUBROUTINE mp_sum_${nametype1}$m4(msg, gid)\n      !! Element-wise sum of a rank-4 array on all processes.\n      !! @note\n      !! see mp_sum_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:, :, :, :)\n         !! Array to sum and result\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$m4'\n\n         INTEGER                                  :: handle, ierr, &\n                                                     msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         IF (msglen > 0) THEN\n            CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr)\n            IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n         END IF\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_sum_${nametype1}$m4\n\n      SUBROUTINE mp_sum_root_${nametype1}$v(msg, root, gid)\n      !! Element-wise sum of data from all processes with result left only on\n      !! one.\n      !!\n      !! MPI mapping\n      !! mpi_reduce\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:)\n         !! Vector to sum (input) and (only on process root) result (output)\n         INTEGER, INTENT(IN)                      :: root\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_root_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr, msglen\n#if defined(__parallel)\n         INTEGER                                  :: m1, taskid\n         ${type1}$, ALLOCATABLE                     :: res(:)\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_comm_rank(gid%handle, taskid, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_rank @ \"//routineN)\n         IF (msglen > 0) THEN\n            m1 = SIZE(msg, 1)\n            ALLOCATE (res(m1))\n            CALL mpi_reduce(msg, res, msglen, ${mpi_type1}$, MPI_SUM, &\n                            root, gid%handle, ierr)\n            IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_reduce @ \"//routineN)\n            IF (taskid == root) THEN\n               msg = res\n            END IF\n            DEALLOCATE (res)\n         END IF\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(root)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_sum_root_${nametype1}$v\n\n      SUBROUTINE mp_sum_root_${nametype1}$m(msg, root, gid)\n      !! Element-wise sum of data from all processes with result left only on\n      !! one.\n      !! @note\n      !! see mp_sum_root_${nametype1}$v\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:, :)\n         !! Matrix to sum (input) and (only on process root) result (output)\n         INTEGER, INTENT(IN)                      :: root\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_root_rm'\n\n         INTEGER                                  :: handle, ierr, msglen\n#if defined(__parallel)\n         INTEGER                                  :: m1, m2, taskid\n         ${type1}$, ALLOCATABLE                     :: res(:, :)\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_comm_rank(gid%handle, taskid, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_rank @ \"//routineN)\n         IF (msglen > 0) THEN\n            m1 = SIZE(msg, 1)\n            m2 = SIZE(msg, 2)\n            ALLOCATE (res(m1, m2))\n            CALL mpi_reduce(msg, res, msglen, ${mpi_type1}$, MPI_SUM, root, gid%handle, ierr)\n            IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_reduce @ \"//routineN)\n            IF (taskid == root) THEN\n               msg = res\n            END IF\n            DEALLOCATE (res)\n         END IF\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(root)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_sum_root_${nametype1}$m\n\n      SUBROUTINE mp_sum_partial_${nametype1}$m(msg, res, gid)\n      !! Partial sum of data from all processes with result on each process.\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)  :: msg(:, :)\n         !! Matrix to sum (input)\n         ${type1}$, CONTIGUOUS, INTENT(OUT) :: res(:, :)\n         !! Matrix containing result (output)\n         TYPE(mp_comm_type), INTENT(IN)                :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER        :: routineN = 'mp_sum_partial_${nametype1}$m'\n\n         INTEGER                            :: handle, ierr, msglen\n#if defined(__parallel)\n         INTEGER                            :: taskid\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_comm_rank(gid%handle, taskid, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_comm_rank @ \"//routineN)\n         IF (msglen > 0) THEN\n            CALL mpi_scan(msg, res, msglen, ${mpi_type1}$, MPI_SUM, gid%handle, ierr)\n            IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_scan @ \"//routineN)\n         END IF\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n         ! perf_id is same as for other summation routines\n#else\n         res = msg\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_sum_partial_${nametype1}$m\n\n      SUBROUTINE mp_max_${nametype1}$ (msg, gid)\n      !! Finds the maximum of a datum with the result left on all processes.\n      !!\n      !! MPI mapping\n      !! mpi_allreduce\n\n         ${type1}$, INTENT(INOUT)                 :: msg\n         !! Find maximum among these data (input) and maximum (output)\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_max_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_MAX, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_max_${nametype1}$\n\n      SUBROUTINE mp_max_${nametype1}$v(msg, gid)\n      !! Finds the element-wise maximum of a vector with the result left on\n      !! all processes.\n      !! @note\n      !! see mp_max_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:)\n         !! Find maximum among these data (input) and maximum (output)\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_max_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_MAX, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_max_${nametype1}$v\n\n      SUBROUTINE mp_min_${nametype1}$ (msg, gid)\n      !! Finds the minimum of a datum with the result left on all processes.\n      !!\n      !! MPI mapping\n      !! mpi_allreduce\n\n         ${type1}$, INTENT(INOUT)                 :: msg\n         !! Find minimum among these data (input) and maximum (output)\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_min_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_MIN, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_min_${nametype1}$\n\n      SUBROUTINE mp_min_${nametype1}$v(msg, gid)\n      !! Finds the element-wise minimum of vector with the result left on\n      !! all processes.\n      !!\n      !! MPI mapping\n      !! mpi_allreduce\n      !! @note\n      !! see mp_min_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:)\n         !! Find minimum among these data (input) and maximum (output)\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_min_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_MIN, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_min_${nametype1}$v\n\n      SUBROUTINE mp_prod_${nametype1}$ (msg, gid)\n      !! Multiplies a set of numbers scattered across a number of processes,\n      !! then replicates the result.\n      !!\n      !! MPI mapping\n      !! mpi_allreduce\n\n         ${type1}$, INTENT(INOUT)                 :: msg\n         !! a number to multiply (input) and result (output)\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sum_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_allreduce(MPI_IN_PLACE, msg, msglen, ${mpi_type1}$, MPI_PROD, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allreduce @ \"//routineN)\n         CALL add_perf(perf_id=3, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msg)\n         MARK_USED(gid)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_prod_${nametype1}$\n\n      SUBROUTINE mp_iscatter_${nametype1}$ (msg_scatter, msg, root, gid, request)\n      !! Scatters data from one processes to all others\n      !!\n      !! MPI mapping\n      !! mpi_scatter\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msg_scatter(:)\n         !! Data to scatter (for root process)\n         ${type1}$, INTENT(INOUT)                 :: msg\n         INTEGER, INTENT(IN)                      :: root\n         !! Process which scatters data\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Message passing environment identifier\n         TYPE(mp_request_type), INTENT(INOUT)     :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iscatter_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_iscatter(msg_scatter, msglen, ${mpi_type1}$, msg, &\n                           msglen, ${mpi_type1}$, root, gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iscatter @ \"//routineN)\n         CALL add_perf(perf_id=24, msg_size=1*${bytes1}$)\n#else\n         MARK_USED(root)\n         MARK_USED(gid)\n         msg = msg_scatter(1)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iscatter_${nametype1}$\n\n      SUBROUTINE mp_iscatter_${nametype1}$v2(msg_scatter, msg, root, gid, request)\n      !! Scatters data from one processes to all others\n      !!\n      !! MPI mapping\n      !! mpi_scatter\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msg_scatter(:, :)\n         !! Data to scatter (for root process)\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:)\n         INTEGER, INTENT(IN)                      :: root\n         !! Process which scatters data\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Message passing environment identifier\n         TYPE(mp_request_type), INTENT(INOUT)     :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iscatter_${nametype1}$v2'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_iscatter(msg_scatter, msglen, ${mpi_type1}$, msg, &\n                           msglen, ${mpi_type1}$, root, gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iscatter @ \"//routineN)\n         CALL add_perf(perf_id=24, msg_size=1*${bytes1}$)\n#else\n         MARK_USED(root)\n         MARK_USED(gid)\n         msg(:) = msg_scatter(:, 1)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iscatter_${nametype1}$v2\n\n      SUBROUTINE mp_iscatterv_${nametype1}$v(msg_scatter, sendcounts, displs, msg, recvcount, root, gid, request)\n      !! Scatters data from one processes to all others\n      !!\n      !! MPI mapping\n      !! mpi_scatter\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msg_scatter(:)\n         !! Data to scatter (for root process)\n         INTEGER, CONTIGUOUS, INTENT(IN)          :: sendcounts(:), displs(:)\n         ${type1}$, CONTIGUOUS, INTENT(INOUT)     :: msg(:)\n         INTEGER, INTENT(IN)                      :: recvcount, root\n         !! Process which scatters data\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Message passing environment identifier\n         TYPE(mp_request_type), INTENT(INOUT)                   :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iscatterv_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         CALL mpi_iscatterv(msg_scatter, sendcounts, displs, ${mpi_type1}$, msg, &\n                            recvcount, ${mpi_type1}$, root, gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iscatterv @ \"//routineN)\n         CALL add_perf(perf_id=24, msg_size=1*${bytes1}$)\n#else\n         MARK_USED(sendcounts)\n         MARK_USED(displs)\n         MARK_USED(recvcount)\n         MARK_USED(root)\n         MARK_USED(gid)\n         msg(1:recvcount) = msg_scatter(1 + displs(1):1 + displs(1) + sendcounts(1))\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iscatterv_${nametype1}$v\n\n      SUBROUTINE mp_gather_${nametype1}$ (msg, msg_gather, root, gid)\n      !! Gathers a datum from all processes to one\n      !!\n      !! MPI mapping\n      !! mpi_gather\n\n         ${type1}$, INTENT(IN)                    :: msg\n         !! Datum to send to root\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msg_gather(:)\n         !! Received data (on root)\n         INTEGER, INTENT(IN)                      :: root\n         !! Process which gathers the data\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_gather_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = 1\n#if defined(__parallel)\n         CALL mpi_gather(msg, msglen, ${mpi_type1}$, msg_gather, &\n                         msglen, ${mpi_type1}$, root, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_gather @ \"//routineN)\n         CALL add_perf(perf_id=4, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(root)\n         MARK_USED(gid)\n         msg_gather(1) = msg\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_gather_${nametype1}$\n\n      SUBROUTINE mp_gather_${nametype1}$v(msg, msg_gather, root, gid)\n      !! Gathers data from all processes to one\n      !!\n      !! Data length\n      !! All data (msg) is equal-sized\n      !!\n      !! MPI mapping\n      !! mpi_gather\n      !! @note\n      !! see mp_gather_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msg(:)\n         !! Datum to send to root\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msg_gather(:)\n         INTEGER, INTENT(IN)                      :: root\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_gather_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_gather(msg, msglen, ${mpi_type1}$, msg_gather, &\n                         msglen, ${mpi_type1}$, root, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_gather @ \"//routineN)\n         CALL add_perf(perf_id=4, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(root)\n         MARK_USED(gid)\n         msg_gather = msg\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_gather_${nametype1}$v\n\n      SUBROUTINE mp_gather_${nametype1}$m(msg, msg_gather, root, gid)\n      !! Gathers data from all processes to one\n      !!\n      !! Data length\n      !! All data (msg) is equal-sized\n      !!\n      !! MPI mapping\n      !! mpi_gather\n      !! @note\n      !! see mp_gather_${nametype1}$\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msg(:, :)\n         !! Datum to send to root\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msg_gather(:, :)\n         INTEGER, INTENT(IN)                      :: root\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_gather_${nametype1}$m'\n\n         INTEGER                                  :: handle, ierr, msglen\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n         msglen = SIZE(msg)\n#if defined(__parallel)\n         CALL mpi_gather(msg, msglen, ${mpi_type1}$, msg_gather, &\n                         msglen, ${mpi_type1}$, root, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_gather @ \"//routineN)\n         CALL add_perf(perf_id=4, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(root)\n         MARK_USED(gid)\n         msg_gather = msg\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_gather_${nametype1}$m\n\n      SUBROUTINE mp_gatherv_${nametype1}$v(sendbuf, recvbuf, recvcounts, displs, root, comm)\n      !! Gathers data from all processes to one.\n      !!\n      !! Data length\n      !! Data can have different lengths\n      !!\n      !! Offsets\n      !! Offsets start at 0\n      !!\n      !! MPI mapping\n      !! mpi_gather\n\n         ${type1}$, DIMENSION(:), CONTIGUOUS, INTENT(IN)      :: sendbuf\n         !! Data to send to root\n         ${type1}$, DIMENSION(:), CONTIGUOUS, INTENT(OUT)     :: recvbuf\n         !! Received data (on root)\n         INTEGER, DIMENSION(:), CONTIGUOUS, INTENT(IN)        :: recvcounts, displs\n         !! Sizes of data received from processes\n         !! Offsets of data received from processes\n         INTEGER, INTENT(IN)                      :: root\n         !! Process which gathers the data\n         TYPE(mp_comm_type), INTENT(IN)           :: comm\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_gatherv_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: sendcount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         sendcount = SIZE(sendbuf)\n         CALL mpi_gatherv(sendbuf, sendcount, ${mpi_type1}$, &\n                          recvbuf, recvcounts, displs, ${mpi_type1}$, &\n                          root, comm%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_gatherv @ \"//routineN)\n         CALL add_perf(perf_id=4, &\n                       msg_size=sendcount*${bytes1}$)\n#else\n         MARK_USED(recvcounts)\n         MARK_USED(root)\n         MARK_USED(comm)\n         recvbuf(1 + displs(1):) = sendbuf\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_gatherv_${nametype1}$v\n\n      SUBROUTINE mp_allgather_${nametype1}$ (msgout, msgin, gid)\n      !! Gathers a datum from all processes and all processes receive the\n      !! same data\n      !!\n      !! Data size\n      !! All processes send equal-sized data\n      !!\n      !! MPI mapping\n      !! mpi_allgather\n\n         ${type1}$, INTENT(IN)                    :: msgout\n         !! Datum to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:)\n         !! Received data\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = 1\n         rcount = 1\n         CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, &\n                            msgin, rcount, ${mpi_type1}$, &\n                            gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin = msgout\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_allgather_${nametype1}$\n\n      SUBROUTINE mp_allgather_${nametype1}$2(msgout, msgin, gid)\n      !! Gathers a datum from all processes and all processes receive the\n      !! same data\n      !!\n      !! Data size\n      !! All processes send equal-sized data\n      !!\n      !! MPI mapping\n      !! mpi_allgather\n\n         ${type1}$, INTENT(IN)                    :: msgout\n         !! Datum to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:, :)\n         !! Received data\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$2'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = 1\n         rcount = 1\n         CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, &\n                            msgin, rcount, ${mpi_type1}$, &\n                            gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin = msgout\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_allgather_${nametype1}$2\n\n      SUBROUTINE mp_iallgather_${nametype1}$ (msgout, msgin, gid, request)\n      !! Gathers a datum from all processes and all processes receive the\n      !! same data\n      !!\n      !! Data size\n      !! All processes send equal-sized data\n      !!\n      !! MPI mapping\n      !! mpi_allgather\n\n         ${type1}$, INTENT(IN)                    :: msgout\n         !! Datum to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:)\n         !! Received data\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Message passing environment identifier\n         TYPE(mp_request_type), INTENT(INOUT)     :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = 1\n         rcount = 1\n         CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, &\n                             msgin, rcount, ${mpi_type1}$, &\n                             gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin = msgout\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iallgather_${nametype1}$\n\n      SUBROUTINE mp_allgather_${nametype1}$12(msgout, msgin, gid)\n      !! Gathers vector data from all processes and all processes receive the\n      !! same data\n      !!\n      !! Data size\n      !! All processes send equal-sized data\n      !!\n      !! Ranks\n      !! The last rank counts the processes\n      !!\n      !! MPI mapping\n      !! mpi_allgather\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:)\n         !! Rank-1 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:, :)\n         !! Received data\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$12'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout(:))\n         rcount = scount\n         CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, &\n                            msgin, rcount, ${mpi_type1}$, &\n                            gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin(:, 1) = msgout(:)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_allgather_${nametype1}$12\n\n      SUBROUTINE mp_allgather_${nametype1}$23(msgout, msgin, gid)\n      !! Gathers matrix data from all processes and all processes receive the\n      !! same data\n      !! @note\n      !! see mp_allgather_${nametype1}$12\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:, :)\n         !! Rank-2 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:, :, :)\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$23'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout(:, :))\n         rcount = scount\n         CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, &\n                            msgin, rcount, ${mpi_type1}$, &\n                            gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin(:, :, 1) = msgout(:, :)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_allgather_${nametype1}$23\n\n      SUBROUTINE mp_allgather_${nametype1}$34(msgout, msgin, gid)\n      !! Gathers rank-3 data from all processes and all processes receive the\n      !! same data\n      !! @note\n      !! see mp_allgather_${nametype1}$12\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:, :, :)\n         !! Rank-3 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:, :, :, :)\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$34'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout(:, :, :))\n         rcount = scount\n         CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, &\n                            msgin, rcount, ${mpi_type1}$, &\n                            gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin(:, :, :, 1) = msgout(:, :, :)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_allgather_${nametype1}$34\n\n      SUBROUTINE mp_allgather_${nametype1}$22(msgout, msgin, gid)\n      !! Gathers rank-2 data from all processes and all processes receive the\n      !! same data\n      !! @note\n      !! see mp_allgather_${nametype1}$12\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:, :)\n         !! Rank-2 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:, :)\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgather_${nametype1}$22'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout(:, :))\n         rcount = scount\n         CALL MPI_ALLGATHER(msgout, scount, ${mpi_type1}$, &\n                            msgin, rcount, ${mpi_type1}$, &\n                            gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin(:, :) = msgout(:, :)\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_allgather_${nametype1}$22\n\n      SUBROUTINE mp_iallgather_${nametype1}$11(msgout, msgin, gid, request)\n      !! Gathers rank-1 data from all processes and all processes receive the\n      !! same data\n      !! @note\n      !! see mp_allgather_${nametype1}$11\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:)\n         !! Rank-1 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:)\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         TYPE(mp_request_type), INTENT(OUT)       :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$11'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout(:))\n         rcount = scount\n         CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, &\n                             msgin, rcount, ${mpi_type1}$, &\n                             gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin = msgout\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iallgather_${nametype1}$11\n\n      SUBROUTINE mp_iallgather_${nametype1}$13(msgout, msgin, gid, request)\n      !! Gathers rank-2 data from all processes and all processes receive the\n      !! same data\n      !! @note\n      !! see mp_allgather_${nametype1}$12\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:)\n         !! Rank-2 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:, :, :)\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         TYPE(mp_request_type), INTENT(OUT)       :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$13'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout(:))\n         rcount = scount\n         CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, &\n                             msgin, rcount, ${mpi_type1}$, &\n                             gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin(:, 1, 1) = msgout(:)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iallgather_${nametype1}$13\n\n      SUBROUTINE mp_iallgather_${nametype1}$22(msgout, msgin, gid, request)\n      !! Gathers rank-2 data from all processes and all processes receive the\n      !! same data\n      !! @note\n      !! see mp_allgather_${nametype1}$12\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:, :)\n         !! Rank-2 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:, :)\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         TYPE(mp_request_type), INTENT(OUT)       :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$22'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout(:, :))\n         rcount = scount\n         CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, &\n                             msgin, rcount, ${mpi_type1}$, &\n                             gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin(:, :) = msgout(:, :)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iallgather_${nametype1}$22\n\n      SUBROUTINE mp_iallgather_${nametype1}$24(msgout, msgin, gid, request)\n      !! Gathers rank-2 data from all processes and all processes receive the\n      !! same data\n      !! @note\n      !! see mp_allgather_${nametype1}$12\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:, :)\n         !! Rank-2 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:, :, :, :)\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         TYPE(mp_request_type), INTENT(OUT)       :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$24'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout(:, :))\n         rcount = scount\n         CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, &\n                             msgin, rcount, ${mpi_type1}$, &\n                             gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin(:, :, 1, 1) = msgout(:, :)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iallgather_${nametype1}$24\n\n      SUBROUTINE mp_iallgather_${nametype1}$33(msgout, msgin, gid, request)\n      !! Gathers rank-3 data from all processes and all processes receive the\n      !! same data\n      !! @note\n      !! see mp_allgather_${nametype1}$12\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:, :, :)\n         !! Rank-3 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:, :, :)\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         TYPE(mp_request_type), INTENT(OUT)       :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgather_${nametype1}$33'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: rcount, scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout(:, :, :))\n         rcount = scount\n         CALL MPI_IALLGATHER(msgout, scount, ${mpi_type1}$, &\n                             msgin, rcount, ${mpi_type1}$, &\n                             gid%handle, request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallgather @ \"//routineN)\n#else\n         MARK_USED(gid)\n         msgin(:, :, :) = msgout(:, :, :)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iallgather_${nametype1}$33\n\n      SUBROUTINE mp_allgatherv_${nametype1}$v(msgout, msgin, rcount, rdispl, gid)\n      !! Gathers vector data from all processes and all processes receive the\n      !! same data\n      !!\n      !! Data size\n      !! Processes can send different-sized data\n      !!\n      !! Ranks\n      !! The last rank counts the processes\n      !!\n      !! Offsets\n      !! Offsets are from 0\n      !!\n      !! MPI mapping\n      !! mpi_allgather\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:)\n         !! Rank-1 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:)\n         !! Received data\n         INTEGER, CONTIGUOUS, INTENT(IN)          :: rcount(:), rdispl(:)\n         TYPE(mp_comm_type), INTENT(IN)                      :: gid\n         !! Size of sent data for every process\n         !! Offset of sent data for every process\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allgatherv_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: scount\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout)\n         CALL MPI_ALLGATHERV(msgout, scount, ${mpi_type1}$, msgin, rcount, &\n                             rdispl, ${mpi_type1}$, gid%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_allgatherv @ \"//routineN)\n#else\n         MARK_USED(rcount)\n         MARK_USED(rdispl)\n         MARK_USED(gid)\n         msgin = msgout\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_allgatherv_${nametype1}$v\n\n      SUBROUTINE mp_iallgatherv_${nametype1}$v(msgout, msgin, rcount, rdispl, gid, request)\n      !! Gathers vector data from all processes and all processes receive the\n      !! same data\n      !!\n      !! Data size\n      !! Processes can send different-sized data\n      !!\n      !! Ranks\n      !! The last rank counts the processes\n      !!\n      !! Offsets\n      !! Offsets are from 0\n      !!\n      !! MPI mapping\n      !! mpi_allgather\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgout(:)\n         !! Rank-1 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:)\n         !! Received data\n         INTEGER, CONTIGUOUS, INTENT(IN)          :: rcount(:), rdispl(:)\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Size of sent data for every process\n         !! Offset of sent data for every process\n         !! Message passing environment identifier\n         TYPE(mp_request_type), INTENT(INOUT)     :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgatherv_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: scount, rsize\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout)\n         rsize = SIZE(rcount)\n         CALL mp_iallgatherv_${nametype1}$v_internal(msgout, scount, msgin, rsize, rcount, &\n                                                     rdispl, gid, request, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallgatherv @ \"//routineN)\n#else\n         MARK_USED(rcount)\n         MARK_USED(rdispl)\n         MARK_USED(gid)\n         msgin = msgout\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iallgatherv_${nametype1}$v\n\n      SUBROUTINE mp_iallgatherv_${nametype1}$v2(msgout, msgin, rcount, rdispl, gid, request)\n      !! Gathers vector data from all processes and all processes receive the\n      !! same data\n      !!\n      !! Data size\n      !! Processes can send different-sized data\n      !!\n      !! Ranks\n      !! The last rank counts the processes\n      !!\n      !! Offsets\n      !! Offsets are from 0\n      !!\n      !! MPI mapping\n      !! mpi_allgather\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)         :: msgout(:)\n         !! Rank-1 data to send\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgin(:)\n         !! Received data\n         INTEGER, CONTIGUOUS, INTENT(IN)          :: rcount(:, :), rdispl(:, :)\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         !! Size of sent data for every process\n         !! Offset of sent data for every process\n         !! Message passing environment identifier\n         TYPE(mp_request_type), INTENT(INOUT)     :: request\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_iallgatherv_${nametype1}$v2'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: scount, rsize\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         scount = SIZE(msgout)\n         rsize = SIZE(rcount)\n         CALL mp_iallgatherv_${nametype1}$v_internal(msgout, scount, msgin, rsize, rcount, &\n                                                     rdispl, gid, request, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_iallgatherv @ \"//routineN)\n#else\n         MARK_USED(rcount)\n         MARK_USED(rdispl)\n         MARK_USED(gid)\n         msgin = msgout\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_iallgatherv_${nametype1}$v2\n\n#if defined(__parallel)\n      SUBROUTINE mp_iallgatherv_${nametype1}$v_internal(msgout, scount, msgin, rsize, rcount, rdispl, gid, request, ierr)\n      !! wrapper needed to deal with interfaces as present in openmpi 1.8.1\n      !! the issue is with the rank of rcount and rdispl\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)                      :: msgout(:)\n         ${type1}$, CONTIGUOUS, INTENT(OUT)                     :: msgin(:)\n         INTEGER, INTENT(IN)                      :: rsize\n         INTEGER, INTENT(IN)                      :: rcount(rsize), rdispl(rsize), scount\n         TYPE(mp_comm_type), INTENT(IN)           :: gid\n         TYPE(mp_request_type), INTENT(INOUT)     :: request\n         INTEGER, INTENT(INOUT)                   :: ierr\n\n         CALL MPI_IALLGATHERV(msgout, scount, ${mpi_type1}$, msgin, rcount, &\n                              rdispl, ${mpi_type1}$, gid%handle, request%handle, ierr)\n\n      END SUBROUTINE mp_iallgatherv_${nametype1}$v_internal\n#endif\n\n      SUBROUTINE mp_sendrecv_${nametype1}$v(msgin, dest, msgout, source, comm)\n      !! Sends and receives vector data\n\n         ${type1}$, CONTIGUOUS, INTENT(IN)        :: msgin(:)\n         !! Data to send\n         INTEGER, INTENT(IN)                      :: dest\n         !! Process to send data to\n         ${type1}$, CONTIGUOUS, INTENT(OUT)       :: msgout(:)\n         !! Received data\n         INTEGER, INTENT(IN)                      :: source\n         !! Process from which to receive\n         TYPE(mp_comm_type), INTENT(IN)           :: comm\n         !! Message passing environment identifier\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_sendrecv_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen_in, msglen_out, &\n                                                     recv_tag, send_tag\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         msglen_in = SIZE(msgin)\n         msglen_out = SIZE(msgout)\n         send_tag = 0 ! cannot think of something better here, this might be dangerous\n         recv_tag = 0 ! cannot think of something better here, this might be dangerous\n         CALL mpi_sendrecv(msgin, msglen_in, ${mpi_type1}$, dest, send_tag, msgout, &\n                           msglen_out, ${mpi_type1}$, source, recv_tag, comm%handle, MPI_STATUS_IGNORE, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_sendrecv @ \"//routineN)\n         CALL add_perf(perf_id=7, &\n                       msg_size=(msglen_in + msglen_out)*${bytes1}$/2)\n#else\n         MARK_USED(dest)\n         MARK_USED(source)\n         MARK_USED(comm)\n         msgout = msgin\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_sendrecv_${nametype1}$v\n\n      SUBROUTINE mp_isendrecv_${nametype1}$ (msgin, dest, msgout, source, comm, send_request, &\n                                             recv_request, tag)\n      !! Non-blocking send and receive of a scalar\n      !!\n      !! Implementation\n      !! Calls mpi_isend and mpi_irecv.\n\n         ${type1}$                                :: msgin\n         !! Scalar data to send\n         INTEGER, INTENT(IN)                      :: dest\n         !! Which process to send to\n         ${type1}$                                :: msgout\n         !! Receive data into this pointer\n         INTEGER, INTENT(IN)                      :: source\n         !! Process to receive from\n         TYPE(mp_comm_type), INTENT(IN)           :: comm\n         !! Message passing environment identifier\n         TYPE(mp_request_type), INTENT(out)       :: send_request, recv_request\n         !! Request handle for the send\n         !! Request handle for the receive\n         INTEGER, INTENT(in), OPTIONAL            :: tag\n         !! tag to differentiate requests\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isendrecv_${nametype1}$'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: my_tag\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         my_tag = 0\n         IF (PRESENT(tag)) my_tag = tag\n\n         CALL mpi_irecv(msgout, 1, ${mpi_type1}$, source, my_tag, &\n                        comm%handle, recv_request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_irecv @ \"//routineN)\n\n         CALL mpi_isend(msgin, 1, ${mpi_type1}$, dest, my_tag, &\n                        comm%handle, send_request%handle, ierr)\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_isend @ \"//routineN)\n\n         CALL add_perf(perf_id=8, msg_size=2*${bytes1}$)\n#else\n         MARK_USED(dest)\n         MARK_USED(source)\n         MARK_USED(comm)\n         MARK_USED(tag)\n         send_request = mp_request_null\n         recv_request = mp_request_null\n         msgout = msgin\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_isendrecv_${nametype1}$\n\n      SUBROUTINE mp_isendrecv_${nametype1}$v(msgin, dest, msgout, source, comm, send_request, &\n                                             recv_request, tag)\n      !! Non-blocking send and receive of a vector\n      !!\n      !! Implementation\n      !! Calls mpi_isend and mpi_irecv.\n      !! @note\n      !! arrays can be pointers or assumed shape, but they must be contiguous!\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, DIMENSION(:)      :: msgin\n         !! Vector data to send\n         INTEGER, INTENT(IN)                      :: dest\n         !! Which process to send to\n         ${type1}$, CONTIGUOUS, DIMENSION(:)      :: msgout\n         !! Receive data into this pointer\n         INTEGER, INTENT(IN)                      :: source\n         !! Process to receive from\n         TYPE(mp_comm_type), INTENT(IN)           :: comm\n         !! Message passing environment identifier\n         TYPE(mp_request_type), INTENT(out)       :: send_request, recv_request\n         !! Request handle for the send\n         !! Request handle for the receive\n         INTEGER, INTENT(in), OPTIONAL            :: tag\n         !! tag to differentiate requests\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isendrecv_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen, my_tag\n         ${type1}$                                :: foo\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         my_tag = 0\n         IF (PRESENT(tag)) my_tag = tag\n\n         msglen = SIZE(msgout, 1)\n         IF (msglen > 0) THEN\n            CALL mpi_irecv(msgout, msglen, ${mpi_type1}$, source, my_tag, &\n                           comm%handle, recv_request%handle, ierr)\n         ELSE\n            CALL mpi_irecv(foo, msglen, ${mpi_type1}$, source, my_tag, &\n                           comm%handle, recv_request%handle, ierr)\n         END IF\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_irecv @ \"//routineN)\n\n         msglen = SIZE(msgin, 1)\n         IF (msglen > 0) THEN\n            CALL mpi_isend(msgin, msglen, ${mpi_type1}$, dest, my_tag, &\n                           comm%handle, send_request%handle, ierr)\n         ELSE\n            CALL mpi_isend(foo, msglen, ${mpi_type1}$, dest, my_tag, &\n                           comm%handle, send_request%handle, ierr)\n         END IF\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_isend @ \"//routineN)\n\n         msglen = (msglen + SIZE(msgout, 1) + 1)/2\n         CALL add_perf(perf_id=8, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(dest)\n         MARK_USED(source)\n         MARK_USED(comm)\n         MARK_USED(tag)\n         send_request = mp_request_null\n         recv_request = mp_request_null\n         msgout = msgin\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_isendrecv_${nametype1}$v\n\n      SUBROUTINE mp_isend_${nametype1}$v(msgin, dest, comm, request, tag)\n      !! Non-blocking send of vector data\n      !! @note\n      !! see mp_isendrecv_${nametype1}$v\n      !! arrays can be pointers or assumed shape, but they must be contiguous!\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, DIMENSION(:)      :: msgin\n         INTEGER, INTENT(IN)                      :: dest\n         TYPE(mp_comm_type), INTENT(IN)           :: comm\n         TYPE(mp_request_type), INTENT(out)       :: request\n         INTEGER, INTENT(in), OPTIONAL            :: tag\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isend_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen, my_tag\n         ${type1}$                                :: foo(1)\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         my_tag = 0\n         IF (PRESENT(tag)) my_tag = tag\n\n         msglen = SIZE(msgin)\n         IF (msglen > 0) THEN\n            CALL mpi_isend(msgin, msglen, ${mpi_type1}$, dest, my_tag, &\n                           comm%handle, request%handle, ierr)\n         ELSE\n            CALL mpi_isend(foo, msglen, ${mpi_type1}$, dest, my_tag, &\n                           comm%handle, request%handle, ierr)\n         END IF\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_isend @ \"//routineN)\n\n         CALL add_perf(perf_id=11, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msgin)\n         MARK_USED(dest)\n         MARK_USED(comm)\n         MARK_USED(request)\n         MARK_USED(tag)\n         ierr = 1\n         request = mp_request_null\n         CALL mp_stop(ierr, \"mp_isend called in non parallel case\")\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_isend_${nametype1}$v\n\n      SUBROUTINE mp_isend_${nametype1}$m2(msgin, dest, comm, request, tag)\n      !! Non-blocking send of matrix data\n      !! @note\n      !! see mp_isendrecv_${nametype1}$v\n      !! see mp_isend_${nametype1}$v\n      !! arrays can be pointers or assumed shape, but they must be contiguous!\n      !! @endnote\n\n         ${type1}$, DIMENSION(:, :), CONTIGUOUS   :: msgin\n         INTEGER, INTENT(IN)                      :: dest\n         TYPE(mp_comm_type), INTENT(IN)           :: comm\n         TYPE(mp_request_type), INTENT(out)       :: request\n         INTEGER, INTENT(in), OPTIONAL            :: tag\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isend_${nametype1}$m2'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen, my_tag\n         ${type1}$                                :: foo(1)\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         my_tag = 0\n         IF (PRESENT(tag)) my_tag = tag\n\n         msglen = SIZE(msgin, 1)*SIZE(msgin, 2)\n         IF (msglen > 0) THEN\n            CALL mpi_isend(msgin, msglen, ${mpi_type1}$, dest, my_tag, &\n                           comm%handle, request%handle, ierr)\n         ELSE\n            CALL mpi_isend(foo, msglen, ${mpi_type1}$, dest, my_tag, &\n                           comm%handle, request%handle, ierr)\n         END IF\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_isend @ \"//routineN)\n\n         CALL add_perf(perf_id=11, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msgin)\n         MARK_USED(dest)\n         MARK_USED(comm)\n         MARK_USED(request)\n         MARK_USED(tag)\n         ierr = 1\n         request = mp_request_null\n         CALL mp_stop(ierr, \"mp_isend called in non parallel case\")\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_isend_${nametype1}$m2\n\n      SUBROUTINE mp_irecv_${nametype1}$v(msgout, source, comm, request, tag)\n      !! Non-blocking receive of vector data\n      !! @note\n      !! see mp_isendrecv_${nametype1}$v\n      !! arrays can be pointers or assumed shape, but they must be contiguous!\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, DIMENSION(:)      :: msgout\n         INTEGER, INTENT(IN)                      :: source\n         TYPE(mp_comm_type), INTENT(IN)           :: comm\n         TYPE(mp_request_type), INTENT(out)       :: request\n         INTEGER, INTENT(in), OPTIONAL            :: tag\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_irecv_${nametype1}$v'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen, my_tag\n         ${type1}$                                :: foo(1)\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         my_tag = 0\n         IF (PRESENT(tag)) my_tag = tag\n\n         msglen = SIZE(msgout)\n         IF (msglen > 0) THEN\n            CALL mpi_irecv(msgout, msglen, ${mpi_type1}$, source, my_tag, &\n                           comm%handle, request%handle, ierr)\n         ELSE\n            CALL mpi_irecv(foo, msglen, ${mpi_type1}$, source, my_tag, &\n                           comm%handle, request%handle, ierr)\n         END IF\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_irecv @ \"//routineN)\n\n         CALL add_perf(perf_id=12, msg_size=msglen*${bytes1}$)\n#else\n         DBCSR_ABORT(\"mp_irecv called in non parallel case\")\n         MARK_USED(msgout)\n         MARK_USED(source)\n         MARK_USED(comm)\n         MARK_USED(request)\n         MARK_USED(tag)\n         request = mp_request_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_irecv_${nametype1}$v\n\n      SUBROUTINE mp_irecv_${nametype1}$m2(msgout, source, comm, request, tag)\n      !! Non-blocking receive of matrix data\n      !! @note\n      !! see mp_isendrecv_${nametype1}$v\n      !! see mp_irecv_${nametype1}$v\n      !! arrays can be pointers or assumed shape, but they must be contiguous!\n      !! @endnote\n\n         ${type1}$, DIMENSION(:, :), CONTIGUOUS   :: msgout\n         INTEGER, INTENT(IN)                      :: source\n         TYPE(mp_comm_type), INTENT(IN)           :: comm\n         TYPE(mp_request_type), INTENT(out)       :: request\n         INTEGER, INTENT(in), OPTIONAL            :: tag\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_irecv_${nametype1}$m2'\n\n         INTEGER                                  :: handle, ierr\n#if defined(__parallel)\n         INTEGER                                  :: msglen, my_tag\n         ${type1}$                                :: foo(1)\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         my_tag = 0\n         IF (PRESENT(tag)) my_tag = tag\n\n         msglen = SIZE(msgout, 1)*SIZE(msgout, 2)\n         IF (msglen > 0) THEN\n            CALL mpi_irecv(msgout, msglen, ${mpi_type1}$, source, my_tag, &\n                           comm%handle, request%handle, ierr)\n         ELSE\n            CALL mpi_irecv(foo, msglen, ${mpi_type1}$, source, my_tag, &\n                           comm%handle, request%handle, ierr)\n         END IF\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_irecv @ \"//routineN)\n\n         CALL add_perf(perf_id=12, msg_size=msglen*${bytes1}$)\n#else\n         MARK_USED(msgout)\n         MARK_USED(source)\n         MARK_USED(comm)\n         MARK_USED(request)\n         MARK_USED(tag)\n         request = mp_request_null\n         DBCSR_ABORT(\"mp_irecv called in non parallel case\")\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_irecv_${nametype1}$m2\n\n      SUBROUTINE mp_win_create_${nametype1}$v(base, comm, win)\n      !! Window initialization function for vector data\n      !! @note\n      !! arrays can be pointers or assumed shape, but they must be contiguous!\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, DIMENSION(:) :: base\n         TYPE(mp_comm_type), INTENT(IN)      :: comm\n         TYPE(mp_win_type), INTENT(OUT)      :: win\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_create_${nametype1}$v'\n\n         INTEGER                        :: ierr, handle\n#if defined(__parallel)\n         INTEGER(kind=mpi_address_kind) :: len\n         ${type1}$                      :: foo(1)\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n\n         len = SIZE(base)*${bytes1}$\n         IF (len > 0) THEN\n            CALL mpi_win_create(base, len, ${bytes1}$, MPI_INFO_NULL, comm%handle, win%handle, ierr)\n         ELSE\n            CALL mpi_win_create(foo, len, ${bytes1}$, MPI_INFO_NULL, comm%handle, win%handle, ierr)\n         END IF\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_win_create @ \"//routineN)\n#else\n         MARK_USED(base)\n         MARK_USED(comm)\n         win = mp_win_null\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_win_create_${nametype1}$v\n\n      SUBROUTINE mp_rget_${nametype1}$v(base, source, win, win_data, myproc, disp, request, &\n                                        origin_datatype, target_datatype)\n      !! Single-sided get function for vector data\n      !! @note\n      !! arrays can be pointers or assumed shape, but they must be contiguous!\n      !! @endnote\n\n         ${type1}$, CONTIGUOUS, DIMENSION(:)                 :: base\n         INTEGER, INTENT(IN)                                 :: source\n         TYPE(mp_win_type), INTENT(IN)                       :: win\n         ${type1}$, CONTIGUOUS, DIMENSION(:)                 :: win_data\n         INTEGER, INTENT(IN), OPTIONAL                       :: myproc, disp\n         TYPE(mp_request_type), INTENT(OUT)                  :: request\n         TYPE(mp_type_descriptor_type), INTENT(IN), OPTIONAL :: origin_datatype, target_datatype\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_rget_${nametype1}$v'\n\n         INTEGER                                  :: ierr, handle\n#if defined(__parallel)\n         INTEGER                                  :: len, &\n                                                     origin_len, target_len\n         LOGICAL                                  :: do_local_copy\n         INTEGER(kind=mpi_address_kind)           :: disp_aint\n         MPI_DATA_TYPE                             :: handle_origin_datatype, handle_target_datatype\n#endif\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         len = SIZE(base)\n         disp_aint = 0\n         IF (PRESENT(disp)) THEN\n            disp_aint = INT(disp, KIND=mpi_address_kind)\n         END IF\n         handle_origin_datatype = ${mpi_type1}$\n         origin_len = len\n         IF (PRESENT(origin_datatype)) THEN\n            handle_origin_datatype = origin_datatype%type_handle\n            origin_len = 1\n         END IF\n         handle_target_datatype = ${mpi_type1}$\n         target_len = len\n         IF (PRESENT(target_datatype)) THEN\n            handle_target_datatype = target_datatype%type_handle\n            target_len = 1\n         END IF\n         IF (len > 0) THEN\n            do_local_copy = .FALSE.\n#if !defined(__DBCSR_DISABLE_RMA_LOCAL_COPY)\n            IF (PRESENT(myproc) .AND. .NOT. PRESENT(origin_datatype) .AND. .NOT. PRESENT(target_datatype)) THEN\n               IF (myproc .EQ. source) do_local_copy = .TRUE.\n            END IF\n#else\n            MARK_USED(myproc)\n#endif\n            IF (do_local_copy) THEN\n               base(:) = win_data(disp_aint + 1:disp_aint + len)\n               request = mp_request_null\n               ierr = 0\n            ELSE\n               CALL mpi_rget(base, origin_len, handle_origin_datatype, source, disp_aint, &\n                             target_len, handle_target_datatype, win%handle, request%handle, ierr)\n            END IF\n         ELSE\n            request = mp_request_null\n            ierr = 0\n         END IF\n         IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_rget @ \"//routineN)\n\n         CALL add_perf(perf_id=25, msg_size=SIZE(base)*${bytes1}$)\n#else\n         MARK_USED(source)\n         MARK_USED(win)\n         MARK_USED(myproc)\n         MARK_USED(origin_datatype)\n         MARK_USED(target_datatype)\n\n         request = mp_request_null\n         !\n         IF (PRESENT(disp)) THEN\n            base(:) = win_data(disp + 1:disp + SIZE(base))\n         ELSE\n            base(:) = win_data(:SIZE(base))\n         END IF\n\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_rget_${nametype1}$v\n\n! *****************************************************************************\n! ***************************************************************************\n      FUNCTION mp_type_indexed_make_${nametype1}$ (count, lengths, displs) &\n         RESULT(type_descriptor)\n         INTEGER, INTENT(IN)                              :: count\n         INTEGER, DIMENSION(1:count), INTENT(IN), TARGET  :: lengths, displs\n         TYPE(mp_type_descriptor_type)                    :: type_descriptor\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_indexed_make_${nametype1}$'\n\n         INTEGER :: ierr, handle\n\n         ierr = 0\n         CALL timeset(routineN, handle)\n\n#if defined(__parallel)\n         CALL mpi_type_indexed(count, lengths, displs, ${mpi_type1}$, &\n                               type_descriptor%type_handle, ierr)\n         IF (ierr /= 0) &\n            DBCSR_ABORT(\"MPI_Type_Indexed @ \"//routineN)\n         CALL mpi_type_commit(type_descriptor%type_handle, ierr)\n         IF (ierr /= 0) &\n            DBCSR_ABORT(\"MPI_Type_commit @ \"//routineN)\n#else\n         type_descriptor%type_handle = ${handle1}$\n#endif\n         type_descriptor%length = count\n         NULLIFY (type_descriptor%subtype)\n         type_descriptor%vector_descriptor(1:2) = 1\n         type_descriptor%has_indexing = .TRUE.\n         type_descriptor%index_descriptor%index => lengths\n         type_descriptor%index_descriptor%chunks => displs\n\n         CALL timestop(handle)\n\n      END FUNCTION mp_type_indexed_make_${nametype1}$\n\n      SUBROUTINE mp_allocate_${nametype1}$ (DATA, len, stat)\n      !! Allocates special parallel memory\n\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: DATA\n         !! pointer to integer array to allocate\n         INTEGER, INTENT(IN)                 :: len\n         !! number of integers to allocate\n         INTEGER, INTENT(OUT), OPTIONAL      :: stat\n         !! allocation status result\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_allocate_${nametype1}$'\n\n         INTEGER                             :: ierr, handle\n\n         CALL timeset(routineN, handle)\n\n         ierr = 0\n#if defined(__parallel)\n         NULLIFY (DATA)\n         CALL mp_alloc_mem(DATA, len, stat=ierr)\n         IF (ierr /= 0 .AND. .NOT. PRESENT(stat)) &\n            CALL mp_stop(ierr, \"mpi_alloc_mem @ \"//routineN)\n#else\n         ALLOCATE (DATA(len), stat=ierr)\n         IF (ierr /= 0 .AND. .NOT. PRESENT(stat)) &\n            CALL mp_stop(ierr, \"ALLOCATE @ \"//routineN)\n#endif\n         IF (PRESENT(stat)) stat = ierr\n         CALL timestop(handle)\n      END SUBROUTINE mp_allocate_${nametype1}$\n\n      SUBROUTINE mp_deallocate_${nametype1}$ (DATA, stat)\n      !! Deallocates special parallel memory\n\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: DATA\n         !! pointer to special memory to deallocate\n         INTEGER, INTENT(OUT), OPTIONAL      :: stat\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_deallocate_${nametype1}$'\n\n         INTEGER                             :: ierr, handle\n\n         CALL timeset(routineN, handle)\n\n         ierr = 0\n#if defined(__parallel)\n         CALL mp_free_mem(DATA, ierr)\n         IF (PRESENT(stat)) THEN\n            stat = ierr\n         ELSE\n            IF (ierr /= 0) CALL mp_stop(ierr, \"mpi_free_mem @ \"//routineN)\n         END IF\n         NULLIFY (DATA)\n#else\n         DEALLOCATE (DATA)\n         IF (PRESENT(stat)) stat = 0\n#endif\n         CALL timestop(handle)\n      END SUBROUTINE mp_deallocate_${nametype1}$\n\n      SUBROUTINE mp_file_write_at_${nametype1}$v(fh, offset, msg, msglen)\n      !! (parallel) Blocking individual file write using explicit offsets\n      !! (serial) Unformatted stream write\n      !!\n      !! MPI-I/O mapping   mpi_file_write_at\n      !!\n      !! STREAM-I/O mapping   WRITE\n\n         ${type1}$, INTENT(IN)                      :: msg(:)\n         !! data to be written to the file\n         TYPE(mp_file_type), INTENT(IN)             :: fh\n         !! file handle (file storage unit)\n         INTEGER, INTENT(IN), OPTIONAL              :: msglen\n         !! number of the elements of data\n         INTEGER(kind=file_offset), INTENT(IN)      :: offset\n         !! file offset (position)\n\n         INTEGER                                    :: msg_len\n\n         msg_len = SIZE(msg)\n         IF (PRESENT(msglen)) msg_len = msglen\n\n#if defined(__parallel)\n         BLOCK\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_${nametype1}$v'\n            INTEGER :: ierr\n            ierr = 0\n            CALL MPI_FILE_WRITE_AT(fh%handle, offset, msg, msg_len, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr)\n            IF (ierr .NE. 0) &\n               DBCSR_ABORT(\"mpi_file_write_at_${nametype1}$v @ \"//routineN)\n         END BLOCK\n#else\n         WRITE (UNIT=fh%handle, POS=offset + 1) msg(1:msg_len)\n#endif\n      END SUBROUTINE mp_file_write_at_${nametype1}$v\n\n! *****************************************************************************\n! *****************************************************************************\n      SUBROUTINE mp_file_write_at_${nametype1}$ (fh, offset, msg)\n         ${type1}$, INTENT(IN)                      :: msg\n         TYPE(mp_file_type), INTENT(IN)             :: fh\n         INTEGER(kind=file_offset), INTENT(IN)      :: offset\n\n#if defined(__parallel)\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_${nametype1}$'\n\n         INTEGER                                    :: ierr\n\n         ierr = 0\n         CALL MPI_FILE_WRITE_AT(fh%handle, offset, msg, 1, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr)\n         IF (ierr .NE. 0) &\n            DBCSR_ABORT(\"mpi_file_write_at_${nametype1}$ @ \"//routineN)\n#else\n         WRITE (UNIT=fh%handle, POS=offset + 1) msg\n#endif\n      END SUBROUTINE mp_file_write_at_${nametype1}$\n\n      SUBROUTINE mp_file_write_at_all_${nametype1}$v(fh, offset, msg, msglen)\n      !! (parallel) Blocking collective file write using explicit offsets\n      !! (serial) Unformatted stream write\n      !!\n      !! MPI-I/O mapping   mpi_file_write_at_all\n      !!\n      !! STREAM-I/O mapping   WRITE\n\n         ${type1}$, INTENT(IN)                      :: msg(:)\n         TYPE(mp_file_type), INTENT(IN)             :: fh\n         INTEGER, INTENT(IN), OPTIONAL              :: msglen\n         INTEGER                                    :: msg_len\n         INTEGER(kind=file_offset), INTENT(IN)      :: offset\n\n         msg_len = SIZE(msg)\n         IF (PRESENT(msglen)) msg_len = msglen\n#if defined(__parallel)\n         BLOCK\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_all_${nametype1}$v'\n            INTEGER                                    :: ierr\n            ierr = 0\n\n            CALL MPI_FILE_WRITE_AT_ALL(fh%handle, offset, msg, msg_len, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr)\n            IF (ierr .NE. 0) &\n               DBCSR_ABORT(\"mpi_file_write_at_all_${nametype1}$v @ \"//routineN)\n         END BLOCK\n#else\n         WRITE (UNIT=fh%handle, POS=offset + 1) msg(1:msg_len)\n#endif\n      END SUBROUTINE mp_file_write_at_all_${nametype1}$v\n\n! *****************************************************************************\n! *****************************************************************************\n      SUBROUTINE mp_file_write_at_all_${nametype1}$ (fh, offset, msg)\n         ${type1}$, INTENT(IN)                      :: msg\n         TYPE(mp_file_type), INTENT(IN)             :: fh\n         INTEGER(kind=file_offset), INTENT(IN)      :: offset\n\n#if defined(__parallel)\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_write_at_all_${nametype1}$'\n\n         INTEGER                                    :: ierr\n\n         ierr = 0\n         CALL MPI_FILE_WRITE_AT_ALL(fh%handle, offset, msg, 1, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr)\n         IF (ierr .NE. 0) &\n            DBCSR_ABORT(\"mpi_file_write_at_all_${nametype1}$ @ \"//routineN)\n#else\n         WRITE (UNIT=fh%handle, POS=offset + 1) msg\n#endif\n      END SUBROUTINE mp_file_write_at_all_${nametype1}$\n\n! *****************************************************************************\n! *****************************************************************************\n      SUBROUTINE mp_file_read_at_all_${nametype1}$v(fh, offset, msg, msglen)\n      !! (parallel) Blocking collective file read using explicit offsets\n      !! (serial) Unformatted stream read\n      !!\n      !! MPI-I/O mapping    mpi_file_read_at_all\n      !!\n      !! STREAM-I/O mapping   READ\n\n         ${type1}$, INTENT(OUT)                     :: msg(:)\n         TYPE(mp_file_type), INTENT(IN)             :: fh\n         INTEGER, INTENT(IN), OPTIONAL              :: msglen\n         INTEGER(kind=file_offset), INTENT(IN)      :: offset\n\n         INTEGER                                    :: msg_len\n\n         msg_len = SIZE(msg)\n         IF (PRESENT(msglen)) msg_len = msglen\n#if defined(__parallel)\n         BLOCK\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_read_at_all_${nametype1}$v'\n            INTEGER                                    :: ierr\n            ierr = 0\n\n            CALL MPI_FILE_READ_AT_ALL(fh%handle, offset, msg, msg_len, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr)\n            IF (ierr .NE. 0) &\n               DBCSR_ABORT(\"mpi_file_read_at_all_${nametype1}$v @ \"//routineN)\n         END BLOCK\n#else\n         READ (UNIT=fh%handle, POS=offset + 1) msg(1:msg_len)\n#endif\n      END SUBROUTINE mp_file_read_at_all_${nametype1}$v\n\n! *****************************************************************************\n! *****************************************************************************\n      SUBROUTINE mp_file_read_at_all_${nametype1}$ (fh, offset, msg)\n         ${type1}$, INTENT(OUT)                     :: msg\n         TYPE(mp_file_type), INTENT(IN)             :: fh\n         INTEGER(kind=file_offset), INTENT(IN)      :: offset\n\n#if defined(__parallel)\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_file_read_at_all_${nametype1}$'\n\n         INTEGER                                    :: ierr\n\n         ierr = 0\n         CALL MPI_FILE_READ_AT_ALL(fh%handle, offset, msg, 1, ${mpi_type1}$, MPI_STATUS_IGNORE, ierr)\n         IF (ierr .NE. 0) &\n            DBCSR_ABORT(\"mpi_file_read_at_all_${nametype1}$ @ \"//routineN)\n#else\n         READ (UNIT=fh%handle, POS=offset + 1) msg\n#endif\n      END SUBROUTINE mp_file_read_at_all_${nametype1}$\n\n! *****************************************************************************\n! *****************************************************************************\n      FUNCTION mp_type_make_${nametype1}$ (ptr, &\n                                           vector_descriptor, index_descriptor) &\n         RESULT(type_descriptor)\n         ${type1}$, DIMENSION(:), POINTER                  :: ptr\n         INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL       :: vector_descriptor\n         TYPE(mp_indexing_meta_type), INTENT(IN), OPTIONAL :: index_descriptor\n         TYPE(mp_type_descriptor_type)                     :: type_descriptor\n\n         CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_type_make_${nametype1}$'\n\n         INTEGER :: ierr\n\n         ierr = 0\n         NULLIFY (type_descriptor%subtype)\n         type_descriptor%length = SIZE(ptr)\n#if defined(__parallel)\n         type_descriptor%type_handle = ${mpi_type1}$\n         CALL MPI_Get_address(ptr, type_descriptor%base, ierr)\n         IF (ierr /= 0) &\n            DBCSR_ABORT(\"MPI_Get_address @ \"//routineN)\n#else\n         type_descriptor%type_handle = ${handle1}$\n#endif\n         type_descriptor%vector_descriptor(1:2) = 1\n         type_descriptor%has_indexing = .FALSE.\n         type_descriptor%data_${nametype1}$ => ptr\n         IF (PRESENT(vector_descriptor) .OR. PRESENT(index_descriptor)) THEN\n            DBCSR_ABORT(routineN//\": Vectors and indices NYI\")\n         END IF\n      END FUNCTION mp_type_make_${nametype1}$\n\n#if defined(__parallel)\n      SUBROUTINE mp_alloc_mem_${nametype1}$ (DATA, len, stat)\n      !! Allocates an array, using MPI_ALLOC_MEM ... this is hackish\n      !! as the Fortran version returns an integer, which we take to be a C_PTR\n\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: DATA\n         !! data array to allocate\n         INTEGER, INTENT(IN)                      :: len\n         !! length (in data elements) of data array allocation\n         INTEGER, INTENT(OUT), OPTIONAL           :: stat\n         !! allocation status result\n\n         INTEGER                                  :: size, ierr, length, &\n                                                     mp_res\n         INTEGER(KIND=MPI_ADDRESS_KIND)           :: mp_size\n         TYPE(C_PTR)                              :: mp_baseptr\n         MPI_INFO_TYPE                            :: mp_info\n\n         length = MAX(len, 1)\n         CALL MPI_TYPE_SIZE(${mpi_type1}$, size, ierr)\n         mp_size = INT(length, KIND=MPI_ADDRESS_KIND)*size\n         IF (mp_size .GT. mp_max_memory_size) THEN\n            DBCSR_ABORT(\"MPI cannot allocate more than 2 GiByte\")\n         END IF\n         mp_info = MPI_INFO_NULL\n         CALL MPI_ALLOC_MEM(mp_size, mp_info, mp_baseptr, mp_res)\n         CALL C_F_POINTER(mp_baseptr, DATA, (/length/))\n         IF (PRESENT(stat)) stat = mp_res\n      END SUBROUTINE mp_alloc_mem_${nametype1}$\n#endif\n\n#if defined(__parallel)\n      SUBROUTINE mp_free_mem_${nametype1}$ (DATA, stat)\n      !! Deallocates am array, ... this is hackish\n      !! as the Fortran version takes an integer, which we hope to get by reference\n\n         ${type1}$, DIMENSION(:), &\n            POINTER, CONTIGUOUS                   :: DATA\n         !! data array to allocate\n         INTEGER, INTENT(OUT), OPTIONAL           :: stat\n         !! allocation status result\n\n         INTEGER                                  :: mp_res\n         CALL MPI_FREE_MEM(DATA, mp_res)\n         IF (PRESENT(stat)) stat = mp_res\n      END SUBROUTINE mp_free_mem_${nametype1}$\n#endif\n\n   #:endfor\n\nEND MODULE dbcsr_mpiwrap\n"
  },
  {
    "path": "src/mpi/dbcsr_mpiwrap.fypp",
    "content": "#!--------------------------------------------------------------------------------------------------!\n#! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n#! This file is part of the DBCSR library.                                                          !\n#!                                                                                                  !\n#! For information on the license, see the LICENSE file.                                            !\n#! For further information please visit https://dbcsr.cp2k.org                                      !\n#! SPDX-License-Identifier: GPL-2.0+                                                                !\n#!--------------------------------------------------------------------------------------------------!\n\n#:mute\n\n#:set nametype1 = ['i', 'l', 'd', 'r', 'z', 'c']\n#: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)']\n#:set mpi_type1 = ['MPI_INTEGER', 'MPI_INTEGER8', 'MPI_DOUBLE_PRECISION', 'MPI_REAL', 'MPI_DOUBLE_COMPLEX', 'MPI_COMPLEX']\n#:set mpi_2type1 = ['MPI_2INTEGER', 'MPI_INTEGER8', 'MPI_2DOUBLE_PRECISION', 'MPI_2REAL', 'MPI_2DOUBLE_COMPLEX', 'MPI_2COMPLEX']\n#:set kind1 = ['int_4', 'int_8', 'real_8', 'real_4', 'real_8', 'real_4']\n#:set bytes1 = ['int_4_size','int_8_size','real_8_size','real_4_size','(2*real_8_size)','(2*real_4_size)']\n#:set handle1 = ['17', '19', '3', '1', '7', '5']\n#: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)']\n#: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)']\n\n#:set inst_params = list(zip(nametype1, type1, mpi_type1, mpi_2type1, kind1, bytes1, handle1, zero1, one1))\n\n#! Generate interface declarations using the cartesian combination of nametypes and suffixes, and extra_suffixes\n#:def gen_mp_iface(basename, nametypes=nametype1, suffixes=[''], extra_suffixes=[])\n   INTERFACE mp_${basename}$\n      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])}$\n   END INTERFACE\n#:enddef\n#:endmute\n"
  },
  {
    "path": "src/ops/PACKAGE",
    "content": "{\n\"description\": \"High level DBCSR operations\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../acc\", \"../mpi\", \"../data\", \"../base\", \"../dist\",\n\t     \"../block\", \"../utils\", \"../core\", \"../mm\", \"../work\"],\n}\n"
  },
  {
    "path": "src/ops/dbcsr_csr_conversions.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_csr_conversions\n   !! DBCSR to CSR matrix format conversion\n   USE dbcsr_block_access, ONLY: dbcsr_put_block\n   USE dbcsr_data_methods, ONLY: dbcsr_data_clear_pointer, &\n                                 dbcsr_data_init, &\n                                 dbcsr_data_new, &\n                                 dbcsr_data_release\n   USE dbcsr_data_types, ONLY: dbcsr_type_complex_4, &\n                               dbcsr_type_complex_8, &\n                               dbcsr_type_real_4, &\n                               dbcsr_type_real_8, &\n                               dbcsr_type_real_default\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, &\n                                 dbcsr_distribution_mp, &\n                                 dbcsr_distribution_new, &\n                                 dbcsr_distribution_release\n   USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, &\n                                        dbcsr_iterator_next_block, &\n                                        dbcsr_iterator_start, &\n                                        dbcsr_iterator_stop\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          dp, &\n                          int_8, &\n                          real_4, &\n                          real_8, &\n                          sp\n   USE dbcsr_methods, ONLY: &\n      dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_type, dbcsr_get_num_blocks, &\n      dbcsr_get_nze, dbcsr_has_symmetry, dbcsr_name, dbcsr_nblkcols_total, dbcsr_nblkrows_total, &\n      dbcsr_nfullrows_local, dbcsr_release, dbcsr_row_block_sizes, dbcsr_valid_index\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_group, &\n                               dbcsr_mp_mynode, &\n                               dbcsr_mp_new, &\n                               dbcsr_mp_numnodes, &\n                               dbcsr_mp_release\n   USE dbcsr_mpiwrap, ONLY: mp_environ, &\n                            mp_gather, &\n                            mp_recv, &\n                            mp_send, &\n                            mp_sum, mp_comm_type\n   USE dbcsr_operations, ONLY: dbcsr_copy, &\n                               dbcsr_get_info, &\n                               dbcsr_set\n   USE dbcsr_transformations, ONLY: dbcsr_complete_redistribute, &\n                                    dbcsr_desymmetrize_deep\n   USE dbcsr_types, ONLY: dbcsr_data_obj, &\n                          dbcsr_distribution_obj, &\n                          dbcsr_iterator, &\n                          dbcsr_mp_obj, &\n                          dbcsr_type\n   USE dbcsr_work_operations, ONLY: dbcsr_create\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_csr_conversions'\n\n   LOGICAL, PARAMETER, PRIVATE          :: careful_mod = .FALSE.\n\n   INTEGER, PARAMETER, PUBLIC           :: csr_dbcsr_blkrow_dist = 1, csr_eqrow_ceil_dist = 2, csr_eqrow_floor_dist = 3\n\n   TYPE csr_mapping_data\n      !! Mapping data relating local CSR indices to local indices of a block-row\n      !! distributed (BRD) DBCSR matrix, and containing the block structure\n      !! of the original DBCSR matrix from which the CSR matrix was created.\n\n      PRIVATE\n      INTEGER, DIMENSION(:), POINTER           :: csr_to_brd_ind => NULL(), &\n                                                  brd_to_csr_ind => NULL()\n         !! csr_to_brd_ind(csr_ind) gives the location of a matrix element with CSR index csr_ind (location in nzval_local) inside\n         !! the data_area of the corresponding BRD matrix. If an element of the DBCSR matrix is treated as 0 in the CSR format, the\n         !! index of this value is not in csr_to_brd_ind.\n         !! same as csr_to_brd_ind but inverse mapping. If a given DBCSR index dbcsr_ind points to a zero element, then\n         !! brd_to_csr_ind(dbcsr_ind) is -1.\n      TYPE(dbcsr_type)                          :: brd_mat = dbcsr_type()\n         !! DBCSR     BRD matrix acting as an intermediate step in any conversion from and to DBCSR format.\n\n      LOGICAL                                  :: has_dbcsr_block_data = .FALSE.\n         !! whether dbcsr_* fields are defined\n      INTEGER                                  :: dbcsr_nblkcols_total = -1, &\n                                                  dbcsr_nblkrows_total = -1, &\n                                                  dbcsr_nblks_local = -1\n         !! data from original DBCSR matrix (not block-row distributed),\n         !! representing the original block structure.\n      INTEGER, DIMENSION(:), POINTER           :: dbcsr_row_p => NULL(), dbcsr_col_i => NULL(), &\n                                                  dbcsr_row_blk_size => NULL(), dbcsr_col_blk_size => NULL()\n         !! data from original DBCSR matrix (not block-row distributed),\n         !! representing the original block structure.\n   END TYPE\n\n   TYPE csr_data_area_type\n      !! Data type of CSR matrices\n\n      REAL(KIND=real_4), DIMENSION(:), POINTER      :: r_sp => Null()\n         !! real, single precision data array\n      REAL(KIND=real_8), DIMENSION(:), POINTER      :: r_dp => Null()\n         !! real, double precision data array\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER   :: c_sp => Null()\n         !! complex, double precision data array\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER   :: c_dp => Null()\n      INTEGER                                       :: data_type = -1\n         !! data type of CSR matrix\n   END TYPE\n\n   TYPE csr_type\n      !! Type for CSR matrices\n\n      INTEGER                                  :: nrows_total = -1, ncols_total = -1, &\n                                                  nze_local = -1, nrows_local = -1\n         !! total number of rows\n         !! total number of columns\n         !! local number of nonzero elements\n         !! local number of rows\n      TYPE(mp_comm_type)                       :: mp_group = mp_comm_type()\n         !! message-passing group ID\n      INTEGER(KIND=int_8)                      :: nze_total = -1_int_8\n         !! total number of nonzero elements\n      INTEGER, DIMENSION(:), POINTER           :: rowptr_local => NULL(), &\n                                                  colind_local => NULL(), &\n                                                  nzerow_local => NULL()\n         !! indices of elements inside nzval_local starting a row\n         !! column indices of elements inside nzval_local\n      TYPE(csr_data_area_type)                 :: nzval_local = csr_data_area_type()\n         !! values of local non-zero elements, row-wise ordering.\n      TYPE(csr_mapping_data)                   :: dbcsr_mapping = csr_mapping_data()\n         !! mapping data relating indices of nzval_local to indices of a block-row distributed DBCSR matrix\n      LOGICAL                                  :: has_mapping = .FALSE.\n         !! whether dbcsr_mapping is defined\n      LOGICAL                                  :: valid = .FALSE.\n         !! whether essential data (excluding dbcsr_mapping) is completely allocated\n      LOGICAL                                  :: has_indices = .FALSE.\n         !! whether rowptr_local and colind_local are defined\n   END TYPE csr_type\n\n   TYPE csr_p_type\n      TYPE(csr_type), POINTER                  :: csr_mat => NULL()\n   END TYPE csr_p_type\n\n   PUBLIC :: csr_type, csr_p_type, convert_csr_to_dbcsr, &\n             csr_create_from_dbcsr, &\n             csr_destroy, &\n             convert_dbcsr_to_csr, &\n             csr_create_new, csr_create_template, &\n             csr_print_sparsity, dbcsr_to_csr_filter, &\n             csr_write\n\n   INTERFACE csr_create\n      MODULE PROCEDURE csr_create_new, csr_create_template\n   END INTERFACE\n\nCONTAINS\n\n   SUBROUTINE csr_create_new(csr_mat, nrows_total, ncols_total, nze_total, &\n                             nze_local, nrows_local, mp_group, data_type)\n      !! Create a new CSR matrix and allocate all internal data (excluding dbcsr_mapping)\n\n      TYPE(csr_type), INTENT(OUT)                        :: csr_mat\n         !! CSR matrix to return\n      INTEGER, INTENT(IN)                                :: nrows_total, ncols_total\n         !! total number of rows\n         !! total number of columns\n      INTEGER(KIND=int_8)                                :: nze_total\n         !! total number of non-zero elements\n      INTEGER, INTENT(IN)                                :: nze_local, nrows_local\n         !! local number of non-zero elements\n         !! local number of rows\n      TYPE(mp_comm_type), INTENT(IN)                     :: mp_group\n      INTEGER, INTENT(IN), OPTIONAL                      :: data_type\n         !! data type of the CSR matrix (default real double prec.)\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_new'\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n\n      IF (nrows_total .LT. nrows_local) &\n         DBCSR_ABORT(\"local number of rows must not exceed total number of rows\")\n\n      IF (nze_total .LT. nze_local) CALL dbcsr_abort(__LOCATION__, \"local number of non-zero \"// &\n                                                     \"elements must not exceed total number of non-zero elements\")\n\n      IF (INT(nrows_total, kind=int_8)*INT(ncols_total, kind=int_8) .LT. nze_total) &\n         DBCSR_ABORT(\"Total number of non-zero elements must not exceed total matrix size\")\n\n      IF (INT(nrows_local, kind=int_8)*INT(ncols_total, kind=int_8) .LT. nze_local) &\n         DBCSR_ABORT(\"Local number of non-zero elements must not exceed local matrix size\")\n\n      csr_mat%ncols_total = ncols_total\n      csr_mat%nrows_total = nrows_total\n      csr_mat%nze_total = nze_total\n      csr_mat%nze_local = nze_local\n      ALLOCATE (csr_mat%colind_local(nze_local))\n      csr_mat%nrows_local = nrows_local\n      ALLOCATE (csr_mat%rowptr_local(nrows_local + 1))\n      ALLOCATE (csr_mat%nzerow_local(nrows_local))\n\n      IF (PRESENT(data_type)) THEN\n         csr_mat%nzval_local%data_type = data_type\n      ELSE\n         csr_mat%nzval_local%data_type = dbcsr_type_real_default\n      END IF\n\n      SELECT CASE (csr_mat%nzval_local%data_type)\n      CASE (dbcsr_type_real_4)\n         ALLOCATE (csr_mat%nzval_local%r_sp(nze_local))\n      CASE (dbcsr_type_real_8)\n         ALLOCATE (csr_mat%nzval_local%r_dp(nze_local))\n      CASE (dbcsr_type_complex_4)\n         ALLOCATE (csr_mat%nzval_local%c_sp(nze_local))\n      CASE (dbcsr_type_complex_8)\n         ALLOCATE (csr_mat%nzval_local%c_dp(nze_local))\n      CASE DEFAULT\n         DBCSR_ABORT(\"Invalid matrix type\")\n      END SELECT\n\n      csr_mat%mp_group = mp_group\n\n      csr_mat%valid = .TRUE.\n      csr_mat%has_mapping = .FALSE.\n      csr_mat%has_indices = .FALSE.\n\n      CALL timestop(handle)\n\n   END SUBROUTINE csr_create_new\n\n   SUBROUTINE csr_create_template(matrix_b, matrix_a)\n      !! Create a new CSR matrix and allocate all internal data using\n      !! an existing CSR matrix. Copies the indices but no actual matrix data.\n\n      TYPE(csr_type), INTENT(OUT)                        :: matrix_b\n         !! Target CSR matrix\n      TYPE(csr_type), INTENT(IN)                         :: matrix_a\n         !! Source CSR matrix\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_template'\n\n      INTEGER                                            :: handle\n      TYPE(csr_mapping_data)                             :: map\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. matrix_a%valid) &\n         DBCSR_ABORT(\"Source CSR matrix must be created.\")\n\n      CALL csr_create_new(matrix_b, matrix_a%nrows_total, matrix_a%ncols_total, &\n                          matrix_a%nze_total, matrix_a%nze_local, matrix_a%nrows_local, &\n                          matrix_a%mp_group, matrix_a%nzval_local%data_type)\n\n      matrix_b%mp_group = matrix_a%mp_group\n      matrix_b%has_mapping = matrix_a%has_mapping\n      matrix_b%has_indices = matrix_a%has_indices\n\n      IF (matrix_a%has_indices) THEN\n         matrix_b%rowptr_local = matrix_a%rowptr_local\n         matrix_b%nzerow_local = matrix_a%nzerow_local\n         matrix_b%colind_local = matrix_a%colind_local\n      END IF\n\n      IF (matrix_a%has_mapping) THEN\n         map = matrix_a%dbcsr_mapping\n         ALLOCATE (matrix_b%dbcsr_mapping%csr_to_brd_ind(SIZE(map%csr_to_brd_ind)))\n         ALLOCATE (matrix_b%dbcsr_mapping%brd_to_csr_ind(SIZE(map%brd_to_csr_ind)))\n         matrix_b%dbcsr_mapping%csr_to_brd_ind = map%csr_to_brd_ind\n         matrix_b%dbcsr_mapping%brd_to_csr_ind = map%brd_to_csr_ind\n         matrix_b%dbcsr_mapping%has_dbcsr_block_data = map%has_dbcsr_block_data\n         IF (matrix_b%dbcsr_mapping%has_dbcsr_block_data) THEN\n            matrix_b%dbcsr_mapping%dbcsr_nblkcols_total = map%dbcsr_nblkcols_total\n            matrix_b%dbcsr_mapping%dbcsr_nblkrows_total = map%dbcsr_nblkrows_total\n            ALLOCATE (matrix_b%dbcsr_mapping%dbcsr_row_blk_size(map%dbcsr_nblkrows_total))\n            ALLOCATE (matrix_b%dbcsr_mapping%dbcsr_col_blk_size(map%dbcsr_nblkcols_total))\n            ALLOCATE (matrix_b%dbcsr_mapping%dbcsr_row_p(map%dbcsr_nblkrows_total + 1))\n            ALLOCATE (matrix_b%dbcsr_mapping%dbcsr_col_i(map%dbcsr_nblks_local))\n            matrix_b%dbcsr_mapping%dbcsr_nblks_local = map%dbcsr_nblks_local\n            matrix_b%dbcsr_mapping%dbcsr_row_p = map%dbcsr_row_p\n            matrix_b%dbcsr_mapping%dbcsr_col_i = map%dbcsr_col_i\n            matrix_b%dbcsr_mapping%dbcsr_row_blk_size = map%dbcsr_row_blk_size\n            matrix_b%dbcsr_mapping%dbcsr_col_blk_size = map%dbcsr_col_blk_size\n         END IF\n\n         CALL dbcsr_copy(matrix_b%dbcsr_mapping%brd_mat, map%brd_mat)\n\n         matrix_b%valid = .TRUE.\n\n      END IF\n\n      CALL timestop(handle)\n   END SUBROUTINE csr_create_template\n\n   SUBROUTINE csr_create_nzerow(csr_mat, nzerow)\n      !! create a vector containing the number of non-zero elements in each\n      !! row of a CSR matrix\n\n      TYPE(csr_type), INTENT(IN)                         :: csr_mat\n         !! CSR matrix\n      INTEGER, DIMENSION(:), INTENT(INOUT), POINTER      :: nzerow\n         !! number of non-zero elements in each row\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_nzerow'\n\n      INTEGER                                            :: handle, k\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. csr_mat%valid) &\n         DBCSR_ABORT(\"CSR matrix must be created.\")\n\n      DO k = 1, csr_mat%nrows_local\n         nzerow(k) = csr_mat%rowptr_local(k + 1) - csr_mat%rowptr_local(k)\n      END DO\n\n      CALL timestop(handle)\n   END SUBROUTINE csr_create_nzerow\n\n   SUBROUTINE csr_destroy(csr_mat)\n      !! destroy a CSR matrix\n      TYPE(csr_type), INTENT(INOUT)                      :: csr_mat\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_destroy'\n      INTEGER                                            :: handle\n      TYPE(csr_mapping_data)                             :: map\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. csr_mat%valid) &\n         DBCSR_ABORT(\"CSR matrix must be created before destroying it.\")\n\n      IF (ASSOCIATED(csr_mat%rowptr_local)) DEALLOCATE (csr_mat%rowptr_local)\n      IF (ASSOCIATED(csr_mat%nzerow_local)) DEALLOCATE (csr_mat%nzerow_local)\n      IF (ASSOCIATED(csr_mat%colind_local)) DEALLOCATE (csr_mat%colind_local)\n\n      IF (csr_mat%has_mapping) THEN\n         map = csr_mat%dbcsr_mapping\n         IF (ASSOCIATED(map%csr_to_brd_ind)) &\n            DEALLOCATE (map%csr_to_brd_ind)\n         IF (ASSOCIATED(map%brd_to_csr_ind)) &\n            DEALLOCATE (map%brd_to_csr_ind)\n         IF (ASSOCIATED(map%dbcsr_row_blk_size)) &\n            DEALLOCATE (map%dbcsr_row_blk_size)\n         IF (ASSOCIATED(map%dbcsr_col_blk_size)) &\n            DEALLOCATE (map%dbcsr_col_blk_size)\n         IF (ASSOCIATED(map%dbcsr_row_p)) &\n            DEALLOCATE (map%dbcsr_row_p)\n         IF (ASSOCIATED(map%dbcsr_col_i)) &\n            DEALLOCATE (map%dbcsr_col_i)\n\n         CALL dbcsr_release(map%brd_mat)\n      END IF\n\n      IF (ASSOCIATED(csr_mat%nzval_local%r_dp)) &\n         DEALLOCATE (csr_mat%nzval_local%r_dp)\n      IF (ASSOCIATED(csr_mat%nzval_local%r_sp)) &\n         DEALLOCATE (csr_mat%nzval_local%r_sp)\n      IF (ASSOCIATED(csr_mat%nzval_local%c_sp)) &\n         DEALLOCATE (csr_mat%nzval_local%c_sp)\n      IF (ASSOCIATED(csr_mat%nzval_local%c_dp)) &\n         DEALLOCATE (csr_mat%nzval_local%c_dp)\n\n      csr_mat%has_mapping = .FALSE.\n      csr_mat%valid = .FALSE.\n      csr_mat%dbcsr_mapping%has_dbcsr_block_data = .FALSE.\n      csr_mat%has_indices = .FALSE.\n      csr_mat%nzval_local%data_type = -1\n\n      CALL timestop(handle)\n   END SUBROUTINE csr_destroy\n\n   SUBROUTINE csr_create_from_brd(brd_mat, csr_mat, csr_sparsity_brd)\n      !! Allocate the internals of a CSR matrix using data from a block-row\n      !! distributed DBCSR matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: brd_mat\n         !! block-row-distributed DBCSR matrix\n      TYPE(csr_type), INTENT(OUT)                        :: csr_mat\n         !! CSR matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: csr_sparsity_brd\n         !! BRD matrix representing sparsity pattern of CSR matrix\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_from_brd'\n\n      INTEGER                                            :: data_type, handle, &\n                                                            nfullcols_total, nfullrows, &\n                                                            nfullrows_total, nze_local\n      INTEGER(KIND=int_8)                                :: nze_total\n      INTEGER, DIMENSION(:), POINTER                     :: cdist, csr_index, dbcsr_index\n      TYPE(dbcsr_distribution_obj)                       :: dist_current\n      TYPE(mp_comm_type)                                 :: mp_group\n\n      CALL timeset(routineN, handle)\n      NULLIFY (dbcsr_index, csr_index, cdist)\n\n      dist_current = dbcsr_distribution(brd_mat)\n\n      mp_group = dbcsr_mp_group(dbcsr_distribution_mp(dist_current))\n      cdist => dbcsr_distribution_col_dist(dist_current)\n\n      IF (ANY(cdist .NE. 0)) &\n         DBCSR_ABORT(\"DBCSR matrix not block-row distributed.\")\n\n      ! Calculate mapping between BRD and CSR indices\n      CALL csr_get_dbcsr_mapping(brd_mat, dbcsr_index, csr_index, nze_local, &\n                                 csr_sparsity_brd)\n\n      CALL dbcsr_get_info(brd_mat, nfullrows_total=nfullrows_total, &\n                          nfullcols_total=nfullcols_total)\n\n      ! Sum up local number of non-zero elements to get total number\n      nze_total = nze_local\n      CALL mp_sum(nze_total, mp_group)\n\n      nfullrows = dbcsr_nfullrows_local(brd_mat)\n      data_type = dbcsr_get_data_type(brd_mat)\n\n      ! Allocate CSR matrix\n      CALL csr_create_new(csr_mat, nfullrows_total, nfullcols_total, nze_total, &\n                          nze_local, nfullrows, mp_group, data_type)\n\n      csr_mat%dbcsr_mapping%brd_to_csr_ind => csr_index\n      csr_mat%dbcsr_mapping%csr_to_brd_ind => dbcsr_index\n\n      csr_mat%has_mapping = .TRUE.\n      csr_mat%dbcsr_mapping%brd_mat = brd_mat\n\n      CALL timestop(handle)\n   END SUBROUTINE csr_create_from_brd\n\n   SUBROUTINE csr_get_dbcsr_mapping(brd_mat, dbcsr_index, csr_index, csr_nze_local, &\n                                    csr_sparsity_brd)\n      !! create the mapping information between a block-row distributed DBCSR\n      !! matrix and the corresponding CSR matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: brd_mat\n         !! the block-row distributed DBCSR matrix\n      INTEGER, DIMENSION(:), INTENT(OUT), POINTER        :: dbcsr_index, csr_index\n         !! csr to dbcsr index mapping\n         !! dbcsr to csr index mapping\n      INTEGER, INTENT(OUT)                               :: csr_nze_local\n         !! number of local non-zero elements\n      TYPE(dbcsr_type), INTENT(IN)                       :: csr_sparsity_brd\n         !! sparsity of CSR matrix represented in BRD format\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_get_dbcsr_mapping'\n\n      INTEGER :: blk, blkcol, blkrow, col_blk_size, csr_ind, data_type, dbcsr_ind, el_sum, &\n                 fullcol_sum_blkrow, handle, l, m, n, nblkrows_total, nze, prev_blk, prev_blkrow, &\n                 prev_row_blk_size, row_blk_offset, row_blk_size\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: csr_nze, nfullcol_blkrow\n      INTEGER, DIMENSION(:), POINTER                     :: dbcsr_index_nozeroes\n      LOGICAL                                            :: tr\n      TYPE(dbcsr_iterator)                               :: iter\n\n      CALL timeset(routineN, handle)\n\n      m = 0\n      dbcsr_ind = 0\n      fullcol_sum_blkrow = 0\n      NULLIFY (dbcsr_index, csr_index)\n\n      CALL dbcsr_get_info(brd_mat, nblkrows_total=nblkrows_total)\n      nze = dbcsr_get_nze(brd_mat)\n\n      ALLOCATE (nfullcol_blkrow(nblkrows_total))\n      ALLOCATE (dbcsr_index(nze))\n      ALLOCATE (csr_index(nze))\n\n      CALL dbcsr_iterator_start(iter, brd_mat, read_only=.TRUE.)\n      nfullcol_blkrow = 0 ! number of non-zero full columns in each block row\n      prev_blk = 0\n\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, blk, transposed=tr, &\n                                        col_size=col_blk_size)\n\n         IF (blk /= prev_blk + 1) &\n            DBCSR_ABORT(\"iterator is required to traverse the blocks in a row-wise fashion\")\n\n         prev_blk = blk\n\n         nfullcol_blkrow(blkrow) = nfullcol_blkrow(blkrow) + col_blk_size\n         IF (tr) &\n            DBCSR_ABORT(\"DBCSR block data must not be transposed\")\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n\n      el_sum = 0 ! number of elements above current block row\n\n      prev_blkrow = 0 ! store number and size of previous block row\n      prev_row_blk_size = 0\n\n      CALL dbcsr_iterator_start(iter, brd_mat, read_only=.TRUE.)\n\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n\n         CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, blk, transposed=tr, &\n                                        row_size=row_blk_size, col_size=col_blk_size, row_offset=row_blk_offset)\n\n         IF (blkrow .GT. prev_blkrow) THEN ! new block row\n            IF (prev_blkrow .GT. 0) THEN\n               el_sum = el_sum + nfullcol_blkrow(prev_blkrow)*prev_row_blk_size\n            END IF\n\n            ! number of non-zero full columns on the left of current block:\n            fullcol_sum_blkrow = 0\n\n            dbcsr_ind = el_sum\n         END IF\n         DO n = 1, col_blk_size !nr of columns\n            DO m = 1, row_blk_size !nr of rows\n               dbcsr_ind = dbcsr_ind + 1\n               csr_ind = (m - 1)*nfullcol_blkrow(blkrow) + fullcol_sum_blkrow + n + el_sum\n               dbcsr_index(csr_ind) = dbcsr_ind\n               csr_index(dbcsr_ind) = csr_ind\n            END DO\n         END DO\n         fullcol_sum_blkrow = fullcol_sum_blkrow + col_blk_size\n         prev_blkrow = blkrow\n         prev_row_blk_size = row_blk_size\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n\n      ! remove BRD zero elements from CSR format\n      data_type = dbcsr_get_data_type(csr_sparsity_brd)\n      ALLOCATE (csr_nze(nze))\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         csr_nze(:) = INT(csr_sparsity_brd%data_area%d%r_sp(1:nze))\n      CASE (dbcsr_type_real_8)\n         csr_nze(:) = INT(csr_sparsity_brd%data_area%d%r_dp(1:nze))\n      CASE DEFAULT\n         DBCSR_ABORT(\"CSR sparsity matrix must have a real datatype\")\n      END SELECT\n\n      IF (ANY(csr_nze .EQ. 0)) THEN\n         ALLOCATE (dbcsr_index_nozeroes(SUM(csr_nze)))\n         m = 0 ! csr index if zeroes are excluded from CSR data\n         DO l = 1, nze ! csr index if zeroes are included in CSR data\n            IF (csr_nze(dbcsr_index(l)) .EQ. 0) THEN\n               csr_index(dbcsr_index(l)) = -1\n            ELSE\n               m = m + 1\n               dbcsr_index_nozeroes(m) = dbcsr_index(l)\n               csr_index(dbcsr_index(l)) = m\n            END IF\n         END DO\n         DEALLOCATE (dbcsr_index)\n         dbcsr_index => dbcsr_index_nozeroes\n      END IF\n\n      IF (ANY(csr_nze .EQ. 0)) THEN\n         csr_nze_local = m\n      ELSE\n         csr_nze_local = nze\n      END IF\n\n      CALL timestop(handle)\n   END SUBROUTINE csr_get_dbcsr_mapping\n\n   SUBROUTINE convert_csr_to_brd(brd_mat, csr_mat)\n      !! Copies data from a CSR matrix to a block-row distributed DBCSR matrix.\n      !! The DBCSR matrix must have a block structure consistent with the CSR matrix.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: brd_mat\n         !! block-row distributed DBCSR matrix\n      TYPE(csr_type), INTENT(IN)                         :: csr_mat\n         !! CSR matrix\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'convert_csr_to_brd'\n\n      INTEGER                                            :: data_type, handle, ind, k, nze\n\n      CALL timeset(routineN, handle)\n\n      data_type = dbcsr_get_data_type(brd_mat)\n      nze = dbcsr_get_nze(brd_mat)\n      CALL dbcsr_data_release(brd_mat%data_area)\n      CALL dbcsr_data_new(brd_mat%data_area, data_type, nze)\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         brd_mat%data_area%d%r_sp(1:nze) = 0.0_sp\n      CASE (dbcsr_type_real_8)\n         brd_mat%data_area%d%r_dp(1:nze) = 0.0_dp\n      CASE (dbcsr_type_complex_4)\n         brd_mat%data_area%d%c_sp(1:nze) = 0.0_sp\n      CASE (dbcsr_type_complex_8)\n         brd_mat%data_area%d%c_dp(1:nze) = 0.0_dp\n      END SELECT\n\n      DO k = 1, csr_mat%nze_local\n         ind = csr_mat%dbcsr_mapping%csr_to_brd_ind(k)\n         SELECT CASE (data_type)\n         CASE (dbcsr_type_real_4)\n            brd_mat%data_area%d%r_sp(ind) = csr_mat%nzval_local%r_sp(k)\n         CASE (dbcsr_type_real_8)\n            brd_mat%data_area%d%r_dp(ind) = csr_mat%nzval_local%r_dp(k)\n         CASE (dbcsr_type_complex_4)\n            brd_mat%data_area%d%c_sp(ind) = csr_mat%nzval_local%c_sp(k)\n         CASE (dbcsr_type_complex_8)\n            brd_mat%data_area%d%c_dp(ind) = csr_mat%nzval_local%c_dp(k)\n         END SELECT\n      END DO\n\n      CALL timestop(handle)\n   END SUBROUTINE convert_csr_to_brd\n\n   SUBROUTINE convert_brd_to_csr(brd_mat, csr_mat)\n      !! Convert a block-row distributed DBCSR matrix to a CSR matrix\n      !! The DBCSR matrix must have a block structure consistent with the CSR matrix.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: brd_mat\n         !! block-row distributed DBCSR matrix\n      TYPE(csr_type), INTENT(INOUT)                      :: csr_mat\n         !! CSR matrix\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'convert_brd_to_csr'\n\n      INTEGER :: blk, blkcol, blkrow, col_blk_offset, col_blk_size, csr_ind, data_type, dbcsr_ind, &\n                 el_sum, handle, ind_blk_data, k, local_row_ind, m, n, nblkrows_total, node_row_offset, &\n                 prev_blkrow, prev_row_blk_size, row_blk_offset, row_blk_size\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: nfullcol_blkrow\n      INTEGER, DIMENSION(:), POINTER                     :: colind, csr_index, dbcsr_index, nzerow, &\n                                                            rowptr\n      LOGICAL                                            :: new_ind, tr\n      TYPE(dbcsr_data_obj)                               :: block\n      TYPE(dbcsr_iterator)                               :: iter\n\n      CALL timeset(routineN, handle)\n      local_row_ind = 0\n      dbcsr_ind = 0\n      node_row_offset = 0\n      NULLIFY (rowptr, colind, dbcsr_index, csr_index)\n\n      dbcsr_index => csr_mat%dbcsr_mapping%csr_to_brd_ind\n      csr_index => csr_mat%dbcsr_mapping%brd_to_csr_ind\n\n      ! CSR indices are not recalculated if indices are already defined\n      new_ind = .NOT. (csr_mat%has_indices)\n\n      IF (.NOT. csr_mat%has_mapping) &\n         DBCSR_ABORT(\"DBCSR mapping of CSR matrix must be defined\")\n\n      ! Calculate mapping between CSR matrix and DBCSR matrix if not yet defined\n      !IF (.NOT. csr_mat%has_mapping ) THEN\n      !  CALL csr_get_dbcsr_mapping (brd_mat, dbcsr_index, csr_index, nze)\n      !ENDIF\n\n      CALL dbcsr_get_info(brd_mat, nblkrows_total=nblkrows_total)\n      ALLOCATE (nfullcol_blkrow(nblkrows_total))\n\n      ! iteration over blocks without touching data,\n      ! in order to get number of non-zero full columns in each block row\n      CALL dbcsr_iterator_start(iter, brd_mat, read_only=.TRUE.)\n      blkrow = 0\n      nfullcol_blkrow = 0 ! number of non-zero full columns in each block row\n      data_type = dbcsr_get_data_type(brd_mat)\n\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, blk, col_size=col_blk_size, &\n                                        row_offset=row_blk_offset)\n         nfullcol_blkrow(blkrow) = nfullcol_blkrow(blkrow) + col_blk_size\n         IF (blk .EQ. 1) THEN\n            node_row_offset = row_blk_offset\n         END IF\n      END DO\n\n      CALL dbcsr_iterator_stop(iter)\n\n      ! Copy data from BRD matrix to CSR matrix and calculate CSR indices\n      prev_blkrow = 0\n      prev_row_blk_size = 0\n      el_sum = 0 ! number of elements above current block row\n      colind => csr_mat%colind_local\n      rowptr => csr_mat%rowptr_local\n      nzerow => csr_mat%nzerow_local\n      CALL dbcsr_data_init(block)\n      CALL dbcsr_data_new(block, data_type)\n\n      CALL dbcsr_iterator_start(iter, brd_mat, read_only=.TRUE.)\n\n      IF (new_ind) rowptr(:) = 0 ! initialize to 0 in order to check which rows are 0 at a later time\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, block, tr, &\n                                        col_size=col_blk_size, row_size=row_blk_size, row_offset=row_blk_offset, &\n                                        col_offset=col_blk_offset)\n\n         IF (tr) &\n            DBCSR_ABORT(\"DBCSR block data must not be transposed\")\n\n         IF (blkrow > prev_blkrow) THEN ! new block row\n            local_row_ind = row_blk_offset - node_row_offset ! actually: local row index - 1\n            IF (prev_blkrow .GT. 0) THEN\n               el_sum = el_sum + nfullcol_blkrow(prev_blkrow)*prev_row_blk_size\n            END IF\n            dbcsr_ind = el_sum\n         END IF\n         DO n = 1, col_blk_size !nr of columns\n            DO m = 1, row_blk_size !nr of rows\n               dbcsr_ind = dbcsr_ind + 1\n               csr_ind = csr_index(dbcsr_ind) ! get CSR index for current element\n               IF (csr_ind .GT. 0) THEN ! is non-zero element if csr_ind > 0\n                  IF (new_ind) THEN\n                     ! Calculate CSR column index\n                     colind(csr_ind) = col_blk_offset + n - 1\n                     ! Calculate CSR row pointer\n                     ! (not accounting for zero elements inside non-zero blocks)\n                     IF (rowptr(local_row_ind + m) .LE. 0) rowptr(local_row_ind + m) = &\n                        rowptr(local_row_ind + m) + el_sum + 1 + nfullcol_blkrow(blkrow)*(m - 1)\n                  END IF\n                  ind_blk_data = (m + row_blk_size*(n - 1)) ! index of data inside DBCSR blocks\n                  SELECT CASE (csr_mat%nzval_local%data_type)\n                  CASE (dbcsr_type_real_4)\n                     csr_mat%nzval_local%r_sp(csr_ind) = block%d%r_sp(ind_blk_data)\n                  CASE (dbcsr_type_real_8)\n                     csr_mat%nzval_local%r_dp(csr_ind) = block%d%r_dp(ind_blk_data)\n                  CASE (dbcsr_type_complex_4)\n                     csr_mat%nzval_local%c_sp(csr_ind) = block%d%c_sp(ind_blk_data)\n                  CASE (dbcsr_type_complex_8)\n                     csr_mat%nzval_local%c_dp(csr_ind) = block%d%c_dp(ind_blk_data)\n                  END SELECT\n               ELSE ! is zero element if ind = -1\n                  ! CSR row pointer has to be corrected if element is zero\n                  ! (subtract 1 from all subsequent row pointers)\n                  IF (new_ind) rowptr(local_row_ind + m + 1:) = rowptr(local_row_ind + m + 1:) - 1\n               END IF\n            END DO\n         END DO\n         prev_blkrow = blkrow\n         prev_row_blk_size = row_blk_size\n      END DO\n\n      IF (new_ind) THEN\n         ! Repeat previous row pointer for row pointers to zero rows\n         IF (csr_mat%nrows_local .GT. 0) rowptr(1) = 1\n         DO k = 1, csr_mat%nrows_local\n            IF (rowptr(k) .LE. 0) rowptr(k) = rowptr(k - 1)\n         END DO\n\n         rowptr(csr_mat%nrows_local + 1) = csr_mat%nze_local + 1\n      END IF\n\n      CALL csr_create_nzerow(csr_mat, nzerow)\n\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(block)\n      CALL dbcsr_data_release(block)\n\n      IF (new_ind) csr_mat%has_indices = .TRUE.\n\n      CALL timestop(handle)\n   END SUBROUTINE convert_brd_to_csr\n\n   SUBROUTINE csr_create_from_dbcsr(dbcsr_mat, csr_mat, dist_format, csr_sparsity, numnodes)\n      !! create CSR matrix including dbcsr_mapping from arbitrary DBCSR matrix\n      !! in order to prepare conversion.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat\n      TYPE(csr_type), INTENT(OUT)                        :: csr_mat\n      INTEGER, INTENT(IN)                                :: dist_format\n         !! how to distribute CSR rows over processes: csr_dbcsr_blkrow_dist: the number of rows per process is adapted to the row\n         !! block sizes in the DBCSR format such that blocks are not split over different processes. csr_eqrow_ceil_dist: each\n         !! process holds ceiling(N/P) CSR rows. csr_eqrow_floor_dist: each process holds floor(N/P) CSR rows.\n      TYPE(dbcsr_type), INTENT(IN), OPTIONAL             :: csr_sparsity\n         !! DBCSR matrix containing 0 and 1, representing CSR sparsity pattern 1: non-zero element 0: zero element (not present in\n         !! CSR format) Note: matrix must be of data_type dbcsr_type_real_4 or dbcsr_type_real_8 (integer types not supported)\n      INTEGER, INTENT(IN), OPTIONAL                      :: numnodes\n         !! number of nodes to use for distributing CSR matrix (optional, default is number of nodes used for DBCSR matrix)\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_create_from_dbcsr'\n\n      INTEGER                                            :: dbcsr_numnodes, handle, nblkcols_total, &\n                                                            nblkrows_total, nblks_local, num_p\n      LOGICAL                                            :: equal_dist, floor_dist\n      TYPE(dbcsr_type)                                   :: brd_mat, csr_sparsity_brd, &\n                                                            csr_sparsity_nosym, dbcsr_mat_nosym\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. dbcsr_valid_index(dbcsr_mat)) &\n         DBCSR_ABORT(\"Invalid DBCSR matrix\")\n\n      SELECT CASE (dist_format)\n      CASE (csr_dbcsr_blkrow_dist)\n         equal_dist = .FALSE.\n         floor_dist = .FALSE.\n      CASE (csr_eqrow_ceil_dist)\n         equal_dist = .TRUE.\n         floor_dist = .FALSE.\n      CASE (csr_eqrow_floor_dist)\n         equal_dist = .TRUE.\n         floor_dist = .TRUE.\n      END SELECT\n\n      ! Conversion does not support matrices in symmetric format, therefore desymmetrize\n      IF (dbcsr_has_symmetry(dbcsr_mat)) THEN\n         CALL dbcsr_desymmetrize_deep(dbcsr_mat, dbcsr_mat_nosym, untransposed_data=.TRUE.)\n      ELSE\n         CALL dbcsr_copy(dbcsr_mat_nosym, dbcsr_mat)\n      END IF\n\n      IF (PRESENT(csr_sparsity)) THEN\n         IF (dbcsr_has_symmetry(csr_sparsity)) THEN\n            CALL dbcsr_desymmetrize_deep(csr_sparsity, csr_sparsity_nosym, &\n                                         untransposed_data=.TRUE.)\n         ELSE\n            CALL dbcsr_copy(csr_sparsity_nosym, csr_sparsity)\n         END IF\n      ELSE\n         CALL dbcsr_create(csr_sparsity_nosym, &\n                           template=dbcsr_mat_nosym, &\n                           name=\"CSR sparsity matrix\", &\n                           data_type=dbcsr_type_real_8)\n         CALL dbcsr_copy(csr_sparsity_nosym, dbcsr_mat_nosym)\n         CALL dbcsr_set(csr_sparsity_nosym, 1.0_dp)\n      END IF\n\n      IF (.NOT. dbcsr_has_same_block_structure(dbcsr_mat_nosym, csr_sparsity_nosym)) &\n         DBCSR_ABORT(\"csr_sparsity and dbcsr_mat have different sparsity pattern\")\n\n      dbcsr_numnodes = dbcsr_mp_numnodes(dbcsr_distribution_mp(dbcsr_distribution(dbcsr_mat)))\n      IF (PRESENT(numnodes)) THEN\n         IF (numnodes .GT. dbcsr_numnodes) &\n            CALL dbcsr_abort(__LOCATION__, \"Number of nodes used for CSR matrix \"// &\n                             \"must not exceed total number of nodes\")\n\n         num_p = numnodes\n      ELSE\n         num_p = dbcsr_numnodes\n      END IF\n\n      CALL dbcsr_create_brd(dbcsr_mat_nosym, brd_mat, equal_dist, floor_dist, &\n                            num_p)\n      CALL dbcsr_create_brd(csr_sparsity_nosym, csr_sparsity_brd, equal_dist, floor_dist, &\n                            num_p)\n\n      ! Create CSR matrix from BRD matrix\n      CALL csr_create_from_brd(brd_mat, csr_mat, csr_sparsity_brd)\n\n      ! Store DBCSR block data inside CSR matrix\n      ! (otherwise, this data is lost when converting from DBCSR to CSR)\n      nblks_local = dbcsr_get_num_blocks(dbcsr_mat_nosym)\n      nblkrows_total = dbcsr_nblkrows_total(dbcsr_mat_nosym)\n      nblkcols_total = dbcsr_nblkcols_total(dbcsr_mat_nosym)\n\n      csr_mat%dbcsr_mapping%dbcsr_nblkcols_total = nblkcols_total\n      csr_mat%dbcsr_mapping%dbcsr_nblkrows_total = nblkrows_total\n      csr_mat%dbcsr_mapping%dbcsr_nblks_local = nblks_local\n      ALLOCATE (csr_mat%dbcsr_mapping%dbcsr_row_p(nblkrows_total + 1))\n      csr_mat%dbcsr_mapping%dbcsr_row_p = dbcsr_mat_nosym%row_p\n      ALLOCATE (csr_mat%dbcsr_mapping%dbcsr_col_i(nblks_local))\n      csr_mat%dbcsr_mapping%dbcsr_col_i = dbcsr_mat_nosym%col_i\n\n      ALLOCATE (csr_mat%dbcsr_mapping%dbcsr_row_blk_size(nblkrows_total))\n      ALLOCATE (csr_mat%dbcsr_mapping%dbcsr_col_blk_size(nblkcols_total))\n\n      csr_mat%dbcsr_mapping%dbcsr_row_blk_size = dbcsr_row_block_sizes(dbcsr_mat_nosym)\n      csr_mat%dbcsr_mapping%dbcsr_col_blk_size = dbcsr_col_block_sizes(dbcsr_mat_nosym)\n\n      csr_mat%dbcsr_mapping%has_dbcsr_block_data = .TRUE.\n\n      CALL dbcsr_release(dbcsr_mat_nosym)\n      CALL dbcsr_release(csr_sparsity_nosym)\n      CALL dbcsr_release(csr_sparsity_brd)\n\n      CALL timestop(handle)\n   END SUBROUTINE csr_create_from_dbcsr\n\n   FUNCTION dbcsr_has_same_block_structure(matrix_a, matrix_b) RESULT(is_equal)\n      !! Helper function to assert that two DBCSR matrices have the same block\n      !! structure and same sparsity pattern\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b\n      LOGICAL                                            :: is_equal\n         !! whether matrix_a and matrix_b have the same block structure\n\n      is_equal = .TRUE.\n\n      IF (dbcsr_nblkcols_total(matrix_a) .NE. dbcsr_nblkcols_total(matrix_b)) is_equal = .FALSE.\n      IF (dbcsr_nblkrows_total(matrix_a) .NE. dbcsr_nblkrows_total(matrix_b)) is_equal = .FALSE.\n      IF ((matrix_a%nblks) .NE. (matrix_b%nblks)) is_equal = .FALSE.\n      IF (ANY(matrix_a%row_p .NE. matrix_b%row_p)) is_equal = .FALSE.\n      IF (ANY(matrix_a%col_i .NE. matrix_b%col_i)) is_equal = .FALSE.\n      IF (ANY(dbcsr_row_block_sizes(matrix_a) .NE. &\n              dbcsr_row_block_sizes(matrix_b))) is_equal = .FALSE.\n      IF (ANY(dbcsr_row_block_sizes(matrix_a) .NE. &\n              dbcsr_row_block_sizes(matrix_b))) is_equal = .FALSE.\n\n   END FUNCTION dbcsr_has_same_block_structure\n\n   SUBROUTINE csr_assert_consistency_with_dbcsr(csr_mat, dbcsr_mat)\n      !! Helper function to assert that a given CSR matrix and a given DBCSR\n      !! matrix are consistent before doing the conversion\n\n      TYPE(csr_type), INTENT(IN)                         :: csr_mat\n      TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_assert_consistency_with_dbcsr'\n\n      INTEGER                                            :: handle\n      TYPE(csr_mapping_data)                             :: map\n\n      CALL timeset(routineN, handle)\n      map = csr_mat%dbcsr_mapping\n      IF (map%has_dbcsr_block_data) THEN\n         IF (map%dbcsr_nblkcols_total .NE. dbcsr_nblkcols_total(dbcsr_mat)) &\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"field nblkcols_total of DBCSR matrix not consistent with CSR matrix\")\n         IF (map%dbcsr_nblkrows_total .NE. dbcsr_nblkrows_total(dbcsr_mat)) &\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"field nblkrows_total of DBCSR matrix not consistent with CSR matrix\")\n         IF (map%dbcsr_nblks_local .NE. dbcsr_mat%nblks) &\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"field nblks of DBCSR matrix not consistent with CSR matrix\")\n         IF (ANY(map%dbcsr_row_p .NE. dbcsr_mat%row_p)) &\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"field row_p of DBCSR matrix not consistent with CSR matrix\")\n         IF (ANY(map%dbcsr_col_i .NE. dbcsr_mat%col_i)) &\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"field dbcsr_col_i of DBCSR matrix not consistent with CSR matrix\")\n         IF (ANY(map%dbcsr_row_blk_size .NE. dbcsr_row_block_sizes(dbcsr_mat))) &\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"field row_blk_size of DBCSR matrix not consistent with CSR matrix\")\n         IF (ANY(map%dbcsr_col_blk_size .NE. dbcsr_col_block_sizes(dbcsr_mat))) &\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"field col_blk_size of DBCSR matrix not consistent with CSR matrix\")\n      ELSE\n         CALL dbcsr_warn(__LOCATION__, \"Can not assert consistency of the matrices \"// &\n                         \"as no block data stored in CSR matrix.\")\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE csr_assert_consistency_with_dbcsr\n\n   SUBROUTINE convert_dbcsr_to_csr(dbcsr_mat, csr_mat)\n      !! Convert a DBCSR matrix to a CSR matrix.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat\n         !! DBCSR matrix to convert\n      TYPE(csr_type), INTENT(INOUT)                      :: csr_mat\n         !! correctly allocated CSR matrix\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'convert_dbcsr_to_csr'\n\n      INTEGER                                            :: handle\n      TYPE(dbcsr_type)                                   :: dbcsr_mat_nosym\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. dbcsr_valid_index(dbcsr_mat)) &\n         DBCSR_ABORT(\"Invalid DBCSR matrix\")\n      IF (dbcsr_get_data_type(dbcsr_mat) /= csr_mat%nzval_local%data_type) &\n         DBCSR_ABORT(\"DBCSR and CSR matrix must have same type\")\n\n      IF (.NOT. csr_mat%has_mapping) &\n         DBCSR_ABORT(\"CSR_mat must contain mapping to DBCSR format\")\n\n      IF (dbcsr_has_symmetry(dbcsr_mat)) THEN\n         CALL dbcsr_desymmetrize_deep(dbcsr_mat, dbcsr_mat_nosym, untransposed_data=.TRUE.)\n      ELSE\n         dbcsr_mat_nosym = dbcsr_mat\n      END IF\n\n      CALL csr_assert_consistency_with_dbcsr(csr_mat, dbcsr_mat_nosym)\n\n      ! 1) DBCSR -> BRD\n      CALL dbcsr_complete_redistribute(dbcsr_mat_nosym, csr_mat%dbcsr_mapping%brd_mat)\n      ! 2) BRD -> CSR\n      CALL convert_brd_to_csr(csr_mat%dbcsr_mapping%brd_mat, csr_mat)\n\n      IF (dbcsr_has_symmetry(dbcsr_mat)) CALL dbcsr_release(dbcsr_mat_nosym)\n\n      CALL timestop(handle)\n   END SUBROUTINE convert_dbcsr_to_csr\n\n   SUBROUTINE convert_csr_to_dbcsr(dbcsr_mat, csr_mat)\n      !! convert a CSR matrix to a DBCSR matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: dbcsr_mat\n         !! correctly allocated DBCSR matrix\n      TYPE(csr_type), INTENT(INOUT)                      :: csr_mat\n         !! CSR matrix to convert\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'convert_csr_to_dbcsr'\n\n      INTEGER                                            :: handle\n      TYPE(dbcsr_type)                                   :: dbcsr_mat_nosym\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. dbcsr_valid_index(dbcsr_mat)) &\n         DBCSR_ABORT(\"Invalid DBCSR matrix\")\n\n      IF (dbcsr_get_data_type(dbcsr_mat) /= csr_mat%nzval_local%data_type) &\n         DBCSR_ABORT(\"DBCSR and CSR matrix must have same type\")\n\n      IF (.NOT. csr_mat%has_mapping) &\n         DBCSR_ABORT(\"CSR_mat must contain mapping to DBCSR format\")\n\n      ! Desymmetrize to assert that DBCSR matrix has sparsity pattern consistent with CSR matrix\n      IF (dbcsr_has_symmetry(dbcsr_mat)) THEN\n         CALL dbcsr_desymmetrize_deep(dbcsr_mat, dbcsr_mat_nosym, untransposed_data=.TRUE.)\n      ELSE\n         dbcsr_mat_nosym = dbcsr_mat\n      END IF\n\n      CALL csr_assert_consistency_with_dbcsr(csr_mat, dbcsr_mat_nosym)\n\n      IF (dbcsr_has_symmetry(dbcsr_mat)) CALL dbcsr_release(dbcsr_mat_nosym)\n\n      ! 1) CSR -> BRD\n      CALL convert_csr_to_brd(csr_mat%dbcsr_mapping%brd_mat, csr_mat)\n\n      ! 2) BRD -> DBCSR\n      CALL dbcsr_complete_redistribute(csr_mat%dbcsr_mapping%brd_mat, dbcsr_mat)\n\n      CALL timestop(handle)\n   END SUBROUTINE convert_csr_to_dbcsr\n\n   SUBROUTINE dbcsr_to_csr_filter(dbcsr_mat, csr_sparsity, eps)\n      !! Apply filtering threshold eps to DBCSR blocks in order to improve\n      !! CSR sparsity (currently only used for testing purposes)\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat\n      TYPE(dbcsr_type), INTENT(OUT)                      :: csr_sparsity\n      REAL(kind=real_8), INTENT(IN)                      :: eps\n\n      INTEGER                                            :: blkcol, blkrow, col_blk_size, data_type, &\n                                                            row_blk_size\n      LOGICAL                                            :: tr\n      REAL(kind=real_8), ALLOCATABLE, DIMENSION(:)       :: block_abs, csr_sparsity_blk\n      TYPE(dbcsr_data_obj)                               :: block\n      TYPE(dbcsr_iterator)                               :: iter\n\n!REAL(kind=real_8), DIMENSION(:), POINTER :: block\n\n      CALL dbcsr_create(csr_sparsity, &\n                        template=dbcsr_mat, &\n                        name=\"CSR sparsity\", &\n                        data_type=dbcsr_type_real_8)\n      CALL dbcsr_copy(csr_sparsity, dbcsr_mat)\n      CALL dbcsr_set(csr_sparsity, 1.0_dp)\n\n      IF (eps .GT. 0.0_dp) THEN\n         data_type = dbcsr_get_data_type(dbcsr_mat)\n         CALL dbcsr_data_init(block)\n         CALL dbcsr_data_new(block, data_type)\n         CALL dbcsr_iterator_start(iter, dbcsr_mat, read_only=.TRUE.)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, blkrow, blkcol, block, transposed=tr, &\n                                           row_size=row_blk_size, col_size=col_blk_size)\n\n            ALLOCATE (block_abs(row_blk_size*col_blk_size))\n            ALLOCATE (csr_sparsity_blk(row_blk_size*col_blk_size))\n            SELECT CASE (data_type)\n            CASE (dbcsr_type_real_4)\n               block_abs(:) = REAL(ABS(block%d%r_sp(:)), KIND=real_8)\n            CASE (dbcsr_type_real_8)\n               block_abs(:) = REAL(ABS(block%d%r_dp(:)), KIND=real_8)\n            CASE (dbcsr_type_complex_4)\n               block_abs(:) = REAL(ABS(block%d%c_sp(:)), KIND=real_8)\n            CASE (dbcsr_type_complex_8)\n               block_abs(:) = REAL(ABS(block%d%c_dp(:)), KIND=real_8)\n            END SELECT\n\n            csr_sparsity_blk = 1.0_dp\n            WHERE (block_abs .LT. eps) csr_sparsity_blk = 0.0_dp\n            CALL dbcsr_put_block(csr_sparsity, blkrow, blkcol, csr_sparsity_blk, transposed=tr)\n            DEALLOCATE (csr_sparsity_blk, block_abs)\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_data_clear_pointer(block)\n         CALL dbcsr_data_release(block)\n      END IF\n\n   END SUBROUTINE dbcsr_to_csr_filter\n\n   SUBROUTINE csr_write(csr_mat, unit_nr, upper_triangle, threshold, binary)\n      !! Write a CSR matrix to file\n\n      TYPE(csr_type), INTENT(IN)                         :: csr_mat\n      INTEGER, INTENT(IN)                                :: unit_nr\n         !! unit number to which output is written\n      LOGICAL, INTENT(IN), OPTIONAL                      :: upper_triangle\n         !! If true (default: false), write only upper triangular part of matrix\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: threshold\n         !! threshold on the absolute value of the elements to be printed\n      LOGICAL, INTENT(IN), OPTIONAL                      :: binary\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_write'\n      CHARACTER(LEN=default_string_length)               :: data_format\n      COMPLEX(KIND=real_4), ALLOCATABLE, DIMENSION(:)    :: nzval_to_master_c_sp\n      COMPLEX(KIND=real_8), ALLOCATABLE, DIMENSION(:)    :: nzval_to_master_c_dp\n      INTEGER                                            :: handle, i, ii, k, l, m, mynode, &\n                                                            numnodes, rowind, tag1, tag2, tag3\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: colind_to_master, nzerow_to_master, &\n                                                            sizes_numrowlocal, sizes_nzelocal\n      LOGICAL                                            :: bin, ut\n      REAL(KIND=real_4), ALLOCATABLE, DIMENSION(:)       :: nzval_to_master_r_sp\n      REAL(KIND=real_8)                                  :: thld\n      REAL(KIND=real_8), ALLOCATABLE, DIMENSION(:)       :: nzval_to_master_r_dp\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(upper_triangle)) THEN\n         ut = upper_triangle\n      ELSE\n         ut = .FALSE.\n      END IF\n\n      IF (PRESENT(threshold)) THEN\n         thld = threshold\n      ELSE\n         thld = 0.0_dp\n      END IF\n\n      IF (PRESENT(binary)) THEN\n         bin = binary\n      ELSE\n         bin = .FALSE.\n      END IF\n\n      IF (.NOT. csr_mat%valid) &\n         DBCSR_ABORT(\"can not write invalid CSR matrix\")\n\n      tag1 = 0\n      tag2 = 1\n      tag3 = 2\n\n      CALL mp_environ(numnodes, mynode, csr_mat%mp_group)\n\n      ! gather sizes (number of local non-zero elements and number of local rows)\n      ALLOCATE (sizes_nzelocal(numnodes))\n      ALLOCATE (sizes_numrowlocal(numnodes))\n\n      CALL mp_gather(csr_mat%nze_local, sizes_nzelocal, 0, csr_mat%mp_group)\n      CALL mp_gather(csr_mat%nrows_local, sizes_numrowlocal, 0, csr_mat%mp_group)\n\n      ! for each node, send matrix data to node 0 (master) and write data\n      DO i = 0, numnodes - 1\n         ii = i\n         IF (mynode .EQ. 0) THEN ! allocations for receiving data from node i\n            ALLOCATE (colind_to_master(sizes_nzelocal(ii + 1)))\n            ALLOCATE (nzerow_to_master(sizes_numrowlocal(ii + 1)))\n\n            SELECT CASE (csr_mat%nzval_local%data_type)\n            CASE (dbcsr_type_real_4)\n               data_format = \"(2(I8),E23.6E2)\"\n               ALLOCATE (nzval_to_master_r_sp(sizes_nzelocal(ii + 1)))\n            CASE (dbcsr_type_real_8)\n               data_format = \"(2(I8),E23.14E3)\"\n               ALLOCATE (nzval_to_master_r_dp(sizes_nzelocal(ii + 1)))\n            CASE (dbcsr_type_complex_4)\n               data_format = \"(2(I8),2(E23.6E2))\"\n               ALLOCATE (nzval_to_master_c_sp(sizes_nzelocal(ii + 1)))\n            CASE (dbcsr_type_complex_8)\n               data_format = \"(2(I8),2(E23.14E3))\"\n               ALLOCATE (nzval_to_master_c_dp(sizes_nzelocal(ii + 1)))\n            END SELECT\n         END IF\n\n         IF (mynode .EQ. 0) THEN ! receive at node 0\n            IF (ii .EQ. 0) THEN ! data from node 0, no need for mpi routines\n               colind_to_master(:) = csr_mat%colind_local(:)\n               nzerow_to_master(:) = csr_mat%nzerow_local(:)\n               SELECT CASE (csr_mat%nzval_local%data_type)\n               CASE (dbcsr_type_real_4)\n                  nzval_to_master_r_sp(:) = csr_mat%nzval_local%r_sp(:)\n               CASE (dbcsr_type_real_8)\n                  nzval_to_master_r_dp(:) = csr_mat%nzval_local%r_dp(:)\n               CASE (dbcsr_type_complex_4)\n                  nzval_to_master_c_sp(:) = csr_mat%nzval_local%c_sp(:)\n               CASE (dbcsr_type_complex_8)\n                  nzval_to_master_c_dp(:) = csr_mat%nzval_local%c_dp(:)\n               END SELECT\n            ELSE ! receive data from nodes with rank > 0\n               CALL mp_recv(colind_to_master, ii, tag1, csr_mat%mp_group)\n               CALL mp_recv(nzerow_to_master, ii, tag2, csr_mat%mp_group)\n               SELECT CASE (csr_mat%nzval_local%data_type)\n               CASE (dbcsr_type_real_4)\n                  CALL mp_recv(nzval_to_master_r_sp, ii, tag3, csr_mat%mp_group)\n               CASE (dbcsr_type_real_8)\n                  CALL mp_recv(nzval_to_master_r_dp, ii, tag3, csr_mat%mp_group)\n               CASE (dbcsr_type_complex_4)\n                  CALL mp_recv(nzval_to_master_c_sp, ii, tag3, csr_mat%mp_group)\n               CASE (dbcsr_type_complex_8)\n                  CALL mp_recv(nzval_to_master_c_dp, ii, tag3, csr_mat%mp_group)\n               END SELECT\n            END IF\n         END IF\n\n         IF ((mynode .EQ. ii) .AND. (ii .NE. 0)) THEN ! send from nodes with rank > 0\n            CALL mp_send(csr_mat%colind_local, 0, tag1, csr_mat%mp_group)\n            CALL mp_send(csr_mat%nzerow_local, 0, tag2, csr_mat%mp_group)\n            SELECT CASE (csr_mat%nzval_local%data_type)\n            CASE (dbcsr_type_real_4)\n               CALL mp_send(csr_mat%nzval_local%r_sp, 0, tag3, csr_mat%mp_group)\n            CASE (dbcsr_type_real_8)\n               CALL mp_send(csr_mat%nzval_local%r_dp, 0, tag3, csr_mat%mp_group)\n            CASE (dbcsr_type_complex_4)\n               CALL mp_send(csr_mat%nzval_local%c_sp, 0, tag3, csr_mat%mp_group)\n            CASE (dbcsr_type_complex_8)\n               CALL mp_send(csr_mat%nzval_local%c_dp, 0, tag3, csr_mat%mp_group)\n            END SELECT\n         END IF\n\n         IF (mynode .EQ. 0) THEN ! write data received at node 0\n            !WRITE(unit_nr,\"(A27)\") \"#row ind, col ind, value\"\n            m = 0\n            DO k = 1, sizes_numrowlocal(ii + 1)\n               rowind = k + SUM(sizes_numrowlocal(1:ii)) ! row index: local to global\n               DO l = 1, nzerow_to_master(k)\n                  m = m + 1\n                  IF ((.NOT. ut) .OR. (rowind .LE. colind_to_master(m))) THEN\n                     SELECT CASE (csr_mat%nzval_local%data_type)\n                     CASE (dbcsr_type_real_4)\n                        IF (ABS(nzval_to_master_r_sp(m)) .GE. thld) THEN\n                           IF (bin) THEN\n                              WRITE (unit_nr) rowind, colind_to_master(m), nzval_to_master_r_sp(m)\n                           ELSE\n                              WRITE (unit_nr, data_format) rowind, colind_to_master(m), &\n                                 nzval_to_master_r_sp(m)\n                           END IF\n                        END IF\n                     CASE (dbcsr_type_real_8)\n                        IF (ABS(nzval_to_master_r_dp(m)) .GE. thld) THEN\n                           IF (bin) THEN\n                              WRITE (unit_nr) rowind, colind_to_master(m), nzval_to_master_r_dp(m)\n                           ELSE\n                              WRITE (unit_nr, data_format) rowind, colind_to_master(m), &\n                                 nzval_to_master_r_dp(m)\n                           END IF\n                        END IF\n                     CASE (dbcsr_type_complex_4)\n                        IF (ABS(nzval_to_master_c_sp(m)) .GE. thld) THEN\n                           IF (bin) THEN\n                              WRITE (unit_nr) rowind, colind_to_master(m), nzval_to_master_c_sp(m)\n                           ELSE\n                              WRITE (unit_nr, data_format) rowind, colind_to_master(m), &\n                                 nzval_to_master_c_sp(m)\n                           END IF\n                        END IF\n                     CASE (dbcsr_type_complex_8)\n                        IF (ABS(nzval_to_master_c_dp(m)) .GE. thld) THEN\n                           IF (bin) THEN\n                              WRITE (unit_nr) rowind, colind_to_master(m), nzval_to_master_c_dp(m)\n                           ELSE\n                              WRITE (unit_nr, data_format) rowind, colind_to_master(m), &\n                                 nzval_to_master_c_dp(m)\n                           END IF\n                        END IF\n                     END SELECT\n                  END IF\n               END DO\n            END DO\n\n            DEALLOCATE (colind_to_master)\n            DEALLOCATE (nzerow_to_master)\n\n            SELECT CASE (csr_mat%nzval_local%data_type)\n            CASE (dbcsr_type_real_4)\n               DEALLOCATE (nzval_to_master_r_sp)\n            CASE (dbcsr_type_real_8)\n               DEALLOCATE (nzval_to_master_r_dp)\n            CASE (dbcsr_type_complex_4)\n               DEALLOCATE (nzval_to_master_c_sp)\n            CASE (dbcsr_type_complex_8)\n               DEALLOCATE (nzval_to_master_c_dp)\n            END SELECT\n         END IF\n      END DO\n\n      CALL timestop(handle)\n\n   END SUBROUTINE csr_write\n\n   SUBROUTINE csr_print_sparsity(csr_mat, unit_nr)\n      !! Print CSR sparsity\n      TYPE(csr_type), INTENT(IN)                         :: csr_mat\n      INTEGER, INTENT(IN)                                :: unit_nr\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'csr_print_sparsity'\n\n      INTEGER                                            :: handle, mynode, numnodes\n      INTEGER(KIND=int_8)                                :: dbcsr_nze_total\n      REAL(KIND=real_8)                                  :: dbcsr_nze_percentage, nze_percentage\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. csr_mat%valid) &\n         DBCSR_ABORT(\"CSR matrix must be created first\")\n\n      nze_percentage = 100.0_dp*(REAL(csr_mat%nze_total, KIND=real_8) &\n                                 /REAL(csr_mat%nrows_total, KIND=real_8)) &\n                       /REAL(csr_mat%ncols_total, KIND=real_8)\n\n      IF (csr_mat%has_mapping) THEN\n         dbcsr_nze_total = dbcsr_get_nze(csr_mat%dbcsr_mapping%brd_mat)\n         CALL mp_sum(dbcsr_nze_total, csr_mat%mp_group)\n         dbcsr_nze_percentage = 100.0_dp*(REAL(dbcsr_nze_total, KIND=real_8) &\n                                          /REAL(csr_mat%nrows_total, KIND=real_8)) &\n                                /REAL(csr_mat%ncols_total, KIND=real_8)\n      END IF\n\n      CALL mp_environ(numnodes, mynode, csr_mat%mp_group)\n\n      IF (mynode .EQ. 0) THEN\n         WRITE (unit_nr, \"(T15,A,T68,I13)\") \"Number of  CSR non-zero elements:\", csr_mat%nze_total\n         WRITE (unit_nr, \"(T15,A,T75,F6.2)\") \"Percentage CSR non-zero elements:\", nze_percentage\n         !IF(csr_mat%has_mapping) THEN\n         !  WRITE(unit_nr,\"(T15,A,T75,F6.2/)\") \"Percentage DBCSR non-zero elements:\", dbcsr_nze_percentage\n         !ENDIF\n      END IF\n\n      CALL timestop(handle)\n   END SUBROUTINE csr_print_sparsity\n\n   SUBROUTINE dbcsr_create_brd(dbcsr_mat, brd_mat, equal_dist, floor_dist, numnodes)\n      !! Converts a DBCSR matrix to a block row distributed matrix.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat\n         !! DBCSR matrix to be converted\n      TYPE(dbcsr_type), INTENT(OUT)                      :: brd_mat\n         !! converted matrix\n      LOGICAL, INTENT(IN)                                :: equal_dist, floor_dist\n         !! see documentation of csr_create_from_dbcsr\n         !! see documentation of csr_create_from_dbcsr\n      INTEGER, INTENT(IN)                                :: numnodes\n         !! number of nodes to use for block row distribution\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_create_brd'\n\n      CHARACTER                                          :: matrix_type\n      CHARACTER(LEN=default_string_length)               :: matrix_name\n      INTEGER :: cs, data_type, end_ind, handle, i, k, l, m, mynode, nblkcols_total, &\n                 nblkrows_total, nfullrows_local, nfullrows_total, node_size, numnodes_total, row_index, &\n                 split_row, start_ind\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: rdist_tmp, row_blk_size_new_tmp\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: pgrid\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: cdist, col_blk_size, rdist, &\n                                                            row_blk_size, row_blk_size_new\n      REAL(KIND=real_8)                                  :: chunk_size\n      TYPE(dbcsr_distribution_obj)                       :: dist_current, dist_new\n      TYPE(dbcsr_mp_obj)                                 :: mp_obj_current, mp_obj_new\n      TYPE(mp_comm_type)                                 :: mp_group\n\n      CALL timeset(routineN, handle)\n\n      NULLIFY (row_blk_size, rdist, row_blk_size_new)\n      CALL dbcsr_get_info(dbcsr_mat, &\n                          nblkrows_total=nblkrows_total, &\n                          nblkcols_total=nblkcols_total, &\n                          nfullrows_total=nfullrows_total, &\n                          row_blk_size=row_blk_size, &\n                          col_blk_size=col_blk_size, &\n                          matrix_type=matrix_type, &\n                          data_type=data_type)\n\n      matrix_name = dbcsr_name(dbcsr_mat)\n\n      ALLOCATE (cdist(nblkcols_total))\n      cdist = 0\n\n      dist_current = dbcsr_distribution(dbcsr_mat)\n      mp_obj_current = dbcsr_distribution_mp(dist_current)\n      mp_group = dbcsr_mp_group(mp_obj_current)\n      mynode = dbcsr_mp_mynode(mp_obj_current)\n      numnodes_total = dbcsr_mp_numnodes(mp_obj_current)\n\n      ALLOCATE (pgrid(numnodes_total, 1))\n\n      IF (equal_dist) THEN ! Equally distribute rows over processors -> cut blocks\n\n         ! Calculate the number of rows a processor can hold\n         IF (floor_dist) THEN\n            nfullrows_local = FLOOR(REAL(nfullrows_total, KIND=dp)/numnodes)\n         ELSE\n            nfullrows_local = CEILING(REAL(nfullrows_total, KIND=dp)/numnodes)\n         END IF\n\n         ! allocate maximum amount of memory possibly needed\n         ALLOCATE (rdist_tmp(nblkrows_total + numnodes - 1)) ! row distribution\n         ALLOCATE (row_blk_size_new_tmp(nblkrows_total + numnodes - 1)) ! new sizes of block rows\n\n         k = 0 ! counter for block rows\n         m = 0 ! node counter\n         node_size = nfullrows_local ! space available on current node in number of rows\n         IF (node_size .GT. 0) THEN\n            DO l = 1, nblkrows_total\n               split_row = row_blk_size(l) ! size of current block row (number of rows)\n               DO WHILE (split_row .GE. node_size) ! cut block row and send it to two nodes\n                  k = k + 1\n                  m = m + 1\n                  row_blk_size_new_tmp(k) = node_size ! size of first part of block row\n                  rdist_tmp(k) = m - 1 ! send first part to node m\n                  split_row = split_row - node_size ! size of remaining part of block rows\n                  node_size = nfullrows_local ! space available on next node\n                  IF (floor_dist .AND. (m .EQ. numnodes - 1)) THEN ! send all remaining rows to last node\n                     node_size = nfullrows_total - (numnodes - 1)*node_size\n                  END IF\n               END DO\n               IF (split_row .GT. 0) THEN ! enough space left on next node for remaining rows\n                  k = k + 1\n                  row_blk_size_new_tmp(k) = split_row ! size of remaining part of block row\n                  rdist_tmp(k) = m ! send to next node\n                  node_size = node_size - split_row ! remaining space on next node\n               END IF\n            END DO\n         ELSE ! send everything to last node if node_size = 0\n            rdist_tmp(1:nblkrows_total) = numnodes - 1\n            row_blk_size_new_tmp(1:nblkrows_total) = row_blk_size ! row blocks unchanged\n            k = nblkrows_total\n         END IF\n\n         ! Copy data to correctly allocated variables\n         ALLOCATE (row_blk_size_new(k))\n         row_blk_size_new = row_blk_size_new_tmp(1:k)\n         ALLOCATE (rdist(k))\n         rdist = rdist_tmp(1:k)\n\n      ELSE ! Leave block rows intact (do not cut)\n         ALLOCATE (rdist(nblkrows_total))\n         rdist = 0\n         IF (numnodes .GT. nblkrows_total) THEN\n            rdist = (/(i, i=0, nblkrows_total - 1)/)\n         ELSE\n            chunk_size = REAL(nblkrows_total, KIND=dp)/numnodes\n            row_index = 0\n            start_ind = 1\n            DO i = 0, numnodes - 1\n               cs = NINT(i*chunk_size) - NINT((i - 1)*chunk_size)\n               end_ind = MIN(start_ind - 1 + cs, nblkrows_total)\n               rdist(start_ind:end_ind) = row_index\n               start_ind = end_ind + 1\n               row_index = row_index + 1\n            END DO\n         END IF\n         row_blk_size_new => row_blk_size\n      END IF\n\n      pgrid(:, :) = RESHAPE((/(i, i=0, numnodes_total - 1)/), (/numnodes_total, 1/))\n      CALL dbcsr_mp_new(mp_obj_new, mp_group, pgrid, mynode, numnodes=numnodes_total)\n      CALL dbcsr_distribution_new(dist_new, mp_obj_new, rdist, cdist, reuse_arrays=.TRUE.)\n\n      CALL dbcsr_create(brd_mat, TRIM(matrix_name)//\" row-block distributed\", &\n                        dist_new, matrix_type, row_blk_size_new, col_blk_size, data_type=data_type)\n      CALL dbcsr_complete_redistribute(dbcsr_mat, brd_mat)\n\n      DEALLOCATE (pgrid)\n\n      IF (equal_dist) DEALLOCATE (row_blk_size_new)\n\n      CALL dbcsr_distribution_release(dist_new)\n      CALL dbcsr_mp_release(mp_obj_new)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_create_brd\n\nEND MODULE dbcsr_csr_conversions\n"
  },
  {
    "path": "src/ops/dbcsr_io.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_io\n   !! DBCSR input/output\n   USE dbcsr_array_types, ONLY: array_data\n   USE dbcsr_data_methods, ONLY: dbcsr_data_clear_pointer, &\n                                 dbcsr_data_get_size_referenced, &\n                                 dbcsr_data_init, &\n                                 dbcsr_data_new, &\n                                 dbcsr_get_data\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_mp\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          dp, &\n                          real_4, &\n                          real_4_size, &\n                          real_8, &\n                          real_8_size, &\n                          sp\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_methods, ONLY: &\n      dbcsr_data_area, dbcsr_distribution, dbcsr_get_data_size, dbcsr_get_data_type, &\n      dbcsr_get_matrix_type, dbcsr_get_num_blocks, dbcsr_name, dbcsr_nblkcols_total, &\n      dbcsr_nblkrows_total, dbcsr_valid_index\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_group, &\n                               dbcsr_mp_pgrid\n   USE dbcsr_mp_operations, ONLY: dbcsr_mp_type_from_anytype\n   USE dbcsr_mpiwrap, ONLY: &\n      file_amode_create, file_amode_rdonly, file_amode_wronly, file_offset, mp_allgather, &\n      mp_environ, mp_file_close, mp_file_get_size, mp_file_open, mp_file_read_at_all, &\n      mp_file_write_at, mp_file_write_at_all, mp_sum, mp_type_descriptor_type, mp_type_size, &\n      mpi_character_size, mpi_integer_size, mp_comm_type, mp_file_type\n   USE dbcsr_transformations, ONLY: dbcsr_datablock_redistribute\n   USE dbcsr_types, ONLY: dbcsr_data_obj, &\n                          dbcsr_distribution_obj, &\n                          dbcsr_mp_obj, &\n                          dbcsr_type, &\n                          dbcsr_type_complex_4, &\n                          dbcsr_type_complex_8, &\n                          dbcsr_type_real_4, &\n                          dbcsr_type_real_8\n   USE dbcsr_work_operations, ONLY: dbcsr_create\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_io'\n\n   ! Main\n   PUBLIC :: dbcsr_print\n   PUBLIC :: dbcsr_print_block_sum\n   ! Low-level printing\n! PUBLIC :: dbcsr_printmat, dbcsr_print2dmat\n   ! Utility printing\n   PUBLIC :: dbcsr_binary_write\n   PUBLIC :: dbcsr_binary_read\n\n   LOGICAL, PARAMETER :: bcsr_debug = .TRUE.\n   LOGICAL, PARAMETER :: bcsr_info = .FALSE.\n   LOGICAL, PARAMETER :: bcsr_verbose = .FALSE.\n\n   INTERFACE dbcsr_printmat\n      MODULE PROCEDURE printmat_s, printmat_d, printmat_c, printmat_z\n   END INTERFACE\n\nCONTAINS\n\n   SUBROUTINE dbcsr_print(matrix, nodata, matlab_format, variable_name, unit_nr)\n      !! Prints a BCSR matrix (block-style, not full)\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: nodata, matlab_format\n         !! don't print actual data\n      CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: variable_name\n      INTEGER, INTENT(IN), OPTIONAL                      :: unit_nr\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_print', routineP = moduleN//':'//routineN\n\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER        :: c_sp\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER        :: c_dp\n      INTEGER                                            :: ablk_p, bc, blk, blk_p, br, ebr, fblk, &\n                                                            handle, ibr, iunit, lblk, m, mn, n, &\n                                                            sblk\n      INTEGER, DIMENSION(:), POINTER                     :: col_blk_offset, col_blk_size, &\n                                                            local_cols, local_rows, &\n                                                            row_blk_offset, row_blk_size\n      LOGICAL                                            :: my_matlab_format, tr, yesprint\n      REAL(KIND=dp)                                      :: blk_cs\n      REAL(KIND=real_4), DIMENSION(:), POINTER           :: r_sp\n      REAL(KIND=real_8), DIMENSION(:), POINTER           :: r_dp\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. dbcsr_valid_index(matrix)) &\n         DBCSR_WARN(\"Can not print invalid matrix.\")\n\n      iunit = default_output_unit\n      IF (PRESENT(unit_nr)) iunit = unit_nr\n\n      my_matlab_format = .FALSE.\n      IF (PRESENT(matlab_format)) my_matlab_format = matlab_format\n      yesprint = .TRUE.\n      IF (PRESENT(nodata)) yesprint = .NOT. nodata\n      WRITE (iunit, *) routineP//' Contents of matrix named ', matrix%name\n      WRITE (iunit, *) routineP//' Flags ', matrix%symmetry, &\n         matrix%negate_real, matrix%negate_imaginary, \"type\", &\n         dbcsr_get_data_type(matrix), \"serial\", matrix%serial_number\n      WRITE (iunit, '(1X,A,3(1X,I9,1X,A))') routineP, matrix%nblks, \"blocks\", &\n         matrix%nze, \"nzes,\", dbcsr_get_data_size(matrix), \"data els\", &\n         dbcsr_data_get_size_referenced(matrix%data_area), \"used\"\n      WRITE (iunit, '(1X,A,I5,A,I5)') routineP//\" Full size\", &\n         matrix%nfullrows_total, \"x\", matrix%nfullcols_total\n      WRITE (iunit, '(1X,A,I5,A,I5)') routineP//\" Blocked size\", &\n         matrix%nblkrows_total, \"x\", matrix%nblkcols_total\n      SELECT CASE (matrix%data_type)\n      CASE (dbcsr_type_real_8)\n         CALL dbcsr_get_data(matrix%data_area, r_dp)\n      CASE (dbcsr_type_real_4)\n         CALL dbcsr_get_data(matrix%data_area, r_sp)\n      CASE (dbcsr_type_complex_8)\n         CALL dbcsr_get_data(matrix%data_area, c_dp)\n      CASE (dbcsr_type_complex_4)\n         CALL dbcsr_get_data(matrix%data_area, c_sp)\n      END SELECT\n      row_blk_size => array_data(matrix%row_blk_size)\n      col_blk_size => array_data(matrix%col_blk_size)\n      row_blk_offset => array_data(matrix%row_blk_offset)\n      col_blk_offset => array_data(matrix%col_blk_offset)\n\n      IF (matrix%nblks .GT. 0) THEN\n         IF (matrix%list_indexing) THEN\n            IF (SIZE(matrix%coo_l) .NE. 3*matrix%nblks) &\n               DBCSR_ABORT(\"Wrong list\")\n            ebr = 1\n            sblk = 3\n         ELSE\n            ebr = matrix%nblkrows_total\n            sblk = 1\n         END IF\n         DO ibr = 1, ebr\n            IF (matrix%list_indexing) THEN\n               fblk = 1\n               lblk = SIZE(matrix%coo_l)\n            ELSE\n               br = ibr\n               fblk = matrix%row_p(br) + 1\n               lblk = matrix%row_p(br + 1)\n               m = row_blk_size(br)\n            END IF\n            DO blk = fblk, lblk, sblk\n               IF (matrix%list_indexing) THEN\n                  br = matrix%coo_l(blk)\n                  bc = matrix%coo_l(blk + 1)\n                  IF (matrix%local_indexing) THEN\n                     local_rows => array_data(matrix%local_rows)\n                     local_cols => array_data(matrix%local_cols)\n                     br = local_rows(br)\n                     bc = local_cols(bc)\n                  END IF\n                  m = row_blk_size(br)\n                  ablk_p = matrix%coo_l(blk + 2)\n               ELSE\n                  bc = matrix%col_i(blk)\n                  ablk_p = matrix%blk_p(blk)\n               END IF\n               n = col_blk_size(bc)\n               mn = m*n\n               blk_p = ABS(ablk_p)\n               tr = ablk_p .LT. 0\n               block_exists: IF (blk_p .NE. 0) THEN\n                  IF (mn .GT. 0) THEN\n                     SELECT CASE (matrix%data_type)\n                     CASE (dbcsr_type_real_8)\n                        blk_cs = REAL(DOT_PRODUCT(r_dp(blk_p:blk_p + mn - 1), &\n                                                  r_dp(blk_p:blk_p + mn - 1)), KIND=dp)\n                        !CALL &\n                        !     dbcsr_printmat(r_dp(blk_p:blk_p+mn-1),m,n, tr=tr)\n                     CASE (dbcsr_type_real_4)\n                        blk_cs = REAL(DOT_PRODUCT(r_sp(blk_p:blk_p + mn - 1), &\n                                                  r_sp(blk_p:blk_p + mn - 1)), KIND=dp)\n                        !CALL &\n                        !     dbcsr_printmat(r_sp(blk_p:blk_p+mn-1),m,n, tr=tr)\n                     CASE (dbcsr_type_complex_8)\n                        blk_cs = REAL(DOT_PRODUCT(c_dp(blk_p:blk_p + mn - 1), &\n                                                  c_dp(blk_p:blk_p + mn - 1)), KIND=dp)\n                        !CALL &\n                        !     dbcsr_printmat(c_dp(blk_p:blk_p+mn-1),m,n, tr=tr)\n                     CASE (dbcsr_type_complex_4)\n                        blk_cs = REAL(DOT_PRODUCT(c_sp(blk_p:blk_p + mn - 1), &\n                                                  c_sp(blk_p:blk_p + mn - 1)), KIND=dp)\n                        !CALL &\n                        !     dbcsr_printmat(c_sp(blk_p:blk_p+mn-1),m,n, tr=tr)\n                     END SELECT\n                  ELSE\n                     blk_cs = 0.0_dp\n                  END IF\n                  !WRITE(iunit,*)routineP//' chksum for (',br,',',bc,') at',&\n                  !     blk_p,'l',mn,'= ', blk_cs,'size',m,n\n                  IF (.NOT. my_matlab_format) WRITE (iunit, '(A,I6,\",\",I6,A,I7,A,I6,I6,\"=\",I7,A,E12.3)') &\n                     !\" Checksum for (\",br,bc,\") at \",blk_p,\" size \",m,n,mn,&\n                     \" Checksum for (\", br, bc, \") at \", ablk_p, \" size \", m, n, mn, &\n                     \" checksum=\", blk_cs\n                  IF (yesprint .AND. blk_p .NE. 0) THEN\n                     IF (mn .GT. 0) THEN\n                        SELECT CASE (matrix%data_type)\n                        CASE (dbcsr_type_real_8)\n                           !WRITE(iunit,'(10(1X,F7.2))')r_dp(blk_p:blk_p+mn-1)\n                           IF (my_matlab_format) THEN\n                              CALL dbcsr_printmat_matlab_d(r_dp(blk_p:blk_p + mn - 1), m, n, &\n                                                           row_blk_offset(br), col_blk_offset(bc), iunit, tr=tr, &\n                                                           variable_name=variable_name)\n                           ELSE\n                              CALL dbcsr_printmat(r_dp(blk_p:blk_p + mn - 1), m, n, iunit=iunit, tr=tr)\n                           END IF\n                        CASE (dbcsr_type_real_4)\n                           IF (my_matlab_format) THEN\n                              CALL dbcsr_printmat_matlab_s(r_sp(blk_p:blk_p + mn - 1), m, n, &\n                                                           row_blk_offset(br), col_blk_offset(bc), iunit, tr=tr, &\n                                                           variable_name=variable_name)\n                           ELSE\n                              CALL dbcsr_printmat(r_sp(blk_p:blk_p + mn - 1), m, n, iunit=iunit, tr=tr)\n                           END IF\n                        CASE (dbcsr_type_complex_8)\n                           IF (my_matlab_format) THEN\n                              CALL dbcsr_printmat_matlab_z(c_dp(blk_p:blk_p + mn - 1), m, n, &\n                                                           row_blk_offset(br), col_blk_offset(bc), iunit, tr=tr, &\n                                                           variable_name=variable_name)\n                           ELSE\n                              CALL dbcsr_printmat(c_dp(blk_p:blk_p + mn - 1), m, n, iunit=iunit, tr=tr)\n                           END IF\n                        CASE (dbcsr_type_complex_4)\n                           IF (my_matlab_format) THEN\n                              CALL dbcsr_printmat_matlab_c(c_sp(blk_p:blk_p + mn - 1), m, n, &\n                                                           row_blk_offset(br), col_blk_offset(bc), iunit, tr=tr, &\n                                                           variable_name=variable_name)\n                           ELSE\n                              CALL dbcsr_printmat(c_sp(blk_p:blk_p + mn - 1), m, n, iunit=iunit, tr=tr)\n                           END IF\n                        END SELECT\n                     END IF\n                  END IF\n               END IF block_exists\n            END DO\n         END DO\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_print\n\n   SUBROUTINE dbcsr_printmat_matlab_d(matrix, rows, cols, r_offset, c_offset, iunit, tr, variable_name)\n      !! Prints the elements of a matrix.\n\n      REAL(KIND=real_8), DIMENSION(:), INTENT(IN)        :: matrix\n      INTEGER, INTENT(IN)                                :: rows, cols, r_offset, c_offset, iunit\n         !! the logical (possibly detransposed) matrix size, not the stored size\n         !! the logical (possibly detransposed) matrix size, not the stored size\n      LOGICAL, INTENT(IN), OPTIONAL                      :: tr\n         !! specifies whether the elements are stored transposed\n      CHARACTER(len=*), INTENT(in), OPTIONAL             :: variable_name\n\n      INTEGER                                            :: c, c_off, m, n, r, r_off\n      LOGICAL                                            :: t\n\n!   ---------------------------------------------------------------------------\n\n      m = rows\n      n = cols\n      r_off = r_offset\n      c_off = c_offset\n      t = .FALSE.\n      IF (PRESENT(tr)) THEN\n         IF (tr) THEN\n            t = .TRUE.\n            m = cols\n            n = rows\n            r_off = c_offset\n            c_off = r_offset\n         END IF\n      END IF\n\n      DO c = 1, cols\n      DO r = 1, rows\n         IF (.NOT. t) THEN\n            IF (PRESENT(variable_name)) THEN\n               WRITE (iunit, '(A,I4,A,I4,A,E23.16,A)') &\n                  variable_name//'(', r + r_offset - 1, ',', c + c_offset - 1, ')=', matrix(r + (c - 1)*rows), ';'\n            ELSE\n               WRITE (iunit, '(A,I4,A,I4,A,E23.16,A)') 'a(', r + r_offset - 1, ',', &\n                  c + c_offset - 1, ')=', matrix(r + (c - 1)*rows), ';'\n            END IF\n         ELSE\n            IF (PRESENT(variable_name)) THEN\n               WRITE (iunit, '(A,I4,A,I4,A,E23.16,A)') &\n                  variable_name//'(', r + r_offset - 1, ',', c + c_offset - 1, ')=', matrix((r - 1)*cols + c), ';'\n            ELSE\n               WRITE (iunit, '(A,I4,A,I4,A,E23.16,A)') 'a(', r + r_offset - 1, ',', &\n                  c + c_offset - 1, ')=', matrix((r - 1)*cols + c), ';'\n            END IF\n         END IF\n      END DO\n      END DO\n   END SUBROUTINE dbcsr_printmat_matlab_d\n\n   SUBROUTINE dbcsr_printmat_matlab_s(matrix, rows, cols, r_offset, c_offset, iunit, tr, variable_name)\n      REAL(KIND=real_4), DIMENSION(:), INTENT(IN)        :: matrix\n      INTEGER, INTENT(IN)                                :: rows, cols, r_offset, c_offset, iunit\n      LOGICAL, INTENT(IN), OPTIONAL                      :: tr\n      CHARACTER(len=*), INTENT(in), OPTIONAL             :: variable_name\n\n      INTEGER                                            :: c, c_off, m, n, r, r_off\n      LOGICAL                                            :: t\n\n!   ---------------------------------------------------------------------------\n\n      m = rows\n      n = cols\n      r_off = r_offset\n      c_off = c_offset\n      t = .FALSE.\n      IF (PRESENT(tr)) THEN\n         IF (tr) THEN\n            t = .TRUE.\n            m = cols\n            n = rows\n            r_off = c_offset\n            c_off = r_offset\n         END IF\n      END IF\n\n      DO c = 1, cols\n      DO r = 1, rows\n         IF (.NOT. t) THEN\n            IF (PRESENT(variable_name)) THEN\n               WRITE (iunit, '(A,I4,A,I4,A,E15.7,A)') &\n                  variable_name//'(', r + r_offset - 1, ',', c + c_offset - 1, ')=', matrix(r + (c - 1)*rows), ';'\n            ELSE\n               WRITE (iunit, '(A,I4,A,I4,A,E15.7,A)') 'a(', r + r_offset - 1, ',', &\n                  c + c_offset - 1, ')=', matrix(r + (c - 1)*rows), ';'\n            END IF\n         ELSE\n            IF (PRESENT(variable_name)) THEN\n               WRITE (iunit, '(A,I4,A,I4,A,E15.7,A)') &\n                  variable_name//'(', r + r_offset - 1, ',', c + c_offset - 1, ')=', matrix((r - 1)*cols + c), ';'\n            ELSE\n               WRITE (iunit, '(A,I4,A,I4,A,E15.7,A)') 'a(', r + r_offset - 1, ',', &\n                  c + c_offset - 1, ')=', matrix((r - 1)*cols + c), ';'\n            END IF\n         END IF\n      END DO\n      END DO\n   END SUBROUTINE dbcsr_printmat_matlab_s\n\n   SUBROUTINE dbcsr_printmat_matlab_z(matrix, rows, cols, r_offset, c_offset, iunit, tr, variable_name)\n      COMPLEX(KIND=real_8), DIMENSION(:), INTENT(IN)     :: matrix\n      INTEGER, INTENT(IN)                                :: rows, cols, r_offset, c_offset, iunit\n      LOGICAL, INTENT(IN), OPTIONAL                      :: tr\n      CHARACTER(len=*), INTENT(in), OPTIONAL             :: variable_name\n\n      INTEGER                                            :: c, c_off, m, n, r, r_off\n      LOGICAL                                            :: t\n\n!   ---------------------------------------------------------------------------\n\n      m = rows\n      n = cols\n      r_off = r_offset\n      c_off = c_offset\n      t = .FALSE.\n      IF (PRESENT(tr)) THEN\n         IF (tr) THEN\n            t = .TRUE.\n            m = cols\n            n = rows\n            r_off = c_offset\n            c_off = r_offset\n         END IF\n      END IF\n\n      DO c = 1, cols\n         DO r = 1, rows\n            IF (.NOT. t) THEN\n               IF (PRESENT(variable_name)) THEN\n                  WRITE (iunit, '(A,I3,A,I3,A,E23.16,A,E23.16,A)') variable_name//'(', r + r_offset - 1, ',', &\n                     c + c_offset - 1, ')=', &\n                     REAL(matrix(r + (c - 1)*rows)), '+', AIMAG(matrix(r + (c - 1)*rows)), 'i;'\n               ELSE\n                  WRITE (iunit, '(A,I3,A,I3,A,E23.16,A,E23.16,A)') 'a(', r + r_offset - 1, ',', c + c_offset - 1, ')=', &\n                     REAL(matrix(r + (c - 1)*rows)), '+', AIMAG(matrix(r + (c - 1)*rows)), 'i;'\n               END IF\n            ELSE\n               IF (PRESENT(variable_name)) THEN\n                  WRITE (iunit, '(A,I3,A,I3,A,E23.16,A,E23.16,A)') variable_name//'(', r + r_offset - 1, ',', &\n                     c + c_offset - 1, ')=', &\n                     REAL(matrix((r - 1)*cols + c)), '+', AIMAG(matrix((r - 1)*cols + c)), 'i;'\n               ELSE\n                  WRITE (iunit, '(A,I3,A,I3,A,E23.16,A,E23.16,A)') 'a(', r + r_offset - 1, ',', c + c_offset - 1, ')=', &\n                     REAL(matrix((r - 1)*cols + c)), '+', AIMAG(matrix((r - 1)*cols + c)), 'i;'\n               END IF\n            END IF\n         END DO\n      END DO\n   END SUBROUTINE dbcsr_printmat_matlab_z\n\n   SUBROUTINE dbcsr_printmat_matlab_c(matrix, rows, cols, r_offset, c_offset, iunit, tr, variable_name)\n      COMPLEX(KIND=real_4), DIMENSION(:), INTENT(IN)     :: matrix\n      INTEGER, INTENT(IN)                                :: rows, cols, r_offset, c_offset, iunit\n      LOGICAL, INTENT(IN), OPTIONAL                      :: tr\n      CHARACTER(len=*), INTENT(in), OPTIONAL             :: variable_name\n\n      INTEGER                                            :: c, c_off, m, n, r, r_off\n      LOGICAL                                            :: t\n\n!   ---------------------------------------------------------------------------\n\n      m = rows\n      n = cols\n      r_off = r_offset\n      c_off = c_offset\n      t = .FALSE.\n      IF (PRESENT(tr)) THEN\n         IF (tr) THEN\n            t = .TRUE.\n            m = cols\n            n = rows\n            r_off = c_offset\n            c_off = r_offset\n         END IF\n      END IF\n\n      DO c = 1, cols\n         DO r = 1, rows\n            IF (.NOT. t) THEN\n               IF (PRESENT(variable_name)) THEN\n                  WRITE (iunit, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') variable_name//'(', r + r_offset - 1, ',', &\n                     c + c_offset - 1, ')=', &\n                     REAL(matrix(r + (c - 1)*rows)), '+', AIMAG(matrix(r + (c - 1)*rows)), 'i;'\n               ELSE\n                  WRITE (iunit, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'a(', r + r_offset - 1, ',', c + c_offset - 1, ')=', &\n                     REAL(matrix(r + (c - 1)*rows)), '+', AIMAG(matrix(r + (c - 1)*rows)), 'i;'\n               END IF\n            ELSE\n               IF (PRESENT(variable_name)) THEN\n                  WRITE (iunit, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') variable_name//'(', r + r_offset - 1, ',', &\n                     c + c_offset - 1, ')=', &\n                     REAL(matrix((r - 1)*cols + c)), '+', AIMAG(matrix((r - 1)*cols + c)), 'i;'\n               ELSE\n                  WRITE (iunit, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'a(', r + r_offset - 1, ',', c + c_offset - 1, ')=', &\n                     REAL(matrix((r - 1)*cols + c)), '+', AIMAG(matrix((r - 1)*cols + c)), 'i;'\n               END IF\n            END IF\n         END DO\n      END DO\n   END SUBROUTINE dbcsr_printmat_matlab_c\n\n   SUBROUTINE printmat_s(matrix, rows, cols, iunit, title, tr)\n      !! Prints the elements of a matrix.\n\n      REAL(KIND=real_4), DIMENSION(:), INTENT(IN)        :: matrix\n      INTEGER, INTENT(IN)                                :: rows, cols, iunit\n         !! the logical (possibly detransposed) matrix size, not the stored size\n         !! the logical (possibly detransposed) matrix size, not the stored size\n      CHARACTER(*), INTENT(IN), OPTIONAL                 :: title\n      LOGICAL, INTENT(IN), OPTIONAL                      :: tr\n         !! specifies whether the elements are stored transposed\n\n      CHARACTER(30)                                      :: f\n      INTEGER                                            :: m, n, r\n      LOGICAL                                            :: t\n      REAL(KIND=dp)                                      :: bit_bucket\n\n!   ---------------------------------------------------------------------------\n\n      m = rows\n      n = cols\n      t = .FALSE.\n      IF (PRESENT(title)) WRITE (iunit, *) title\n      IF (PRESENT(tr)) THEN\n         IF (tr) THEN\n            t = .TRUE.\n            m = cols\n            n = rows\n         END IF\n      END IF\n      DO r = LBOUND(matrix, 1), UBOUND(matrix, 1)\n         bit_bucket = matrix(r)\n      END DO\n      bit_bucket = 0.0_dp\n      DO r = LBOUND(matrix, 1), UBOUND(matrix, 1)\n         bit_bucket = bit_bucket + matrix(r)\n      END DO\n      IF (m .GT. 10000) m = 0\n      IF (n .GT. 10000) n = 0\n      IF (m*n .LT. 1 .OR. m*n .GT. SIZE(matrix)) RETURN\n      WRITE (f, FMT=\"('(',I4,'(F9.4))')\") cols\n      DO r = 1, rows\n         IF (.NOT. t) THEN\n            WRITE (iunit, FMT=f) matrix(r:r + (cols - 1)*rows:rows)\n         ELSE\n            WRITE (iunit, FMT=f) matrix((r - 1)*cols + 1:r*cols)\n         END IF\n      END DO\n   END SUBROUTINE printmat_s\n\n   SUBROUTINE printmat_d(matrix, rows, cols, iunit, title, tr)\n      REAL(KIND=real_8), DIMENSION(:), INTENT(IN)        :: matrix\n      INTEGER, INTENT(IN)                                :: rows, cols, iunit\n      CHARACTER(*), INTENT(IN), OPTIONAL                 :: title\n      LOGICAL, INTENT(IN), OPTIONAL                      :: tr\n\n      IF (PRESENT(title)) THEN\n         IF (PRESENT(tr)) THEN\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title, tr)\n         ELSE\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title)\n         END IF\n      ELSE\n         IF (PRESENT(tr)) THEN\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, tr=tr)\n         ELSE\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit)\n         END IF\n      END IF\n   END SUBROUTINE printmat_d\n\n   SUBROUTINE printmat_c(matrix, rows, cols, iunit, title, tr)\n      COMPLEX(KIND=real_4), DIMENSION(:), INTENT(IN)     :: matrix\n      INTEGER, INTENT(IN)                                :: rows, cols, iunit\n      CHARACTER(*), INTENT(IN), OPTIONAL                 :: title\n      LOGICAL, INTENT(IN), OPTIONAL                      :: tr\n\n      IF (PRESENT(title)) THEN\n         IF (PRESENT(tr)) THEN\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title, tr)\n         ELSE\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title)\n         END IF\n      ELSE\n         IF (PRESENT(tr)) THEN\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, tr=tr)\n         ELSE\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit)\n         END IF\n      END IF\n   END SUBROUTINE printmat_c\n\n   SUBROUTINE printmat_z(matrix, rows, cols, iunit, title, tr)\n      COMPLEX(KIND=real_8), DIMENSION(:), INTENT(IN)     :: matrix\n      INTEGER, INTENT(IN)                                :: rows, cols, iunit\n      CHARACTER(*), INTENT(IN), OPTIONAL                 :: title\n      LOGICAL, INTENT(IN), OPTIONAL                      :: tr\n\n      IF (PRESENT(title)) THEN\n         IF (PRESENT(tr)) THEN\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title, tr)\n         ELSE\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, title)\n         END IF\n      ELSE\n         IF (PRESENT(tr)) THEN\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit, tr=tr)\n         ELSE\n            CALL printmat_s(REAL(matrix, KIND=sp), rows, cols, iunit)\n         END IF\n      END IF\n   END SUBROUTINE printmat_z\n\n   SUBROUTINE dbcsr_binary_write(matrix, filepath)\n      !! Writes a DBCSR matrix in a file\n      !! file's header consists of 3 sub-headers:\n      !! sub-header1 contains:\n      !! 1 string: (of length version_len) the current version of this routine,\n      !! 1 string: (of length default_string_length) matrix_name,\n      !! 1 character: matrix_type,\n      !! 4 integers: numnodes, data_type, nblkrows_total, nblkcols_total,\n      !! 2 vectors:  row_blk_size (length = nblkrows_total),\n      !! col_blk_size (length = nblkcols_total),\n      !! sub-header2 contains:\n      !! 2 integers: nblks, data_area_size,\n      !! sub-header3 contains:\n      !! 3 vectors:  row_p (length = nblkrows_total+1),\n      !! col_i (length = nblks),\n      !! blk_p (length = nblks);\n      !! and the file's body contains the block data\n\n      IMPLICIT NONE\n\n      TYPE(dbcsr_type), INTENT(IN)           :: matrix\n         !! DBCSR matrix\n      CHARACTER(len=*), INTENT(IN)         :: filepath\n         !! path to the file\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_binary_write'\n\n      INTEGER                               :: nblkrows_total, nblkcols_total, &\n                                               nblks, size_of_pgrid, &\n                                               i, sendbuf, data_area_size, &\n                                               data_type, type_size, &\n                                               mynode, numnodes, &\n                                               ginfo_size, linfo_size, handle\n      INTEGER, DIMENSION(:), POINTER        :: row_p, col_i, blk_p, &\n                                               row_blk_size, col_blk_size\n      INTEGER, DIMENSION(:, :), POINTER      :: pgrid\n      TYPE(mp_type_descriptor_type)         :: mp_type\n      TYPE(dbcsr_mp_obj)                    :: mp_env\n      TYPE(dbcsr_distribution_obj)          :: distribution\n      TYPE(dbcsr_data_obj)                  :: data_area\n      COMPLEX(sp), DIMENSION(:), POINTER      :: c_sp\n      COMPLEX(dp), DIMENSION(:), POINTER      :: c_dp\n      REAL(sp), DIMENSION(:), POINTER         :: r_sp\n      REAL(dp), DIMENSION(:), POINTER         :: r_dp\n      CHARACTER                             :: matrix_type\n      CHARACTER(LEN=80)                     :: matrix_name_v_1_0\n      CHARACTER(LEN=default_string_length)  :: matrix_name\n      TYPE(mp_comm_type)                    :: mp_group\n      TYPE(mp_file_type)                    :: thefile\n      INTEGER, PARAMETER                    :: version_len = 10\n      CHARACTER(LEN=version_len), PARAMETER :: version = \"DBCSRv_1.0\"\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: linfo_sizes, da_sizes\n      INTEGER(kind=file_offset), ALLOCATABLE, DIMENSION(:) :: bdata_disps, bdata_offsets, &\n                                                              subh2_disps, subh2_offsets, &\n                                                              subh3_disps, subh3_offsets\n      INTEGER(kind=file_offset), PARAMETER                 :: BOF = 0\n      INTEGER, PARAMETER          :: char_count = version_len + default_string_length + 1 !version, matrix_name, matrix_type\n\n      CALL timeset(routineN, handle)\n\n      IF (default_string_length /= 80) &\n         CALL dbcsr_warn(__LOCATION__, \"Changing the default string length affects \"// &\n                         \"the format of the written matrix. Version needs to be adjusted\")\n\n      nblkrows_total = dbcsr_nblkrows_total(matrix)\n      nblkcols_total = dbcsr_nblkcols_total(matrix)\n      distribution = dbcsr_distribution(matrix)\n      matrix_name = dbcsr_name(matrix)\n      data_area = dbcsr_data_area(matrix)\n      matrix_type = dbcsr_get_matrix_type(matrix)\n      data_type = dbcsr_get_data_type(matrix)\n      mp_env = dbcsr_distribution_mp(distribution)\n      mp_group = dbcsr_mp_group(mp_env)\n      nblks = dbcsr_get_num_blocks(matrix)\n      row_p => matrix%row_p\n      col_i => matrix%col_i\n      blk_p => matrix%blk_p\n      row_blk_size => array_data(matrix%row_blk_size)\n      col_blk_size => array_data(matrix%col_blk_size)\n      pgrid => dbcsr_mp_pgrid(mp_env)\n      size_of_pgrid = SIZE(pgrid)\n\n      CALL mp_environ(numnodes, mynode, mp_group)\n\n      ALLOCATE (linfo_sizes(numnodes), da_sizes(numnodes), &\n                subh2_disps(numnodes), subh2_offsets(numnodes), &\n                subh3_disps(numnodes), subh3_offsets(numnodes), &\n                bdata_disps(numnodes), bdata_offsets(numnodes))\n      subh2_disps(:) = (/((i - 1)*2, i=1, numnodes)/)\n      subh3_disps = BOF\n      bdata_disps = BOF\n      linfo_sizes = BOF\n      subh2_offsets = BOF\n      subh3_offsets = BOF\n      bdata_offsets = BOF\n      da_sizes = BOF\n\n      ginfo_size = char_count + 4 + nblkrows_total + nblkcols_total\n      linfo_size = 1 + nblkrows_total + 2*nblks\n\n      sendbuf = linfo_size\n      CALL mp_allgather(sendbuf, linfo_sizes, mp_group)\n      CALL cumsum_l(INT(linfo_sizes, kind=file_offset), subh3_disps)\n      subh3_disps(:) = CSHIFT(subh3_disps, shift=-1) + ginfo_size + 2*numnodes\n      subh3_disps(1) = ginfo_size + 2*numnodes\n\n      data_area_size = dbcsr_data_get_size_referenced(matrix%data_area)\n      sendbuf = data_area_size\n      CALL mp_allgather(sendbuf, da_sizes, mp_group)\n      CALL cumsum_l(INT(da_sizes, kind=file_offset), bdata_disps)\n      bdata_disps(:) = CSHIFT(bdata_disps, shift=-1) + SUM(INT(linfo_sizes, KIND=file_offset)) + &\n                       ginfo_size + numnodes*2\n      bdata_disps(1) = SUM(INT(linfo_sizes, KIND=file_offset)) + ginfo_size + numnodes*2\n\n      CALL mp_file_open(mp_group, thefile, filepath, file_amode_create + file_amode_wronly)\n\n      IF (mynode .EQ. 0) THEN\n         CALL mp_file_write_at(thefile, BOF, version)\n         matrix_name_v_1_0 = matrix_name\n         CALL mp_file_write_at(thefile, BOF + version_len*mpi_character_size, matrix_name_v_1_0)\n         CALL mp_file_write_at(thefile, BOF + (version_len + default_string_length)*mpi_character_size, matrix_type)\n         CALL mp_file_write_at(thefile, BOF + char_count*mpi_character_size, &\n                               (/size_of_pgrid, data_type, &\n                                 nblkrows_total, nblkcols_total, &\n                                 row_blk_size, col_blk_size/))\n      END IF\n! write sub-header2\n      subh2_disps(:) = subh2_disps(:) + ginfo_size\n      subh2_offsets(:) = BOF + (subh2_disps - char_count)*mpi_integer_size + &\n                         char_count*mpi_character_size\n      CALL mp_file_write_at_all(thefile, subh2_offsets(mynode + 1), (/nblks, data_area_size/))\n! write sub-header3\n      subh3_offsets(:) = BOF + (subh3_disps - char_count)*mpi_integer_size + &\n                         char_count*mpi_character_size\n      CALL mp_file_write_at_all(thefile, subh3_offsets(mynode + 1), (/row_p, col_i, blk_p/))\n! write block data\n      mp_type = dbcsr_mp_type_from_anytype(data_area)\n      CALL mp_type_size(mp_type, type_size)\n      bdata_offsets(:) = BOF + (/((bdata_disps(i) - bdata_disps(1))*type_size, i=1, numnodes)/) + &\n                         (bdata_disps(1) - char_count)*mpi_integer_size + &\n                         char_count*mpi_character_size\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         r_sp => data_area%d%r_sp\n         CALL mp_file_write_at_all(thefile, bdata_offsets(mynode + 1), r_sp, msglen=data_area_size)\n      CASE (dbcsr_type_real_8)\n         r_dp => data_area%d%r_dp\n         CALL mp_file_write_at_all(thefile, bdata_offsets(mynode + 1), r_dp, msglen=data_area_size)\n      CASE (dbcsr_type_complex_4)\n         c_sp => data_area%d%c_sp\n         CALL mp_file_write_at_all(thefile, bdata_offsets(mynode + 1), c_sp, msglen=data_area_size)\n      CASE (dbcsr_type_complex_8)\n         c_dp => data_area%d%c_dp\n         CALL mp_file_write_at_all(thefile, bdata_offsets(mynode + 1), c_dp, msglen=data_area_size)\n      END SELECT\n      CALL mp_file_close(thefile)\n\n      DEALLOCATE (linfo_sizes, da_sizes)\n      DEALLOCATE (subh2_disps, subh2_offsets, subh3_disps, subh3_offsets)\n      DEALLOCATE (bdata_disps, bdata_offsets)\n\n      CALL timestop(handle)\n\n   CONTAINS\n      SUBROUTINE cumsum_l(arr, cumsum)\n         INTEGER(kind=file_offset), DIMENSION(:), &\n            INTENT(IN)                                      :: arr\n         INTEGER(kind=file_offset), DIMENSION(SIZE(arr)), &\n            INTENT(OUT)                                     :: cumsum\n\n         INTEGER                                            :: i\n\n         cumsum(1) = arr(1)\n         DO i = 2, SIZE(arr)\n            cumsum(i) = cumsum(i - 1) + arr(i)\n         END DO\n      END SUBROUTINE cumsum_l\n   END SUBROUTINE dbcsr_binary_write\n\n   SUBROUTINE dbcsr_binary_read(filepath, distribution, matrix_new)\n      !! Reads a DBCSR matrix from a file\n\n      IMPLICIT NONE\n\n      CHARACTER(len=*), INTENT(IN)                :: filepath\n         !! path to the file\n      TYPE(dbcsr_distribution_obj), INTENT(IN)     :: distribution\n         !! row and column distribution\n      TYPE(dbcsr_type), INTENT(INOUT)               :: matrix_new\n         !! DBCSR matrix\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_binary_read'\n\n      INTEGER                               :: nblkrows_total, nblkcols_total, &\n                                               nblks, darea_size, data_type, type_size, &\n                                               globalinfo_size, &\n                                               size_of_pgrid, &\n                                               i, j, &\n                                               nblocks, &\n                                               share_size, order, cur_blks, &\n                                               job_count, start_index, end_index, &\n                                               localinfo_length, blockdata_length, &\n                                               worker_id, group_list_size, handle, linfo_length\n      CHARACTER                             :: matrix_type\n      CHARACTER(LEN=default_string_length)  :: matrix_name\n      INTEGER, PARAMETER                    :: version_len = 10\n      CHARACTER(LEN=version_len)            :: version\n      CHARACTER(LEN=80)                     :: matrix_name_v_1_0\n      CHARACTER(LEN=version_len), PARAMETER :: version_v_1_0 = \"DBCSRv_1.0\"\n      TYPE(mp_comm_type)                    :: group_id\n      TYPE(mp_file_type)                    :: thefile\n\n      INTEGER, DIMENSION(:), POINTER        :: row_p, col_i, blk_p, &\n                                               proc_nblks, proc_darea_sizes\n      INTEGER, DIMENSION(4)                 :: values\n      INTEGER, ALLOCATABLE, DIMENSION(:)    :: linfo_lens, bdata_lens\n      INTEGER, ALLOCATABLE, DIMENSION(:), TARGET     :: ginfo_vec, linfo_vec, &\n                                                        rowp, coli, blkp\n      INTEGER, ALLOCATABLE, DIMENSION(:, :), TARGET   :: val_data\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS     :: row_blk_size, col_blk_size\n      TYPE(dbcsr_mp_obj)                             :: mp_env\n      TYPE(dbcsr_data_obj)                           :: dblk\n      REAL(sp)                                       :: rsp_dummy(1)\n      REAL(dp)                                       :: rdp_dummy(1)\n      COMPLEX(sp)                                    :: csp_dummy(1)\n      COMPLEX(dp)                                    :: cdp_dummy(1)\n      REAL(sp), ALLOCATABLE, DIMENSION(:), TARGET     :: rsp\n      REAL(dp), ALLOCATABLE, DIMENSION(:), TARGET     :: rdp\n      COMPLEX(sp), ALLOCATABLE, DIMENSION(:), TARGET  :: csp\n      COMPLEX(dp), ALLOCATABLE, DIMENSION(:), TARGET  :: cdp\n      INTEGER(kind=file_offset), ALLOCATABLE, DIMENSION(:)   :: subh2_offsets, &\n                                                                subh3_disps, subh3_offsets, &\n                                                                bdata_disps, bdata_offsets\n      INTEGER(kind=file_offset), PARAMETER    :: BOF = 0\n      INTEGER(kind=file_offset)               :: offset, subh2_start, subh3_start, bdata_start, file_size, &\n                                                 localinfo_offset, blockdata_offset, sum_nblks, subh3_length, data_area_size\n      INTEGER, PARAMETER                      :: char_count = 1 + version_len + default_string_length\n\n      CALL timeset(routineN, handle)\n\n      mp_env = dbcsr_distribution_mp(distribution)\n      group_id = dbcsr_mp_group(mp_env)\n\n      CALL mp_environ(group_list_size, worker_id, group_id)\n      CALL mp_file_open(group_id, thefile, filepath, file_amode_rdonly)\n\n! read version, matrix name and matrix type\n      CALL mp_file_read_at_all(thefile, BOF, version)\n\n      IF (version /= version_v_1_0) &\n         DBCSR_WARN(\"Trying to read an unknown version of the matrix data file. Good luck!\")\n\n      CALL mp_file_read_at_all(thefile, BOF + version_len*mpi_character_size, matrix_name_v_1_0)\n      matrix_name = matrix_name_v_1_0\n\n      CALL mp_file_read_at_all(thefile, BOF + (version_len + default_string_length)*mpi_character_size, matrix_type)\n! read 4 integer values form sub-header1\n      CALL mp_file_read_at_all(thefile, BOF + char_count*mpi_character_size, values)\n      size_of_pgrid = values(1)\n      data_type = values(2)\n      nblkrows_total = values(3)\n      nblkcols_total = values(4)\n! read 2 vectors, row_blk_size and col_blk_size, from sub-header1\n      globalinfo_size = nblkrows_total + nblkcols_total\n      ALLOCATE (ginfo_vec(globalinfo_size))\n      CALL mp_file_read_at_all(thefile, BOF + char_count*mpi_character_size + 4*mpi_integer_size, ginfo_vec)\n      row_blk_size => ginfo_vec(1:nblkrows_total)\n      col_blk_size => ginfo_vec(nblkrows_total + 1:globalinfo_size)\n\n! compute the offsets where sub-header2 and sub-header3 start\n      subh2_start = (4 + globalinfo_size)*mpi_integer_size + char_count*mpi_character_size\n      subh3_start = subh2_start + 2*size_of_pgrid*mpi_integer_size\n\n! compute the offsets in sub-header2 and read 2 integers nblocks, data_area_size\n      ! number of data chunks from sub-header 2 and 3 to be read by every node rounded up\n      ! to the next integer to make it even for all the nodes in the specified mpi group\n      share_size = CEILING(REAL(size_of_pgrid, KIND=dp)/group_list_size)\n\n      ALLOCATE (subh2_offsets(share_size))\n      subh2_offsets = BOF\n      DO i = 1, share_size\n         offset = subh2_start + mpi_integer_size*2*(worker_id + (i - 1)*group_list_size)\n         IF (offset .GE. subh3_start) EXIT\n         subh2_offsets(i) = offset\n      END DO\n\n      ALLOCATE (val_data(3, share_size))\n      val_data(:, :) = 0\n      DO i = 1, share_size\n         CALL mp_file_read_at_all(thefile, subh2_offsets(i), values, msglen=2)\n         nblocks = values(1)\n         data_area_size = values(2)\n         IF (subh2_offsets(i) .EQ. 0) EXIT\n         val_data(1, i) = nblocks\n         IF (data_area_size >= HUGE(val_data(2, i))) &\n            DBCSR_ABORT(\"Data area too large, fix code.\")\n         val_data(2, i) = INT(data_area_size)\n         val_data(3, i) = worker_id + (i - 1)*group_list_size + 1 ! order\n         ! order = indices of an array of length size_of_pgrid to be accessed by the current node\n      END DO\n      nblks = SUM(val_data(1, :))\n      darea_size = SUM(val_data(2, :))\n      proc_nblks => val_data(1, :) ! to be passed to dbcsr_datablock_redistribute\n      proc_darea_sizes => val_data(2, :) ! to be passed to dbcsr_datablock_redistribute\n\n! compute the offsets in sub-header3 and read 3 vectors row_p, col_i, blk_p\n      ! actual number of chunks to be read by the current node\n      job_count = COUNT(val_data(3, :) .NE. 0)\n      CALL mp_file_get_size(thefile, file_size)\n\n      ALLOCATE (linfo_lens(size_of_pgrid))\n      ALLOCATE (subh3_disps(size_of_pgrid))\n      ALLOCATE (subh3_offsets(size_of_pgrid))\n      linfo_lens = 0; subh3_disps = 0\n      DO i = 1, size_of_pgrid\n         DO j = 1, share_size\n            order = val_data(3, j)\n            IF (i .EQ. order) linfo_lens(order) = &\n               1 + nblkrows_total + 2*val_data(1, j)\n         END DO\n      END DO\n      CALL mp_sum(linfo_lens, group_id)\n      CALL cumsum_l(INT(linfo_lens, kind=file_offset), subh3_disps)\n      subh3_disps(:) = CSHIFT(subh3_disps, shift=-1)\n      subh3_disps(1) = BOF\n      subh3_offsets(:) = subh3_start + subh3_disps*mpi_integer_size\n\n      sum_nblks = INT(nblks, kind=file_offset)\n      CALL mp_sum(sum_nblks, group_id)\n      subh3_length = size_of_pgrid*INT(1 + nblkrows_total, KIND=file_offset) + 2*sum_nblks\n\n      linfo_length = nblkrows_total + 1 + 2*MAXVAL(val_data(1, :))\n\n      ALLOCATE (linfo_vec(linfo_length))\n      ALLOCATE (rowp((nblkrows_total + 1)*job_count))\n      ALLOCATE (coli(nblks))\n      ALLOCATE (blkp(nblks))\n      DO i = 1, share_size\n         order = val_data(3, i)\n         cur_blks = val_data(1, i)\n         IF (order .EQ. 0) THEN\n            localinfo_offset = file_size\n            localinfo_length = 0\n         ELSE\n            localinfo_offset = subh3_offsets(order)\n            localinfo_length = linfo_lens(order)\n         END IF\n         CALL mp_file_read_at_all(thefile, localinfo_offset, linfo_vec, msglen=localinfo_length)\n         IF (localinfo_length .EQ. 0) EXIT\n\n         rowp((i - 1)*(nblkrows_total + 1) + 1:i*(nblkrows_total + 1)) = linfo_vec(1:nblkrows_total + 1)\n         start_index = SUM(val_data(1, 1:i - 1)) + 1\n         end_index = SUM(val_data(1, 1:i))\n         coli(start_index:end_index) = &\n            linfo_vec(nblkrows_total + 2:cur_blks + nblkrows_total + 1)\n         blkp(start_index:end_index) = &\n            linfo_vec(cur_blks + nblkrows_total + 2:2*cur_blks + nblkrows_total + 1)\n      END DO\n      row_p => rowp\n      col_i => coli\n      blk_p => blkp\n\n! compute the offsets and read block data\n      ALLOCATE (bdata_lens(size_of_pgrid))\n      ALLOCATE (bdata_disps(size_of_pgrid))\n      ALLOCATE (bdata_offsets(size_of_pgrid))\n      bdata_lens = 0\n      DO i = 1, size_of_pgrid\n         DO j = 1, share_size\n            order = val_data(3, j)\n            IF (i .EQ. order) bdata_lens(order) = val_data(2, j)\n         END DO\n      END DO\n      CALL mp_sum(bdata_lens, group_id)\n      CALL cumsum_l(INT(bdata_lens, kind=file_offset), bdata_disps)\n      bdata_disps(:) = CSHIFT(bdata_disps, shift=-1)\n      bdata_disps(1) = BOF\n\n      bdata_start = subh3_start + subh3_length*mpi_integer_size\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         type_size = real_4_size\n      CASE (dbcsr_type_real_8)\n         type_size = real_8_size\n      CASE (dbcsr_type_complex_4)\n         type_size = 2*real_4_size\n      CASE (dbcsr_type_complex_8)\n         type_size = 2*real_8_size\n      END SELECT\n      bdata_offsets(:) = bdata_start + bdata_disps*type_size\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         ALLOCATE (rsp(darea_size))\n         DO i = 1, share_size\n            order = val_data(3, i)\n            ! use dummy one-sized data array as buffer in place of empty array\n            ! when nothing is supposed to be read (order = 0)\n            IF (order .EQ. 0) THEN\n               blockdata_offset = file_size\n               CALL mp_file_read_at_all(thefile, blockdata_offset, rsp_dummy)\n            ELSE\n               start_index = SUM(val_data(2, 1:i - 1)) + 1\n               end_index = SUM(val_data(2, 1:i))\n               blockdata_length = bdata_lens(order)\n               blockdata_offset = bdata_offsets(order)\n               CALL mp_file_read_at_all(thefile, blockdata_offset, rsp(start_index:end_index), &\n                                        msglen=blockdata_length)\n            END IF\n         END DO\n      CASE (dbcsr_type_real_8)\n         ALLOCATE (rdp(darea_size))\n         DO i = 1, share_size\n            order = val_data(3, i)\n            IF (order .EQ. 0) THEN\n               blockdata_offset = file_size\n               CALL mp_file_read_at_all(thefile, blockdata_offset, rdp_dummy)\n            ELSE\n               start_index = SUM(val_data(2, 1:i - 1)) + 1\n               end_index = SUM(val_data(2, 1:i))\n               blockdata_length = bdata_lens(order)\n               blockdata_offset = bdata_offsets(order)\n               CALL mp_file_read_at_all(thefile, blockdata_offset, rdp(start_index:end_index), &\n                                        msglen=blockdata_length)\n            END IF\n         END DO\n      CASE (dbcsr_type_complex_4)\n         ALLOCATE (csp(darea_size))\n         DO i = 1, share_size\n            order = val_data(3, i)\n            IF (order .EQ. 0) THEN\n               blockdata_offset = file_size\n               CALL mp_file_read_at_all(thefile, blockdata_offset, csp_dummy)\n            ELSE\n               start_index = SUM(val_data(2, 1:i - 1)) + 1\n               end_index = SUM(val_data(2, 1:i))\n               blockdata_length = bdata_lens(order)\n               blockdata_offset = bdata_offsets(order)\n               CALL mp_file_read_at_all(thefile, blockdata_offset, csp(start_index:end_index), &\n                                        msglen=blockdata_length)\n            END IF\n         END DO\n      CASE (dbcsr_type_complex_8)\n         ALLOCATE (cdp(darea_size))\n         DO i = 1, share_size\n            order = val_data(3, i)\n            IF (order .EQ. 0) THEN\n               blockdata_offset = file_size\n               CALL mp_file_read_at_all(thefile, blockdata_offset, cdp_dummy)\n            ELSE\n               start_index = SUM(val_data(2, 1:i - 1)) + 1\n               end_index = SUM(val_data(2, 1:i))\n               blockdata_length = bdata_lens(order)\n               blockdata_offset = bdata_offsets(order)\n               CALL mp_file_read_at_all(thefile, blockdata_offset, cdp(start_index:end_index), &\n                                        msglen=blockdata_length)\n            END IF\n         END DO\n      END SELECT\n      CALL dbcsr_data_init(dblk)\n      CALL dbcsr_data_new(dblk, data_type)\n      IF (ALLOCATED(rdp)) dblk%d%r_dp => rdp\n      IF (ALLOCATED(rsp)) dblk%d%r_sp => rsp\n      IF (ALLOCATED(cdp)) dblk%d%c_dp => cdp\n      IF (ALLOCATED(csp)) dblk%d%c_sp => csp\n\n      CALL mp_file_close(thefile)\n\n      CALL dbcsr_create(matrix_new, matrix_name, distribution, matrix_type, &\n                        row_blk_size, col_blk_size, nze=darea_size, &\n                        data_type=data_type)\n      CALL dbcsr_datablock_redistribute(dblk, row_p, col_i, blk_p, proc_nblks, proc_darea_sizes, matrix_new)\n\n      DEALLOCATE (subh2_offsets, subh3_offsets, bdata_offsets)\n      DEALLOCATE (subh3_disps, bdata_disps)\n      DEALLOCATE (linfo_lens, bdata_lens)\n      DEALLOCATE (val_data, ginfo_vec, linfo_vec)\n      DEALLOCATE (rowp, coli, blkp)\n      IF (ALLOCATED(rdp)) DEALLOCATE (rdp)\n      IF (ALLOCATED(rsp)) DEALLOCATE (rsp)\n      IF (ALLOCATED(cdp)) DEALLOCATE (cdp)\n      IF (ALLOCATED(csp)) DEALLOCATE (csp)\n      CALL dbcsr_data_clear_pointer(dblk)\n      DEALLOCATE (dblk%d)\n\n      CALL timestop(handle)\n   CONTAINS\n      SUBROUTINE cumsum_l(arr, cumsum)\n         INTEGER(kind=file_offset), DIMENSION(:), &\n            INTENT(IN)                                      :: arr\n         INTEGER(kind=file_offset), DIMENSION(SIZE(arr)), &\n            INTENT(OUT)                                     :: cumsum\n\n         INTEGER                                            :: i\n\n         cumsum(1) = arr(1)\n         DO i = 2, SIZE(arr)\n            cumsum(i) = cumsum(i - 1) + arr(i)\n         END DO\n      END SUBROUTINE cumsum_l\n\n   END SUBROUTINE dbcsr_binary_read\n\n   SUBROUTINE dbcsr_print_block_sum(matrix, unit_nr)\n      !! Prints the sum of the elements for each block\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix\n      INTEGER, INTENT(IN), OPTIONAL                      :: unit_nr\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_print_block_sum'\n\n      COMPLEX(KIND=real_4)                               :: blk_sum_c_sp\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER        :: c_sp\n      COMPLEX(KIND=real_8)                               :: blk_sum_c_dp\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER        :: c_dp\n      INTEGER                                            :: bc, blk, blk_p, br, handle, iunit, m, &\n                                                            mn, n\n      INTEGER, DIMENSION(:), POINTER                     :: col_blk_offset, col_blk_size, &\n                                                            row_blk_offset, row_blk_size\n      REAL(KIND=real_4)                                  :: blk_sum_r_sp\n      REAL(KIND=real_4), DIMENSION(:), POINTER           :: r_sp\n      REAL(KIND=real_8)                                  :: blk_sum_r_dp\n      REAL(KIND=real_8), DIMENSION(:), POINTER           :: r_dp\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. dbcsr_valid_index(matrix)) &\n         DBCSR_WARN(\"Can not print invalid matrix.\")\n\n      iunit = default_output_unit\n      IF (PRESENT(unit_nr)) iunit = unit_nr\n\n      IF (iunit > 0) THEN\n\n         SELECT CASE (matrix%data_type)\n         CASE (dbcsr_type_real_8)\n            CALL dbcsr_get_data(matrix%data_area, r_dp)\n         CASE (dbcsr_type_real_4)\n            CALL dbcsr_get_data(matrix%data_area, r_sp)\n         CASE (dbcsr_type_complex_8)\n            CALL dbcsr_get_data(matrix%data_area, c_dp)\n         CASE (dbcsr_type_complex_4)\n            CALL dbcsr_get_data(matrix%data_area, c_sp)\n         END SELECT\n         row_blk_size => array_data(matrix%row_blk_size)\n         col_blk_size => array_data(matrix%col_blk_size)\n         row_blk_offset => array_data(matrix%row_blk_offset)\n         col_blk_offset => array_data(matrix%col_blk_offset)\n\n         IF (matrix%nblks .GT. 0) THEN\n            DO br = 1, matrix%nblkrows_total\n               m = row_blk_size(br)\n               DO blk = matrix%row_p(br) + 1, matrix%row_p(br + 1)\n                  bc = matrix%col_i(blk)\n                  n = col_blk_size(bc)\n                  mn = m*n\n                  blk_p = ABS(matrix%blk_p(blk))\n                  block_exists: IF (blk_p .NE. 0) THEN\n                     IF (mn .GT. 0) THEN\n                        SELECT CASE (matrix%data_type)\n                        CASE (dbcsr_type_real_8)\n                           blk_sum_r_dp = SUM(r_dp(blk_p:blk_p + mn - 1))\n                           WRITE (iunit, '(I6,I6,ES18.9)') &\n                              br, bc, blk_sum_r_dp\n                        CASE (dbcsr_type_real_4)\n                           blk_sum_r_sp = SUM(r_sp(blk_p:blk_p + mn - 1))\n                           WRITE (iunit, '(I6,I6,ES18.9)') &\n                              br, bc, blk_sum_r_sp\n                        CASE (dbcsr_type_complex_8)\n                           blk_sum_c_dp = SUM(c_dp(blk_p:blk_p + mn - 1))\n                           WRITE (iunit, '(I6,I6,ES18.9,\" I*\",ES18.9)') &\n                              br, bc, REAL(blk_sum_c_dp), AIMAG(blk_sum_c_dp)\n                        CASE (dbcsr_type_complex_4)\n                           blk_sum_c_sp = SUM(c_sp(blk_p:blk_p + mn - 1))\n                           WRITE (iunit, '(I6,I6,ES18.9,\" I*\",ES18.9)') &\n                              br, bc, REAL(blk_sum_c_sp), AIMAG(blk_sum_c_sp)\n                        END SELECT\n                     ELSE\n                        blk_sum_r_dp = 0.0_dp\n                        WRITE (iunit, '(I6,I6,ES18.9)') &\n                           br, bc, blk_sum_r_dp\n                     END IF\n                  END IF block_exists\n               END DO\n            END DO\n         END IF\n\n      END IF ! unit > 0\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_print_block_sum\n\nEND MODULE dbcsr_io\n"
  },
  {
    "path": "src/ops/dbcsr_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_operations\n   !! Higher-level operations on DBCSR matrices.\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_equality, &\n                                array_get\n   USE dbcsr_blas_operations, ONLY: set_larnv_seed\n   USE dbcsr_block_access, ONLY: dbcsr_get_block_p, &\n                                 dbcsr_put_block, &\n                                 dbcsr_remove_block, &\n                                 dbcsr_reserve_blocks, &\n                                 dbcsr_reserve_block2d\n   USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, &\n                                     dbcsr_block_partial_copy, &\n                                     dbcsr_block_real_neg, &\n                                     dbcsr_block_scale, &\n                                     dbcsr_data_clear\n   USE dbcsr_config, ONLY: default_resize_factor\n   USE dbcsr_data_methods, ONLY: &\n      dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_get_size, &\n      dbcsr_data_get_size_referenced, dbcsr_data_get_type, dbcsr_data_init, dbcsr_data_new, &\n      dbcsr_data_release, dbcsr_data_set_pointer, dbcsr_get_data, dbcsr_scalar, &\n      dbcsr_scalar_are_equal, dbcsr_scalar_fill_all, dbcsr_scalar_get_type, dbcsr_scalar_one, &\n      dbcsr_scalar_zero, dbcsr_type_1d_to_2d, dbcsr_get_data_p_d, dbcsr_get_data_p_s, dbcsr_scalar_set_type\n   USE dbcsr_data_operations, ONLY: dbcsr_data_convert, &\n                                    dbcsr_data_copyall, &\n                                    dbcsr_switch_data_area\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, &\n                                 dbcsr_distribution_local_cols, &\n                                 dbcsr_distribution_local_rows, &\n                                 dbcsr_distribution_mp, &\n                                 dbcsr_distribution_row_dist, &\n                                 dbcsr_distribution_get\n   USE dbcsr_dist_operations, ONLY: checker_square_proc, &\n                                    checker_tr, &\n                                    dbcsr_find_column, &\n                                    dbcsr_get_stored_coordinates, &\n                                    dbcsr_get_stored_block_info\n   USE dbcsr_index_operations, ONLY: dbcsr_index_checksum, &\n                                     dbcsr_index_compact, &\n                                     dbcsr_repoint_index\n   USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, &\n                                        dbcsr_iterator_next_block, &\n                                        dbcsr_iterator_start, &\n                                        dbcsr_iterator_stop\n   USE dbcsr_methods, ONLY: &\n      dbcsr_col_block_offsets, dbcsr_distribution, dbcsr_get_data_size, dbcsr_get_data_type, &\n      dbcsr_get_index_memory_type, dbcsr_get_matrix_type, dbcsr_get_num_blocks, &\n      dbcsr_get_replication_type, dbcsr_has_symmetry, dbcsr_max_col_size, dbcsr_max_row_size, &\n      dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_nfullcols_total, dbcsr_nfullrows_total, &\n      dbcsr_row_block_offsets, dbcsr_valid_index, dbcsr_get_nze, dbcsr_nfullcols_local, &\n      dbcsr_nfullrows_local, dbcsr_get_num_blocks, dbcsr_release, dbcsr_wm_use_mutable\n   USE dbcsr_mpiwrap, ONLY: mp_comm_type\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_group, &\n                               dbcsr_mp_mynode, &\n                               dbcsr_mp_mypcol, &\n                               dbcsr_mp_myprow, &\n                               dbcsr_mp_numnodes, &\n                               dbcsr_mp_pgrid\n   USE dbcsr_ptr_util, ONLY: ensure_array_size, &\n                             pointer_view\n   USE dbcsr_toollib, ONLY: swap\n   USE dbcsr_types, ONLY: &\n      dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_filter_frobenius, dbcsr_func_artanh, &\n      dbcsr_func_asin, dbcsr_func_cos, dbcsr_func_ddsin, dbcsr_func_ddtanh, dbcsr_func_dsin, &\n      dbcsr_func_dtanh, dbcsr_func_inverse, dbcsr_func_inverse_special, dbcsr_func_sin, &\n      dbcsr_func_spread_from_zero, dbcsr_func_tanh, dbcsr_func_truncate, dbcsr_iterator, &\n      dbcsr_mp_obj, dbcsr_norm_column, dbcsr_norm_frobenius, dbcsr_norm_gershgorin, &\n      dbcsr_norm_maxabsnorm, dbcsr_repl_full, dbcsr_repl_none, dbcsr_scalar_type, dbcsr_type, &\n      dbcsr_type_antihermitian, dbcsr_type_antisymmetric, dbcsr_type_complex_4, &\n      dbcsr_type_complex_8, dbcsr_type_hermitian, dbcsr_type_no_symmetry, dbcsr_type_real_4, &\n      dbcsr_type_real_8, dbcsr_type_symmetric\n   USE dbcsr_dist_util, ONLY: find_block_of_element\n   USE dbcsr_work_operations, ONLY: dbcsr_create, &\n                                    dbcsr_finalize, &\n                                    dbcsr_work_create, &\n                                    add_work_coordinate\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_4, &\n                          int_8, &\n                          real_4, &\n                          real_8, &\n                          sp\n   USE dbcsr_mpiwrap, ONLY: mp_allgather, &\n                            mp_max, &\n                            mp_sum\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_operations'\n\n   ! prettify protection\n   CHARACTER, PARAMETER :: xa = dbcsr_type_hermitian, xb = dbcsr_type_antihermitian, &\n                           xc = dbcsr_type_no_symmetry\n\n   PUBLIC :: dbcsr_trace, dbcsr_dot, dbcsr_add_on_diag, &\n             dbcsr_set, dbcsr_scale, dbcsr_add, dbcsr_copy, &\n             dbcsr_copy_into_existing, &\n             dbcsr_get_diag, dbcsr_set_diag, &\n             dbcsr_get_block_diag, dbcsr_hadamard_product, &\n             dbcsr_filter, dbcsr_filter_anytype, dbcsr_scale_by_vector, &\n             dbcsr_function_of_elements, &\n             dbcsr_triu, &\n             dbcsr_init_random\n   PUBLIC :: dbcsr_sum_replicated\n   PUBLIC :: dbcsr_norm_scalar, dbcsr_norm_r8_vec, dbcsr_conjg, &\n             dbcsr_gershgorin_norm, dbcsr_maxabs, dbcsr_frobenius_norm\n\n   PUBLIC :: dbcsr_crop_matrix\n   PUBLIC :: dbcsr_get_info, dbcsr_may_be_dense, dbcsr_get_occupation\n   PUBLIC :: dbcsr_clear, dbcsr_add_block_node, dbcsr_conform_scalar\n   PUBLIC :: dbcsr_zero\n\n! The interfaces for the generic routines found in the generated\n! generic files.\n\n   INTERFACE dbcsr_conform_scalar\n      MODULE PROCEDURE make_conformant_scalar_d, make_conformant_scalar_s\n      MODULE PROCEDURE make_conformant_scalar_c, make_conformant_scalar_z\n   END INTERFACE\n\n   INTERFACE dbcsr_trace\n      MODULE PROCEDURE dbcsr_trace_s, dbcsr_trace_sd, &\n         dbcsr_trace_c, dbcsr_trace_z\n   END INTERFACE\n\n   INTERFACE dbcsr_dot\n      MODULE PROCEDURE dbcsr_dot_s, dbcsr_dot_sd, &\n         dbcsr_dot_c, dbcsr_dot_z\n   END INTERFACE\n\n   INTERFACE dbcsr_scale\n      MODULE PROCEDURE dbcsr_scale_anytype\n      MODULE PROCEDURE dbcsr_scale_s, dbcsr_scale_d, dbcsr_scale_c, dbcsr_scale_z\n   END INTERFACE\n\n   INTERFACE dbcsr_scale_by_vector\n      MODULE PROCEDURE dbcsr_scale_by_vector_anytype\n      MODULE PROCEDURE dbcsr_scale_by_vector_s, dbcsr_scale_by_vector_d\n      MODULE PROCEDURE dbcsr_scale_by_vector_c, dbcsr_scale_by_vector_z\n   END INTERFACE\n\n   INTERFACE dbcsr_set\n      MODULE PROCEDURE dbcsr_set_s, dbcsr_set_d, dbcsr_set_c, dbcsr_set_z\n   END INTERFACE\n\n   INTERFACE dbcsr_add\n      MODULE PROCEDURE dbcsr_add_anytype\n      MODULE PROCEDURE dbcsr_add_s, dbcsr_add_d, dbcsr_add_c, dbcsr_add_z\n   END INTERFACE\n\n   INTERFACE dbcsr_add_on_diag\n      MODULE PROCEDURE dbcsr_add_on_diag_s, dbcsr_add_on_diag_ds\n      MODULE PROCEDURE dbcsr_add_on_diag_c, dbcsr_add_on_diag_z\n   END INTERFACE\n\n   INTERFACE dbcsr_filter\n      MODULE PROCEDURE dbcsr_filter_anytype\n      MODULE PROCEDURE dbcsr_filter_s, dbcsr_filter_d, &\n         dbcsr_filter_c, dbcsr_filter_z\n   END INTERFACE\n\n   INTERFACE dbcsr_get_diag\n      MODULE PROCEDURE dbcsr_get_diag_s, dbcsr_get_diag_d, dbcsr_get_diag_c, dbcsr_get_diag_z\n   END INTERFACE\n\n   INTERFACE dbcsr_set_diag\n      MODULE PROCEDURE dbcsr_set_diag_s, dbcsr_set_diag_d, dbcsr_set_diag_c, dbcsr_set_diag_z\n   END INTERFACE\n\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   INTEGER, PARAMETER, PRIVATE :: rpslot_owner = 1\n   INTEGER, PARAMETER, PRIVATE :: rpslot_addblks = 2\n   INTEGER, PARAMETER, PRIVATE :: rpslot_addoffset = 3\n   INTEGER, PARAMETER, PRIVATE :: rpslot_oldblks = 4\n   INTEGER, PARAMETER, PRIVATE :: rpslot_oldoffset = 5\n   INTEGER, PARAMETER, PRIVATE :: rpslot_totaloffset = 6\n   INTEGER, PARAMETER, PRIVATE :: rpnslots = 6\n\nCONTAINS\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1  in inst_params_float\n      FUNCTION make_conformant_scalar_${nametype1}$ (scalar, matrix) RESULT(encapsulated)\n      !! Encapsulates a given scalar value and makes it conform with the\n      !! type of the matrix.\n\n         ${type1}$, INTENT(IN)                      :: scalar\n         TYPE(dbcsr_type), INTENT(IN)             :: matrix\n\n         TYPE(dbcsr_scalar_type)                  :: encapsulated\n         INTEGER                                  :: data_type, scalar_data_type\n\n         encapsulated = dbcsr_scalar(scalar)\n         CALL dbcsr_scalar_fill_all(encapsulated)\n         data_type = dbcsr_get_data_type(matrix)\n         scalar_data_type = dbcsr_scalar_get_type(encapsulated)\n         IF (scalar_data_type .EQ. dbcsr_type_complex_4 .OR. &\n             scalar_data_type .EQ. dbcsr_type_complex_8) THEN\n            IF (data_type .NE. dbcsr_type_complex_4 .AND. data_type .NE. dbcsr_type_complex_8) &\n               DBCSR_ABORT(\"Can not conform a complex to a real number\")\n         END IF\n         CALL dbcsr_scalar_set_type(encapsulated, data_type)\n      END FUNCTION make_conformant_scalar_${nametype1}$\n   #:endfor\n\n   SUBROUTINE dbcsr_add_block_node(matrix, block_row, block_col, block)\n      !! Emulation of sparse_matrix_types/add_block_node mapped\n      !! to add_real_matrix_block.... should not be used any longer\n      !! It adds a block to the dbcsr matrix and returns a rank-2 pointer to the\n      !! block. Currently it only and always uses the mutable data.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! DBCSR matrix\n      INTEGER, INTENT(IN)                                :: block_row, block_col\n         !! the row\n         !! the column\n      REAL(KIND=dp), DIMENSION(:, :), POINTER            :: block\n         !! the block to put\n\n      INTEGER                                            :: c, ithread, mynode, p, r\n      LOGICAL                                            :: dbg, existed, is_there, tr\n      TYPE(dbcsr_distribution_obj)                      :: dist\n\n!   ---------------------------------------------------------------------------\n\n      dbg = .FALSE.\n\n      ithread = 0\n!$    ithread = omp_get_thread_num()\n      IF (.NOT. ASSOCIATED(matrix%wms)) THEN\n         CALL dbcsr_work_create(matrix, work_mutable=.TRUE.)\n         matrix%valid = .FALSE.\n      END IF\n!$    IF (SIZE(matrix%wms) .LT. omp_get_num_threads()) &\n!$       DBCSR_ABORT(\"Too few threads.\")\n      IF (.NOT. dbcsr_wm_use_mutable(matrix%wms(ithread + 1))) &\n         DBCSR_ABORT(\"Data loss due to no conversion of appendable to mutable data\")\n      is_there = ASSOCIATED(block)\n      !r = row ; c = col ; tr = .FALSE.\n      !CALL dbcsr_get_stored_coordinates (matrix, r, c, tr)\n      !CALL dbcsr_reserve_block2d (matrix, row, col, block)\n      !write(*,*) 'add_block_node: block_row',block_row,' block_col',block_col\n      CALL dbcsr_reserve_block2d(matrix, block_row, block_col, block, &\n                                 existed=existed)\n!\n      IF (dbg) THEN\n         r = block_row; c = block_col; tr = .FALSE.\n         CALL dbcsr_get_stored_coordinates(matrix, r, c, p)\n         CALL dbcsr_get_info(matrix, distribution=dist)\n         CALL dbcsr_distribution_get(dist, mynode=mynode)\n         IF (p .NE. mynode) &\n            DBCSR_WARN(\"Adding non-local element\")\n      END IF\n      IF (existed) DBCSR_WARN(\"You should not add existing blocks according to old API.\")\n      IF (.NOT. is_there) block(:, :) = 0.0_dp\n   END SUBROUTINE dbcsr_add_block_node\n\n   SUBROUTINE dbcsr_conjg(matrix)\n      !! Conjugate a DBCSR matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! DBCSR matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_conjg'\n      INTEGER                                            :: blk, col, data_type, handle, row\n      LOGICAL                                            :: tr\n      TYPE(dbcsr_data_obj)                               :: data_any\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n!\n\n      CALL timeset(routineN, handle)\n      data_type = dbcsr_get_data_type(matrix)\n      CALL dbcsr_data_init(data_any)\n      CALL dbcsr_data_new(data_any, data_type)\n      CALL dbcsr_iterator_start(iter, matrix)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, data_any, tr, blk)\n         SELECT CASE (data_type)\n         CASE (dbcsr_type_complex_4)\n            data_any%d%c_sp = CONJG(data_any%d%c_sp)\n         CASE (dbcsr_type_complex_8)\n            data_any%d%c_dp = CONJG(data_any%d%c_dp)\n         CASE DEFAULT\n            ! needed for g95\n         END SELECT\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(data_any)\n      CALL dbcsr_data_release(data_any)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_conjg\n\n   SUBROUTINE dbcsr_zero(matrix_a)\n      !! fill a dbcsr matrix with zeros\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_zero'\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n      SELECT CASE (dbcsr_get_data_type(matrix_a))\n      CASE (dbcsr_type_complex_4)\n         matrix_a%data_area%d%c_sp = (0.0, 0.0)\n      CASE (dbcsr_type_complex_8)\n         matrix_a%data_area%d%c_dp = (0.0_dp, 0.0_dp)\n      CASE (dbcsr_type_real_4)\n         matrix_a%data_area%d%r_sp = 0.0\n      CASE (dbcsr_type_real_8)\n         matrix_a%data_area%d%r_dp = 0.0_dp\n      END SELECT\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_zero\n\n   SUBROUTINE dbcsr_scale_anytype(matrix_a, alpha_scalar, limits)\n      !! Scales a DBCSR matrix by alpha\n      !!\n      !! Limits\n      !! A 4-tuple describing (first_row, last_row, first_column, last_column). Set\n      !! to 0 to avoid limiting.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n         !! DBCSR matrix\n      TYPE(dbcsr_scalar_type), INTENT(IN)                :: alpha_scalar\n         !! a scalar\n      INTEGER, DIMENSION(4), INTENT(IN), OPTIONAL        :: limits\n         !! Scale only a subbox\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_scale_anytype'\n      INTEGER, PARAMETER                                 :: first_col_i = 3, first_row_i = 1, &\n                                                            last_col_i = 4, last_row_i = 2\n\n      INTEGER :: a_col, a_col_size, a_row, a_row_size, col_offset, handle, row_offset, &\n                 scale_col_offset, scale_col_size, scale_row_offset, scale_row_size\n      INTEGER, DIMENSION(4)                              :: my_limits\n      LOGICAL                                            :: do_scale, has_limits, tr\n      TYPE(dbcsr_data_obj)                               :: data_any\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_scalar_type)                            :: one\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      ! Limits are only honored if the argument is present and any are\n      ! non-zero.\n      IF (PRESENT(limits)) THEN\n         has_limits = ANY(limits(:) .NE. 0)\n      ELSE\n         has_limits = .FALSE.\n      END IF\n      my_limits(first_row_i) = 1\n      my_limits(last_row_i) = dbcsr_nfullrows_total(matrix_a)\n      my_limits(first_col_i) = 1\n      my_limits(last_col_i) = dbcsr_nfullcols_total(matrix_a)\n      IF (has_limits) THEN\n         IF (limits(last_col_i) .NE. 0) THEN\n            IF (debug_mod .AND. (limits(last_col_i) < 0 .OR. limits(last_col_i) > dbcsr_nfullcols_total(matrix_a))) &\n               DBCSR_ABORT(\"Specified last column is out of bounds.\")\n            my_limits(last_col_i) = limits(last_col_i)\n         END IF\n         IF (limits(first_col_i) .NE. 0) THEN\n            IF (debug_mod .AND. (limits(first_col_i) < 0 .OR. limits(first_col_i) > dbcsr_nfullcols_total(matrix_a))) &\n               DBCSR_ABORT(\"Specified first column is out of bounds.\")\n            my_limits(first_col_i) = limits(first_col_i)\n         END IF\n         IF (limits(last_row_i) .NE. 0) THEN\n            IF (debug_mod .AND. (limits(last_row_i) < 0 .OR. limits(last_row_i) > dbcsr_nfullrows_total(matrix_a))) &\n               DBCSR_ABORT(\"Specified last row is out of bounds.\")\n            my_limits(last_row_i) = limits(last_row_i)\n         END IF\n         IF (limits(first_row_i) .NE. 0) THEN\n            IF (debug_mod .AND. (limits(first_row_i) < 0 .OR. limits(first_row_i) > dbcsr_nfullrows_total(matrix_a))) &\n               DBCSR_ABORT(\"Specified first row is out of bounds.\")\n            my_limits(first_row_i) = limits(first_row_i)\n         END IF\n      END IF\n      !\n      ! quick return if possible\n      one = dbcsr_scalar_one(dbcsr_scalar_get_type(alpha_scalar))\n      do_scale = .NOT. dbcsr_scalar_are_equal(alpha_scalar, one)\n      !\n      ! let's go\n      IF (do_scale) THEN\n!$OMP        PARALLEL DEFAULT (NONE) &\n!$OMP                 PRIVATE (iter, data_any) &\n!$OMP                 PRIVATE (a_row, a_col, tr, a_row_size, a_col_size, &\n!$OMP                          row_offset, col_offset) &\n!$OMP                 PRIVATE (scale_row_size, scale_col_size,&\n!$OMP                          scale_row_offset, scale_col_offset) &\n!$OMP                 SHARED (matrix_a, my_limits,alpha_scalar)\n         CALL dbcsr_data_init(data_any)\n         CALL dbcsr_data_new(data_any, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix_a)))\n         CALL dbcsr_iterator_start(iter, matrix_a, read_only=.FALSE., &\n                                   contiguous_pointers=.FALSE., dynamic=.TRUE., &\n                                   dynamic_byrows=.TRUE., shared=.TRUE.)\n         iterations: DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, a_row, a_col, data_any, tr, &\n                                           row_size=a_row_size, col_size=a_col_size, &\n                                           row_offset=row_offset, col_offset=col_offset)\n            IF (a_row_size .GT. 0 .AND. a_col_size .GT. 0) THEN\n               CALL frame_block_limit(a_row_size, row_offset, &\n                                      my_limits(first_row_i), my_limits(last_row_i), &\n                                      scale_row_size, scale_row_offset)\n               CALL frame_block_limit(a_col_size, col_offset, &\n                                      my_limits(first_col_i), my_limits(last_col_i), &\n                                      scale_col_size, scale_col_offset)\n               IF (tr) THEN\n                  CALL swap(scale_row_size, scale_col_size)\n                  CALL swap(scale_row_offset, scale_col_offset)\n               END IF\n               CALL dbcsr_block_scale(data_any, scale=alpha_scalar, &\n                                      row_size=scale_row_size, col_size=scale_col_size, &\n                                      lb=scale_row_offset, lb2=scale_col_offset)\n            END IF\n         END DO iterations\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_data_clear_pointer(data_any)\n         CALL dbcsr_data_release(data_any)\n!$OMP        END PARALLEL\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_scale_anytype\n\n   ELEMENTAL SUBROUTINE frame_block_limit(block_size, block_offset, &\n                                          first_limit, last_limit, &\n                                          frame_size, frame_offset)\n      !! Determines the effect of limits on a block\n\n      INTEGER, INTENT(IN)                                :: block_size, block_offset, first_limit, &\n                                                            last_limit\n         !! size of block\n         !! global offset of block\n         !! lower limit\n         !! upper limit\n      INTEGER, INTENT(OUT)                               :: frame_size, frame_offset\n         !! size of block region within the limits\n         !! starting position of the block region that is within the limits\n\n      INTEGER                                            :: f, l\n\n      f = MAX(block_offset, first_limit)\n      l = MIN(block_offset + block_size - 1, last_limit)\n      frame_size = MAX(l - f + 1, 0)\n      frame_offset = MIN(f - block_offset + 1, block_size)\n   END SUBROUTINE frame_block_limit\n\n   SUBROUTINE dbcsr_scale_by_vector_anytype(matrix_a, alpha, side)\n      !! Scales a DBCSR matrix by alpha\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n         !! DBCSR matrix\n      TYPE(dbcsr_data_obj), INTENT(IN), OPTIONAL         :: alpha\n         !! the scaling vector\n      CHARACTER(LEN=*), INTENT(IN)                       :: side\n         !! apply the scaling from the side\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_scale_by_vector_anytype'\n\n      INTEGER                                            :: a_blk, a_col, a_col_size, a_nze, a_row, &\n                                                            a_row_size, col_offset, data_type, &\n                                                            handle, i, icol, irow, row_offset\n      LOGICAL                                            :: right, tr\n      TYPE(dbcsr_data_obj)                               :: data_any\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      ! check that alpha and matrix have the same data type\n      IF (dbcsr_get_data_type(matrix_a) .NE. alpha%d%data_type) &\n         DBCSR_ABORT(\"wrong data type matrix_a\")\n\n      IF (ASSOCIATED(alpha%d%r2_sp) .OR. ASSOCIATED(alpha%d%r2_dp) &\n          .OR. ASSOCIATED(alpha%d%c2_sp) .OR. ASSOCIATED(alpha%d%c2_dp)) &\n         DBCSR_ABORT(\"alpha is not a vector\")\n      !\n      ! set vars\n      right = .TRUE.\n      SELECT CASE (side)\n      CASE ('right'); right = .TRUE.\n      CASE ('left'); right = .FALSE.\n      CASE DEFAULT\n         DBCSR_ABORT(\"wrong side=\"//side)\n      END SELECT\n\n      ! check that alpha and matrix have matching sizes\n      IF (right .AND. dbcsr_nfullcols_total(matrix_a) /= dbcsr_data_get_size(alpha)) THEN\n         DBCSR_ABORT(\"vector size does not match matrix row size for RHS scaling\")\n      ELSE IF ((.NOT. right) .AND. dbcsr_nfullrows_total(matrix_a) /= dbcsr_data_get_size(alpha)) THEN\n         DBCSR_ABORT(\"vector size does not match matrix col size for LHS scaling\")\n      END IF\n\n      !\n      ! let's go\n      data_type = dbcsr_get_data_type(matrix_a)\n      CALL dbcsr_data_init(data_any)\n      CALL dbcsr_data_new(data_any, dbcsr_get_data_type(matrix_a))\n      CALL dbcsr_iterator_start(iter, matrix_a)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, a_row, a_col, data_any, tr, &\n                                        block_number=a_blk, &\n                                        row_size=a_row_size, col_size=a_col_size, &\n                                        row_offset=row_offset, col_offset=col_offset)\n         a_nze = a_row_size*a_col_size\n         IF (a_nze .EQ. 0) CYCLE ! Skip empty blocks\n         !\n         ! let's scale\n         IF (right) THEN\n            SELECT CASE (data_type)\n            CASE (dbcsr_type_real_4)\n               DO i = 1, a_col_size\n                  DO icol = (i - 1)*a_row_size + 1, (i - 1)*a_row_size + a_row_size\n                     data_any%d%r_sp(icol) = data_any%d%r_sp(icol)*alpha%d%r_sp(col_offset + i - 1)\n                  END DO\n               END DO\n            CASE (dbcsr_type_real_8)\n               DO i = 1, a_col_size\n                  DO icol = (i - 1)*a_row_size + 1, (i - 1)*a_row_size + a_row_size\n                     data_any%d%r_dp(icol) = data_any%d%r_dp(icol)*alpha%d%r_dp(col_offset + i - 1)\n                  END DO\n               END DO\n            CASE (dbcsr_type_complex_4)\n               DO i = 1, a_col_size\n                  DO icol = (i - 1)*a_row_size + 1, (i - 1)*a_row_size + a_row_size\n                     data_any%d%c_sp(icol) = data_any%d%c_sp(icol)*alpha%d%c_sp(col_offset + i - 1)\n                  END DO\n               END DO\n            CASE (dbcsr_type_complex_8)\n               DO i = 1, a_col_size\n                  DO icol = (i - 1)*a_row_size + 1, (i - 1)*a_row_size + a_row_size\n                     data_any%d%c_dp(icol) = data_any%d%c_dp(icol)*alpha%d%c_dp(col_offset + i - 1)\n                  END DO\n               END DO\n            END SELECT\n         ELSE\n            SELECT CASE (data_type)\n            CASE (dbcsr_type_real_4)\n               DO i = 1, a_row_size\n                  DO irow = i, i + a_col_size*a_row_size - 1, a_row_size\n                     data_any%d%r_sp(irow) = data_any%d%r_sp(irow)*alpha%d%r_sp(row_offset + i - 1)\n                  END DO\n               END DO\n            CASE (dbcsr_type_real_8)\n               DO i = 1, a_row_size\n                  DO irow = i, i + a_col_size*a_row_size - 1, a_row_size\n                     data_any%d%r_dp(irow) = data_any%d%r_dp(irow)*alpha%d%r_dp(row_offset + i - 1)\n                  END DO\n               END DO\n            CASE (dbcsr_type_complex_4)\n               DO i = 1, a_row_size\n                  DO irow = i, i + a_col_size*a_row_size - 1, a_row_size\n                     data_any%d%c_sp(irow) = data_any%d%c_sp(irow)*alpha%d%c_sp(row_offset + i - 1)\n                  END DO\n               END DO\n            CASE (dbcsr_type_complex_8)\n               DO i = 1, a_row_size\n                  DO irow = i, i + a_col_size*a_row_size - 1, a_row_size\n                     data_any%d%c_dp(irow) = data_any%d%c_dp(irow)*alpha%d%c_dp(row_offset + i - 1)\n                  END DO\n               END DO\n            END SELECT\n         END IF\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(data_any)\n      CALL dbcsr_data_release(data_any)\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_scale_by_vector_anytype\n\n   SUBROUTINE dbcsr_add_anytype(matrix_a, matrix_b, alpha_scalar, beta_scalar, flop)\n      !! add and scale matrices\n      !! A = alpha*A + beta*B or\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n         !! DBCSR matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_b\n         !! DBCSR matrix\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: alpha_scalar, beta_scalar\n      INTEGER(KIND=int_8), INTENT(INOUT), OPTIONAL       :: flop\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_anytype'\n\n      INTEGER                                            :: data_type_a, data_type_b, &\n                                                            handle, size_work, iw\n      INTEGER(KIND=int_8)                                :: my_flop, local_matrix_size\n      LOGICAL                                            :: do_scale\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_scalar_type)                            :: my_beta_scalar\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. dbcsr_valid_index(matrix_a)) &\n         DBCSR_ABORT(\"Invalid matrix\")\n\n      IF ((dbcsr_get_matrix_type(matrix_a) .EQ. dbcsr_type_symmetric .OR. &\n           dbcsr_get_matrix_type(matrix_a) .EQ. dbcsr_type_antisymmetric) .NEQV. &\n          (dbcsr_get_matrix_type(matrix_b) .EQ. dbcsr_type_symmetric .OR. &\n           dbcsr_get_matrix_type(matrix_b) .EQ. dbcsr_type_antisymmetric)) THEN\n         DBCSR_ABORT(\"Summing general with symmetric matrix NYI\")\n      END IF\n\n      data_type_a = dbcsr_get_data_type(matrix_a)\n      data_type_b = dbcsr_get_data_type(matrix_b)\n      !\n      my_beta_scalar = dbcsr_scalar_one(data_type_b)\n      IF (PRESENT(beta_scalar)) my_beta_scalar = beta_scalar\n      !\n      ! let's go\n      IF ((dbcsr_nblkrows_total(matrix_a) .NE. dbcsr_nblkrows_total(matrix_b)) .OR. &\n          (dbcsr_nblkcols_total(matrix_a) .NE. dbcsr_nblkcols_total(matrix_b)) .OR. &\n          (data_type_a .NE. data_type_b)) &\n         DBCSR_ABORT(\"matrices not consistent\")\n\n      IF (data_type_a .NE. my_beta_scalar%data_type) &\n         DBCSR_ABORT(\"beta type parameter not consistent with matrices type\")\n\n      do_scale = .NOT. dbcsr_scalar_are_equal(my_beta_scalar, dbcsr_scalar_one(data_type_b))\n\n      IF (PRESENT(alpha_scalar)) THEN\n         CALL dbcsr_scale(matrix_a, alpha_scalar=alpha_scalar)\n      END IF\n\n      IF ((.NOT. dbcsr_scalar_are_equal(my_beta_scalar, &\n                                        dbcsr_scalar_zero(data_type_b))) .AND. &\n          dbcsr_get_num_blocks(matrix_b) .GT. 0) THEN\n\n         ! Pre-size work arrays of matrix_a to avoid continuous reallocation.\n         ! Overestimate for symmetric matrix and multiple threads!\n         local_matrix_size = INT(dbcsr_nfullrows_local(matrix_a), KIND=int_8)* &\n                             dbcsr_nfullcols_local(matrix_a)\n         size_work = MAX(0, INT(MIN(local_matrix_size - INT(dbcsr_get_nze(matrix_a), KIND=int_8), &\n                                    INT(dbcsr_get_nze(matrix_b), KIND=int_8)), KIND=int_4))\n         my_flop = 0\n!$OMP        PARALLEL DEFAULT (NONE) &\n!$OMP                 PRIVATE (iter, iw) &\n!$OMP                 SHARED (matrix_a, matrix_b, data_type_b, size_work) &\n!$OMP                 SHARED (do_scale, my_beta_scalar) &\n!$OMP                 REDUCTION (+ : my_flop)\n         CALL dbcsr_work_create(matrix_a, &\n                                nblks_guess=matrix_b%nblks, &\n                                sizedata_guess=size_work, &\n                                work_mutable=.FALSE.)\n!$OMP        BARRIER\n         iw = 1\n!$       iw = omp_get_thread_num() + 1\n         CALL dbcsr_iterator_start(iter, matrix_b, &\n                                   shared=.TRUE., read_only=.TRUE., contiguous_pointers=.FALSE., &\n                                   dynamic=.TRUE., dynamic_byrows=.TRUE.)\n         SELECT CASE (data_type_b)\n         CASE (dbcsr_type_real_4)\n            CALL dbcsr_add_anytype_s(matrix_a, matrix_b, iter, iw, do_scale, my_beta_scalar, my_flop)\n         CASE (dbcsr_type_real_8)\n            CALL dbcsr_add_anytype_d(matrix_a, matrix_b, iter, iw, do_scale, my_beta_scalar, my_flop)\n         CASE (dbcsr_type_complex_4)\n            CALL dbcsr_add_anytype_c(matrix_a, matrix_b, iter, iw, do_scale, my_beta_scalar, my_flop)\n         CASE (dbcsr_type_complex_8)\n            CALL dbcsr_add_anytype_z(matrix_a, matrix_b, iter, iw, do_scale, my_beta_scalar, my_flop)\n         CASE default\n            DBCSR_ABORT(\"Invalid data type\")\n         END SELECT\n         CALL dbcsr_iterator_stop(iter)\n\n         CALL dbcsr_finalize(matrix_a)\n!$OMP        END PARALLEL\n         IF (PRESENT(flop)) flop = flop + my_flop\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_add_anytype\n\n   SUBROUTINE dbcsr_add_d(matrix_a, matrix_b, alpha_scalar, beta_scalar)\n      !! Interface for dbcsr_add\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_b\n      REAL(real_8), INTENT(IN)                           :: alpha_scalar, beta_scalar\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_d'\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n      IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8 .AND. &\n          dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_8) THEN\n         CALL dbcsr_add_anytype(matrix_a, matrix_b, &\n                                alpha_scalar=dbcsr_scalar(alpha_scalar), &\n                                beta_scalar=dbcsr_scalar(beta_scalar))\n      ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. &\n              dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4) THEN\n         CALL dbcsr_add_anytype(matrix_a, matrix_b, &\n                                alpha_scalar=dbcsr_scalar(REAL(alpha_scalar, real_4)), &\n                                beta_scalar=dbcsr_scalar(REAL(beta_scalar, real_4)))\n      ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_4 .AND. &\n              dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_4) THEN\n         CALL dbcsr_add_anytype(matrix_a, matrix_b, &\n                                alpha_scalar=dbcsr_scalar(CMPLX(alpha_scalar, 0, real_4)), &\n                                beta_scalar=dbcsr_scalar(CMPLX(beta_scalar, 0, real_4)))\n      ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_8 .AND. &\n              dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_8) THEN\n         CALL dbcsr_add_anytype(matrix_a, matrix_b, &\n                                alpha_scalar=dbcsr_scalar(CMPLX(alpha_scalar, 0, real_8)), &\n                                beta_scalar=dbcsr_scalar(CMPLX(beta_scalar, 0, real_8)))\n      ELSE\n         DBCSR_ABORT(\"Invalid combination of data type, NYI\")\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_add_d\n\n   SUBROUTINE dbcsr_add_s(matrix_a, matrix_b, alpha_scalar, beta_scalar)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_b\n      REAL(real_4), INTENT(IN)                           :: alpha_scalar, beta_scalar\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_s'\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n      IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. &\n          dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4) THEN\n         CALL dbcsr_add_anytype(matrix_a, matrix_b, &\n                                alpha_scalar=dbcsr_scalar(alpha_scalar), &\n                                beta_scalar=dbcsr_scalar(beta_scalar))\n      ELSE\n         DBCSR_ABORT(\"Invalid combination of data type, NYI\")\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_add_s\n\n   SUBROUTINE dbcsr_add_z(matrix_a, matrix_b, alpha_scalar, beta_scalar)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_b\n      COMPLEX(real_8), INTENT(IN)                        :: alpha_scalar, beta_scalar\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_z'\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n      IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_8 .AND. &\n          dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_8) THEN\n         CALL dbcsr_add_anytype(matrix_a, matrix_b, &\n                                alpha_scalar=dbcsr_scalar(alpha_scalar), &\n                                beta_scalar=dbcsr_scalar(beta_scalar))\n      ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_4 .AND. &\n              dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_4) THEN\n         CALL dbcsr_add_anytype(matrix_a, matrix_b, &\n                                alpha_scalar=dbcsr_scalar(CMPLX(alpha_scalar, KIND=real_4)), &\n                                beta_scalar=dbcsr_scalar(CMPLX(beta_scalar, KIND=real_4)))\n      ELSE\n         DBCSR_ABORT(\"Invalid combination of data type, NYI\")\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_add_z\n\n   SUBROUTINE dbcsr_add_c(matrix_a, matrix_b, alpha_scalar, beta_scalar)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_b\n      COMPLEX(real_4), INTENT(IN)                        :: alpha_scalar, beta_scalar\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_c'\n      INTEGER                                            :: handle\n\n      CALL timeset(routineN, handle)\n      IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_complex_4 .AND. &\n          dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_complex_4) THEN\n         CALL dbcsr_add_anytype(matrix_a, matrix_b, &\n                                alpha_scalar=dbcsr_scalar(alpha_scalar), &\n                                beta_scalar=dbcsr_scalar(beta_scalar))\n      ELSE\n         DBCSR_ABORT(\"Invalid combination of data type, NYI\")\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_add_c\n\n   SUBROUTINE dbcsr_add_on_diag_ds(matrix, alpha)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      REAL(kind=real_8), INTENT(IN)                      :: alpha\n\n      IF (dbcsr_get_data_type(matrix) == dbcsr_type_real_4) THEN\n         CALL dbcsr_add_on_diag_s(matrix, REAL(alpha, kind=real_4))\n      ELSE\n         CALL dbcsr_add_on_diag_d(matrix, alpha)\n      END IF\n   END SUBROUTINE dbcsr_add_on_diag_ds\n\n   SUBROUTINE dbcsr_function_of_elements(matrix_a, func, a0, a1, a2)\n      !! Computes various functions (defined by func) of matrix elements\n      !! @note\n      !! sign(A,B) returns the value of A with the sign of B\n      !! dbcsr_func_inverse:   1/(a1*x+a0)\n      !! fails if the inversion produces infinite numbers\n      !! dbcsr_func_inverse_special: 1/(x+sign(a0,x))\n      !! safe inverse: if a0>0 then the denominator is never zero\n      !! dbcsr_func_tanh:    tanh(a1*x+a0)\n      !! dbcsr_func_dtanh:   d(tanh(a1*x+a0)) / dx\n      !! dbcsr_func_ddtanh:  d2(tanh(a1*x+a0)) / dx2\n      !! dbcsr_func_artanh:  artanh(a1*x+a0)=ln[(1+(a1*x+a0))/(1-(a1*x+a0))]/2\n      !! fails if |a1*x+a0| >= 1\n      !! dbcsr_func_sread_from_zero:  if |x|<|a0| then x=sign(a0,x)\n      !! dbcsr_func_truncate:  if |x|>|a0| then x=sign(a0,x)\n      !! dbcsr_func_sin:     sin(a1*x+a0)\n      !! dbcsr_func_cos:     cos(a1*x+a0)\n      !! dbcsr_func_dsin:    d(sin(a1*x+a0)) / dx = a1*cos(a1*x+a0)\n      !! dbcsr_func_ddsin:   d2(sin(a1*x+a0)) / dx2 = -a1*a1*sin(a1*x+a0)\n      !! dbcsr_func_asin:    asin(a1*x+a0)\n      !! fails if |a1*x+a0| > 1\n      !! @endnote\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n         !! DBCSR matrix\n      INTEGER, INTENT(IN)                                :: func\n      REAL(kind=dp), INTENT(IN), OPTIONAL                :: a0, a1, a2\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_function_of_elements'\n\n      INTEGER                                            :: blk, col, col_size, data_type, handle, &\n                                                            ielem, nze, row, row_size\n      LOGICAL                                            :: tr_a\n      REAL(kind=dp)                                      :: p0, p1, p2\n      TYPE(dbcsr_data_obj)                               :: a_data\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(a0)) THEN\n         p0 = a0\n      ELSE\n         p0 = 0.0_dp\n      END IF\n      IF (PRESENT(a1)) THEN\n         p1 = a1\n      ELSE\n         p1 = 1.0_dp\n      END IF\n      IF (PRESENT(a2)) THEN\n         p2 = a2\n      ELSE\n         p2 = 0.0_dp\n      END IF\n\n      data_type = dbcsr_get_data_type(matrix_a)\n      CALL dbcsr_data_init(a_data)\n      CALL dbcsr_data_new(a_data, data_type)\n      CALL dbcsr_iterator_start(iter, matrix_a)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, a_data, tr_a, blk, &\n                                        row_size=row_size, col_size=col_size)\n         nze = row_size*col_size\n         SELECT CASE (data_type)\n            !CASE (dbcsr_type_real_4)\n            !   a_data%d%r_sp(1:nze) = 1.0_real_4/a_data%d%r_sp(1:nze)\n            !   IF(MAXVAL(ABS(a_data%d%r_sp)).GE.HUGE(0.0_real_4))&\n            !      DBCSR_ABORT(\"Division by zero\")\n         CASE (dbcsr_type_real_8)\n            SELECT CASE (func)\n            CASE (dbcsr_func_spread_from_zero)\n               ! if |x|<|a0| then x=|a0|*sign(x)\n               DO ielem = 1, nze\n                  IF (ABS(a_data%d%r_dp(ielem)) .LT. ABS(p0)) THEN\n                     a_data%d%r_dp(ielem) = SIGN(p0, a_data%d%r_dp(ielem))\n                  END IF\n               END DO\n            CASE (dbcsr_func_truncate)\n               ! if |x|>|a0| then x=|a0|*sign(x)\n               DO ielem = 1, nze\n                  IF (ABS(a_data%d%r_dp(ielem)) .GT. ABS(p0)) THEN\n                     a_data%d%r_dp(ielem) = SIGN(p0, a_data%d%r_dp(ielem))\n                  END IF\n               END DO\n            CASE (dbcsr_func_inverse_special)\n               !IF (MINVAL(ABS(a_data%d%r_dp)).le.ABS(p2)) THEN\n               !   ! there is at least one near-zero element,\n               !   ! invert element-by-element\n               !   DO ielem=1,nze\n               !     IF (a_data%d%r_dp(ielem).le.ABS(p2)) THEN\n               !        a_data%d%r_dp(ielem) = 0.0_real_8\n               !     ELSE\n               !        a_data%d%r_dp(ielem) = &\n               !           1.0_real_8/(p1*a_data%d%r_dp(ielem)+p0)\n               !     ENDIF\n               !   ENDDO\n               !ELSE\n               !   a_data%d%r_dp(1:nze) = 1.0_real_8/(p1*a_data%d%r_dp(1:nze)+p0)\n               !ENDIF\n               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)))\n            CASE (dbcsr_func_inverse)\n               a_data%d%r_dp(1:nze) = 1.0_real_8/(p1*a_data%d%r_dp(1:nze) + p0)\n               IF (MAXVAL(ABS(a_data%d%r_dp)) .GE. HUGE(0.0_real_8)) &\n                  DBCSR_ABORT(\"Division by zero\")\n            CASE (dbcsr_func_tanh)\n               a_data%d%r_dp(1:nze) = TANH(p1*a_data%d%r_dp(1:nze) + p0)\n            CASE (dbcsr_func_dtanh)\n               a_data%d%r_dp(1:nze) = TANH(p1*a_data%d%r_dp(1:nze) + p0)\n               a_data%d%r_dp(1:nze) = a_data%d%r_dp(1:nze)**2\n               a_data%d%r_dp(1:nze) = p1*(1.0_real_8 - a_data%d%r_dp(1:nze))\n            CASE (dbcsr_func_ddtanh)\n               a_data%d%r_dp(1:nze) = TANH(p1*a_data%d%r_dp(1:nze) + p0)\n               a_data%d%r_dp(1:nze) = a_data%d%r_dp(1:nze)**3 - a_data%d%r_dp(1:nze)\n               a_data%d%r_dp(1:nze) = 2.0_real_8*(p1**2)*a_data%d%r_dp(1:nze)\n            CASE (dbcsr_func_artanh)\n               a_data%d%r_dp(1:nze) = p1*a_data%d%r_dp(1:nze) + p0\n               IF (MAXVAL(ABS(a_data%d%r_dp)) .GE. 1.0_real_8) &\n                  DBCSR_ABORT(\"ARTANH is undefined for |x|>=1\")\n               a_data%d%r_dp(1:nze) = (1.0_real_8 + a_data%d%r_dp(1:nze)) &\n                                      /(1.0_real_8 - a_data%d%r_dp(1:nze))\n               a_data%d%r_dp(1:nze) = 0.5_real_8*LOG(a_data%d%r_dp(1:nze))\n            CASE (dbcsr_func_sin)\n               a_data%d%r_dp(1:nze) = SIN(p1*a_data%d%r_dp(1:nze) + p0)\n            CASE (dbcsr_func_cos)\n               a_data%d%r_dp(1:nze) = COS(p1*a_data%d%r_dp(1:nze) + p0)\n            CASE (dbcsr_func_dsin)\n               a_data%d%r_dp(1:nze) = p1*COS(p1*a_data%d%r_dp(1:nze) + p0)\n            CASE (dbcsr_func_ddsin)\n               a_data%d%r_dp(1:nze) = -p1*p1*SIN(p1*a_data%d%r_dp(1:nze) + p0)\n            CASE (dbcsr_func_asin)\n               a_data%d%r_dp(1:nze) = p1*a_data%d%r_dp(1:nze) + p0\n               IF (MAXVAL(ABS(a_data%d%r_dp)) .GT. 1.0_real_8) &\n                  DBCSR_ABORT(\"ASIN is undefined for |x|>1\")\n               a_data%d%r_dp(1:nze) = ASIN(a_data%d%r_dp(1:nze))\n            CASE DEFAULT\n               DBCSR_ABORT(\"Unknown function of matrix elements\")\n            END SELECT\n            !CASE (dbcsr_type_complex_4)\n            !CASE (dbcsr_type_complex_8)\n         CASE DEFAULT\n            DBCSR_ABORT(\"Operation is implemented only for dp real values\")\n         END SELECT\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(a_data)\n      CALL dbcsr_data_release(a_data)\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_function_of_elements\n\n   SUBROUTINE dbcsr_hadamard_product(matrix_a, matrix_b, matrix_c, &\n                                     b_assume_value)\n      !! Hadamard product\n      !! C = A . B (C needs to be different from A and B)\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b\n         !! DBCSR matrix\n         !! DBCSR matrix\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_c\n         !! DBCSR matrix\n      REAL(KIND=dp), INTENT(IN), OPTIONAL                :: b_assume_value\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_hadamard_product'\n\n      INTEGER                                            :: blk, col, col_size, data_type, handle, &\n                                                            nze, row, row_size\n      LOGICAL                                            :: assume_blocks_in_b, found, tr_a, tr_b\n      REAL(KIND=dp)                                      :: assumed_b_value\n      TYPE(dbcsr_data_obj)                               :: a_data, b_data, c_data\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      IF (PRESENT(b_assume_value)) THEN\n         assume_blocks_in_b = .TRUE.\n         assumed_b_value = b_assume_value\n      ELSE\n         assume_blocks_in_b = .FALSE.\n         assumed_b_value = 0.0_dp\n      END IF\n\n      CALL timeset(routineN, handle)\n      IF (dbcsr_get_data_type(matrix_a) .NE. dbcsr_get_data_type(matrix_b) .OR. &\n          dbcsr_get_data_type(matrix_a) .NE. dbcsr_get_data_type(matrix_c)) &\n         DBCSR_ABORT(\"data types not consistent, need to fix that\")\n\n      IF (dbcsr_nblkrows_total(matrix_a) .NE. dbcsr_nblkrows_total(matrix_b) .OR. &\n          dbcsr_nblkrows_total(matrix_c) .NE. dbcsr_nblkrows_total(matrix_a)) &\n         DBCSR_ABORT(\"matrices not consistent\")\n\n      data_type = dbcsr_get_data_type(matrix_a)\n      CALL dbcsr_data_init(c_data)\n      CALL dbcsr_data_new(c_data, data_type, &\n                          data_size=dbcsr_max_row_size(matrix_a)*dbcsr_max_col_size(matrix_a))\n      CALL dbcsr_zero(matrix_c)\n      CALL dbcsr_data_init(a_data)\n      CALL dbcsr_data_new(a_data, data_type)\n      CALL dbcsr_data_init(b_data)\n      CALL dbcsr_data_new(b_data, data_type)\n      CALL dbcsr_iterator_start(iter, matrix_a)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         SELECT CASE (dbcsr_get_data_type(matrix_a))\n            !CASE (dbcsr_type_real_4)\n         CASE (dbcsr_type_real_8)\n            CALL dbcsr_iterator_next_block(iter, row, col, a_data, tr_a, blk, &\n                                           row_size=row_size, col_size=col_size)\n            nze = row_size*col_size\n            CALL dbcsr_get_block_p(matrix_b, row, col, b_data, tr_b, found)\n            IF (tr_a .NEQV. tr_b) &\n               DBCSR_ABORT(\"tr not consistent, need to fix that\")\n            IF (found) THEN\n               SELECT CASE (data_type)\n               CASE (dbcsr_type_real_4)\n                  c_data%d%r_sp(1:nze) = a_data%d%r_sp(1:nze)*b_data%d%r_sp(1:nze)\n                  CALL dbcsr_put_block(matrix_c, row, col, c_data%d%r_sp(1:nze), transposed=tr_a, &\n                                       summation=.FALSE.)\n               CASE (dbcsr_type_real_8)\n                  c_data%d%r_dp(1:nze) = a_data%d%r_dp(1:nze)*b_data%d%r_dp(1:nze)\n                  CALL dbcsr_put_block(matrix_c, row, col, c_data%d%r_dp(1:nze), transposed=tr_a, &\n                                       summation=.FALSE.)\n               CASE (dbcsr_type_complex_4)\n                  c_data%d%c_sp(1:nze) = a_data%d%c_sp(1:nze)*b_data%d%c_sp(1:nze)\n                  CALL dbcsr_put_block(matrix_c, row, col, c_data%d%c_sp(1:nze), transposed=tr_a, &\n                                       summation=.FALSE.)\n               CASE (dbcsr_type_complex_8)\n                  c_data%d%c_dp(1:nze) = a_data%d%c_dp(1:nze)*b_data%d%c_dp(1:nze)\n                  CALL dbcsr_put_block(matrix_c, row, col, c_data%d%c_dp(1:nze), transposed=tr_a, &\n                                       summation=.FALSE.)\n               END SELECT\n            ELSE\n               IF (assume_blocks_in_b) THEN ! this makes not too much sense, to delete ?\n                  SELECT CASE (data_type)\n                  CASE (dbcsr_type_real_4)\n                     c_data%d%r_sp(1:nze) = a_data%d%r_sp(1:nze)*REAL(assumed_b_value, KIND=sp)\n                     CALL dbcsr_put_block(matrix_c, row, col, c_data%d%r_sp(1:nze), transposed=tr_a, &\n                                          summation=.FALSE.)\n                  CASE (dbcsr_type_real_8)\n                     c_data%d%r_dp(1:nze) = a_data%d%r_dp(1:nze)*assumed_b_value\n                     CALL dbcsr_put_block(matrix_c, row, col, c_data%d%r_dp(1:nze), transposed=tr_a, &\n                                          summation=.FALSE.)\n                  CASE (dbcsr_type_complex_4)\n                     c_data%d%c_sp(1:nze) = a_data%d%c_sp(1:nze)*REAL(assumed_b_value, KIND=sp)\n                     CALL dbcsr_put_block(matrix_c, row, col, c_data%d%c_sp(1:nze), transposed=tr_a, &\n                                          summation=.FALSE.)\n                  CASE (dbcsr_type_complex_8)\n                     c_data%d%c_dp(1:nze) = a_data%d%c_dp(1:nze)*assumed_b_value\n                     CALL dbcsr_put_block(matrix_c, row, col, c_data%d%c_dp(1:nze), transposed=tr_a, &\n                                          summation=.FALSE.)\n                  END SELECT\n               END IF\n            END IF\n            !CASE (dbcsr_type_complex_4)\n            !CASE (dbcsr_type_complex_8)\n         CASE DEFAULT\n            DBCSR_ABORT(\"Only real double precision\")\n         END SELECT\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_finalize(matrix_c)\n      CALL dbcsr_data_clear_pointer(a_data)\n      CALL dbcsr_data_clear_pointer(b_data)\n      CALL dbcsr_data_release(c_data)\n      CALL dbcsr_data_release(a_data)\n      CALL dbcsr_data_release(b_data)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_hadamard_product\n\n   SUBROUTINE dbcsr_init_random(matrix, keep_sparsity, mini_seed)\n      !! ... TODO : unify with other version which is generic in the data_type\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      LOGICAL, OPTIONAL                                  :: keep_sparsity\n      INTEGER, INTENT(IN), OPTIONAL                      :: mini_seed\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_init_random'\n\n      INTEGER                                            :: col, col_size, handle, hold, iseed(4), &\n                                                            mynode, ncol, nrow, row, row_size, &\n                                                            stored_col, stored_row, my_mini_seed\n      INTEGER, DIMENSION(:), POINTER                     :: col_blk_size, row_blk_size\n      LOGICAL                                            :: found, my_keep_sparsity, tr\n      REAL(real_8), ALLOCATABLE, DIMENSION(:)            :: rnd\n      REAL(real_8), DIMENSION(:, :), POINTER             :: buff, data_d\n\n!   ---------------------------------------------------------------------------\n\n      my_keep_sparsity = .FALSE.\n      IF (PRESENT(keep_sparsity)) my_keep_sparsity = keep_sparsity\n\n      my_mini_seed = 1\n      IF (PRESENT(mini_seed)) my_mini_seed = mini_seed\n\n      CALL timeset(routineN, handle)\n\n      row_blk_size => array_data(matrix%row_blk_size)\n      col_blk_size => array_data(matrix%col_blk_size)\n      mynode = dbcsr_mp_mynode(dbcsr_distribution_mp(dbcsr_distribution(matrix)))\n      CALL dbcsr_work_create(matrix, work_mutable=.TRUE.)\n\n      ALLOCATE (rnd(MAXVAL(row_blk_size)*MAXVAL(col_blk_size)))\n      nrow = dbcsr_nblkrows_total(matrix)\n      ncol = dbcsr_nblkcols_total(matrix)\n      DO row = 1, nrow\n      DO col = 1, ncol\n         row_size = row_blk_size(row)\n         col_size = col_blk_size(col)\n         tr = .FALSE.\n         stored_row = row\n         stored_col = col\n         CALL dbcsr_get_stored_coordinates(matrix, stored_row, stored_col, hold)\n         IF (hold .EQ. mynode) THEN\n            CALL dbcsr_get_block_p(matrix, stored_row, stored_col, data_d, tr, found)\n            IF (found .OR. (.NOT. my_keep_sparsity)) THEN\n               ! set the seed for dlarnv, is here to guarantee same value of the random numbers\n               ! for all layouts (and block distributions)\n               CALL set_larnv_seed(row, nrow, col, ncol, my_mini_seed, iseed)\n               CALL dlarnv(1, iseed, row_size*col_size, rnd(1))\n            END IF\n            IF (found) THEN\n               CALL dcopy(row_size*col_size, rnd, 1, data_d, 1)\n            ELSE\n               IF (.NOT. my_keep_sparsity) THEN\n                  ALLOCATE (buff(row_size, col_size))\n                  CALL dcopy(row_size*col_size, rnd, 1, buff, 1)\n                  CALL dbcsr_put_block(matrix, stored_row, stored_col, buff)\n                  DEALLOCATE (buff)\n               END IF\n            END IF\n         END IF\n      END DO\n      END DO\n      DEALLOCATE (rnd)\n\n      CALL dbcsr_finalize(matrix)\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_init_random\n\n   SUBROUTINE dbcsr_get_block_diag(matrix, diag)\n      !! get the diagonal of a dbcsr matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! the matrix\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: diag\n         !! the diagonal\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_block_diag'\n\n      INTEGER                                            :: blk, col, handle, row\n      LOGICAL                                            :: tr\n      TYPE(dbcsr_data_obj)                               :: data_a\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      CALL dbcsr_create(diag, name='diag of '//TRIM(matrix%name), &\n                        template=matrix)\n\n      CALL dbcsr_data_init(data_a)\n      CALL dbcsr_data_new(data_a, dbcsr_get_data_type(matrix))\n      CALL dbcsr_iterator_start(iter, matrix)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, data_a, tr, blk)\n         IF (row .EQ. col) CALL dbcsr_put_block(diag, row, col, data_a, transposed=tr)\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(data_a)\n      CALL dbcsr_data_release(data_a)\n      CALL dbcsr_finalize(diag)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_get_block_diag\n\n   LOGICAL FUNCTION symmetry_consistent(matrix_type, data_type)\n      !! checks if matrix symmetry and data_type are consistent\n      !! \\brief note: does not check the symmetry of the data itself\n\n      CHARACTER, INTENT(IN)                    :: matrix_type\n      INTEGER, INTENT(IN)                      :: data_type\n\n      symmetry_consistent = .FALSE.\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4, dbcsr_type_real_8)\n         SELECT CASE (matrix_type)\n         CASE (dbcsr_type_no_symmetry, dbcsr_type_symmetric, dbcsr_type_antisymmetric)\n            symmetry_consistent = .TRUE.\n         END SELECT\n      CASE (dbcsr_type_complex_4, dbcsr_type_complex_8)\n         SELECT CASE (matrix_type)\n         CASE (dbcsr_type_no_symmetry, dbcsr_type_hermitian, dbcsr_type_antihermitian)\n            symmetry_consistent = .TRUE.\n         END SELECT\n      CASE DEFAULT\n         DBCSR_ABORT(\"Invalid data type.\")\n      END SELECT\n\n   END FUNCTION symmetry_consistent\n\n   LOGICAL FUNCTION symmetry_compatible(matrix_type_a, matrix_type_b)\n      !! checks if symmetries of two matrices are compatible for copying\n      !! \\brief data from matrix_a(source) to matrix_b(target)\n\n      CHARACTER, INTENT(IN)                    :: matrix_type_a, matrix_type_b\n\n      symmetry_compatible = .FALSE.\n\n      SELECT CASE (matrix_type_a)\n      CASE (dbcsr_type_no_symmetry)\n         SELECT CASE (matrix_type_b)\n         CASE (dbcsr_type_no_symmetry)\n            symmetry_compatible = .TRUE.\n         END SELECT\n      CASE (dbcsr_type_symmetric, dbcsr_type_hermitian)\n         SELECT CASE (matrix_type_b)\n         CASE (dbcsr_type_symmetric, dbcsr_type_hermitian)\n            symmetry_compatible = .TRUE.\n         END SELECT\n      CASE (dbcsr_type_antisymmetric, dbcsr_type_antihermitian)\n         SELECT CASE (matrix_type_b)\n         CASE (dbcsr_type_antisymmetric, dbcsr_type_antihermitian)\n            symmetry_compatible = .TRUE.\n         END SELECT\n      CASE DEFAULT\n         DBCSR_ABORT(\"Invalid matrix type.\")\n      END SELECT\n\n   END FUNCTION symmetry_compatible\n\n   SUBROUTINE dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, &\n                         shallow_data, keep_imaginary, matrix_type)\n      !! copy a matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b\n         !! target DBCSR matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n         !! source DBCSR matrix\n      CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: name\n         !! name of the new matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: keep_sparsity, shallow_data, &\n                                                            keep_imaginary\n         !! keep the target matrix sparsity; default is False.\n         !! shallow data copy\n         !! when copy from complex to real,& the default is to keep only the real part; if this flag is set, the imaginary part is\n         !! used\n      CHARACTER, INTENT(IN), OPTIONAL                    :: matrix_type\n         !! 'N' for normal, 'T' for transposed, 'S' for symmetric, and 'A' for antisymmetric\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_copy'\n      CHARACTER                                          :: new_matrix_type, repl_type\n      INTEGER                                            :: handle, new_type\n      LOGICAL                                            :: keep_sparse, shallow\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. symmetry_consistent(dbcsr_get_matrix_type(matrix_a), dbcsr_get_data_type(matrix_a))) &\n         DBCSR_ABORT(\"Source matrix symmetry not consistent with its data type.\")\n      shallow = .FALSE.; IF (PRESENT(shallow_data)) shallow = shallow_data\n      keep_sparse = .FALSE.\n      IF (PRESENT(keep_sparsity)) keep_sparse = keep_sparsity\n      IF (keep_sparse .AND. .NOT. dbcsr_valid_index(matrix_b)) &\n         DBCSR_ABORT(\"Target matrix must be valid to keep its sparsity\")\n      IF (keep_sparse .AND. shallow) &\n         DBCSR_WARN(\"Shallow copy not compatibly with sparsity retainment\")\n      IF (keep_sparse) THEN\n         IF (PRESENT(name)) matrix_b%name = name\n         CALL dbcsr_copy_into_existing(matrix_b, matrix_a)\n      ELSE\n         IF (dbcsr_valid_index(matrix_b)) THEN\n            new_type = dbcsr_get_data_type(matrix_b)\n            repl_type = dbcsr_get_replication_type(matrix_b)\n         ELSE\n            new_type = dbcsr_get_data_type(matrix_a)\n            repl_type = dbcsr_get_replication_type(matrix_a)\n         END IF\n         new_matrix_type = dbcsr_get_matrix_type(matrix_a)\n         IF (PRESENT(matrix_type)) THEN\n            IF (.NOT. symmetry_compatible(dbcsr_get_matrix_type(matrix_a), matrix_type)) &\n               CALL dbcsr_abort(__LOCATION__, \"Specified target matrix symmetry \"//matrix_type// &\n                                \" not compatible with source matrix type \"//dbcsr_get_matrix_type(matrix_a))\n            new_matrix_type = matrix_type\n         END IF\n         IF (.NOT. symmetry_consistent(new_matrix_type, new_type)) &\n            CALL dbcsr_abort(__LOCATION__, \"Target matrix symmetry \"// &\n                             new_matrix_type//\" not consistent with its data type.\")\n         IF (PRESENT(name)) THEN\n            CALL dbcsr_create(matrix_b, name=TRIM(name), &\n                              template=matrix_a, &\n                              matrix_type=new_matrix_type, &\n                              data_type=new_type)\n         ELSE\n            CALL dbcsr_create(matrix_b, &\n                              data_type=new_type, &\n                              matrix_type=new_matrix_type, &\n                              template=matrix_a)\n         END IF\n         CALL ensure_array_size(matrix_b%index, ub=SIZE(matrix_a%index), &\n                                memory_type=dbcsr_get_index_memory_type(matrix_b))\n         !\n         ! copy index and data\n         matrix_b%index(1:SIZE(matrix_a%index)) = matrix_a%index(:)\n         IF (.NOT. shallow) THEN\n            IF (matrix_a%nze > dbcsr_get_data_size(matrix_a)) &\n               DBCSR_ABORT(\"Source matrix sizes not consistent!\")\n            CALL dbcsr_data_ensure_size(matrix_b%data_area, &\n                                        dbcsr_data_get_size_referenced(matrix_a%data_area))\n            IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_get_data_type(matrix_b)) &\n               THEN\n               CALL dbcsr_data_copyall(matrix_b%data_area, &\n                                       matrix_a%data_area)\n            ELSE\n               CALL dbcsr_data_convert(matrix_b%data_area, &\n                                       matrix_a%data_area, drop_real=keep_imaginary)\n            END IF\n         ELSE\n            IF (dbcsr_get_data_type(matrix_a) .NE. dbcsr_get_data_type(matrix_b)) &\n               DBCSR_ABORT(\"Shallow copy only possible when retaining data type.\")\n            CALL dbcsr_switch_data_area(matrix_b, matrix_a%data_area)\n         END IF\n         !\n         ! the row_p, col_i and blk_p ...\n         CALL dbcsr_repoint_index(matrix_b)\n         matrix_b%nze = matrix_a%nze\n         matrix_b%nblks = matrix_b%nblks\n         matrix_b%valid = .TRUE.\n\n         matrix_b%sparsity_id = matrix_a%sparsity_id\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_copy\n\n   SUBROUTINE dbcsr_copy_into_existing(matrix_b, matrix_a)\n      !! copy a matrix, retaining current sparsity\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b\n         !! target DBCSR matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n         !! source DBCSR matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_copy_into_existing'\n\n      INTEGER                                            :: col_size, data_type, dst_col, dst_row, &\n                                                            handle, rel, row_size, src_col, &\n                                                            src_cs, src_row, src_rs\n      LOGICAL                                            :: dst_tr, making_symmetric, neg_imag, &\n                                                            neg_real, src_tr\n      TYPE(dbcsr_data_obj)                               :: dst_data, src_data\n      TYPE(dbcsr_iterator)                               :: dst_iter, src_iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. dbcsr_valid_index(matrix_b)) &\n         DBCSR_ABORT(\"Matrix_b is not valid\")\n      IF (dbcsr_get_data_type(matrix_b) .NE. dbcsr_get_data_type(matrix_a)) &\n         DBCSR_ABORT(\"Matrices have different data types.\")\n      data_type = dbcsr_get_data_type(matrix_b)\n      neg_real = matrix_b%negate_real\n      neg_imag = matrix_b%negate_imaginary\n      making_symmetric = dbcsr_has_symmetry(matrix_b) &\n                         .AND. .NOT. dbcsr_has_symmetry(matrix_a)\n      IF (making_symmetric) THEN\n         CALL dbcsr_copy_into_existing_sym(matrix_b, matrix_a)\n         CALL timestop(handle)\n         RETURN\n      END IF\n      CALL dbcsr_data_init(src_data)\n      CALL dbcsr_data_init(dst_data)\n      CALL dbcsr_data_new(src_data, data_type)\n      CALL dbcsr_data_new(dst_data, data_type)\n      CALL dbcsr_iterator_start(src_iter, matrix_a)\n      CALL dbcsr_iterator_start(dst_iter, matrix_b)\n      ! Iterate through the blocks of the source and destination\n      ! matrix. There are three possibilities: 1. copy the data for\n      ! blocks present in both; 2 skip source blocks not present in the\n      ! target; 3 zero blocks not present in the source.\n      IF (dbcsr_iterator_blocks_left(src_iter)) THEN\n         CALL dbcsr_iterator_next_block(src_iter, src_row, src_col, src_data, &\n                                        src_tr)\n      ELSE\n         src_row = 0; src_col = 0\n      END IF\n      DO WHILE (dbcsr_iterator_blocks_left(dst_iter))\n         CALL dbcsr_iterator_next_block(dst_iter, dst_row, dst_col, dst_data, &\n                                        dst_tr, row_size=row_size, col_size=col_size)\n         ! Now find the source position that is greater or equal to the\n         ! target one. I.e, skip blocks that the target doesn't have.\n         rel = pos_relation(dst_row, dst_col, src_row, src_col)\n         DO WHILE (rel .EQ. 1 .AND. dbcsr_iterator_blocks_left(src_iter))\n            CALL dbcsr_iterator_next_block(src_iter, src_row, src_col, &\n                                           src_data, src_tr, row_size=src_rs, col_size=src_cs)\n            rel = pos_relation(dst_row, dst_col, src_row, src_col)\n         END DO\n         SELECT CASE (rel)\n         CASE (-1, 1)\n            ! Target lags source or ran out of source\n            CALL dbcsr_data_clear(dst_data)\n         CASE (0)\n            ! Copy the data\n            IF (dbcsr_data_get_size(src_data) .NE. dbcsr_data_get_size(dst_data)) &\n               DBCSR_ABORT(\"Block sizes not equal!\")\n            IF (src_tr .EQV. dst_tr) THEN\n               CALL dbcsr_data_copyall(dst_data, src_data)\n            ELSE\n               CALL dbcsr_block_partial_copy(dst=dst_data, dst_tr=dst_tr, &\n                                             dst_rs=row_size, dst_cs=col_size, &\n                                             dst_r_lb=1, dst_c_lb=1, &\n                                             src=src_data, src_tr=src_tr, &\n                                             src_rs=src_rs, src_cs=src_cs, &\n                                             src_r_lb=1, src_c_lb=1, &\n                                             nrow=row_size, ncol=col_size)\n               IF (neg_real) THEN\n                  CALL dbcsr_block_real_neg(dst_data, row_size, col_size)\n               END IF\n               IF (neg_imag) THEN\n                  CALL dbcsr_block_conjg(dst_data, row_size, col_size)\n               END IF\n            END IF\n         CASE default\n            DBCSR_ABORT(\"Trouble syncing iterators\")\n         END SELECT\n      END DO\n      CALL dbcsr_iterator_stop(src_iter)\n      CALL dbcsr_iterator_stop(dst_iter)\n      CALL dbcsr_data_clear_pointer(src_data)\n      CALL dbcsr_data_clear_pointer(dst_data)\n      CALL dbcsr_data_release(src_data)\n      CALL dbcsr_data_release(dst_data)\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_copy_into_existing\n\n   SUBROUTINE dbcsr_copy_into_existing_sym(matrix_b, matrix_a)\n      !! copy a matrix, retaining current sparsity\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b\n         !! target DBCSR matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n         !! source DBCSR matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_copy_into_existing_sym'\n\n      INTEGER                                            :: col_size, data_type, dst_col, dst_row, &\n                                                            handle, row_size, src_col, src_cs, &\n                                                            src_row, src_rs\n      LOGICAL                                            :: dst_tr, found, neg_imag, neg_real, src_tr\n      TYPE(dbcsr_data_obj)                               :: dst_data, src_data\n      TYPE(dbcsr_iterator)                               :: dst_iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (dbcsr_get_data_type(matrix_b) .NE. dbcsr_get_data_type(matrix_a)) &\n         DBCSR_ABORT(\"Matrices have different data types.\")\n      data_type = dbcsr_get_data_type(matrix_b)\n      IF (.NOT. dbcsr_has_symmetry(matrix_b) .OR. dbcsr_has_symmetry(matrix_a)) &\n         DBCSR_ABORT(\"Must copy from non-symmetric to symmetric matrix.\")\n      neg_real = matrix_b%negate_real\n      neg_imag = matrix_b%negate_imaginary\n\n      CALL dbcsr_data_init(src_data)\n      CALL dbcsr_data_init(dst_data)\n      CALL dbcsr_data_new(src_data, data_type)\n      CALL dbcsr_data_new(dst_data, data_type)\n      CALL dbcsr_iterator_start(dst_iter, matrix_b)\n      ! Iterate through the blocks of the destination matrix.  For each\n      ! one, try to find an appropriate source matrix block and copy it\n      ! into the destination matrix.\n      DO WHILE (dbcsr_iterator_blocks_left(dst_iter))\n         CALL dbcsr_iterator_next_block(dst_iter, dst_row, dst_col, dst_data, &\n                                        dst_tr, row_size=row_size, col_size=col_size)\n         src_row = dst_row\n         src_col = dst_col\n         IF (checker_tr(dst_row, dst_col)) &\n            CALL swap(src_row, src_col)\n         CALL dbcsr_get_block_p(matrix_a, src_row, src_col, src_data, src_tr, &\n                                found=found, row_size=src_rs, col_size=src_cs)\n         IF (.NOT. found) THEN\n            CALL dbcsr_data_clear(dst_data)\n         ELSE\n            IF (dbcsr_data_get_size(src_data) .NE. dbcsr_data_get_size(dst_data)) THEN\n               DBCSR_ABORT(\"Block sizes not equal!\")\n            END IF\n            IF (checker_tr(dst_row, dst_col)) THEN\n               src_tr = .NOT. src_tr\n               CALL swap(src_rs, src_cs)\n            END IF\n            CALL dbcsr_block_partial_copy(dst=dst_data, dst_tr=dst_tr, &\n                                          dst_rs=row_size, dst_cs=col_size, &\n                                          dst_r_lb=1, dst_c_lb=1, &\n                                          src=src_data, src_tr=src_tr, &\n                                          src_rs=src_rs, src_cs=src_cs, &\n                                          src_r_lb=1, src_c_lb=1, &\n                                          nrow=row_size, ncol=col_size)\n            IF (neg_real .AND. checker_tr(dst_row, dst_col)) THEN\n               CALL dbcsr_block_real_neg(dst_data, row_size, col_size)\n            END IF\n            IF (neg_imag .AND. checker_tr(dst_row, dst_col)) THEN\n               CALL dbcsr_block_conjg(dst_data, row_size, col_size)\n            END IF\n         END IF\n      END DO\n      CALL dbcsr_iterator_stop(dst_iter)\n      CALL dbcsr_data_clear_pointer(src_data)\n      CALL dbcsr_data_clear_pointer(dst_data)\n      CALL dbcsr_data_release(src_data)\n      CALL dbcsr_data_release(dst_data)\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_copy_into_existing_sym\n\n   ELEMENTAL FUNCTION pos_relation(row1, col1, row2, col2) RESULT(relation)\n      !! Determines the relation between two matrix positions.\n\n      INTEGER, INTENT(IN)                                :: row1, col1, row2, col2\n      INTEGER                                            :: relation\n         !! Relation between positions 1 and 2. 0: same -1: pos1 < pos2 1: pos1 > pos2\n\n      IF (row1 .LT. row2) THEN\n         relation = -1\n      ELSEIF (row1 .GT. row2) THEN\n         relation = 1\n      ELSE ! rows are equal, check column\n         IF (col1 .LT. col2) THEN\n            relation = -1\n         ELSEIF (col1 .GT. col2) THEN\n            relation = 1\n         ELSE\n            relation = 0\n         END IF\n      END IF\n   END FUNCTION pos_relation\n\n   SUBROUTINE dbcsr_copy_submatrix(matrix_b, matrix_a, name, &\n                                   block_row_bounds, block_column_bounds, &\n                                   shallow_data)\n      !! Copy a submatrix.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b\n         !! target DBCSR matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n         !! source DBCSR matrix\n      CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: name\n         !! name of the new matrix\n      INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL        :: block_row_bounds, block_column_bounds\n         !! rows to extract (array of size 2 holding the lower and upper inclusive bounds)\n         !! columns to extract (array of size 2 holding the lower and upper inclusive bounds)\n      LOGICAL, INTENT(IN), OPTIONAL                      :: shallow_data\n         !! shallow data copy\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_copy_submatrix'\n\n      INTEGER                                            :: blk_p, col, handle, nblocks, new_blk, &\n                                                            old_blk, row\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: blkp_list, col_list, row_list\n      LOGICAL                                            :: shallow, tr\n      TYPE(dbcsr_data_obj)                               :: data_block\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (PRESENT(shallow_data)) THEN\n         shallow = shallow_data\n      ELSE\n         shallow = .FALSE.\n      END IF\n      ! Verify assumptions.\n      IF (PRESENT(block_row_bounds)) THEN\n         IF (SIZE(block_row_bounds) /= 2) &\n            DBCSR_ABORT(\"Size of bounds specifier must be 2\")\n      END IF\n      IF (PRESENT(block_column_bounds)) THEN\n         IF (SIZE(block_column_bounds) /= 2) &\n            DBCSR_ABORT(\"Size of bounds specifier must be 2\")\n      END IF\n      ! Setup target matrix\n      CALL dbcsr_create(matrix_b, name=name, template=matrix_a)\n      CALL dbcsr_finalize(matrix_b)\n      IF (.NOT. shallow) THEN\n         ! Non-shallow copy uses the standard iterator on the source and\n         ! block put on the target.\n!\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP          PRIVATE (data_block, iter, row, col, tr) &\n!$OMP          SHARED (matrix_a, matrix_b,&\n!$OMP                  block_row_bounds, block_column_bounds)\n         CALL dbcsr_work_create(matrix_b, work_mutable=.FALSE.)\n         CALL dbcsr_data_init(data_block)\n         CALL dbcsr_data_new(data_block, dbcsr_get_data_type(matrix_a))\n         CALL dbcsr_iterator_start(iter, matrix_a, dynamic=.TRUE., &\n                                   dynamic_byrows=.TRUE.)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, data_block, tr)\n            ! Only keep the block if they are within the specified bounds.\n            IF (PRESENT(block_row_bounds)) THEN\n               IF (row .LT. block_row_bounds(1)) CYCLE\n               IF (row .GT. block_row_bounds(2)) CYCLE\n            END IF\n            IF (PRESENT(block_column_bounds)) THEN\n               IF (col .LT. block_column_bounds(1)) CYCLE\n               IF (col .GT. block_column_bounds(2)) CYCLE\n            END IF\n            CALL dbcsr_put_block(matrix_b, row, col, data_block, transposed=tr)\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_data_clear_pointer(data_block)\n         CALL dbcsr_data_release(data_block)\n         CALL dbcsr_finalize(matrix_b)\n!$OMP END PARALLEL\n      ELSE\n         ! For the shallow copy the source matrix data is referenced.\n         CALL dbcsr_switch_data_area(matrix_b, matrix_a%data_area)\n         nblocks = dbcsr_get_num_blocks(matrix_a) ! High estimate.\n         ! Shallow copy goes through source's data blocks and inserts\n         ! the only the ones corresponding to the submatrix specifier\n         ! into the target. Block pointers must remain the same as in\n         ! the source.\n         ALLOCATE (row_list(nblocks), col_list(nblocks), blkp_list(nblocks))\n         !\n         CALL dbcsr_iterator_start(iter, matrix_a)\n         new_blk = 1\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, &\n                                           blk=old_blk, blk_p=blk_p)\n            ! Only keep the block if they are within the specified bounds.\n            IF (PRESENT(block_row_bounds)) THEN\n               IF (row .LT. block_row_bounds(1)) CYCLE\n               IF (row .GT. block_row_bounds(2)) CYCLE\n            END IF\n            IF (PRESENT(block_column_bounds)) THEN\n               IF (col .LT. block_column_bounds(1)) CYCLE\n               IF (col .GT. block_column_bounds(2)) CYCLE\n            END IF\n            row_list(new_blk) = row\n            col_list(new_blk) = col\n            blkp_list(new_blk) = blk_p\n            new_blk = new_blk + 1\n         END DO\n         new_blk = new_blk - 1\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_reserve_blocks(matrix_b, row_list(1:new_blk), &\n                                   col_list(1:new_blk), blkp_list(1:new_blk))\n      END IF\n      !\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_copy_submatrix\n\n   SUBROUTINE dbcsr_crop_matrix(matrix_b, matrix_a, &\n                                full_row_bounds, full_column_bounds, &\n                                shallow_data)\n      !! Crop and copies a matrix.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_b\n         !! target DBCSR matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n         !! source DBCSR matrix\n      INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL        :: full_row_bounds, full_column_bounds\n         !! rows to extract (array of size 2 holding the lower and upper inclusive bounds)\n         !! columns to extract (array of size 2 holding the lower and upper inclusive bounds)\n      LOGICAL, INTENT(IN), OPTIONAL                      :: shallow_data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_crop_matrix'\n\n      INTEGER                                            :: col, f_col_f, f_row_f, handle, l_col_l, &\n                                                            l_row_l, row\n      INTEGER, DIMENSION(2)                              :: block_col_bounds, block_row_bounds\n      LOGICAL                                            :: part_col, part_f_col, part_f_row, &\n                                                            part_l_col, part_l_row, part_row, &\n                                                            shallow, tr\n      TYPE(dbcsr_data_obj)                               :: data_block\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      part_l_col = .FALSE.\n      part_f_col = .FALSE.\n      part_l_row = .FALSE.\n      part_f_row = .FALSE.\n      IF (PRESENT(shallow_data)) THEN\n         shallow = shallow_data\n      ELSE\n         shallow = .FALSE.\n      END IF\n      block_row_bounds = 0\n      block_col_bounds = 0\n      part_col = .FALSE.\n      part_row = .FALSE.\n      !\n      ! If row bounds are present, they must be converted to block\n      ! addressing.\n      IF (PRESENT(full_row_bounds)) THEN\n         IF (SIZE(full_row_bounds) /= 2) &\n            DBCSR_ABORT(\"Size of bounds specifier must be 2\")\n         IF (full_row_bounds(1) < 0) &\n            DBCSR_ABORT(\"Invalid first row bound.\")\n         IF (full_row_bounds(2) > dbcsr_nfullrows_total(matrix_a)) &\n            DBCSR_ABORT(\"Invalid last row bound.\")\n         IF (full_row_bounds(1) .EQ. 0) THEN\n            block_row_bounds(1) = 1\n         ELSE\n            CALL find_block_of_element(full_row_bounds(1), block_row_bounds(1), &\n                                       dbcsr_nblkrows_total(matrix_a), &\n                                       dbcsr_row_block_offsets(matrix_a), &\n                                       hint=0)\n            part_f_row = array_get(dbcsr_row_block_offsets(matrix_a), block_row_bounds(1)) &\n                         .NE. full_row_bounds(1)\n         END IF\n         f_row_f = -7\n         IF (part_f_row) THEN\n            ! Block offset of last cleared row\n            f_row_f = full_row_bounds(1) - &\n                      array_get(dbcsr_row_block_offsets(matrix_a), block_row_bounds(1))\n         END IF\n         IF (full_row_bounds(2) .EQ. 0) THEN\n            block_row_bounds(2) = dbcsr_nblkrows_total(matrix_a)\n         ELSE\n            CALL find_block_of_element(full_row_bounds(2), block_row_bounds(2), &\n                                       dbcsr_nblkrows_total(matrix_a), &\n                                       dbcsr_row_block_offsets(matrix_a), &\n                                       hint=0)\n            part_l_row = array_get(dbcsr_row_block_offsets(matrix_a), block_row_bounds(2) + 1) - 1 &\n                         .NE. full_row_bounds(2)\n         END IF\n         ! Block offset of first cleared row\n         l_row_l = -7\n         IF (part_l_row) THEN\n            l_row_l = 2 + full_row_bounds(2) - &\n                      array_get(dbcsr_row_block_offsets(matrix_a), block_row_bounds(2))\n         END IF\n         part_row = part_f_row .OR. part_l_row\n      END IF\n      !\n      ! If column bounds are present, they must be converted to block\n      ! addressing.\n      IF (PRESENT(full_column_bounds)) THEN\n         IF (SIZE(full_column_bounds) /= 2) &\n            DBCSR_ABORT(\"Size of bounds specifier must be 2\")\n         IF (full_column_bounds(1) < 0) &\n            DBCSR_ABORT(\"Invalid first column bound.\")\n         IF (full_column_bounds(2) > dbcsr_nfullcols_total(matrix_a)) &\n            DBCSR_ABORT(\"Invalid last column bound.\")\n         IF (full_column_bounds(1) .EQ. 0) THEN\n            block_col_bounds(1) = 1\n         ELSE\n            CALL find_block_of_element(full_column_bounds(1), block_col_bounds(1), &\n                                       dbcsr_nblkcols_total(matrix_a), &\n                                       dbcsr_col_block_offsets(matrix_a), &\n                                       hint=0)\n            part_f_col = array_get(dbcsr_col_block_offsets(matrix_a), block_col_bounds(1)) &\n                         .NE. full_column_bounds(1)\n         END IF\n         f_col_f = -7\n         IF (part_f_col) THEN\n            ! Block offset of last cleared column\n            f_col_f = full_column_bounds(1) - &\n                      array_get(dbcsr_col_block_offsets(matrix_a), block_col_bounds(1))\n         END IF\n         IF (full_column_bounds(2) .EQ. 0) THEN\n            block_col_bounds(2) = dbcsr_nblkcols_total(matrix_a)\n         ELSE\n            CALL find_block_of_element(full_column_bounds(2), block_col_bounds(2), &\n                                       dbcsr_nblkcols_total(matrix_a), &\n                                       dbcsr_col_block_offsets(matrix_a), &\n                                       hint=0)\n            part_l_col = array_get(dbcsr_col_block_offsets(matrix_a), block_col_bounds(2) + 1) - 1 &\n                         .NE. full_column_bounds(2)\n         END IF\n         l_col_l = -7\n         IF (part_l_col) THEN\n            ! Block offset of first cleared column\n            l_col_l = 2 + full_column_bounds(2) - &\n                      array_get(dbcsr_col_block_offsets(matrix_a), block_col_bounds(2))\n         END IF\n         part_col = part_f_col .OR. part_l_col\n      END IF\n      !\n      ! First copy the blocks then perform the intra-block zeroing.\n      CALL dbcsr_copy_submatrix(matrix_b, matrix_a, &\n                                block_row_bounds=block_row_bounds, &\n                                block_column_bounds=block_col_bounds, &\n                                shallow_data=shallow)\n      IF (part_row .OR. part_col) THEN\n!$OMP PARALLEL DEFAULT (NONE) &\n!$OMP          PRIVATE (data_block, iter, row, col, tr) &\n!$OMP          SHARED (matrix_b,&\n!$OMP                  part_row, part_f_row, part_l_row, f_row_f, l_row_l, &\n!$OMP                  part_col, part_f_col, part_l_col, f_col_f, l_col_l,&\n!$OMP                  block_row_bounds, block_col_bounds)\n         CALL dbcsr_data_init(data_block)\n         CALL dbcsr_data_new(data_block, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix_b)))\n         CALL dbcsr_iterator_start(iter, matrix_b, &\n                                   dynamic=.TRUE., dynamic_byrows=.TRUE.)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, data_block, tr)\n            IF (part_row) THEN\n               IF (row .LT. block_row_bounds(1)) CYCLE\n               IF (row .GT. block_row_bounds(2)) CYCLE\n            END IF\n            IF (part_col) THEN\n               IF (col .LT. block_col_bounds(1)) CYCLE\n               IF (col .GT. block_col_bounds(2)) CYCLE\n            END IF\n            IF (part_row) THEN\n               IF (part_f_row .AND. row .EQ. block_row_bounds(1)) THEN\n                  CALL dbcsr_data_clear(data_block, ub=f_row_f, tr=tr)\n               END IF\n               IF (part_l_row .AND. row .EQ. block_row_bounds(2)) THEN\n                  CALL dbcsr_data_clear(data_block, lb=l_row_l, tr=tr)\n               END IF\n            END IF\n            IF (part_col) THEN\n               IF (part_f_col .AND. col .EQ. block_col_bounds(1)) THEN\n                  CALL dbcsr_data_clear(data_block, ub2=f_col_f, tr=tr)\n               END IF\n               IF (part_l_col .AND. col .EQ. block_col_bounds(2)) THEN\n                  CALL dbcsr_data_clear(data_block, lb2=l_col_l, tr=tr)\n               END IF\n            END IF\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_data_clear_pointer(data_block)\n         CALL dbcsr_data_release(data_block)\n         CALL dbcsr_finalize(matrix_b)\n!$OMP END PARALLEL\n      END IF\n      !\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_crop_matrix\n\n   SUBROUTINE dbcsr_triu(matrix_a)\n      !! triu of a dbcsr matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_a\n         !! the matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_triu'\n      INTEGER                                            :: blk, blk_nze, col, col_size, handle, i, &\n                                                            j, row, row_size\n      LOGICAL                                            :: tr\n      REAL(dp), DIMENSION(:, :), POINTER                 :: DATA\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      CALL dbcsr_iterator_start(iter, matrix_a)\n\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, DATA, tr, &\n                                        block_number=blk, row_size=row_size, col_size=col_size)\n         blk_nze = row_size*col_size\n         IF (row .GT. col) CALL dbcsr_remove_block(matrix_a, row, col, blk_nze, blk)\n         IF (row .EQ. col) THEN\n            DO j = 1, col_size\n            DO i = j + 1, row_size\n               DATA(i, j) = 0.0_dp\n            END DO\n            END DO\n         END IF\n      END DO\n\n      CALL dbcsr_iterator_stop(iter)\n\n      CALL dbcsr_finalize(matrix_a)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_triu\n\n   SUBROUTINE dbcsr_filter_anytype(matrix, eps, method, &\n                                   use_absolute, filter_diag)\n      !! filter a dbcsr matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! the matrix\n      TYPE(dbcsr_scalar_type), INTENT(IN)                :: eps\n         !! the threshold\n      INTEGER, INTENT(IN), OPTIONAL                      :: method\n         !! how the matrix is filtered\n      LOGICAL, INTENT(in), OPTIONAL                      :: use_absolute, filter_diag\n         !! NYI\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_filter_anytype'\n\n      COMPLEX(KIND=real_4), DIMENSION(:), POINTER        :: data_c\n      COMPLEX(KIND=real_8), DIMENSION(:), POINTER        :: data_z\n      INTEGER                                            :: blk, blk_nze, col, col_size, handle, &\n                                                            my_method, row, row_size, data_type\n      LOGICAL                                            :: gt0, my_filter_diag, tr\n      REAL(KIND=real_4)                                  :: nrm_s\n      REAL(KIND=real_4), DIMENSION(:), POINTER           :: data_s\n      REAL(KIND=real_8)                                  :: my_absolute, nrm_d\n      REAL(KIND=real_8), DIMENSION(:), POINTER           :: data_d\n      TYPE(dbcsr_iterator)                               :: iter\n\n      REAL(KIND=real_8), EXTERNAL                        :: DZNRM2\n#if defined (__ACCELERATE)\n      REAL(KIND=real_8), EXTERNAL                        :: SCNRM2\n#else\n      REAL(KIND=real_4), EXTERNAL                        :: SCNRM2\n#endif\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      my_method = dbcsr_filter_frobenius\n      IF (PRESENT(method)) my_method = method\n      my_absolute = 1.0_dp\n      IF (PRESENT(use_absolute)) my_absolute = dbcsr_maxabs(matrix)\n      my_filter_diag = .TRUE.\n      IF (PRESENT(filter_diag)) my_filter_diag = filter_diag\n\n      SELECT CASE (eps%data_type)\n      CASE (dbcsr_type_real_4)\n         gt0 = eps%r_sp .GT. 0.0_real_4\n      CASE (dbcsr_type_real_8)\n         gt0 = eps%r_dp .GT. 0.0_real_8\n      CASE (dbcsr_type_complex_4)\n         gt0 = ABS(eps%c_sp) .GT. 0.0_real_4\n      CASE (dbcsr_type_complex_8)\n         gt0 = ABS(eps%c_dp) .GT. 0.0_real_8\n      CASE default\n         gt0 = .FALSE.\n      END SELECT\n\n      IF (gt0) THEN\n         data_type = dbcsr_get_data_type(matrix)\n\n!$OMP        PARALLEL DEFAULT(NONE) PRIVATE(iter,row,col,data_s,data_d,data_c,data_z,tr, &\n!$OMP                                       blk,row_size,col_size,blk_nze,nrm_d,nrm_s) &\n!$OMP                               SHARED(my_method,my_absolute,eps,matrix,data_type)\n\n         CALL dbcsr_iterator_start(iter, matrix, contiguous_pointers=.TRUE.)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            SELECT CASE (data_type)\n\n            CASE (dbcsr_type_real_4)\n               CALL dbcsr_iterator_next_block(iter, row, col, data_s, tr, blk, &\n                                              row_size, col_size)\n               blk_nze = row_size*col_size\n               IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks\n               SELECT CASE (my_method)\n               CASE (dbcsr_filter_frobenius)\n                  !\n                  ! Frobenius based\n                  nrm_s = norm2(data_s)\n                  IF (nrm_s .LT. my_absolute*eps%r_sp) &\n                     CALL dbcsr_remove_block(matrix, row, col, blk_nze, blk)\n               CASE DEFAULT\n                  DBCSR_ABORT(\"Only Frobenius based filtering\")\n               END SELECT\n\n            CASE (dbcsr_type_real_8)\n               CALL dbcsr_iterator_next_block(iter, row, col, data_d, tr, blk, &\n                                              row_size, col_size)\n               blk_nze = row_size*col_size\n               IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks\n               SELECT CASE (my_method)\n               CASE (dbcsr_filter_frobenius)\n                  !\n                  ! Frobenius based\n                  nrm_d = norm2(data_d)\n                  IF (nrm_d .LT. my_absolute*eps%r_dp) &\n                     CALL dbcsr_remove_block(matrix, row, col, blk_nze, blk)\n               CASE DEFAULT\n                  DBCSR_ABORT(\"Only Frobenius based filtering\")\n               END SELECT\n\n            CASE (dbcsr_type_complex_4)\n               CALL dbcsr_iterator_next_block(iter, row, col, data_c, tr, blk, &\n                                              row_size, col_size)\n               blk_nze = row_size*col_size\n               IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks\n               SELECT CASE (my_method)\n               CASE (dbcsr_filter_frobenius)\n                  !\n                  ! Frobenius based\n                  nrm_d = SCNRM2(SIZE(data_c), data_c(1), 1)\n                  IF (nrm_d .LT. my_absolute*eps%r_dp) &\n                     CALL dbcsr_remove_block(matrix, row, col, blk_nze, blk)\n               CASE DEFAULT\n                  DBCSR_ABORT(\"Only Frobenius based filtering\")\n               END SELECT\n\n            CASE (dbcsr_type_complex_8)\n               CALL dbcsr_iterator_next_block(iter, row, col, data_z, tr, blk, &\n                                              row_size, col_size)\n               blk_nze = row_size*col_size\n               IF (blk_nze .EQ. 0) CYCLE ! Skip empty blocks\n               SELECT CASE (my_method)\n               CASE (dbcsr_filter_frobenius)\n                  !\n                  ! Frobenius based\n                  nrm_d = DZNRM2(SIZE(data_z), data_z(1), 1)\n                  IF (nrm_d .LT. my_absolute*eps%r_dp) &\n                     CALL dbcsr_remove_block(matrix, row, col, blk_nze, blk)\n               CASE DEFAULT\n                  DBCSR_ABORT(\"Only Frobenius based filtering\")\n               END SELECT\n\n            CASE DEFAULT\n               DBCSR_ABORT(\"Wrong data type\")\n            END SELECT\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_finalize(matrix, reshuffle=.TRUE.)\n!$OMP        END PARALLEL\n\n         CALL dbcsr_index_compact(matrix)\n\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_filter_anytype\n\n   SUBROUTINE dbcsr_norm_scalar(matrix, which_norm, norm_scalar)\n      !! compute a norm of a dbcsr matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! the matrix\n      INTEGER, INTENT(IN)                                :: which_norm\n      REAL(KIND=real_8), INTENT(OUT)                     :: norm_scalar\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_norm_scalar'\n\n      INTEGER                                            ::  handle\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      SELECT CASE (which_norm)\n      CASE (dbcsr_norm_frobenius)\n         norm_scalar = dbcsr_frobenius_norm(matrix)\n      CASE (dbcsr_norm_maxabsnorm)\n         norm_scalar = dbcsr_maxabs(matrix)\n      CASE (dbcsr_norm_gershgorin)\n         norm_scalar = dbcsr_gershgorin_norm(matrix)\n      CASE DEFAULT\n         DBCSR_ABORT(\"this norm is NYI\")\n      END SELECT\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_norm_r8_vec(matrix, which_norm, norm_vector)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      INTEGER, INTENT(IN)                                :: which_norm\n      REAL(KIND=real_8), DIMENSION(:), INTENT(OUT), &\n         TARGET, CONTIGUOUS                              :: norm_vector\n\n      REAL(KIND=real_8), DIMENSION(:), POINTER, CONTIGUOUS :: v_p\n      TYPE(dbcsr_data_obj)                               :: norm_vector_a\n\n      CALL dbcsr_data_init(norm_vector_a)\n      CALL dbcsr_data_new(norm_vector_a, dbcsr_type_real_8)\n      v_p => norm_vector\n      CALL dbcsr_data_set_pointer(norm_vector_a, v_p)\n      CALL dbcsr_norm_vec(matrix, which_norm, norm_vector_a)\n      CALL dbcsr_data_clear_pointer(norm_vector_a)\n      CALL dbcsr_data_release(norm_vector_a)\n\n   END SUBROUTINE dbcsr_norm_r8_vec\n\n   SUBROUTINE dbcsr_norm_vec(matrix, which_norm, norm_vector)\n      !! compute the column norms of the dbcsr matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! the matrix\n      INTEGER, INTENT(IN)                                :: which_norm\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: norm_vector\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_norm_vec'\n\n      INTEGER                                            :: blk, col, col_offset, i, j, row, &\n                                                            row_offset, handle\n      LOGICAL                                            :: tr\n      TYPE(dbcsr_data_obj)                               :: data_a\n      TYPE(dbcsr_iterator)                               :: iter\n\n      CALL timeset(routineN, handle)\n\n      SELECT CASE (which_norm)\n      CASE (dbcsr_norm_column)\n         IF (dbcsr_data_get_type(norm_vector) /= dbcsr_get_data_type(matrix)) &\n            DBCSR_ABORT(\"Mismatched vector/matrix data types\")\n         IF (dbcsr_has_symmetry(matrix)) THEN\n            IF (dbcsr_data_get_size(norm_vector) < dbcsr_nfullrows_total(matrix)) &\n               DBCSR_ABORT(\"Passed vector too small\")\n         END IF\n         IF (dbcsr_data_get_size(norm_vector) < dbcsr_nfullcols_total(matrix)) &\n            DBCSR_ABORT(\"Passed vector too small\")\n         CALL dbcsr_data_init(data_a)\n         CALL dbcsr_data_new(data_a, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix)))\n         CALL dbcsr_data_clear(norm_vector)\n         CALL dbcsr_iterator_start(iter, matrix)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, data_a, tr, &\n                                           blk, row_offset=row_offset, col_offset=col_offset)\n            SELECT CASE (dbcsr_get_data_type(matrix))\n            CASE (dbcsr_type_real_4)\n               IF (dbcsr_has_symmetry(matrix) .AND. row .NE. col) THEN\n                  DO j = 1, SIZE(data_a%d%r2_sp, 2)\n                     DO i = 1, SIZE(data_a%d%r2_sp, 1)\n                        norm_vector%d%r_sp(col_offset + j - 1) &\n                           = norm_vector%d%r_sp(col_offset + j - 1) &\n                             + data_a%d%r2_sp(i, j)**2\n                        norm_vector%d%r_sp(row_offset + i - 1) &\n                           = norm_vector%d%r_sp(row_offset + i - 1) &\n                             + data_a%d%r2_sp(i, j)**2\n                     END DO\n                  END DO\n               ELSE\n                  DO j = 1, SIZE(data_a%d%r2_sp, 2)\n                     DO i = 1, SIZE(data_a%d%r2_sp, 1)\n                        norm_vector%d%r_sp(col_offset + j - 1) &\n                           = norm_vector%d%r_sp(col_offset + j - 1) &\n                             + data_a%d%r2_sp(i, j)*data_a%d%r2_sp(i, j)\n                     END DO\n                  END DO\n               END IF\n            CASE (dbcsr_type_real_8)\n               IF (dbcsr_has_symmetry(matrix) .AND. row .NE. col) THEN\n                  DO j = 1, SIZE(data_a%d%r2_dp, 2)\n                     DO i = 1, SIZE(data_a%d%r2_dp, 1)\n                        norm_vector%d%r_dp(col_offset + j - 1) &\n                           = norm_vector%d%r_dp(col_offset + j - 1) &\n                             + data_a%d%r2_dp(i, j)**2\n                        norm_vector%d%r_dp(row_offset + i - 1) &\n                           = norm_vector%d%r_dp(row_offset + i - 1) &\n                             + data_a%d%r2_dp(i, j)**2\n                     END DO\n                  END DO\n               ELSE\n                  DO j = 1, SIZE(data_a%d%r2_dp, 2)\n                     DO i = 1, SIZE(data_a%d%r2_dp, 1)\n                        norm_vector%d%r_dp(col_offset + j - 1) &\n                           = norm_vector%d%r_dp(col_offset + j - 1) &\n                             + data_a%d%r2_dp(i, j)*data_a%d%r2_dp(i, j)\n                     END DO\n                  END DO\n               END IF\n            CASE DEFAULT\n               DBCSR_ABORT(\"Only real values\")\n            END SELECT\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_data_clear_pointer(data_a)\n         CALL dbcsr_data_release(data_a)\n         SELECT CASE (dbcsr_get_data_type(matrix))\n         CASE (dbcsr_type_real_4)\n            CALL mp_sum(norm_vector%d%r_sp, &\n                        dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist)))\n            norm_vector%d%r_sp = SQRT(norm_vector%d%r_sp)\n         CASE (dbcsr_type_real_8)\n            CALL mp_sum(norm_vector%d%r_dp, &\n                        dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist)))\n            norm_vector%d%r_dp = SQRT(norm_vector%d%r_dp)\n         END SELECT\n\n      CASE DEFAULT\n         DBCSR_ABORT(\"this norm is NYI\")\n      END SELECT\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_norm_vec\n\n   FUNCTION dbcsr_gershgorin_norm(matrix) RESULT(norm)\n      !! compute a norm of a dbcsr matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! the matrix\n      REAL(KIND=real_8)                                  :: norm\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_gershgorin_norm'\n\n      COMPLEX(KIND=real_4), DIMENSION(:, :), POINTER     :: data_c\n      COMPLEX(KIND=real_8), DIMENSION(:, :), POINTER     :: data_z\n      INTEGER                                            :: blk, col, col_offset, handle, i, j, nc, &\n                                                            nr, row, row_offset\n      LOGICAL                                            :: any_sym, tr\n      REAL(KIND=real_4), DIMENSION(:, :), POINTER        :: data_r\n      REAL(KIND=real_8), DIMENSION(:, :), POINTER        :: data_d\n      REAL(real_8), ALLOCATABLE, DIMENSION(:)            :: buff_d\n      TYPE(dbcsr_iterator)                               :: iter\n\n      CALL timeset(routineN, handle)\n\n      nr = dbcsr_nfullrows_total(matrix)\n      nc = dbcsr_nfullcols_total(matrix)\n\n      any_sym = dbcsr_get_matrix_type(matrix) .EQ. dbcsr_type_symmetric .OR. &\n                dbcsr_get_matrix_type(matrix) .EQ. dbcsr_type_antisymmetric\n\n      IF (nr .NE. nc) &\n         DBCSR_ABORT(\"not a square matrix\")\n\n      norm = 0.0_dp\n      ALLOCATE (buff_d(nr))\n      buff_d = 0.0_dp\n      CALL dbcsr_iterator_start(iter, matrix)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         SELECT CASE (dbcsr_get_data_type(matrix))\n         CASE (dbcsr_type_real_4)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_r, tr, blk, &\n                                           row_offset=row_offset, col_offset=col_offset)\n            DO j = 1, SIZE(data_r, 2)\n            DO i = 1, SIZE(data_r, 1)\n               buff_d(row_offset + i - 1) = buff_d(row_offset + i - 1) + ABS(data_r(i, j))\n               IF (any_sym .AND. row .NE. col) &\n                  buff_d(col_offset + j - 1) = buff_d(col_offset + j - 1) + ABS(data_r(i, j))\n            END DO\n            END DO\n         CASE (dbcsr_type_real_8)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_d, tr, blk, &\n                                           row_offset=row_offset, col_offset=col_offset)\n            DO j = 1, SIZE(data_d, 2)\n            DO i = 1, SIZE(data_d, 1)\n               buff_d(row_offset + i - 1) = buff_d(row_offset + i - 1) + ABS(data_d(i, j))\n               IF (any_sym .AND. row .NE. col) &\n                  buff_d(col_offset + j - 1) = buff_d(col_offset + j - 1) + ABS(data_d(i, j))\n            END DO\n            END DO\n         CASE (dbcsr_type_complex_4)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_c, tr, blk, &\n                                           row_offset=row_offset, col_offset=col_offset)\n            DO j = 1, SIZE(data_c, 2)\n            DO i = 1, SIZE(data_c, 1)\n               buff_d(row_offset + i - 1) = buff_d(row_offset + i - 1) + ABS(data_c(i, j))\n               IF (any_sym .AND. row .NE. col) &\n                  DBCSR_ABORT(\"Only nonsymmetric matrix so far\")\n               !     buff_d(col_offset+j-1) = buff_d(col_offset+j-1) + ABS(data_c(i,j))\n            END DO\n            END DO\n         CASE (dbcsr_type_complex_8)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_z, tr, blk, &\n                                           row_offset=row_offset, col_offset=col_offset)\n            DO j = 1, SIZE(data_z, 2)\n            DO i = 1, SIZE(data_z, 1)\n               buff_d(row_offset + i - 1) = buff_d(row_offset + i - 1) + ABS(data_z(i, j))\n               IF (any_sym .AND. row .NE. col) &\n                  DBCSR_ABORT(\"Only nonsymmetric matrix so far\")\n               !     buff_d(col_offset+j-1) = buff_d(col_offset+j-1) + ABS(data_z(i,j))\n            END DO\n            END DO\n         CASE DEFAULT\n            DBCSR_ABORT(\"Wrong data type\")\n         END SELECT\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL mp_sum(buff_d, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist)))\n      norm = MAXVAL(buff_d)\n      DEALLOCATE (buff_d)\n\n      CALL timestop(handle)\n\n   END FUNCTION dbcsr_gershgorin_norm\n\n   FUNCTION dbcsr_maxabs(matrix) RESULT(norm)\n      !! compute a norm of a dbcsr matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! the matrix\n      REAL(real_8)                                       :: norm\n\n      COMPLEX(KIND=real_4), DIMENSION(:, :), POINTER     :: data_c\n      COMPLEX(KIND=real_8), DIMENSION(:, :), POINTER     :: data_z\n      INTEGER                                            :: blk, col, row\n      LOGICAL                                            :: tr\n      REAL(KIND=real_4), DIMENSION(:, :), POINTER        :: data_r\n      REAL(KIND=real_8), DIMENSION(:, :), POINTER        :: data_d\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      norm = 0.0_dp\n      CALL dbcsr_iterator_start(iter, matrix)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         SELECT CASE (dbcsr_get_data_type(matrix))\n         CASE (dbcsr_type_real_4)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_r, tr, blk)\n            norm = MAX(norm, REAL(MAXVAL(ABS(data_r)), dp))\n         CASE (dbcsr_type_real_8)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_d, tr, blk)\n            norm = MAX(norm, MAXVAL(ABS(data_d)))\n         CASE (dbcsr_type_complex_4)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_c, tr, blk)\n            norm = MAX(norm, REAL(MAXVAL(ABS(data_c)), dp))\n         CASE (dbcsr_type_complex_8)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_z, tr, blk)\n            norm = MAX(norm, MAXVAL(ABS(data_z)))\n         CASE DEFAULT\n            DBCSR_ABORT(\"Wrong data type\")\n         END SELECT\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n\n      CALL mp_max(norm, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist)))\n\n   END FUNCTION dbcsr_maxabs\n\n   FUNCTION dbcsr_frobenius_norm(matrix, local) RESULT(norm)\n      !! compute a norm of a dbcsr matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! the matrix\n      LOGICAL, INTENT(in), OPTIONAL                      :: local\n      REAL(KIND=real_8)                                  :: norm\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_frobenius_norm'\n\n      COMPLEX(KIND=real_4), DIMENSION(:, :), POINTER     :: data_c\n      COMPLEX(KIND=real_8), DIMENSION(:, :), POINTER     :: data_z\n      INTEGER                                            :: blk, col, handle, row\n      LOGICAL                                            :: any_sym, my_local, tr\n      REAL(KIND=real_4), DIMENSION(:, :), POINTER        :: data_r\n      REAL(KIND=real_8), DIMENSION(:, :), POINTER        :: data_d\n      REAL(real_8)                                       :: fac\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      my_local = .FALSE.\n      IF (PRESENT(local)) my_local = local\n\n      any_sym = dbcsr_get_matrix_type(matrix) .EQ. dbcsr_type_symmetric .OR. &\n                dbcsr_get_matrix_type(matrix) .EQ. dbcsr_type_antisymmetric\n\n      norm = 0.0_dp\n      CALL dbcsr_iterator_start(iter, matrix)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         SELECT CASE (dbcsr_get_data_type(matrix))\n         CASE (dbcsr_type_real_4)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_r, tr, blk)\n            fac = 1.0_dp\n            IF (any_sym .AND. row .NE. col) fac = 2.0_dp\n            norm = norm + fac*SUM(data_r**2)\n         CASE (dbcsr_type_real_8)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_d, tr, blk)\n            fac = 1.0_dp\n            IF (any_sym .AND. row .NE. col) fac = 2.0_dp\n            norm = norm + fac*SUM(data_d**2)\n         CASE (dbcsr_type_complex_4)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_c, tr, blk)\n            fac = 1.0_dp\n            IF (any_sym .AND. row .NE. col) &\n               DBCSR_ABORT(\"Only nonsymmetric matrix so far\")\n            norm = norm + fac*REAL(SUM(CONJG(data_c)*data_c), KIND=real_8)\n         CASE (dbcsr_type_complex_8)\n            CALL dbcsr_iterator_next_block(iter, row, col, data_z, tr, blk)\n            fac = 1.0_dp\n            IF (any_sym .AND. row .NE. col) &\n               DBCSR_ABORT(\"Only nonsymmetric matrix so far\")\n            norm = norm + fac*REAL(SUM(CONJG(data_z)*data_z), KIND=real_8)\n         CASE DEFAULT\n            DBCSR_ABORT(\"Wrong data type\")\n         END SELECT\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      IF (.NOT. my_local) CALL mp_sum(norm, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist)))\n      norm = SQRT(norm)\n\n      CALL timestop(handle)\n\n   END FUNCTION dbcsr_frobenius_norm\n\n   SUBROUTINE dbcsr_sum_replicated(matrix)\n      !! Sums blocks in a replicated dbcsr matrix, which has the same structure on all ranks.\n\n      TYPE(dbcsr_type), INTENT(inout)                    :: matrix\n         !! dbcsr matrix to operate on\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_sum_replicated'\n\n      INTEGER                                            :: handle, index_checksum, mynode, &\n                                                            numnodes\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: all_checksums\n      TYPE(dbcsr_mp_obj)                                 :: mp\n      TYPE(mp_comm_type)                                 :: comm\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      mp = dbcsr_distribution_mp(dbcsr_distribution(matrix))\n      comm = dbcsr_mp_group(mp)\n      numnodes = dbcsr_mp_numnodes(mp)\n      mynode = dbcsr_mp_mynode(mp)\n      !\n      ALLOCATE (all_checksums(numnodes))\n      CALL dbcsr_index_checksum(matrix, index_checksum)\n      CALL mp_allgather(index_checksum, all_checksums, comm)\n      !\n      IF (.NOT. ALL(all_checksums .EQ. index_checksum)) &\n         DBCSR_ABORT(\"Replicated matrices do not all have the same index structure.\")\n      !\n      SELECT CASE (dbcsr_data_get_type(matrix%data_area))\n      CASE (dbcsr_type_real_4)\n         CALL mp_sum(matrix%data_area%d%r_sp, comm)\n      CASE (dbcsr_type_real_8)\n         CALL mp_sum(matrix%data_area%d%r_dp, comm)\n      CASE (dbcsr_type_complex_4)\n         CALL mp_sum(matrix%data_area%d%c_sp, comm)\n      CASE (dbcsr_type_complex_8)\n         CALL mp_sum(matrix%data_area%d%c_dp, comm)\n      CASE default\n         DBCSR_ABORT(\"Incorrect data type\")\n      END SELECT\n      !\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_sum_replicated\n\n   FUNCTION dbcsr_block_in_limits(row, col, block_row_limits, block_column_limits)\n      !! check if a block is not in the limits\n      INTEGER, INTENT(in)                                :: row, col\n      INTEGER, DIMENSION(2), INTENT(in), OPTIONAL        :: block_row_limits, block_column_limits\n      LOGICAL                                            :: dbcsr_block_in_limits\n\n      dbcsr_block_in_limits = .TRUE.\n      IF (PRESENT(block_row_limits)) THEN\n         IF (row .LT. block_row_limits(1)) dbcsr_block_in_limits = .FALSE.\n         IF (row .GT. block_row_limits(2)) dbcsr_block_in_limits = .FALSE.\n      END IF\n      IF (PRESENT(block_column_limits)) THEN\n         IF (col .LT. block_column_limits(1)) dbcsr_block_in_limits = .FALSE.\n         IF (col .GT. block_column_limits(2)) dbcsr_block_in_limits = .FALSE.\n      END IF\n   END FUNCTION dbcsr_block_in_limits\n\n   SUBROUTINE dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, &\n                             nfullrows_total, nfullcols_total, &\n                             nblkrows_local, nblkcols_local, &\n                             nfullrows_local, nfullcols_local, &\n                             my_prow, my_pcol, &\n                             local_rows, local_cols, proc_row_dist, proc_col_dist, &\n                             row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, data_area, &\n                             matrix_type, data_type, group)\n      !! Gets information about a matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix to query\n      INTEGER, INTENT(OUT), OPTIONAL :: nblkrows_total, nblkcols_total, nfullrows_total, &\n                                        nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, &\n                                        my_prow, my_pcol\n      INTEGER, DIMENSION(:), OPTIONAL, POINTER :: local_rows, local_cols, proc_row_dist, &\n                                                  proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset\n      TYPE(dbcsr_distribution_obj), INTENT(OUT), &\n         OPTIONAL                                        :: distribution\n         !! the data distribution of the matrix\n      CHARACTER(len=*), INTENT(OUT), OPTIONAL            :: name\n         !! matrix name\n      TYPE(dbcsr_data_obj), INTENT(OUT), OPTIONAL        :: data_area\n         !! data_area\n      CHARACTER, OPTIONAL                                :: matrix_type\n         !! matrix type (regular, symmetric, see dbcsr_types.F for values)\n      INTEGER, OPTIONAL                                  :: data_type\n         !! data type (single/double precision real/complex)\n      TYPE(mp_comm_type), INTENT(OUT), OPTIONAL                     :: group\n\n!   ---------------------------------------------------------------------------\n\n      !vw avoid massive printing of warnings\n      !DBCSR_WARN(\"Invalid matrix\")\n      IF (PRESENT(nblkrows_total)) nblkrows_total = matrix%nblkrows_total\n      IF (PRESENT(nblkcols_total)) nblkcols_total = matrix%nblkcols_total\n      IF (PRESENT(nfullrows_total)) nfullrows_total = matrix%nfullrows_total\n      IF (PRESENT(nfullcols_total)) nfullcols_total = matrix%nfullcols_total\n      IF (PRESENT(nblkrows_local)) nblkrows_local = matrix%nblkrows_local\n      IF (PRESENT(nblkcols_local)) nblkcols_local = matrix%nblkcols_local\n      IF (PRESENT(nfullrows_local)) nfullrows_local = matrix%nfullrows_local\n      IF (PRESENT(nfullcols_local)) nfullcols_local = matrix%nfullcols_local\n      IF (PRESENT(row_blk_size)) row_blk_size => array_data(matrix%row_blk_size)\n      IF (PRESENT(col_blk_size)) col_blk_size => array_data(matrix%col_blk_size)\n      IF (PRESENT(row_blk_offset)) row_blk_offset => array_data(matrix%row_blk_offset)\n      IF (PRESENT(col_blk_offset)) col_blk_offset => array_data(matrix%col_blk_offset)\n      IF (PRESENT(distribution)) distribution = matrix%dist\n      IF (PRESENT(name)) name = matrix%name\n      IF (PRESENT(data_area)) data_area = matrix%data_area\n      IF (PRESENT(data_type)) data_type = matrix%data_type\n      IF (PRESENT(local_rows)) local_rows => dbcsr_distribution_local_rows(matrix%dist)\n      IF (PRESENT(local_cols)) local_cols => dbcsr_distribution_local_cols(matrix%dist)\n      IF (PRESENT(proc_row_dist)) proc_row_dist => dbcsr_distribution_row_dist(matrix%dist)\n      IF (PRESENT(proc_col_dist)) proc_col_dist => dbcsr_distribution_col_dist(matrix%dist)\n      IF (PRESENT(my_prow)) my_prow = dbcsr_mp_myprow(dbcsr_distribution_mp(matrix%dist))\n      IF (PRESENT(my_pcol)) my_pcol = dbcsr_mp_mypcol(dbcsr_distribution_mp(matrix%dist))\n      IF (PRESENT(matrix_type)) matrix_type = dbcsr_get_matrix_type(matrix)\n\n      IF (PRESENT(group)) group = dbcsr_mp_group(matrix%dist%d%mp_env) ! a shortcut\n      !IF (PRESENT(matrix_type)) THEN\n      !   matrix_type = dbcsr_get_matrix_type(matrix)\n      !   IF (matrix_type .EQ. dbcsr_type_invalid) &\n      !      DBCSR_ABORT(\"Incorrect symmetry\")\n      !ENDIF\n   END SUBROUTINE dbcsr_get_info\n\n   FUNCTION dbcsr_may_be_dense(matrix, occ_thresh) RESULT(may_be_dense)\n      !! Returns whether the matrix could be represented in a dense form\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix\n      REAL(real_8), INTENT(in)                           :: occ_thresh\n      LOGICAL                                            :: may_be_dense\n         !! use the mutable and not append-only working structures\n\n      REAL(real_8)                                       :: occ\n\n!   ---------------------------------------------------------------------------\n\n      occ = dbcsr_get_occupation(matrix)\n      may_be_dense = .NOT. (occ .LT. occ_thresh)\n      ! make sure every proc sees the same\n      CALL mp_sum(may_be_dense, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist)))\n   END FUNCTION dbcsr_may_be_dense\n\n   FUNCTION dbcsr_get_occupation(matrix) RESULT(occupation)\n      !! Returns the occupation of the matrix\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix from which to get the occupation\n      REAL(KIND=real_8)                                  :: occupation\n\n      INTEGER                                            :: nfullcols, nfullrows\n      INTEGER(KIND=int_8)                                :: nze_global\n      INTEGER, DIMENSION(:), POINTER                     :: row_blk_size\n\n      nze_global = matrix%nze\n      CALL mp_sum(nze_global, dbcsr_mp_group(dbcsr_distribution_mp(matrix%dist)))\n\n      nfullrows = dbcsr_nfullrows_total(matrix)\n      nfullcols = dbcsr_nfullcols_total(matrix)\n\n      row_blk_size => array_data(matrix%row_blk_size)\n\n      IF (nfullrows .NE. 0 .AND. nfullcols .NE. 0) THEN\n         IF (dbcsr_has_symmetry(matrix)) THEN\n            IF (2*nze_global .EQ. &\n                (INT(nfullrows, KIND=int_8)*INT(nfullrows + 1, KIND=int_8) + SUM(row_blk_size*(row_blk_size - 1)))) THEN\n               occupation = 1.0_real_8\n            ELSE\n               occupation = 2.0_real_8*REAL(nze_global, real_8)/ &\n                            (REAL(nfullrows, real_8)*REAL(nfullrows + 1, real_8) + &\n                             SUM(REAL(row_blk_size, real_8)*REAL(row_blk_size - 1, real_8)))\n            END IF\n         ELSE\n            IF (nze_global .EQ. INT(nfullrows, KIND=int_8)*INT(nfullcols, KIND=int_8)) THEN\n               occupation = 1.0_real_8\n            ELSE\n               occupation = REAL(nze_global, real_8)/(REAL(nfullrows, real_8)*REAL(nfullcols, real_8))\n            END IF\n         END IF\n      ELSE\n         occupation = 0.0_real_8\n      END IF\n   END FUNCTION dbcsr_get_occupation\n\n   SUBROUTINE dbcsr_clear(matrix)\n      !! Clear a matrix (remove all blocks)\n      TYPE(dbcsr_type), INTENT(INOUT)                       :: matrix\n      TYPE(dbcsr_type)                                      :: matrix_tmp\n\n      CALL dbcsr_create(matrix_tmp, matrix)\n      CALL dbcsr_release(matrix)\n      matrix = matrix_tmp\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_trace_sd(matrix_a, trace)\n      !! Trace of DBCSR matrices\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n         !! DBCSR matrices\n      REAL(kind=real_8), INTENT(INOUT)                   :: trace\n         !! the trace of the product of the matrices\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_trace_sd'\n\n      INTEGER                                            :: handle\n      REAL(kind=real_4)                                  :: trace_4\n\n      CALL timeset(routineN, handle)\n      IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8) THEN\n         CALL dbcsr_trace_d(matrix_a, trace)\n      ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4) THEN\n         trace_4 = 0.0_real_4\n         CALL dbcsr_trace_s(matrix_a, trace_4)\n         trace = REAL(trace_4, real_8)\n      ELSE\n         DBCSR_ABORT(\"Invalid combination of data type, NYI\")\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_trace_sd\n\n   SUBROUTINE dbcsr_dot_sd(matrix_a, matrix_b, trace)\n      !! Dot product of DBCSR matrices\n      !! \\result    the dot product of the matrices\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a, matrix_b\n         !! DBCSR matrices\n         !! DBCSR matrices\n      REAL(kind=real_8), INTENT(INOUT)                   :: trace\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_dot_sd'\n\n      INTEGER                                            :: handle\n      REAL(kind=real_4)                                  :: trace_4\n\n      CALL timeset(routineN, handle)\n      IF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_8 .AND. &\n          dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_8) THEN\n         CALL dbcsr_dot_d(matrix_a, matrix_b, trace)\n      ELSEIF (dbcsr_get_data_type(matrix_a) .EQ. dbcsr_type_real_4 .AND. &\n              dbcsr_get_data_type(matrix_b) .EQ. dbcsr_type_real_4) THEN\n         trace_4 = 0.0_real_4\n         CALL dbcsr_dot_s(matrix_a, matrix_b, trace_4)\n         trace = REAL(trace_4, real_8)\n      ELSE\n         DBCSR_ABORT(\"Invalid combination of data type, NYI\")\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_dot_sd\n\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float\n      SUBROUTINE dbcsr_trace_${nametype1}$ (matrix_a, trace)\n      !! traces a DBCSR matrix\n\n         TYPE(dbcsr_type), INTENT(IN)               :: matrix_a\n         !! DBCSR matrix\n         ${type1}$, INTENT(INOUT)                   :: trace\n         !! the trace of the matrix\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_trace_${nametype1}$'\n\n         INTEGER                                  :: a_blk, a_col, a_col_size, &\n                                                     a_nze, a_row, a_row_size, i, &\n                                                     mynode, error_handle\n         INTEGER, DIMENSION(:), POINTER           :: col_blk_size, row_blk_size, &\n                                                     row_dist, col_dist\n         ${type1}$, DIMENSION(:), POINTER           :: a_data, data_p\n         INTEGER, DIMENSION(:, :), POINTER         :: pgrid\n         TYPE(dbcsr_distribution_obj)             :: dist\n\n!   ---------------------------------------------------------------------------\n         CALL timeset(routineN, error_handle)\n\n         row_blk_size => array_data(matrix_a%row_blk_size)\n         col_blk_size => array_data(matrix_a%col_blk_size)\n         IF (dbcsr_get_data_type(matrix_a) /= ${dkind1}$) &\n            DBCSR_ABORT(\"Incompatible data types\")\n         CALL dbcsr_get_data(matrix_a%data_area, data_p)\n         dist = dbcsr_distribution(matrix_a)\n         mynode = dbcsr_mp_mynode(dbcsr_distribution_mp(dist))\n         pgrid => dbcsr_mp_pgrid(dbcsr_distribution_mp(dist))\n         row_dist => dbcsr_distribution_row_dist(dist)\n         col_dist => dbcsr_distribution_col_dist(dist)\n         !\n         ! let's go\n         trace = REAL(0.0, ${kind1}$)\n         DO a_row = 1, matrix_a%nblkrows_total\n            a_row_size = row_blk_size(a_row)\n            DO a_blk = matrix_a%row_p(a_row) + 1, matrix_a%row_p(a_row + 1)\n               IF (a_blk .EQ. 0) CYCLE\n               a_col = matrix_a%col_i(a_blk)\n               IF (a_col .ne. a_row) CYCLE\n               ! We must skip non-local blocks in a replicated matrix.\n               IF (matrix_a%replication_type .NE. dbcsr_repl_full) THEN\n                  IF (mynode .NE. checker_square_proc(a_row, a_col, pgrid, row_dist, col_dist)) &\n                     CYCLE\n               END IF\n               a_col_size = col_blk_size(a_col)\n               IF (a_row_size .NE. a_col_size) &\n                  DBCSR_ABORT(\"is that a square matrix?\")\n               a_nze = a_row_size**2\n               a_data => pointer_view(data_p, ABS(matrix_a%blk_p(a_blk)), &\n                                      ABS(matrix_a%blk_p(a_blk)) + a_nze - 1)\n               !data_a => matrix_a%data(ABS(matrix_a%blk_p(a_blk)):ABS(matrix_a%blk_p(a_blk))+a_nze-1)\n               !\n               ! let's trace the block\n               DO i = 1, a_row_size\n                  trace = trace + a_data((i - 1)*a_row_size + i)\n               END DO\n            END DO ! a_col\n         END DO ! a_row\n         !\n         ! summe\n         CALL mp_sum(trace, dbcsr_mp_group(dbcsr_distribution_mp(matrix_a%dist)))\n\n         CALL timestop(error_handle)\n      END SUBROUTINE dbcsr_trace_${nametype1}$\n\n      SUBROUTINE dbcsr_dot_${nametype1}$ (matrix_a, matrix_b, trace)\n      !! Dot product of DBCSR matrices\n\n         TYPE(dbcsr_type), INTENT(IN)               :: matrix_a, matrix_b\n         !! DBCSR matrices\n         !! DBCSR matrices\n         ${type1}$, INTENT(INOUT)                   :: trace\n         !! the trace of the product of the matrices\n\n         INTEGER :: a_blk, a_col, a_col_size, a_row_size, b_blk, b_col_size, &\n                    b_frst_blk, b_last_blk, b_row_size, nze, row, a_beg, a_end, b_beg, b_end\n         CHARACTER                                :: matrix_a_type, matrix_b_type\n         INTEGER, DIMENSION(:), POINTER           :: a_col_blk_size, &\n                                                     a_row_blk_size, &\n                                                     b_col_blk_size, b_row_blk_size\n         ${type1}$                                  :: sym_fac, fac\n         LOGICAL                                  :: found, matrix_a_symm, matrix_b_symm\n         ${type1}$, DIMENSION(:), POINTER           :: a_data, b_data\n\n!   ---------------------------------------------------------------------------\n\n         IF (matrix_a%replication_type .NE. dbcsr_repl_none &\n             .OR. matrix_b%replication_type .NE. dbcsr_repl_none) &\n            DBCSR_ABORT(\"Trace of product of replicated matrices not yet possible.\")\n\n         sym_fac = REAL(1.0, ${kind1}$)\n         matrix_a_type = dbcsr_get_matrix_type(matrix_a)\n         matrix_b_type = dbcsr_get_matrix_type(matrix_b)\n         matrix_a_symm = matrix_a_type == dbcsr_type_symmetric .OR. matrix_a_type == dbcsr_type_antisymmetric\n         matrix_b_symm = matrix_b_type == dbcsr_type_symmetric .OR. matrix_b_type == dbcsr_type_antisymmetric\n\n         IF (matrix_a_symm .AND. matrix_b_symm) sym_fac = REAL(2.0, ${kind1}$)\n\n         ! tracing a symmetric with a general matrix is not implemented, as it would require communication of blocks\n         IF (matrix_a_symm .NEQV. matrix_b_symm) &\n            DBCSR_ABORT(\"Tracing general with symmetric matrix NYI\")\n\n         a_row_blk_size => array_data(matrix_a%row_blk_size)\n         a_col_blk_size => array_data(matrix_a%col_blk_size)\n         b_row_blk_size => array_data(matrix_b%row_blk_size)\n         b_col_blk_size => array_data(matrix_b%col_blk_size)\n\n         CALL dbcsr_get_data(matrix_a%data_area, a_data)\n         CALL dbcsr_get_data(matrix_b%data_area, b_data)\n\n         ! let's go\n         trace = REAL(0.0, ${kind1}$)\n         IF (matrix_a%nblkrows_total .NE. matrix_b%nblkrows_total) &\n            DBCSR_ABORT(\"this combination of transpose is NYI\")\n         DO row = 1, matrix_a%nblkrows_total\n            a_row_size = a_row_blk_size(row)\n            b_row_size = b_row_blk_size(row)\n            IF (a_row_size .NE. b_row_size) DBCSR_ABORT(\"matrices not consistent\")\n            b_blk = matrix_b%row_p(row) + 1\n            b_frst_blk = matrix_b%row_p(row) + 1\n            b_last_blk = matrix_b%row_p(row + 1)\n            DO a_blk = matrix_a%row_p(row) + 1, matrix_a%row_p(row + 1)\n               IF (matrix_a%blk_p(a_blk) .EQ. 0) CYCLE ! Deleted block\n               a_col = matrix_a%col_i(a_blk)\n               a_col_size = a_col_blk_size(a_col)\n               !\n               ! find the b_blk we assume here that the columns are ordered !\n               CALL dbcsr_find_column(a_col, b_frst_blk, b_last_blk, matrix_b%col_i, &\n                                      matrix_b%blk_p, b_blk, found)\n               IF (found) THEN\n                  b_col_size = b_col_blk_size(a_col)\n                  IF (a_col_size .NE. b_col_size) DBCSR_ABORT(\"matrices not consistent\")\n                  !\n                  nze = a_row_size*a_col_size\n                  !\n                  IF (nze .GT. 0) THEN\n                     !\n                     ! let's trace the blocks\n                     a_beg = ABS(matrix_a%blk_p(a_blk))\n                     a_end = a_beg + nze - 1\n                     b_beg = ABS(matrix_b%blk_p(b_blk))\n                     b_end = b_beg + nze - 1\n                     fac = REAL(1.0, ${kind1}$)\n                     IF (row .NE. a_col) fac = sym_fac\n\n                     trace = trace + fac*SUM(a_data(a_beg:a_end)*b_data(b_beg:b_end))\n\n                  END IF\n               END IF\n            END DO ! a_col\n         END DO ! a_row\n         !\n         ! sum\n         CALL mp_sum(trace, dbcsr_mp_group(dbcsr_distribution_mp(matrix_a%dist)))\n\n      END SUBROUTINE dbcsr_dot_${nametype1}$\n\n      SUBROUTINE dbcsr_scale_${nametype1}$ (matrix_a, alpha_scalar, last_column)\n      !! Interface for matrix scaling by a scalar\n         TYPE(dbcsr_type), INTENT(INOUT)           :: matrix_a\n         ${type1}$, INTENT(IN)                      :: alpha_scalar\n         INTEGER, INTENT(IN), OPTIONAL            :: last_column\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_scale_${nametype1}$'\n\n         INTEGER                                  :: error_handler\n         TYPE(dbcsr_scalar_type)                  :: sc\n\n         sc = dbcsr_scalar(alpha_scalar)\n         CALL dbcsr_scalar_fill_all(sc)\n         sc%data_type = dbcsr_get_data_type(matrix_a)\n         CALL timeset(routineN, error_handler)\n         IF (PRESENT(last_column)) THEN\n            CALL dbcsr_scale_anytype(matrix_a, &\n                                     alpha_scalar=sc, &\n                                     limits=(/0, 0, 0, last_column/))\n         ELSE\n            CALL dbcsr_scale_anytype(matrix_a, alpha_scalar=sc)\n         END IF\n         CALL timestop(error_handler)\n      END SUBROUTINE dbcsr_scale_${nametype1}$\n\n      SUBROUTINE dbcsr_scale_by_vector_${nametype1}$ (matrix_a, alpha, side)\n      !! Interface for matrix scaling by a vector\n         TYPE(dbcsr_type), INTENT(INOUT)            :: matrix_a\n         ${type1}$, DIMENSION(:), INTENT(IN), TARGET, CONTIGUOUS :: alpha\n         CHARACTER(LEN=*), INTENT(IN)              :: side\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: tmp_p\n         TYPE(dbcsr_data_obj)                      :: enc_alpha_vec\n\n         CALL dbcsr_data_init(enc_alpha_vec)\n         CALL dbcsr_data_new(enc_alpha_vec, ${dkind1}$)\n         tmp_p => alpha\n         CALL dbcsr_data_set_pointer(enc_alpha_vec, tmp_p)\n         CALL dbcsr_scale_by_vector_anytype(matrix_a, enc_alpha_vec, side)\n         CALL dbcsr_data_clear_pointer(enc_alpha_vec)\n         CALL dbcsr_data_release(enc_alpha_vec)\n      END SUBROUTINE dbcsr_scale_by_vector_${nametype1}$\n\n      SUBROUTINE dbcsr_set_${nametype1}$ (matrix, alpha)\n      !! Interface for dbcsr_set\n         TYPE(dbcsr_type), INTENT(INOUT)           :: matrix\n         ${type1}$, INTENT(IN)                      :: alpha\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_set'\n\n         INTEGER                                            :: col, handle, row\n         TYPE(dbcsr_iterator)                               :: iter\n         ${type1}$, DIMENSION(:, :), POINTER                   :: block\n         LOGICAL                                            :: tr\n\n         CALL timeset(routineN, handle)\n\n         IF (alpha == ${zero1[n]}$) THEN\n            CALL dbcsr_zero(matrix)\n         ELSE\n            IF (dbcsr_get_data_type(matrix) /= ${dkind1}$) &\n               DBCSR_ABORT(\"Incompatible data types\")\n\n            !TODO: could be speedup by direct assignment to data_area, similar to dbcsr_zero()\n            CALL dbcsr_iterator_start(iter, matrix)\n            DO WHILE (dbcsr_iterator_blocks_left(iter))\n               CALL dbcsr_iterator_next_block(iter, row, col, block, tr)\n               block(:, :) = alpha\n            END DO\n            CALL dbcsr_iterator_stop(iter)\n         END IF\n\n         CALL timestop(handle)\n      END SUBROUTINE dbcsr_set_${nametype1}$\n\n      SUBROUTINE dbcsr_filter_${nametype1}$ (matrix, eps, method, use_absolute, &\n                                             filter_diag)\n         TYPE(dbcsr_type), INTENT(INOUT)           :: matrix\n         ${type1}$, INTENT(IN)                      :: eps\n         INTEGER, INTENT(IN), OPTIONAL            :: method\n         LOGICAL, INTENT(in), OPTIONAL            :: use_absolute, filter_diag\n         CALL dbcsr_filter_anytype(matrix, dbcsr_scalar(eps), method, &\n                                   use_absolute, filter_diag)\n      END SUBROUTINE dbcsr_filter_${nametype1}$\n\n      SUBROUTINE dbcsr_set_diag_${nametype1}$ (matrix, diag)\n         TYPE(dbcsr_type), INTENT(INOUT)            :: matrix\n         ${type1}$, DIMENSION(:), INTENT(IN)          :: diag\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_set_diag'\n\n         INTEGER                                            :: icol, irow, row_offset, handle, i\n         LOGICAL                                            :: tr\n         TYPE(dbcsr_iterator)                               :: iter\n         ${type1}$, DIMENSION(:, :), POINTER                   :: block\n\n         CALL timeset(routineN, handle)\n\n         IF (dbcsr_get_data_type(matrix) /= ${dkind1}$) &\n            DBCSR_ABORT(\"Incompatible data types\")\n\n         IF (dbcsr_nfullrows_total(matrix) /= SIZE(diag)) &\n            DBCSR_ABORT(\"Diagonal has wrong size\")\n\n         IF (.NOT. array_equality(matrix%row_blk_offset, matrix%col_blk_offset)) &\n            DBCSR_ABORT(\"matrix not quadratic\")\n\n         CALL dbcsr_iterator_start(iter, matrix)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, irow, icol, block, tr, row_offset=row_offset)\n            IF (irow /= icol) CYCLE\n\n            IF (sIZE(block, 1) /= sIZE(block, 2)) &\n               DBCSR_ABORT(\"Diagonal block non-squared\")\n\n            DO i = 1, sIZE(block, 1)\n               block(i, i) = diag(row_offset + i - 1)\n            END DO\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n\n         CALL timestop(handle)\n      END SUBROUTINE dbcsr_set_diag_${nametype1}$\n\n      SUBROUTINE dbcsr_get_diag_${nametype1}$ (matrix, diag)\n         TYPE(dbcsr_type), INTENT(IN)               :: matrix\n         ${type1}$, DIMENSION(:), INTENT(OUT)         :: diag\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_get_diag'\n\n         INTEGER                                            :: icol, irow, row_offset, handle, i\n         LOGICAL                                            :: tr\n         TYPE(dbcsr_iterator)                               :: iter\n         ${type1}$, DIMENSION(:, :), POINTER                   :: block\n\n         CALL timeset(routineN, handle)\n\n         IF (dbcsr_get_data_type(matrix) /= ${dkind1}$) &\n            DBCSR_ABORT(\"Incompatible data types\")\n\n         IF (dbcsr_nfullrows_total(matrix) /= SIZE(diag)) &\n            DBCSR_ABORT(\"Diagonal has wrong size\")\n\n         IF (.NOT. array_equality(matrix%row_blk_offset, matrix%col_blk_offset)) &\n            DBCSR_ABORT(\"matrix not quadratic\")\n\n         diag(:) = ${zero1[n]}$\n\n         CALL dbcsr_iterator_start(iter, matrix)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, irow, icol, block, tr, row_offset=row_offset)\n            IF (irow /= icol) CYCLE\n\n            IF (sIZE(block, 1) /= sIZE(block, 2)) &\n               DBCSR_ABORT(\"Diagonal block non-squared\")\n\n            DO i = 1, sIZE(block, 1)\n               diag(row_offset + i - 1) = block(i, i)\n            END DO\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n\n         CALL timestop(handle)\n      END SUBROUTINE dbcsr_get_diag_${nametype1}$\n\n      SUBROUTINE dbcsr_add_on_diag_${nametype1}$ (matrix, alpha)\n      !! add a constant to the diagonal of a matrix\n\n         TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! DBCSR matrix\n         ${type1}$, INTENT(IN)                                :: alpha\n         !! scalar\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_on_diag'\n\n         INTEGER                                            :: handle, mynode, node, irow, i, row_size\n         LOGICAL                                            :: found, tr\n         ${type1}$, DIMENSION(:, :), POINTER                   :: block\n\n         CALL timeset(routineN, handle)\n\n         IF (dbcsr_get_data_type(matrix) /= ${dkind1}$) &\n            DBCSR_ABORT(\"Incompatible data types\")\n\n         IF (.NOT. array_equality(matrix%row_blk_offset, matrix%col_blk_offset)) &\n            DBCSR_ABORT(\"matrix not quadratic\")\n\n         mynode = dbcsr_mp_mynode(dbcsr_distribution_mp(dbcsr_distribution(matrix)))\n\n         CALL dbcsr_work_create(matrix, work_mutable=.TRUE.)\n\n         DO irow = 1, dbcsr_nblkrows_total(matrix)\n            CALL dbcsr_get_stored_coordinates(matrix, irow, irow, node)\n            IF (node /= mynode) CYCLE\n\n            CALL dbcsr_get_block_p(matrix, irow, irow, block, tr, found, row_size=row_size)\n            IF (.NOT. found) THEN\n               ALLOCATE (block(row_size, row_size))\n               block(:, :) = ${zero1[n]}$\n            END IF\n\n            DO i = 1, row_size\n               block(i, i) = block(i, i) + alpha\n            END DO\n\n            IF (.NOT. found) THEN\n               CALL dbcsr_put_block(matrix, irow, irow, block)\n               DEALLOCATE (block)\n            END IF\n         END DO\n\n         CALL dbcsr_finalize(matrix)\n         CALL timestop(handle)\n      END SUBROUTINE dbcsr_add_on_diag_${nametype1}$\n\n      SUBROUTINE dbcsr_update_contiguous_blocks_${nametype1}$ (matrix_a, matrix_b, first_lb_a, first_lb_b, nze, &\n                                                               do_scale, my_beta_scalar, found, iw)\n      !! Low level function to sum contiguous chunks of blocks of the matrices (matrix_a = matrix_a + beta*matrix_b)\n\n         TYPE(dbcsr_type), INTENT(INOUT)                         :: matrix_a\n         !! DBCSR matrix\n         TYPE(dbcsr_type), INTENT(IN)                            :: matrix_b\n         !! DBCSR matrix\n         TYPE(dbcsr_scalar_type), INTENT(IN)                     :: my_beta_scalar\n         INTEGER, INTENT(IN)                                     :: first_lb_a, first_lb_b, nze, iw\n         LOGICAL, INTENT(IN)                                     :: found, do_scale\n\n         INTEGER                                                 :: ub_a, ub_b\n\n         ub_a = first_lb_a + nze - 1\n         ub_b = first_lb_b + nze - 1\n\n         IF (found) THEN\n            IF (do_scale) THEN\n               CALL ${nametype1}$axpy(nze, my_beta_scalar%${base1}$_${prec1}$, &\n                                      matrix_b%data_area%d%${base1}$_${prec1}$ (first_lb_b:ub_b), 1, &\n                                      matrix_a%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a), 1)\n            ELSE\n               matrix_a%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a) = &\n                  matrix_a%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a) + &\n                  matrix_b%data_area%d%${base1}$_${prec1}$ (first_lb_b:ub_b)\n            END IF\n         ELSE\n            IF (do_scale) THEN\n               matrix_a%wms(iw)%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a) = &\n                  my_beta_scalar%${base1}$_${prec1}$* &\n                  matrix_b%data_area%d%${base1}$_${prec1}$ (first_lb_b:ub_b)\n            ELSE\n               matrix_a%wms(iw)%data_area%d%${base1}$_${prec1}$ (first_lb_a:ub_a) = &\n                  matrix_b%data_area%d%${base1}$_${prec1}$ (first_lb_b:ub_b)\n            END IF\n         END IF\n      END SUBROUTINE dbcsr_update_contiguous_blocks_${nametype1}$\n\n      SUBROUTINE dbcsr_add_anytype_${nametype1}$ (matrix_a, matrix_b, iter, iw, do_scale, &\n                                                  my_beta_scalar, my_flop)\n      !! Low level function to sum two matrices (matrix_a = matrix_a + beta*matrix_b\n\n         TYPE(dbcsr_type), INTENT(INOUT)                         :: matrix_a\n         !! DBCSR matrix\n         TYPE(dbcsr_type), INTENT(IN)                            :: matrix_b\n         !! DBCSR matrix\n         TYPE(dbcsr_iterator), INTENT(INOUT)                     :: iter\n         INTEGER, INTENT(IN)                                     :: iw\n         LOGICAL, INTENT(IN)                                     :: do_scale\n         TYPE(dbcsr_scalar_type), INTENT(IN)                     :: my_beta_scalar\n         INTEGER(KIND=int_8), INTENT(INOUT)                      :: my_flop\n\n         INTEGER                                                 :: row, col, row_size, col_size, &\n                                                                    nze, tot_nze, blk, &\n                                                                    lb_a, first_lb_a, lb_a_val, &\n                                                                    lb_b, first_lb_b\n         INTEGER, DIMENSION(2)                                   :: lb_row_blk\n         LOGICAL                                                 :: was_found, found, tr\n\n         ! some start values\n         lb_row_blk(:) = 0\n         first_lb_a = matrix_a%wms(iw)%datasize + 1\n         first_lb_b = 0\n         tot_nze = 0\n         !\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, blk, tr, lb_b, row_size, col_size)\n            nze = row_size*col_size\n            IF (nze .LE. 0) CYCLE\n            IF (lb_row_blk(1) .LT. row) THEN\n               lb_row_blk(1) = row\n               lb_row_blk(2) = matrix_a%row_p(row) + 1\n            END IF\n            ! get b-block index\n            lb_b = ABS(lb_b)\n            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)\n            lb_row_blk(2) = blk + 1\n            ! get index of a-block lb_a whether found (from matrix_a) or not (from workspace array)\n            IF (found) THEN\n               my_flop = my_flop + nze*2\n               lb_a = ABS(matrix_a%blk_p(blk))\n            ELSE\n               lb_a = matrix_a%wms(iw)%datasize + 1\n               lb_a_val = lb_a\n               IF (tr) lb_a_val = -lb_a\n               matrix_a%wms(iw)%lastblk = matrix_a%wms(iw)%lastblk + 1\n               matrix_a%wms(iw)%row_i(matrix_a%wms(iw)%lastblk) = row\n               matrix_a%wms(iw)%col_i(matrix_a%wms(iw)%lastblk) = col\n               matrix_a%wms(iw)%blk_p(matrix_a%wms(iw)%lastblk) = lb_a_val\n               matrix_a%wms(iw)%datasize = matrix_a%wms(iw)%datasize + nze\n            END IF\n            ! at the first iteration we skip this and go directly to initialization after\n            IF (first_lb_b .NE. 0) THEN\n               ! if found status is the same as before then probably we are in contiguous blocks\n               IF ((found .EQV. was_found) .AND. &\n                   (first_lb_b + tot_nze .EQ. lb_b) .AND. &\n                   (first_lb_a + tot_nze) .EQ. lb_a) THEN\n                  tot_nze = tot_nze + nze\n                  CYCLE\n               END IF\n               ! save block chunk\n               CALL dbcsr_update_contiguous_blocks_${nametype1}$ (matrix_a, matrix_b, first_lb_a, first_lb_b, tot_nze, &\n                                                                  do_scale, my_beta_scalar, was_found, iw)\n            END IF\n            !\n            first_lb_a = lb_a\n            first_lb_b = lb_b\n            tot_nze = nze\n            was_found = found\n         END DO\n\n         ! save the last block or chunk of blocks\n         IF (first_lb_b .NE. 0) THEN\n            call dbcsr_update_contiguous_blocks_${nametype1}$ (matrix_a, matrix_b, first_lb_a, first_lb_b, tot_nze, &\n                                                               do_scale, my_beta_scalar, was_found, iw)\n         END IF\n\n      END SUBROUTINE dbcsr_add_anytype_${nametype1}$\n   #:endfor\n\nEND MODULE dbcsr_operations\n"
  },
  {
    "path": "src/ops/dbcsr_test_methods.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_test_methods\n   !! Tests for CP2K DBCSR operations\n   USE dbcsr_blas_operations, ONLY: dbcsr_lapack_larnv, &\n                                    set_larnv_seed\n   USE dbcsr_block_access, ONLY: dbcsr_put_block\n   USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, &\n                                     dbcsr_block_partial_copy, &\n                                     dbcsr_block_scale, &\n                                     dbcsr_block_transpose, &\n                                     dbcsr_data_clear, &\n                                     dbcsr_data_set\n   USE dbcsr_data_methods, ONLY: &\n      dbcsr_data_clear_pointer, dbcsr_data_get_sizes, dbcsr_data_get_type, dbcsr_data_init, &\n      dbcsr_data_new, dbcsr_data_release, dbcsr_scalar, dbcsr_scalar_negative, dbcsr_scalar_one, &\n      dbcsr_type_1d_to_2d, dbcsr_type_2d_to_1d\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_hold, &\n                                 dbcsr_distribution_mp, &\n                                 dbcsr_distribution_new, &\n                                 dbcsr_distribution_release\n   USE dbcsr_dist_operations, ONLY: dbcsr_get_stored_coordinates\n   USE dbcsr_dist_util, ONLY: dbcsr_verify_matrix\n   USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, &\n                                        dbcsr_iterator_next_block, &\n                                        dbcsr_iterator_start, &\n                                        dbcsr_iterator_stop\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_8, &\n                          real_4, &\n                          real_8\n   USE dbcsr_methods, ONLY: dbcsr_get_matrix_type, &\n                            dbcsr_max_col_size, &\n                            dbcsr_max_row_size, &\n                            dbcsr_nblkcols_total, &\n                            dbcsr_nblkrows_total, &\n                            dbcsr_nfullcols_total, &\n                            dbcsr_nfullrows_total\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_mynode, &\n                               dbcsr_mp_new, &\n                               dbcsr_mp_numnodes, &\n                               dbcsr_mp_release\n   USE dbcsr_mpiwrap, ONLY: mp_comm_null, &\n                            mp_environ, mp_comm_type\n   USE dbcsr_ptr_util, ONLY: ensure_array_size\n   USE dbcsr_types, ONLY: &\n      dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_iterator, dbcsr_mp_obj, dbcsr_scalar_type, &\n      dbcsr_type, dbcsr_type_antihermitian, dbcsr_type_antisymmetric, dbcsr_type_complex_4, &\n      dbcsr_type_complex_8, dbcsr_type_hermitian, dbcsr_type_no_symmetry, dbcsr_type_real_4, &\n      dbcsr_type_real_8, dbcsr_type_real_default, dbcsr_type_symmetric\n   USE dbcsr_work_operations, ONLY: dbcsr_create, &\n                                    dbcsr_finalize, &\n                                    dbcsr_work_create\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC :: dbcsr_to_dense_local, dbcsr_impose_sparsity\n   PUBLIC :: dbcsr_random_dist, dbcsr_make_random_matrix, &\n             dbcsr_make_random_block_sizes, compx_to_dbcsr_scalar, &\n             dbcsr_reset_randmat_seed\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_test_methods'\n\n   INTEGER, PRIVATE, SAVE :: randmat_counter = 0\n   INTEGER, PARAMETER, PRIVATE :: rand_seed_init = 12341313\n\nCONTAINS\n\n   SUBROUTINE dbcsr_reset_randmat_seed()\n      !! Reset the seed used for generating random matrices to default value\n      randmat_counter = rand_seed_init\n   END SUBROUTINE\n\n   FUNCTION compx_to_dbcsr_scalar(z, data_type) RESULT(res)\n      COMPLEX(real_8)                                    :: z\n      INTEGER                                            :: data_type\n      TYPE(dbcsr_scalar_type)                            :: res\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         res = dbcsr_scalar(REAL(z, kind=real_4))\n      CASE (dbcsr_type_real_8)\n         res = dbcsr_scalar(REAL(z, kind=real_8))\n      CASE (dbcsr_type_complex_4)\n         res = dbcsr_scalar(CMPLX(z, kind=real_4))\n      CASE (dbcsr_type_complex_8)\n         res = dbcsr_scalar(z)\n      END SELECT\n\n   END FUNCTION compx_to_dbcsr_scalar\n\n   SUBROUTINE dbcsr_impose_sparsity(sparse, dense)\n      !! Impose sparsity on a dense matrix based on a dbcsr\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: sparse\n         !! sparse matrix\n      TYPE(dbcsr_data_obj), INTENT(inout)                :: dense\n         !! dense matrix Take into account the symmetry of the sparse matrix. The dense matrix need to be valid. The operation is\n         !! done locally.\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_impose_sparsity'\n\n      CHARACTER                                          :: symm\n      INTEGER                                            :: blk, col, col_offset, col_size, &\n                                                            data_type, dense_col_size, &\n                                                            dense_row_size, handle, row, &\n                                                            row_offset, row_size\n      LOGICAL                                            :: valid\n      TYPE(dbcsr_data_obj)                               :: tmp\n      TYPE(dbcsr_iterator)                               :: iter\n\n      CALL timeset(routineN, handle)\n\n      CALL dbcsr_data_get_sizes(dense, dense_row_size, dense_col_size, valid)\n      IF (.NOT. valid) &\n         DBCSR_ABORT(\"dense matrix not valid\")\n      data_type = dbcsr_data_get_type(dense)\n      symm = dbcsr_get_matrix_type(sparse)\n\n      CALL dbcsr_data_init(tmp)\n      CALL dbcsr_data_new(tmp, dbcsr_type_1d_to_2d(data_type), data_size=dense_row_size, &\n                          data_size2=dense_col_size)\n      CALL dbcsr_data_set(dst=tmp, lb=1, data_size=dense_row_size, src=dense, source_lb=1, &\n                          lb2=1, data_size2=dense_col_size, source_lb2=1)\n      CALL dbcsr_data_clear(dense)\n\n      CALL dbcsr_iterator_start(iter, sparse)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, blk, &\n                                        row_size=row_size, col_size=col_size, &\n                                        row_offset=row_offset, col_offset=col_offset)\n         CALL dbcsr_block_partial_copy( &\n            dst=dense, &\n            dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.FALSE., &\n            dst_r_lb=row_offset, dst_c_lb=col_offset, &\n            src=tmp, &\n            src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., &\n            src_r_lb=row_offset, src_c_lb=col_offset, &\n            nrow=row_size, ncol=col_size)\n         IF (symm .NE. dbcsr_type_no_symmetry) THEN\n            SELECT CASE (symm)\n            CASE (dbcsr_type_symmetric)\n               CALL dbcsr_block_partial_copy( &\n                  dst=dense, &\n                  dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., &\n                  dst_r_lb=row_offset, dst_c_lb=col_offset, &\n                  src=tmp, &\n                  src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., &\n                  src_r_lb=row_offset, src_c_lb=col_offset, &\n                  nrow=row_size, ncol=col_size)\n            CASE (dbcsr_type_antisymmetric)\n               CALL dbcsr_block_partial_copy( &\n                  dst=dense, &\n                  dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., &\n                  dst_r_lb=row_offset, dst_c_lb=col_offset, &\n                  src=tmp, &\n                  src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., &\n                  src_r_lb=row_offset, src_c_lb=col_offset, &\n                  nrow=row_size, ncol=col_size)\n               CALL dbcsr_block_scale(dense, dbcsr_scalar_negative(dbcsr_scalar_one( &\n                                                                   dbcsr_type_2d_to_1d(data_type))), &\n                                      row_size=col_size, col_size=row_size, &\n                                      lb=col_offset, lb2=row_offset)\n            CASE (dbcsr_type_hermitian)\n               CALL dbcsr_block_partial_copy( &\n                  dst=dense, &\n                  dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., &\n                  dst_r_lb=row_offset, dst_c_lb=col_offset, &\n                  src=tmp, &\n                  src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., &\n                  src_r_lb=row_offset, src_c_lb=col_offset, &\n                  nrow=row_size, ncol=col_size)\n               CALL dbcsr_block_conjg(dense, row_size=col_size, col_size=row_size, &\n                                      lb=col_offset, lb2=row_offset)\n            CASE (dbcsr_type_antihermitian)\n               CALL dbcsr_block_partial_copy( &\n                  dst=dense, &\n                  dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., &\n                  dst_r_lb=row_offset, dst_c_lb=col_offset, &\n                  src=tmp, &\n                  src_rs=dense_row_size, src_cs=dense_col_size, src_tr=.FALSE., &\n                  src_r_lb=row_offset, src_c_lb=col_offset, &\n                  nrow=row_size, ncol=col_size)\n               CALL dbcsr_block_scale(dense, dbcsr_scalar_negative(dbcsr_scalar_one( &\n                                                                   dbcsr_type_2d_to_1d(data_type))), &\n                                      row_size=col_size, col_size=row_size, &\n                                      lb=col_offset, lb2=row_offset)\n               CALL dbcsr_block_conjg(dense, row_size=col_size, col_size=row_size, &\n                                      lb=col_offset, lb2=row_offset)\n            CASE DEFAULT\n               DBCSR_ABORT(\"wrong matrix symmetry\")\n            END SELECT\n         END IF\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n\n      CALL dbcsr_data_release(tmp)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_impose_sparsity\n\n   SUBROUTINE dbcsr_to_dense_local(sparse, dense)\n      !! Convert a sparse matrix to a dense matrix\n\n      TYPE(dbcsr_type), INTENT(in)                       :: sparse\n         !! sparse matrix\n      TYPE(dbcsr_data_obj), INTENT(inout)                :: dense\n         !! dense matrix Take into account the symmetry of the sparse matrix. The dense matrix need to be valid. The operation is\n         !! done locally.\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_to_dense_local'\n\n      CHARACTER                                          :: symm\n      INTEGER                                            :: col, col_offset, col_size, data_type, &\n                                                            dense_col_size, dense_row_size, &\n                                                            handle, row, row_offset, row_size\n      LOGICAL                                            :: tr, valid\n      TYPE(dbcsr_data_obj)                               :: block\n      TYPE(dbcsr_iterator)                               :: iter\n\n      CALL timeset(routineN, handle)\n\n      CALL dbcsr_data_get_sizes(dense, dense_row_size, dense_col_size, valid)\n      IF (.NOT. valid) &\n         DBCSR_ABORT(\"dense matrix not valid\")\n\n      symm = dbcsr_get_matrix_type(sparse)\n      data_type = dbcsr_data_get_type(dense)\n\n      CALL dbcsr_data_clear(dense)\n      CALL dbcsr_data_init(block)\n      CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type))\n      CALL dbcsr_iterator_start(iter, sparse)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, block, tr, &\n                                        row_size=row_size, col_size=col_size, &\n                                        row_offset=row_offset, col_offset=col_offset)\n         CALL dbcsr_block_partial_copy(dst=dense, &\n                                       dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.FALSE., &\n                                       dst_r_lb=row_offset, dst_c_lb=col_offset, &\n                                       src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, &\n                                       src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size)\n         IF (symm .NE. dbcsr_type_no_symmetry .AND. row .NE. col) THEN\n            SELECT CASE (symm)\n            CASE (dbcsr_type_symmetric)\n               CALL dbcsr_block_partial_copy(dst=dense, &\n                                             dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., &\n                                             dst_r_lb=row_offset, dst_c_lb=col_offset, &\n                                             src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, &\n                                             src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size)\n            CASE (dbcsr_type_antisymmetric)\n               CALL dbcsr_block_partial_copy(dst=dense, &\n                                             dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., &\n                                             dst_r_lb=row_offset, dst_c_lb=col_offset, &\n                                             src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, &\n                                             src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size)\n               CALL dbcsr_block_scale(dense, dbcsr_scalar_negative(dbcsr_scalar_one( &\n                                                                   dbcsr_type_2d_to_1d(data_type))), &\n                                      row_size=col_size, col_size=row_size, &\n                                      lb=col_offset, lb2=row_offset)\n            CASE (dbcsr_type_hermitian)\n               CALL dbcsr_block_partial_copy(dst=dense, &\n                                             dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., &\n                                             dst_r_lb=row_offset, dst_c_lb=col_offset, &\n                                             src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, &\n                                             src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size)\n               CALL dbcsr_block_conjg(dense, row_size=col_size, col_size=row_size, &\n                                      lb=col_offset, lb2=row_offset)\n            CASE (dbcsr_type_antihermitian)\n               CALL dbcsr_block_partial_copy(dst=dense, &\n                                             dst_rs=dense_row_size, dst_cs=dense_col_size, dst_tr=.TRUE., &\n                                             dst_r_lb=row_offset, dst_c_lb=col_offset, &\n                                             src=block, src_rs=row_size, src_cs=col_size, src_tr=tr, &\n                                             src_r_lb=1, src_c_lb=1, nrow=row_size, ncol=col_size)\n               CALL dbcsr_block_scale(dense, dbcsr_scalar_negative(dbcsr_scalar_one( &\n                                                                   dbcsr_type_2d_to_1d(data_type))), &\n                                      row_size=col_size, col_size=row_size, &\n                                      lb=col_offset, lb2=row_offset)\n               CALL dbcsr_block_conjg(dense, row_size=col_size, col_size=row_size, &\n                                      lb=col_offset, lb2=row_offset)\n            CASE DEFAULT\n               DBCSR_ABORT(\"wrong matrix symmetry\")\n            END SELECT\n         END IF\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(block)\n      CALL dbcsr_data_release(block)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_to_dense_local\n\n   SUBROUTINE dbcsr_random_dist(dist_array, dist_size, nbins)\n      INTEGER, DIMENSION(:), INTENT(out), POINTER        :: dist_array\n      INTEGER, INTENT(in)                                :: dist_size, nbins\n\n      INTEGER                                            :: i\n\n      ALLOCATE (dist_array(dist_size))\n      !CALL RANDOM_NUMBER (dist_array)\n      DO i = 1, dist_size\n         dist_array(i) = MODULO(nbins - i, nbins)\n      END DO\n   END SUBROUTINE dbcsr_random_dist\n\n   SUBROUTINE dbcsr_make_random_matrix(matrix, row_blk_sizes, col_blk_sizes, &\n                                       name, sparsity, mp_group, data_type, symmetry, dist)\n      !! Creates a random matrix.\n      TYPE(dbcsr_type), INTENT(out)                      :: matrix\n      INTEGER, DIMENSION(:), INTENT(INOUT), POINTER, CONTIGUOUS :: row_blk_sizes, col_blk_sizes\n      CHARACTER(len=*), INTENT(in)                       :: name\n      REAL(kind=real_8), INTENT(in)                      :: sparsity\n      TYPE(mp_comm_type), INTENT(in)                     :: mp_group\n      INTEGER, INTENT(in), OPTIONAL                      :: data_type\n      CHARACTER, INTENT(in), OPTIONAL                    :: symmetry\n      TYPE(dbcsr_distribution_obj), INTENT(IN), OPTIONAL :: dist\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_random_matrix'\n\n      CHARACTER                                          :: my_symmetry\n      INTEGER                                            :: col, error_handle, max_nze, &\n                                                            my_data_type, my_proc, ncol, nrow, &\n                                                            numproc, nze, p, row, s_col, s_row\n      INTEGER(KIND=int_8)                                :: counter, ele, increment, nmax\n      INTEGER, DIMENSION(4)                              :: iseed, jseed\n      LOGICAL                                            :: tr\n      REAL(kind=real_8)                                  :: my_sparsity\n      REAL(kind=real_8), DIMENSION(1)                    :: value\n      TYPE(dbcsr_data_obj)                               :: data_values, data_values_tr\n      TYPE(dbcsr_distribution_obj)                       :: new_dist\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      ! Check that the counter was initialised (or has not overflowed)\n      DBCSR_ASSERT(randmat_counter .NE. 0)\n      ! the counter goes into the seed. Every new call gives a new random matrix\n      randmat_counter = randmat_counter + 1\n      ! Create the matrix\n      IF (PRESENT(dist)) THEN\n         new_dist = dist\n         CALL dbcsr_distribution_hold(new_dist)\n      ELSE\n         CALL dbcsr_make_null_dist(new_dist, SIZE(row_blk_sizes), &\n                                   SIZE(col_blk_sizes), group=mp_group)\n      END IF\n      my_data_type = dbcsr_type_real_default\n      IF (PRESENT(data_type)) my_data_type = data_type\n      my_symmetry = dbcsr_type_no_symmetry\n      IF (PRESENT(symmetry)) my_symmetry = symmetry\n      CALL dbcsr_create(matrix, name, &\n                        new_dist, my_symmetry, &\n                        row_blk_sizes, &\n                        col_blk_sizes, &\n                        data_type=my_data_type)\n      numproc = dbcsr_mp_numnodes(dbcsr_distribution_mp(new_dist))\n      my_proc = dbcsr_mp_mynode(dbcsr_distribution_mp(new_dist))\n      !\n      IF (sparsity .GT. 1) THEN\n         my_sparsity = sparsity/100.0\n      ELSE\n         my_sparsity = sparsity\n      END IF\n      CALL dbcsr_work_create(matrix, &\n                             nblks_guess=INT(REAL(dbcsr_nblkrows_total(matrix), KIND=dp) &\n                                             *REAL(dbcsr_nblkcols_total(matrix), KIND=dp) &\n                                             *(1.0_dp - sparsity)*1.1_dp/numproc), &\n                             sizedata_guess=INT(REAL(dbcsr_nfullrows_total(matrix), KIND=dp) &\n                                                *REAL(dbcsr_nfullcols_total(matrix), KIND=dp) &\n                                                *(1.0_dp - sparsity)*1.1_dp/numproc), &\n                             work_mutable=.TRUE.)\n\n      max_nze = dbcsr_max_row_size(matrix)*dbcsr_max_col_size(matrix)\n      CALL dbcsr_data_init(data_values)\n      CALL dbcsr_data_new(data_values, my_data_type, data_size=max_nze)\n      CALL dbcsr_data_init(data_values_tr)\n      CALL dbcsr_data_new(data_values_tr, my_data_type, data_size=max_nze)\n\n      nrow = dbcsr_nblkrows_total(matrix)\n      ncol = dbcsr_nblkcols_total(matrix)\n      nmax = INT(nrow, KIND=int_8)*INT(ncol, KIND=int_8)\n      ele = -1\n      counter = 0\n      CALL set_larnv_seed(7, 42, 3, 42, randmat_counter, jseed)\n\n      DO\n         ! find the next block to add, this is given by a geometrically distributed variable\n         ! we number the blocks of the matrix and jump to the next one\n         CALL dlarnv(1, jseed, 1, value)\n         IF (my_sparsity > 0) THEN\n            increment = 1 + FLOOR(LOG(value(1))/LOG(my_sparsity), KIND=int_8)\n         ELSE\n            increment = 1\n         END IF\n         ele = ele + increment\n         IF (ele >= nmax) EXIT\n         counter = counter + 1\n         row = INT(ele/ncol) + 1\n         col = INT(MOD(ele, INT(ncol, KIND=KIND(ele)))) + 1\n\n         ! build the upper matrix if some symmetry, and only deal with the local blocks.\n         s_row = row; s_col = col\n         IF (PRESENT(dist)) THEN\n            tr = .FALSE.\n            CALL dbcsr_get_stored_coordinates(matrix, s_row, s_col, p)\n            IF (my_symmetry .NE. dbcsr_type_no_symmetry .AND. s_col .LT. s_row) CYCLE\n            IF (p .NE. my_proc) CYCLE\n         ELSE\n            IF (my_symmetry .NE. dbcsr_type_no_symmetry .AND. s_col .LT. s_row) CYCLE\n         END IF\n         IF (.NOT. PRESENT(dist) .AND. my_proc .NE. 0) CYCLE\n\n         ! fill based on a block based seed, makes this the same values in parallel\n         CALL set_larnv_seed(row, nrow, col, ncol, randmat_counter, iseed)\n         nze = row_blk_sizes(s_row)*col_blk_sizes(s_col)\n         CALL dbcsr_lapack_larnv(1, iseed, nze, data_values)\n         CALL dbcsr_put_block(matrix, s_row, s_col, data_values)\n         IF (my_symmetry .NE. dbcsr_type_no_symmetry .AND. s_col .EQ. s_row) THEN\n            SELECT CASE (my_symmetry)\n            CASE (dbcsr_type_symmetric)\n               CALL dbcsr_block_transpose(data_values_tr, data_values, &\n                                          row_size=row_blk_sizes(s_row), col_size=col_blk_sizes(s_col), lb=1, source_lb=1)\n            CASE (dbcsr_type_antisymmetric)\n               CALL dbcsr_block_transpose(data_values_tr, data_values, &\n                                          row_size=row_blk_sizes(s_row), col_size=col_blk_sizes(s_col), lb=1, source_lb=1, &\n                                          scale=dbcsr_scalar_negative(dbcsr_scalar_one(my_data_type)))\n            CASE (dbcsr_type_hermitian)\n               CALL dbcsr_block_transpose(data_values_tr, data_values, &\n                                          row_size=row_blk_sizes(s_row), col_size=col_blk_sizes(s_col), lb=1, source_lb=1)\n               CALL dbcsr_block_conjg(data_values_tr, row_size=col_blk_sizes(s_col), col_size=row_blk_sizes(s_row), &\n                                      lb=1)\n            CASE (dbcsr_type_antihermitian)\n               CALL dbcsr_block_transpose(data_values_tr, data_values, &\n                                          row_size=row_blk_sizes(s_row), col_size=col_blk_sizes(s_col), lb=1, source_lb=1, &\n                                          scale=dbcsr_scalar_negative(dbcsr_scalar_one(my_data_type)))\n               CALL dbcsr_block_conjg(data_values_tr, row_size=col_blk_sizes(s_col), col_size=row_blk_sizes(s_row), &\n                                      lb=1)\n            CASE DEFAULT\n               DBCSR_ABORT(\"wrong matrix symmetry\")\n            END SELECT\n            CALL dbcsr_put_block(matrix, s_row, s_col, data_values_tr, summation=.TRUE.)\n         END IF\n      END DO\n\n      CALL dbcsr_data_release(data_values)\n      CALL dbcsr_data_release(data_values_tr)\n\n      CALL dbcsr_distribution_release(new_dist)\n      CALL dbcsr_finalize(matrix)\n      CALL dbcsr_verify_matrix(matrix)\n      !\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_make_random_matrix\n\n   SUBROUTINE dbcsr_make_random_block_sizes(block_sizes, size_sum, size_mix)\n      INTEGER, DIMENSION(:), INTENT(out), POINTER        :: block_sizes\n      INTEGER, INTENT(in)                                :: size_sum\n      INTEGER, DIMENSION(:), INTENT(in)                  :: size_mix\n\n      INTEGER                                            :: block_size, current_sum, nblocks, &\n                                                            nsize_mix, selector\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: mixer\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: sizes\n\n!\n\n      NULLIFY (sizes)\n      nsize_mix = SIZE(size_mix)/2\n      ALLOCATE (mixer(3, nsize_mix))\n      mixer(1, :) = size_mix(1:nsize_mix*2 - 1:2)\n      mixer(2, :) = size_mix(2:nsize_mix*2:2)\n      mixer(3, :) = 1\n      nblocks = 0\n      current_sum = 0\n      CALL ensure_array_size(sizes, lb=1, ub=1)\n\n      selector = 1\n      !\n      DO WHILE (current_sum .LT. size_sum)\n         nblocks = nblocks + 1\n         !CALL RANDOM_NUMBER(value)\n         !block_size = MIN (INT (value(1) * size_max),&\n         !                  size_sum - current_sum)\n         block_size = MIN(mixer(2, selector), &\n                          size_sum - current_sum)\n         sizes(nblocks) = block_size\n         current_sum = current_sum + block_size\n         CALL ensure_array_size(sizes, ub=nblocks + 1, factor=2.0_dp)\n         mixer(3, selector) = mixer(3, selector) + 1\n         IF (mixer(3, selector) .GT. mixer(1, selector)) THEN\n            mixer(3, selector) = 1\n            selector = MOD(selector, nsize_mix) + 1\n         END IF\n      END DO\n      ALLOCATE (block_sizes(nblocks))\n      block_sizes = sizes(1:nblocks)\n      current_sum = SUM(block_sizes)\n      IF (current_sum /= size_sum) &\n         DBCSR_ABORT(\"Incorrect block sizes\")\n      DEALLOCATE (mixer, sizes)\n\n   END SUBROUTINE dbcsr_make_random_block_sizes\n\n   SUBROUTINE dbcsr_make_null_mp(mp_env, group)\n      TYPE(dbcsr_mp_obj), INTENT(out)                    :: mp_env\n      TYPE(mp_comm_type), INTENT(in), OPTIONAL           :: group\n\n      INTEGER                                            :: mynode, numnodes\n\n      IF (PRESENT(group)) THEN\n         CALL mp_environ(numnodes, mynode, group)\n         CALL dbcsr_mp_new(mp_env, group, &\n                           RESHAPE((/1/), (/1, 1/)), &\n                           mynode, numnodes, &\n                           myprow=0, mypcol=0)\n      ELSE\n         CALL dbcsr_mp_new(mp_env, MP_COMM_NULL, &\n                           RESHAPE((/1/), (/1, 1/)), &\n                           0, 1, &\n                           myprow=0, mypcol=0)\n      END IF\n   END SUBROUTINE dbcsr_make_null_mp\n   !\n   SUBROUTINE dbcsr_make_null_dist(distribution, nblkrows, nblkcols, group)\n      TYPE(dbcsr_distribution_obj), INTENT(out)          :: distribution\n      INTEGER, INTENT(in)                                :: nblkrows, nblkcols\n      TYPE(mp_comm_type), INTENT(in), OPTIONAL           :: group\n\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_dist, row_dist\n      TYPE(dbcsr_mp_obj)                                 :: mp_env\n\n      CALL dbcsr_make_null_mp(mp_env, group=group)\n      ALLOCATE (row_dist(nblkrows), col_dist(nblkcols))\n      row_dist = 0\n      col_dist = 0\n      CALL dbcsr_distribution_new(distribution, mp_env, &\n                                  row_dist, col_dist, reuse_arrays=.TRUE.)\n      CALL dbcsr_mp_release(mp_env)\n   END SUBROUTINE dbcsr_make_null_dist\n\nEND MODULE dbcsr_test_methods\n"
  },
  {
    "path": "src/ops/dbcsr_tests.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tests\n   !! Tests for CP2K DBCSR operations\n   USE dbcsr_data_methods, ONLY: dbcsr_scalar\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_mp, &\n                                 dbcsr_distribution_new, &\n                                 dbcsr_distribution_release\n   USE dbcsr_dist_operations, ONLY: dbcsr_dist_bin\n   USE dbcsr_dist_util, ONLY: dbcsr_checksum\n   USE dbcsr_io, ONLY: dbcsr_binary_read, &\n                       dbcsr_binary_write\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_8, &\n                          real_8\n   USE dbcsr_machine, ONLY: m_flush, &\n                            m_walltime\n   USE dbcsr_methods, ONLY: dbcsr_col_block_sizes, &\n                            dbcsr_distribution, &\n                            dbcsr_get_data_type, &\n                            dbcsr_name, &\n                            dbcsr_nblkcols_total, &\n                            dbcsr_nblkrows_total, &\n                            dbcsr_release, &\n                            dbcsr_row_block_sizes\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_active, &\n                               dbcsr_mp_group, &\n                               dbcsr_mp_init, &\n                               dbcsr_mp_new, &\n                               dbcsr_mp_npcols, &\n                               dbcsr_mp_nprows, &\n                               dbcsr_mp_release, &\n                               dbcsr_mp_make_env\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_comm_free, mp_environ, mp_max, mp_sum, mp_sync, mp_comm_type\n   USE dbcsr_multiply_api, ONLY: dbcsr_multiply\n   USE dbcsr_operations, ONLY: dbcsr_add, &\n                               dbcsr_copy, &\n                               dbcsr_frobenius_norm\n   USE dbcsr_test_methods, ONLY: dbcsr_make_random_block_sizes, &\n                                 dbcsr_make_random_matrix\n   USE dbcsr_transformations, ONLY: dbcsr_redistribute\n   USE dbcsr_types, ONLY: dbcsr_distribution_obj, &\n                          dbcsr_mp_obj, &\n                          dbcsr_scalar_type, &\n                          dbcsr_type, &\n                          dbcsr_type_no_symmetry\n   USE dbcsr_work_operations, ONLY: dbcsr_create\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC :: dbcsr_run_tests, dbcsr_test_mm, dbcsr_test_binary_io\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tests'\n\n   INTEGER, PARAMETER          :: dbcsr_test_mm = 1\n   INTEGER, PARAMETER          :: dbcsr_test_binary_io = 2\n\nCONTAINS\n\n   SUBROUTINE dbcsr_run_tests(mp_group, io_unit, nproc, &\n                              matrix_sizes, trs, &\n                              bs_m, bs_n, bs_k, sparsities, alpha, beta, data_type, test_type, &\n                              n_loops, eps, retain_sparsity, always_checksum)\n      !! Performs a variety of matrix multiplies of same matrices on different\n      !! processor grids\n\n      TYPE(mp_comm_type), INTENT(IN)                     :: mp_group\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! MPI communicator\n         !! which unit to write to, if not negative\n      INTEGER, DIMENSION(:), POINTER                     :: nproc\n         !! number of processors to test on\n      INTEGER, DIMENSION(:), INTENT(in)                  :: matrix_sizes\n         !! size of matrices to test\n      LOGICAL, DIMENSION(2), INTENT(in)                  :: trs\n         !! transposes of the two matrices\n      INTEGER, DIMENSION(:), POINTER                     :: bs_m, bs_n, bs_k\n         !! block sizes of the 3 dimensions\n         !! block sizes of the 3 dimensions\n         !! block sizes of the 3 dimensions\n      REAL(kind=dp), DIMENSION(3), INTENT(in)            :: sparsities\n         !! sparsities of matrices to create\n      REAL(kind=dp), INTENT(in)                          :: alpha, beta\n         !! alpha value to use in multiply\n         !! beta value to use in multiply\n      INTEGER, INTENT(IN)                                :: data_type, test_type, n_loops\n         !! matrix data type\n         !! number of repetition for each multiplication\n      REAL(kind=dp), INTENT(in)                          :: eps\n         !! eps value for filtering\n      LOGICAL, INTENT(in)                                :: retain_sparsity, always_checksum\n         !! checksum after each multiplication\n\n      CHARACTER(len=*), PARAMETER :: fmt_desc = '(A,3(1X,I6),1X,A,2(1X,I5),1X,A,2(1X,L1))', &\n                                     routineN = 'dbcsr_run_tests'\n\n      CHARACTER                                          :: t_a, t_b\n      INTEGER                                            :: bmax, bmin, error_handle, &\n                                                            mynode, numnodes\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: group_sizes\n      INTEGER, DIMENSION(2)                              :: npdims\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_dist_a, col_dist_b, col_dist_c, &\n                                                            row_dist_a, row_dist_b, row_dist_c, &\n                                                            sizes_k, sizes_m, sizes_n\n      LOGICAL                                            :: pgiven\n      TYPE(dbcsr_distribution_obj)                       :: dist_a, dist_b, dist_c\n      TYPE(dbcsr_mp_obj)                                 :: mp_env\n      TYPE(dbcsr_type), TARGET                           :: matrix_a, matrix_b, matrix_c\n      TYPE(mp_comm_type)                                 :: cart_group\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      ! Create the row/column block sizes.\n      IF (ASSOCIATED(bs_m)) THEN\n         bmin = MINVAL(bs_m(2::2))\n         bmax = MAXVAL(bs_m(2::2))\n         CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), bs_m)\n      ELSE\n         CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), (/1, 13, 2, 5/))\n         bmin = 5; bmax = 13\n      END IF\n      IF (ASSOCIATED(bs_n)) THEN\n         bmin = MIN(bmin, MINVAL(bs_n(2::2)))\n         bmax = MAX(bmax, MAXVAL(bs_n(2::2)))\n         CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), bs_n)\n      ELSE\n         CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), (/1, 13, 2, 5/))\n         bmin = MIN(bmin, 5); bmax = MAX(bmax, 13)\n      END IF\n      IF (ASSOCIATED(bs_k)) THEN\n         bmin = MIN(bmin, MINVAL(bs_k(2::2)))\n         bmax = MAX(bmax, MAXVAL(bs_k(2::2)))\n         CALL dbcsr_make_random_block_sizes(sizes_k, matrix_sizes(3), bs_k)\n      ELSE\n         CALL dbcsr_make_random_block_sizes(sizes_k, matrix_sizes(3), (/1, 13, 2, 5/))\n         bmin = MIN(bmin, 5); bmax = MAX(bmax, 13)\n      END IF\n      !\n      ! Create dist\n\n      ! Create the random matrices.\n      CALL dbcsr_mp_make_env(mp_env, cart_group, mp_group)\n      npdims(1) = dbcsr_mp_nprows(mp_env)\n      npdims(2) = dbcsr_mp_npcols(mp_env)\n      CALL dbcsr_dist_bin(row_dist_c, SIZE(sizes_m), npdims(1), &\n                          sizes_m)\n      CALL dbcsr_dist_bin(col_dist_c, SIZE(sizes_n), npdims(2), &\n                          sizes_n)\n      CALL dbcsr_distribution_new(dist_c, mp_env, row_dist_c, col_dist_c)\n      CALL dbcsr_make_random_matrix(matrix_c, sizes_m, sizes_n, \"Matrix C\", &\n                                    REAL(sparsities(3), real_8), &\n                                    mp_group, data_type=data_type, dist=dist_c)\n      CALL dbcsr_distribution_release(dist_c)\n      IF (trs(1)) THEN\n         CALL dbcsr_dist_bin(row_dist_a, SIZE(sizes_k), npdims(1), &\n                             sizes_k)\n         CALL dbcsr_dist_bin(col_dist_a, SIZE(sizes_m), npdims(2), &\n                             sizes_m)\n         CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a)\n         CALL dbcsr_make_random_matrix(matrix_a, sizes_k, sizes_m, \"Matrix A\", &\n                                       REAL(sparsities(1), real_8), &\n                                       mp_group, data_type=data_type, dist=dist_a)\n         DEALLOCATE (row_dist_a, col_dist_a)\n      ELSE\n         CALL dbcsr_dist_bin(col_dist_a, SIZE(sizes_k), npdims(2), &\n                             sizes_k)\n         CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_c, col_dist_a)\n         CALL dbcsr_make_random_matrix(matrix_a, sizes_m, sizes_k, \"Matrix A\", &\n                                       REAL(sparsities(1), real_8), &\n                                       mp_group, data_type=data_type, dist=dist_a)\n         DEALLOCATE (col_dist_a)\n      END IF\n      CALL dbcsr_distribution_release(dist_a)\n      IF (trs(2)) THEN\n         CALL dbcsr_dist_bin(row_dist_b, SIZE(sizes_n), npdims(1), &\n                             sizes_n)\n         CALL dbcsr_dist_bin(col_dist_b, SIZE(sizes_k), npdims(2), &\n                             sizes_k)\n         CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b)\n         CALL dbcsr_make_random_matrix(matrix_b, sizes_n, sizes_k, \"Matrix B\", &\n                                       REAL(sparsities(2), real_8), &\n                                       mp_group, data_type=data_type, dist=dist_b)\n         DEALLOCATE (row_dist_b, col_dist_b)\n      ELSE\n         CALL dbcsr_dist_bin(row_dist_b, SIZE(sizes_k), npdims(1), &\n                             sizes_k)\n         CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_c)\n         CALL dbcsr_make_random_matrix(matrix_b, sizes_k, sizes_n, \"Matrix B\", &\n                                       REAL(sparsities(2), real_8), &\n                                       mp_group, data_type=data_type, dist=dist_b)\n         DEALLOCATE (row_dist_b)\n      END IF\n      CALL dbcsr_mp_release(mp_env)\n      CALL dbcsr_distribution_release(dist_b)\n      DEALLOCATE (row_dist_c, col_dist_c)\n      DEALLOCATE (sizes_m, sizes_n, sizes_k)\n      ! Prepare test parameters\n      IF (io_unit .GT. 0) THEN\n         WRITE (io_unit, fmt_desc) \"Testing with sizes\", matrix_sizes(1:3), &\n            \"min/max block sizes\", bmin, bmax, \"transposed?\", trs(1:2)\n      END IF\n      CALL mp_environ(numnodes, mynode, mp_group)\n      pgiven = ASSOCIATED(nproc)\n      IF (pgiven) pgiven = nproc(1) .NE. 0\n      IF (pgiven) THEN\n         ALLOCATE (group_sizes(SIZE(nproc), 2))\n         group_sizes(:, 1) = nproc(:)\n         group_sizes(:, 2) = 0\n      ELSE\n         !ALLOCATE (group_sizes (numnodes, 2))\n         !DO test = numnodes, 1, -1\n         !   group_sizes(1+numnodes-test, 1:2) = (/ test, 0 /)\n         !ENDDO\n         ALLOCATE (group_sizes(1, 2))\n         group_sizes(1, 1:2) = (/numnodes, 0/)\n      END IF\n      t_a = 'N'; IF (trs(1)) t_a = 'T'\n      t_b = 'N'; IF (trs(2)) t_b = 'T'\n\n      SELECT CASE (test_type)\n      CASE (dbcsr_test_mm)\n         CALL test_multiplies_multiproc(group_sizes, &\n                                        matrix_a, matrix_b, matrix_c, t_a, t_b, &\n                                        dbcsr_scalar(REAL(alpha, real_8)), dbcsr_scalar(REAL(beta, real_8)), &\n                                        n_loops=n_loops, eps=eps, &\n                                        io_unit=io_unit, always_checksum=always_checksum, &\n                                        retain_sparsity=retain_sparsity)\n      CASE (dbcsr_test_binary_io)\n         CALL test_binary_io(matrix_a, io_unit)\n      END SELECT\n\n      CALL dbcsr_release(matrix_a)\n      CALL dbcsr_release(matrix_b)\n      CALL dbcsr_release(matrix_c)\n      CALL mp_comm_free(cart_group)\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_run_tests\n\n   SUBROUTINE test_binary_io(matrix_a, io_unit)\n      !! dumps and retrieves a dbcsr matrix, and checks a checksum\n\n      TYPE(dbcsr_type)                                   :: matrix_a\n         !! matrix to be written\n      INTEGER                                            :: io_unit\n         !! unit for status updates\n\n      CHARACTER(LEN=100)                                 :: file_name\n      REAL(kind=real_8)                                  :: norm, post, pre\n      TYPE(dbcsr_type)                                   :: matrix_a_read\n\n      file_name = \"test_dbcsr_binary_io.dat\"\n\n      pre = dbcsr_checksum(matrix_a, pos=.TRUE.)\n\n      CALL dbcsr_binary_write(matrix_a, file_name)\n\n      ! needs a new matrix, reading into matrix_a does not work\n      CALL dbcsr_binary_read(file_name, distribution=dbcsr_distribution(matrix_a), &\n                             matrix_new=matrix_a_read)\n\n      post = dbcsr_checksum(matrix_a_read, pos=.TRUE.)\n      CALL dbcsr_add(matrix_a_read, matrix_a, -1.0_dp, 1.0_dp)\n      norm = dbcsr_frobenius_norm(matrix_a_read)\n      IF (io_unit > 0) THEN\n         WRITE (io_unit, *) \"checksums\", pre, post\n         WRITE (io_unit, *) \"difference norm\", norm\n      END IF\n\n      IF (norm /= 0.0_dp) &\n         DBCSR_ABORT(\"bug in binary io\")\n\n      CALL dbcsr_release(matrix_a_read)\n\n   END SUBROUTINE test_binary_io\n\n   SUBROUTINE test_multiplies_multiproc(group_sizes, &\n                                        matrix_a, matrix_b, matrix_c, &\n                                        transa, transb, alpha, beta, limits, retain_sparsity, &\n                                        n_loops, eps, &\n                                        io_unit, always_checksum)\n      !! Performs a variety of matrix multiplies of same matrices on different\n      !! processor grids\n\n      INTEGER, DIMENSION(:, :)                           :: group_sizes\n         !! array of (sub) communicator sizes to test (2-D)\n      TYPE(dbcsr_type), INTENT(in)                       :: matrix_a, matrix_b, matrix_c\n         !! matrices to multiply\n         !! matrices to multiply\n         !! matrices to multiply\n      CHARACTER, INTENT(in)                              :: transa, transb\n      TYPE(dbcsr_scalar_type), INTENT(in)                :: alpha, beta\n      INTEGER, DIMENSION(6), INTENT(in), OPTIONAL        :: limits\n      LOGICAL, INTENT(in), OPTIONAL                      :: retain_sparsity\n      INTEGER, INTENT(IN)                                :: n_loops\n      REAL(kind=dp), INTENT(in)                          :: eps\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! which unit to write to, if not negative\n      LOGICAL                                            :: always_checksum\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'test_multiplies_multiproc'\n\n      INTEGER                                            :: error_handle, &\n                                                            loop_iter, mynode, numnodes, test\n      INTEGER(kind=int_8)                                :: flop, flop_sum\n      INTEGER, DIMENSION(2)                              :: npdims\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_dist_a, col_dist_b, col_dist_c, &\n                                                            row_dist_a, row_dist_b, row_dist_c\n      LOGICAL                                            :: i_am_alive\n      REAL(kind=real_8)                                  :: cs, cs_pos, flops_all, t1, t2\n      TYPE(dbcsr_distribution_obj)                       :: dist_a, dist_b, dist_c\n      TYPE(dbcsr_mp_obj)                                 :: mp_env\n      TYPE(dbcsr_type)                                   :: m_a, m_b, m_c, m_c_reserve\n      TYPE(mp_comm_type)                                 :: cart_group, group\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      IF (SIZE(group_sizes, 2) /= 2) &\n         DBCSR_ABORT(\"second dimension of group_sizes must be 2\")\n      p_sizes: DO test = 1, SIZE(group_sizes, 1)\n         t2 = 0.0_real_8\n         flop_sum = 0\n         npdims(1:2) = group_sizes(test, 1:2)\n         numnodes = npdims(1)*npdims(2)\n         group = dbcsr_mp_group(dbcsr_distribution_mp( &\n                                dbcsr_distribution(matrix_c)))\n         IF (numnodes .EQ. 0) THEN\n            CALL dbcsr_mp_make_env(mp_env, cart_group, group, nprocs=MAXVAL(npdims))\n         ELSE\n            CALL dbcsr_mp_make_env(mp_env, cart_group, group, pgrid_dims=npdims)\n         END IF\n         IF (numnodes < 0) &\n            DBCSR_ABORT(\"Cartesian sides must be greater or equal to 0\")\n         i_am_alive = dbcsr_mp_active(mp_env)\n         alive: IF (i_am_alive) THEN\n            npdims(1) = dbcsr_mp_nprows(mp_env)\n            npdims(2) = dbcsr_mp_npcols(mp_env)\n            group = dbcsr_mp_group(mp_env)\n            CALL mp_environ(numnodes, mynode, group)\n            ! Row & column distributions\n            CALL dbcsr_dist_bin(row_dist_a, &\n                                dbcsr_nblkrows_total(matrix_a), npdims(1), &\n                                dbcsr_row_block_sizes(matrix_a))\n            CALL dbcsr_dist_bin(col_dist_a, &\n                                dbcsr_nblkcols_total(matrix_a), npdims(2), &\n                                dbcsr_col_block_sizes(matrix_a))\n            CALL dbcsr_dist_bin(row_dist_b, &\n                                dbcsr_nblkrows_total(matrix_b), npdims(1), &\n                                dbcsr_row_block_sizes(matrix_b))\n            CALL dbcsr_dist_bin(col_dist_b, &\n                                dbcsr_nblkcols_total(matrix_b), npdims(2), &\n                                dbcsr_col_block_sizes(matrix_b))\n            CALL dbcsr_dist_bin(row_dist_c, &\n                                dbcsr_nblkrows_total(matrix_c), npdims(1), &\n                                dbcsr_row_block_sizes(matrix_c))\n            CALL dbcsr_dist_bin(col_dist_c, &\n                                dbcsr_nblkcols_total(matrix_c), npdims(2), &\n                                dbcsr_col_block_sizes(matrix_c))\n            CALL dbcsr_distribution_new(dist_a, &\n                                        mp_env, row_dist_a, col_dist_a, reuse_arrays=.TRUE.)\n            CALL dbcsr_distribution_new(dist_b, &\n                                        mp_env, row_dist_b, col_dist_b, reuse_arrays=.TRUE.)\n            CALL dbcsr_distribution_new(dist_c, &\n                                        mp_env, row_dist_c, col_dist_c, reuse_arrays=.TRUE.)\n            ! Redistribute the matrices\n            ! A\n            CALL dbcsr_create(m_a, \"Test for \"//TRIM(dbcsr_name(matrix_a)), &\n                              dist_a, dbcsr_type_no_symmetry, &\n                              row_blk_size_obj=matrix_a%row_blk_size, &\n                              col_blk_size_obj=matrix_a%col_blk_size, &\n                              data_type=dbcsr_get_data_type(matrix_a))\n            CALL dbcsr_distribution_release(dist_a)\n            CALL dbcsr_redistribute(matrix_a, m_a)\n            ! B\n            CALL dbcsr_create(m_b, \"Test for \"//TRIM(dbcsr_name(matrix_b)), &\n                              dist_b, dbcsr_type_no_symmetry, &\n                              row_blk_size_obj=matrix_b%row_blk_size, &\n                              col_blk_size_obj=matrix_b%col_blk_size, &\n                              data_type=dbcsr_get_data_type(matrix_b))\n            CALL dbcsr_distribution_release(dist_b)\n            CALL dbcsr_redistribute(matrix_b, m_b)\n            ! C\n            CALL dbcsr_create(m_c, \"Test for \"//TRIM(dbcsr_name(matrix_c)), &\n                              dist_c, dbcsr_type_no_symmetry, &\n                              row_blk_size_obj=matrix_c%row_blk_size, &\n                              col_blk_size_obj=matrix_c%col_blk_size, &\n                              data_type=dbcsr_get_data_type(matrix_c))\n            CALL dbcsr_distribution_release(dist_c)\n            CALL dbcsr_redistribute(matrix_c, m_c)\n            CALL dbcsr_copy(m_c_reserve, m_c)\n            ! Perform multiply\n            loops: DO loop_iter = 1, n_loops\n               CALL dbcsr_release(m_c)\n               CALL dbcsr_copy(m_c, m_c_reserve)\n               CALL mp_sync(group)\n               t1 = -m_walltime()\n               IF (PRESENT(limits)) THEN\n                  IF (eps .LE. -0.0_dp) THEN\n                     CALL dbcsr_multiply(transa, transb, alpha, &\n                                         m_a, m_b, beta, m_c, &\n                                         first_row=limits(1), &\n                                         last_row=limits(2), &\n                                         first_column=limits(3), &\n                                         last_column=limits(4), &\n                                         first_k=limits(5), &\n                                         last_k=limits(6), &\n                                         retain_sparsity=retain_sparsity, flop=flop)\n                  ELSE\n                     CALL dbcsr_multiply(transa, transb, alpha, &\n                                         m_a, m_b, beta, m_c, &\n                                         first_row=limits(1), &\n                                         last_row=limits(2), &\n                                         first_column=limits(3), &\n                                         last_column=limits(4), &\n                                         first_k=limits(5), &\n                                         last_k=limits(6), &\n                                         retain_sparsity=retain_sparsity, flop=flop, &\n                                         filter_eps=eps)\n                  END IF\n               ELSE\n                  IF (eps .LE. -0.0_dp) THEN\n                     CALL dbcsr_multiply(transa, transb, alpha, &\n                                         m_a, m_b, beta, m_c, &\n                                         retain_sparsity=retain_sparsity, flop=flop)\n                  ELSE\n                     CALL dbcsr_multiply(transa, transb, alpha, &\n                                         m_a, m_b, beta, m_c, &\n                                         retain_sparsity=retain_sparsity, flop=flop, &\n                                         filter_eps=eps)\n                  END IF\n               END IF\n               t1 = t1 + m_walltime()\n               t2 = t2 + t1\n               flop_sum = flop_sum + flop\n               !\n               CALL mp_max(t1, group)\n               CALL mp_sum(flop, group)\n               t1 = MAX(t1, EPSILON(t1))\n               flops_all = REAL(flop, KIND=real_8)/t1/numnodes/(1024*1024)\n               IF (io_unit .GT. 0) THEN\n                  WRITE (io_unit, '(A,I5,A,I5,A,F12.3,A,I9,A)') &\n                     \" loop \", loop_iter, \" with \", numnodes, \" MPI ranks: using \", t1, \"s \", INT(flops_all), \" Mflops/rank\"\n                  CALL m_flush(io_unit)\n               END IF\n               IF (loop_iter .EQ. n_loops .OR. always_checksum) THEN\n                  cs = dbcsr_checksum(m_c)\n                  cs_pos = dbcsr_checksum(m_c, pos=.TRUE.)\n                  IF (io_unit > 0) THEN\n                     WRITE (io_unit, *) \"Final checksums\", cs, cs_pos\n                  END IF\n               END IF\n            END DO loops\n            ! Release\n            CALL dbcsr_mp_release(mp_env)\n            CALL dbcsr_release(m_a)\n            CALL dbcsr_release(m_b)\n            CALL dbcsr_release(m_c)\n            CALL dbcsr_release(m_c_reserve)\n         END IF alive\n         CALL mp_comm_free(cart_group)\n      END DO p_sizes\n      CALL timestop(error_handle)\n   END SUBROUTINE test_multiplies_multiproc\n\nEND MODULE dbcsr_tests\n"
  },
  {
    "path": "src/ops/dbcsr_transformations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_transformations\n   !! DBCSR transformations\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_hold, &\n                                array_i1d_obj, &\n                                array_release\n   USE dbcsr_block_access, ONLY: dbcsr_get_block_p, &\n                                 dbcsr_put_block\n   USE dbcsr_block_operations, ONLY: dbcsr_block_conjg, &\n                                     dbcsr_block_partial_copy, &\n                                     dbcsr_block_real_neg, &\n                                     dbcsr_block_transpose, &\n                                     dbcsr_data_clear, &\n                                     dbcsr_data_copy, &\n                                     dbcsr_data_set\n   USE dbcsr_data_methods, ONLY: &\n      dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_get_memory_type, &\n      dbcsr_data_get_size, dbcsr_data_get_size_referenced, dbcsr_data_get_type, dbcsr_data_hold, &\n      dbcsr_data_init, dbcsr_data_new, dbcsr_data_release, dbcsr_data_set_pointer, &\n      dbcsr_data_set_size_referenced, dbcsr_get_data, dbcsr_type_1d_to_2d\n   USE dbcsr_data_operations, ONLY: dbcsr_copy_sort_data, &\n                                    dbcsr_switch_data_area\n   USE dbcsr_dist_methods, ONLY: &\n      dbcsr_distribution_col_dist, dbcsr_distribution_hold, dbcsr_distribution_local_cols, &\n      dbcsr_distribution_local_rows, dbcsr_distribution_mp, dbcsr_distribution_ncols, &\n      dbcsr_distribution_nlocal_cols, dbcsr_distribution_nlocal_rows, dbcsr_distribution_nrows, &\n      dbcsr_distribution_release, dbcsr_distribution_row_dist\n   USE dbcsr_dist_operations, ONLY: dbcsr_get_local_cols, &\n                                    dbcsr_get_local_rows, &\n                                    dbcsr_get_stored_coordinates, &\n                                    dbcsr_reblocking_targets, &\n                                    dbcsr_transpose_dims, &\n                                    dbcsr_transpose_distribution\n   USE dbcsr_dist_util, ONLY: convert_sizes_to_offsets, &\n                              dbcsr_checksum, &\n                              dbcsr_pack_meta, &\n                              dbcsr_unpack_meta, &\n                              dbcsr_verify_matrix, &\n                              get_internal_offsets, &\n                              global_offsets_to_local, &\n                              nfull_elements\n   USE dbcsr_index_operations, ONLY: dbcsr_addto_index_array, &\n                                     dbcsr_clearfrom_index_array, &\n                                     dbcsr_repoint_index, &\n                                     make_dense_index, &\n                                     make_undense_index, &\n                                     transpose_index_local\n   USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, &\n                                        dbcsr_iterator_next_block, &\n                                        dbcsr_iterator_start, &\n                                        dbcsr_iterator_stop\n   USE dbcsr_kinds, ONLY: dp, &\n                          int_8, &\n                          sp\n   USE dbcsr_methods, ONLY: &\n      dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_type, dbcsr_get_matrix_type, &\n      dbcsr_has_symmetry, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_nfullcols_total, &\n      dbcsr_nfullrows_total, dbcsr_release, dbcsr_row_block_sizes, dbcsr_valid_index\n   USE dbcsr_mp_methods, ONLY: &\n      dbcsr_mp_grid_remove, dbcsr_mp_grid_setup, dbcsr_mp_group, dbcsr_mp_has_subgroups, &\n      dbcsr_mp_my_col_group, dbcsr_mp_my_row_group, dbcsr_mp_mynode, dbcsr_mp_mypcol, &\n      dbcsr_mp_myprow, dbcsr_mp_npcols, dbcsr_mp_nprows, dbcsr_mp_numnodes, dbcsr_mp_pgrid\n   USE dbcsr_mp_operations, ONLY: dbcsr_allgatherv, &\n                                  hybrid_alltoall_any, &\n                                  hybrid_alltoall_c1, &\n                                  hybrid_alltoall_d1, &\n                                  hybrid_alltoall_i1, &\n                                  hybrid_alltoall_s1, &\n                                  hybrid_alltoall_z1\n   USE dbcsr_mpiwrap, ONLY: mp_allgather, &\n                            mp_alltoall, mp_comm_type\n   USE dbcsr_operations, ONLY: dbcsr_set\n   USE dbcsr_ptr_util, ONLY: pointer_view\n   USE dbcsr_types, ONLY: &\n      dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_iterator, dbcsr_meta_size, dbcsr_mp_obj, &\n      dbcsr_repl_col, dbcsr_repl_full, dbcsr_repl_none, dbcsr_repl_row, dbcsr_slot_blk_p, &\n      dbcsr_slot_col_i, dbcsr_slot_home_pcol, dbcsr_slot_home_prow, dbcsr_slot_nblks, &\n      dbcsr_slot_nze, dbcsr_slot_row_p, dbcsr_type, dbcsr_type_complex_4, dbcsr_type_complex_8, &\n      dbcsr_type_no_symmetry, dbcsr_type_real_4, dbcsr_type_real_8\n   USE dbcsr_work_operations, ONLY: dbcsr_create, &\n                                    dbcsr_finalize, &\n                                    dbcsr_work_create\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_transformations'\n\n   LOGICAL, PARAMETER, PRIVATE          :: careful_mod = .FALSE.\n\n   PUBLIC :: dbcsr_desymmetrize_deep, &\n             dbcsr_new_transposed, &\n             dbcsr_transposed, &\n             dbcsr_complete_redistribute, &\n             dbcsr_redistribute, dbcsr_make_untransposed_blocks\n   PUBLIC :: dbcsr_replicate_all, dbcsr_distribute, dbcsr_datablock_redistribute\n   PUBLIC :: dbcsr_make_dense, dbcsr_make_undense, dbcsr_make_dense_low\n\nCONTAINS\n\n   SUBROUTINE dbcsr_new_transposed(transposed, normal, shallow_data_copy, &\n                                   transpose_data, transpose_distribution, transpose_index, &\n                                   use_distribution, redistribute)\n      !! Transposes a DBCSR matrix.\n      !!\n      !! Distribution options\n      !! By default the distribution is transposed. If transpose_distribution\n      !! is false, then an undetermined distribution is created that is\n      !! compatible with the same process grid.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: transposed\n         !! transposed DBCSR matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: normal\n         !! input DBCSR matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: shallow_data_copy, transpose_data, &\n                                                            transpose_distribution, transpose_index\n         !! only shallow data_copy; default is no; if set, the transpose_data option is ignored\n         !! transpose data blocks, default is True\n         !! transpose the distribution from the input matrix, default is True\n         !! transpose the index (default=yes) or turn it into BCSC\n      TYPE(dbcsr_distribution_obj), INTENT(IN), OPTIONAL :: use_distribution\n         !! use this distribution\n      LOGICAL, INTENT(IN), OPTIONAL                      :: redistribute\n         !! redistributes the matrix; default is .TRUE. unless shallow or transpose_distribution are set.\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_new_transposed'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: handle, stat\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: blk_p\n      LOGICAL                                            :: redist, shallow, tr_blocks, tr_dist, &\n                                                            tr_index\n      TYPE(dbcsr_distribution_obj)                       :: new_dist\n      TYPE(dbcsr_type)                                   :: t2\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. dbcsr_valid_index(normal)) &\n         DBCSR_ABORT(\"Matrix does not exist.\")\n      ! Internalize options\n      shallow = .FALSE.\n      IF (PRESENT(shallow_data_copy)) shallow = shallow_data_copy\n      tr_blocks = .TRUE.\n      IF (PRESENT(transpose_data)) tr_blocks = transpose_data\n      tr_dist = .TRUE.\n      IF (PRESENT(transpose_distribution)) tr_dist = transpose_distribution\n      tr_index = .TRUE.\n      IF (PRESENT(transpose_index)) tr_index = transpose_index\n      ! Prepare the distribution for the transposed matrix\n      IF (PRESENT(use_distribution)) THEN\n         IF (dbcsr_distribution_nrows(use_distribution) /= dbcsr_distribution_ncols(normal%dist)) &\n            DBCSR_ABORT(\"Given distribution must be compatible with the current distribution\")\n         IF (dbcsr_distribution_ncols(use_distribution) /= dbcsr_distribution_nrows(normal%dist)) &\n            DBCSR_ABORT(\"Given distribution must be compatible with the current distribution\")\n         new_dist = use_distribution\n         CALL dbcsr_distribution_hold(new_dist)\n      ELSE\n         IF (tr_dist) THEN\n            CALL dbcsr_transpose_distribution(new_dist, normal%dist)\n         ELSE\n            CALL dbcsr_transpose_dims(new_dist, normal%dist)\n         END IF\n      END IF\n      ! Create the transposed matrix\n      CALL dbcsr_create(transposed, name=\"transposed \"//TRIM(normal%name), &\n                        template=normal, &\n                        dist=new_dist, &\n                        row_blk_size_obj=normal%col_blk_size, &\n                        col_blk_size_obj=normal%row_blk_size, &\n                        matrix_type=dbcsr_get_matrix_type(normal), &\n                        max_rbs=normal%max_cbs, &\n                        max_cbs=normal%max_rbs, &\n                        row_blk_offset=normal%col_blk_offset, &\n                        col_blk_offset=normal%row_blk_offset)\n      CALL dbcsr_distribution_release(new_dist)\n      ! Reserve the space for the new indices.\n      IF (tr_index) THEN\n         CALL dbcsr_addto_index_array(transposed, dbcsr_slot_row_p, &\n                                      reservation=transposed%nblkrows_total + 1, extra=transposed%nblks*2)\n      ELSE\n         CALL dbcsr_addto_index_array(transposed, dbcsr_slot_row_p, &\n                                      reservation=normal%nblkrows_total + 1, extra=transposed%nblks*2)\n      END IF\n      CALL dbcsr_addto_index_array(transposed, dbcsr_slot_col_i, &\n                                   reservation=normal%nblks)\n      CALL dbcsr_addto_index_array(transposed, dbcsr_slot_blk_p, &\n                                   reservation=normal%nblks)\n      CALL dbcsr_repoint_index(transposed)\n      IF (.NOT. shallow) THEN\n         CALL dbcsr_data_ensure_size(transposed%data_area, &\n                                     dbcsr_data_get_size_referenced(normal%data_area), &\n                                     nocopy=.TRUE.)\n      END IF\n      !\n      transposed%nblks = normal%nblks\n      transposed%nze = normal%nze\n      transposed%index(dbcsr_slot_nblks) = normal%nblks\n      transposed%index(dbcsr_slot_nze) = normal%nze\n      ! Transpose the local index.\n      ALLOCATE (blk_p(normal%nblks), stat=stat)\n      IF (stat /= 0) DBCSR_ABORT(\"blk_p\")\n      IF (tr_index) THEN\n         CALL transpose_index_local(transposed%row_p, transposed%col_i, &\n                                    normal%row_p, normal%col_i, blk_p, normal%blk_p)\n         IF (dbg) THEN\n            WRITE (*, *) 'orig. row_p', normal%row_p\n            WRITE (*, *) 'orig. col_i', normal%col_i\n            WRITE (*, *) 'orig. blk_p', normal%blk_p\n            WRITE (*, *) 'new . row_p', transposed%row_p\n            WRITE (*, *) 'new . col_i', transposed%col_i\n            WRITE (*, *) 'new . blk_p', blk_p!transposed%blk_p\n         END IF\n      ELSE\n         transposed%row_p(:) = normal%row_p(:)\n         transposed%col_i(:) = normal%col_i(:)\n         blk_p(:) = normal%blk_p(:)\n         !transposed%transpose = .TRUE.\n      END IF\n      ! Copy the data\n      IF (shallow) THEN\n         CALL dbcsr_switch_data_area(transposed, normal%data_area)\n         transposed%blk_p(1:transposed%nblks) = &\n            -blk_p(1:transposed%nblks)\n      ELSE\n         CALL dbcsr_copy_sort_data(transposed%blk_p, blk_p, transposed%row_p, &\n                                   transposed%col_i, array_data(transposed%row_blk_size), &\n                                   array_data(transposed%col_blk_size), &\n                                   transposed%data_area, normal%data_area, &\n                                   mark_transposed=.not. tr_blocks, &\n                                   transpose_blocks=tr_blocks)\n      END IF\n      transposed%valid = .TRUE.\n      !CALL dbcsr_copy_sort_data (transposed%blk_p, blk_p, transposed%row_p,&\n      !     transposed%col_i, array_data (transposed%row_blk_size),&\n      !     array_data (transposed%col_blk_size),&\n      !     transposed%data_area, normal%data_area,&\n      !     transpose_blocks=.TRUE.)\n      !\n1315  FORMAT(I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5, 1X, I5)\n      IF (dbg) THEN\n         WRITE (*, *) 'new FINAL index'\n         WRITE (*, 1315) transposed%row_p\n         WRITE (*, 1315) transposed%col_i\n         WRITE (*, 1315) transposed%blk_p\n      END IF\n      !\n      IF (tr_index) DEALLOCATE (blk_p)\n      !\n      IF (PRESENT(redistribute)) THEN\n         redist = redistribute\n      ELSE\n         redist = .NOT. tr_dist .AND. .NOT. shallow\n      END IF\n      IF (redist) THEN\n         !write (*,*)routineN//\" redistributing\"\n         CALL dbcsr_create(t2, template=transposed)\n         CALL dbcsr_redistribute(transposed, t2)\n         CALL dbcsr_release(transposed)\n         transposed = t2\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_new_transposed\n\n   SUBROUTINE dbcsr_transposed(transposed, normal, shallow_data_copy, &\n      !! Transposes a DBCSR matrix, keeping the same distribution\n                               transpose_data, transpose_distribution, use_distribution)\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: transposed\n      TYPE(dbcsr_type), INTENT(IN)                       :: normal\n      LOGICAL, INTENT(IN), OPTIONAL                      :: shallow_data_copy, transpose_data, &\n                                                            transpose_distribution\n      TYPE(dbcsr_distribution_obj), INTENT(IN), &\n         OPTIONAL                                        :: use_distribution\n\n      LOGICAL                                            :: myshallow_data_copy, &\n                                                            mytranspose_distribution\n      TYPE(dbcsr_distribution_obj)                           :: myuse_distribution\n\n!   set some defaults to make usage a bit less painful (fschiff)\n\n      myshallow_data_copy = .FALSE.\n      myuse_distribution = normal%dist\n      mytranspose_distribution = .FALSE.\n      IF (PRESENT(shallow_data_copy)) myshallow_data_copy = shallow_data_copy\n      IF (PRESENT(use_distribution)) myuse_distribution = use_distribution\n      IF (PRESENT(transpose_distribution)) mytranspose_distribution = transpose_distribution\n\n      CALL dbcsr_new_transposed(transposed, normal, myshallow_data_copy, &\n                                transpose_data, mytranspose_distribution, &\n                                use_distribution=myuse_distribution)\n   END SUBROUTINE dbcsr_transposed\n\n   SUBROUTINE dbcsr_desymmetrize_deep(sm, desm, untransposed_data)\n      !! Duplicates data in symmetric matrix to make it normal (w.r.t. data\n      !! structure. Can handle symmetric/antisymmetric/hermitian/skewhermitian\n      !! matrices\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: sm\n         !! input symmetric matrix\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: desm\n         !! desymmetrized matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: untransposed_data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_desymmetrize_deep'\n      INTEGER, PARAMETER                                 :: idata = 2, imeta = 1, metalen = 3\n\n      INTEGER :: blk, blk_l, blk_p, blk_ps, blks, col, col_size, dst_p, handle, &\n                 nsymmetries, numproc, nze, pcol, prow, row, row_size, src_p, stored_col, stored_row, &\n                 symmetry_i\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: rd_disp, recv_meta, rm_disp, sd_disp, &\n                                                            sdp, send_meta, sm_disp, smp\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: recv_count, send_count, &\n                                                            total_recv_count, total_send_count\n      INTEGER, DIMENSION(:), POINTER                     :: col_blk_size, col_dist, row_blk_size, &\n                                                            row_dist\n      INTEGER, DIMENSION(:, :), POINTER                  :: blacs2mpi\n      LOGICAL                                            :: make_untr, tr\n      TYPE(dbcsr_data_obj)                               :: recv_data, send_data\n      TYPE(dbcsr_distribution_obj)                       :: target_dist\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_mp_obj)                                 :: mp_obj\n      TYPE(mp_comm_type)                                 :: mp_group\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. dbcsr_valid_index(sm)) &\n         DBCSR_ABORT(\"Input matrix is invalid.\")\n      IF (dbcsr_valid_index(desm)) THEN\n         CALL dbcsr_release(desm)\n      END IF\n      CALL dbcsr_create(desm, sm, matrix_type=\"N\")\n\n      IF (PRESENT(untransposed_data)) THEN\n         make_untr = untransposed_data\n      ELSE\n         make_untr = .FALSE.\n      END IF\n      nsymmetries = 1\n      IF (sm%symmetry) THEN\n         nsymmetries = 2\n      END IF\n      row_blk_size => array_data(sm%row_blk_size)\n      col_blk_size => array_data(sm%col_blk_size)\n      target_dist = sm%dist\n      row_dist => dbcsr_distribution_row_dist(target_dist)\n      col_dist => dbcsr_distribution_col_dist(target_dist)\n      mp_obj = dbcsr_distribution_mp(target_dist)\n      blacs2mpi => dbcsr_mp_pgrid(mp_obj)\n      numproc = dbcsr_mp_numnodes(mp_obj)\n      mp_group = dbcsr_mp_group(mp_obj)\n      !\n      ALLOCATE (send_count(2, 0:numproc - 1))\n      ALLOCATE (recv_count(2, 0:numproc - 1))\n      ALLOCATE (total_send_count(2, 0:numproc - 1))\n      ALLOCATE (total_recv_count(2, 0:numproc - 1))\n      ALLOCATE (sdp(0:numproc - 1))\n      ALLOCATE (sd_disp(0:numproc - 1))\n      ALLOCATE (smp(0:numproc - 1))\n      ALLOCATE (sm_disp(0:numproc - 1))\n      ALLOCATE (rd_disp(0:numproc - 1))\n      ALLOCATE (rm_disp(0:numproc - 1))\n      !\n      desm%negate_real = sm%negate_real\n      desm%negate_imaginary = sm%negate_imaginary\n      ! Count initial sizes for sending.\n      send_count(:, :) = 0\n      CALL dbcsr_iterator_start(iter, sm)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, blk, &\n                                        row_size=row_size, col_size=col_size)\n         DO symmetry_i = 1, nsymmetries\n            IF (symmetry_i .EQ. 1) THEN\n               stored_row = row; stored_col = col\n            ELSE\n               IF (row .EQ. col) CYCLE\n               stored_row = col; stored_col = row\n            END IF\n            ! Where do we send this block?\n            prow = row_dist(stored_row)\n            pcol = col_dist(stored_col)\n            dst_p = blacs2mpi(prow, pcol)\n            nze = row_size*col_size\n            send_count(imeta, dst_p) = send_count(imeta, dst_p) + 1\n            send_count(idata, dst_p) = send_count(idata, dst_p) + nze\n         END DO ! symmetry_i\n      END DO ! iter\n      CALL dbcsr_iterator_stop(iter)\n      !\n      CALL mp_alltoall(send_count, recv_count, 2, mp_group)\n      !\n      ! Allocate data structures needed for data exchange.\n      CALL dbcsr_data_init(recv_data)\n      CALL dbcsr_data_new(recv_data, dbcsr_get_data_type(sm), &\n                          SUM(recv_count(idata, :)))\n      ALLOCATE (recv_meta(metalen*SUM(recv_count(imeta, :))))\n      CALL dbcsr_data_init(send_data)\n      CALL dbcsr_data_new(send_data, dbcsr_get_data_type(sm), &\n                          SUM(send_count(idata, :)))\n      ALLOCATE (send_meta(metalen*SUM(send_count(imeta, :))))\n      !\n      ! Fill in the meta data structures and copy the data.\n      DO dst_p = 0, numproc - 1\n         total_send_count(imeta, dst_p) = send_count(imeta, dst_p)\n         total_send_count(idata, dst_p) = send_count(idata, dst_p)\n         total_recv_count(imeta, dst_p) = recv_count(imeta, dst_p)\n         total_recv_count(idata, dst_p) = recv_count(idata, dst_p)\n      END DO\n      sd_disp = -1; sm_disp = -1\n      rd_disp = -1; rm_disp = -1\n      sd_disp(0) = 1; sm_disp(0) = 1\n      rd_disp(0) = 1; rm_disp(0) = 1\n      DO dst_p = 1, numproc - 1\n         sm_disp(dst_p) = sm_disp(dst_p - 1) &\n                          + metalen*total_send_count(imeta, dst_p - 1)\n         sd_disp(dst_p) = sd_disp(dst_p - 1) &\n                          + total_send_count(idata, dst_p - 1)\n         rm_disp(dst_p) = rm_disp(dst_p - 1) &\n                          + metalen*total_recv_count(imeta, dst_p - 1)\n         rd_disp(dst_p) = rd_disp(dst_p - 1) &\n                          + total_recv_count(idata, dst_p - 1)\n      END DO\n      sdp(:) = sd_disp\n      smp(:) = sm_disp\n      !\n      CALL dbcsr_iterator_start(iter, sm)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, blk, blk_p=blk_p, &\n                                        row_size=row_size, col_size=col_size)\n         DO symmetry_i = 1, nsymmetries\n            IF (symmetry_i .EQ. 1) THEN\n               stored_row = row; stored_col = col; tr = .FALSE.\n            ELSE\n               IF (row .EQ. col) CYCLE\n               stored_row = col; stored_col = row; tr = .TRUE.\n            END IF\n            ! Where do we send this block?\n            prow = row_dist(stored_row)\n            pcol = col_dist(stored_col)\n            dst_p = blacs2mpi(prow, pcol)\n            nze = row_size*col_size\n            send_meta(smp(dst_p)) = stored_row\n            send_meta(smp(dst_p) + 1) = stored_col\n            send_meta(smp(dst_p) + 2) = sdp(dst_p) - sd_disp(dst_p) + 1\n            IF (make_untr) THEN\n               CALL dbcsr_block_partial_copy(dst=send_data, &\n                                             dst_rs=row_size, dst_cs=col_size, &\n                                             dst_tr=symmetry_i .GT. 1, &\n                                             dst_r_lb=1, dst_c_lb=1, dst_offset=sdp(dst_p) - 1, &\n                                             nrow=row_size, ncol=col_size, &\n                                             src=sm%data_area, &\n                                             src_rs=row_size, src_cs=col_size, &\n                                             src_tr=blk_p .LT. 0, &\n                                             src_r_lb=1, src_c_lb=1, &\n                                             src_offset=ABS(blk_p) - 1)\n               IF (tr) THEN\n                  IF (sm%negate_real) THEN\n                     CALL dbcsr_block_real_neg(dst=send_data, row_size=row_size, &\n                                               col_size=col_size, lb=sdp(dst_p))\n                  END IF\n                  IF (sm%negate_imaginary) &\n                     CALL dbcsr_block_conjg(dst=send_data, row_size=row_size, &\n                                            col_size=col_size, lb=sdp(dst_p))\n               END IF\n            ELSE\n               CALL dbcsr_data_copy(send_data, (/sdp(dst_p)/), (/nze/), &\n                                    sm%data_area, (/ABS(blk_p)/), (/nze/))\n               IF (tr) &\n                  send_meta(smp(dst_p) + 2) = -send_meta(smp(dst_p) + 2)\n            END IF\n            smp(dst_p) = smp(dst_p) + metalen\n            sdp(dst_p) = sdp(dst_p) + nze\n         END DO ! symmetry_i\n      END DO ! iter\n      CALL dbcsr_iterator_stop(iter)\n      ! Exchange the data and metadata structures.\n      CALL hybrid_alltoall_any(send_data, &\n                               total_send_count(idata, :), sd_disp(:) - 1, &\n                               recv_data, &\n                               total_recv_count(idata, :), rd_disp(:) - 1, mp_obj)\n      CALL mp_alltoall(send_meta(:), metalen*total_send_count(imeta, :), sm_disp(:) - 1, &\n                       recv_meta(:), metalen*total_recv_count(imeta, :), rm_disp(:) - 1, &\n                       mp_group)\n      ! Now fill in the data.\n      CALL dbcsr_work_create(desm, &\n                             SUM(recv_count(imeta, :)), &\n                             SUM(recv_count(idata, :)), n=1, &\n                             work_mutable=.FALSE.)\n      ! Switch data data area of the work matrix with the received data\n      ! (avoids copying).\n      CALL dbcsr_data_hold(recv_data)\n      CALL dbcsr_data_release(desm%wms(1)%data_area)\n      desm%wms(1)%data_area = recv_data\n      !\n      blk_ps = 1\n      blks = 1\n      ! WRITE(*,*)rm_disp\n      ! WRITE(*,*)recv_count\n      DO src_p = 0, numproc - 1\n         IF (careful_mod) THEN\n            IF ((blks - 1)*3 /= rm_disp(src_p) - 1) &\n               DBCSR_ABORT(\"Count mismatch\")\n         END IF\n         blks = (rm_disp(src_p) - 1)/metalen + 1\n         DO blk_l = 1, recv_count(imeta, src_p)\n            stored_row = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1))\n            stored_col = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 1)\n            blk_p = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 2)\n            desm%wms(1)%row_i(blks) = stored_row\n            desm%wms(1)%col_i(blks) = stored_col\n            desm%wms(1)%blk_p(blks) = SIGN(ABS(blk_p) + (rd_disp(src_p) - 1), blk_p)\n            nze = row_blk_size(ABS(stored_row)) &\n                  *col_blk_size(stored_col)\n            blk_ps = blk_ps + nze\n            blks = blks + 1\n         END DO\n      END DO\n      !\n      desm%wms(1)%lastblk = blks - 1\n      desm%wms(1)%datasize = blk_ps - 1\n      CALL dbcsr_finalize(desm)\n      DEALLOCATE (send_count)\n      DEALLOCATE (recv_count)\n      DEALLOCATE (sdp); DEALLOCATE (sd_disp)\n      DEALLOCATE (smp); DEALLOCATE (sm_disp)\n      DEALLOCATE (rd_disp)\n      DEALLOCATE (rm_disp)\n      CALL dbcsr_data_release(recv_data)\n      DEALLOCATE (recv_meta)\n      CALL dbcsr_data_release(send_data)\n      DEALLOCATE (send_meta)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_desymmetrize_deep\n\n   SUBROUTINE dbcsr_distribute(matrix, fast)\n      !! Distributes a matrix that is currently replicated.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix to replicate\n      LOGICAL, INTENT(in), OPTIONAL                      :: fast\n         !! change just the index, don't touch the data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_distribute'\n\n      COMPLEX(KIND=dp), DIMENSION(:), POINTER, CONTIGUOUS :: c_dp\n      COMPLEX(KIND=sp), DIMENSION(:), POINTER, CONTIGUOUS :: c_sp\n      INTEGER                                            :: blk, col, handle, mynode, nblks, nze, p, &\n                                                            row\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_blk_size, row_blk_size, tmp_index\n      LOGICAL                                            :: mini, tr\n      REAL(KIND=dp), DIMENSION(:), POINTER, CONTIGUOUS   :: r_dp\n      REAL(KIND=sp), DIMENSION(:), POINTER, CONTIGUOUS   :: r_sp\n      TYPE(dbcsr_data_obj)                               :: tmp_data\n      TYPE(dbcsr_distribution_obj)                       :: dist\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_mp_obj)                                 :: mp_obj\n      TYPE(dbcsr_type)                                   :: distributed\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. dbcsr_valid_index(matrix)) &\n         DBCSR_ABORT(\"Matrix not initialized.\")\n      IF (matrix%replication_type .EQ. dbcsr_repl_none) &\n         DBCSR_WARN(\"Distributing a non-replicated matrix makes no sense.\")\n      IF (PRESENT(fast)) THEN\n         mini = fast\n      ELSE\n         mini = .FALSE.\n      END IF\n      SELECT CASE (matrix%data_type)\n      CASE (dbcsr_type_real_8)\n         CALL dbcsr_get_data(matrix%data_area, r_dp)\n      CASE (dbcsr_type_real_4)\n         CALL dbcsr_get_data(matrix%data_area, r_sp)\n         DBCSR_ABORT(\"Only real double precision\")\n      CASE (dbcsr_type_complex_8)\n         CALL dbcsr_get_data(matrix%data_area, c_dp)\n         DBCSR_ABORT(\"Only real double precision\")\n      CASE (dbcsr_type_complex_4)\n         CALL dbcsr_get_data(matrix%data_area, c_sp)\n         DBCSR_ABORT(\"Only real double precision\")\n      END SELECT\n      row_blk_size => array_data(matrix%row_blk_size)\n      col_blk_size => array_data(matrix%col_blk_size)\n      dist = dbcsr_distribution(matrix)\n      mp_obj = dbcsr_distribution_mp(dist)\n      mynode = dbcsr_mp_mynode(dbcsr_distribution_mp(dist))\n      !\n      IF (mini) THEN\n         ! We just mark the blocks as deleted.\n         CALL dbcsr_iterator_start(iter, matrix)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, r_dp, tr, blk)\n            tr = .FALSE.\n            CALL dbcsr_get_stored_coordinates(matrix, row, col, p)\n            IF (mynode .EQ. p) THEN\n               matrix%blk_p(blk) = 0\n            END IF\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         matrix%replication_type = dbcsr_repl_none\n      ELSE\n         CALL dbcsr_create(distributed, name='Distributed '//TRIM(matrix%name), &\n                           template=matrix, &\n                           matrix_type=dbcsr_type_no_symmetry, &\n                           replication_type=dbcsr_repl_none)\n         distributed%replication_type = dbcsr_repl_none\n         ! First count how many blocks are local.\n         nze = 0\n         nblks = 0\n         CALL dbcsr_iterator_start(iter, matrix)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, r_dp, tr, blk)\n            tr = .FALSE.\n            CALL dbcsr_get_stored_coordinates(matrix, row, col, p)\n            IF (mynode .EQ. p) THEN\n               nze = nze + row_blk_size(row)*col_blk_size(col)\n               nblks = nblks + 1\n            END IF\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         ! Preallocate the array\n         CALL dbcsr_work_create(distributed, nblks_guess=nblks, &\n                                sizedata_guess=nze, work_mutable=.FALSE.)\n         ! Now actually do the work\n         CALL dbcsr_iterator_start(iter, matrix)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, r_dp, tr, blk)\n            tr = .FALSE.\n            CALL dbcsr_get_stored_coordinates(matrix, row, col, p)\n            IF (mynode .EQ. p) THEN\n               CALL dbcsr_put_block(distributed, row, col, r_dp, transposed=tr)\n            END IF\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_finalize(distributed)\n         ! Now replace the data and index\n         CALL dbcsr_switch_data_area(matrix, distributed%data_area, &\n                                     previous_data_area=tmp_data)\n         CALL dbcsr_switch_data_area(distributed, tmp_data)\n         CALL dbcsr_data_release(tmp_data)\n         tmp_index => matrix%index\n         matrix%index => distributed%index\n         distributed%index => tmp_index\n         CALL dbcsr_repoint_index(matrix)\n         matrix%nze = distributed%nze\n         matrix%nblks = distributed%nblks\n         CALL dbcsr_release(distributed)\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_distribute\n\n   SUBROUTINE dbcsr_make_untransposed_blocks(matrix)\n      !! Detransposes all blocks in a matrix\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! DBCSR matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_untransposed_blocks'\n\n      INTEGER                                            :: blk, col, col_size, handle, row, row_size\n      INTEGER, DIMENSION(:), POINTER                     :: cbs, rbs\n      LOGICAL                                            :: sym_negation, tr\n      TYPE(dbcsr_data_obj)                               :: block_data\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      rbs => dbcsr_row_block_sizes(matrix)\n      cbs => dbcsr_col_block_sizes(matrix)\n      sym_negation = matrix%negate_real\n\n!$OMP PARALLEL DEFAULT(NONE) PRIVATE(block_data,iter,row,col,tr,blk,row_size,col_size) &\n!$OMP          SHARED(matrix,rbs,cbs,sym_negation)\n      CALL dbcsr_data_init(block_data)\n      CALL dbcsr_data_new(block_data, dbcsr_get_data_type(matrix))\n      CALL dbcsr_iterator_start(iter, matrix)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, block_data, &\n                                        transposed=tr, &\n                                        block_number=blk)\n         IF (tr) THEN\n            row_size = rbs(row)\n            col_size = cbs(col)\n            CALL dbcsr_block_transpose(block_data, col_size, row_size)\n            IF (sym_negation) THEN\n               SELECT CASE (block_data%d%data_type)\n               CASE (dbcsr_type_real_4)\n                  block_data%d%r_sp(:) = -block_data%d%r_sp(:)\n               CASE (dbcsr_type_real_8)\n                  block_data%d%r_dp(:) = -block_data%d%r_dp(:)\n               CASE (dbcsr_type_complex_4)\n                  block_data%d%c_sp(:) = -block_data%d%c_sp(:)\n               CASE (dbcsr_type_complex_8)\n                  block_data%d%c_dp(:) = -block_data%d%c_dp(:)\n               END SELECT\n            END IF\n            matrix%blk_p(blk) = -matrix%blk_p(blk)\n         END IF\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(block_data)\n      CALL dbcsr_data_release(block_data)\n!$OMP END PARALLEL\n\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_make_untransposed_blocks\n\n   SUBROUTINE dbcsr_make_dense(matrix, dense_matrix, dense_dist, &\n                               dense_row_sizes, dense_col_sizes, row_map, col_map)\n      !! Makes a dense matrix, inplace.\n      !! @note\n      !! Used for making matrices dense/undense\n      !! @endnote\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix to make dense\n      TYPE(dbcsr_type), INTENT(OUT)                      :: dense_matrix\n      TYPE(dbcsr_distribution_obj), INTENT(INOUT)        :: dense_dist\n      TYPE(array_i1d_obj), INTENT(IN)                    :: dense_row_sizes, dense_col_sizes, &\n                                                            row_map, col_map\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_dense'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: handle\n      REAL(kind=dp)                                      :: cs\n      TYPE(array_i1d_obj)                                :: dense_local_cols, dense_local_rows\n      TYPE(dbcsr_distribution_obj)                       :: old_distribution\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      CALL dbcsr_create(dense_matrix, template=matrix, &\n                        dist=dense_dist, &\n                        row_blk_size_obj=dense_row_sizes, &\n                        col_blk_size_obj=dense_col_sizes)\n      !\n      IF (dbg) THEN\n         cs = dbcsr_checksum(matrix)\n         WRITE (*, *) routineN//\" prod cs pre\", cs\n      END IF\n      old_distribution = dbcsr_distribution(matrix)\n      ! Conversion of global to local offsets for the dense blocks\n      CALL dbcsr_get_local_rows(dense_dist, dense_local_rows, &\n                                dense_matrix%index(dbcsr_slot_home_prow))\n      CALL dbcsr_get_local_cols(dense_dist, dense_local_cols, &\n                                dense_matrix%index(dbcsr_slot_home_pcol))\n      !\n      CALL dbcsr_make_dense_low(matrix, dense_matrix, &\n                                dbcsr_distribution_local_rows(old_distribution), &\n                                dbcsr_distribution_local_cols(old_distribution), &\n                                array_data(matrix%row_blk_offset), &\n                                array_data(matrix%col_blk_offset), &\n                                array_data(dense_local_rows), array_data(dense_local_cols), &\n                                array_data(dense_matrix%row_blk_offset), &\n                                array_data(dense_matrix%col_blk_offset), &\n                                array_data(row_map), array_data(col_map), .TRUE., .TRUE.)\n      IF (dbg) THEN\n         cs = dbcsr_checksum(dense_matrix)\n         WRITE (*, *) routineN//\" prod cs pst\", cs\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_make_dense\n\n   SUBROUTINE dbcsr_make_dense_low(und_matrix, dense_matrix, &\n                                   und_local_rows, und_local_cols, &\n                                   und_row_blk_offsets, und_col_blk_offsets, &\n                                   dense_local_rows, dense_local_cols, &\n                                   dense_row_blk_offsets, dense_col_blk_offsets, &\n                                   row_map, col_map, join_rows, join_cols)\n      !! Copies a matrix and makes its data dense.\n      !! @note\n      !! the dense_matrix must have been created\n      !! @endnote\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: und_matrix\n         !! Original non-dense matrix\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: dense_matrix\n         !! Dense copy of und_matrix\n      INTEGER, DIMENSION(:), INTENT(IN) :: und_local_rows, und_local_cols, und_row_blk_offsets, &\n                                           und_col_blk_offsets, dense_local_rows, dense_local_cols, dense_row_blk_offsets, &\n                                           dense_col_blk_offsets, row_map, col_map\n         !! The process-grid local rows of the non-dense und_matrix\n         !! The process-grid local columns of the non-dense und_matrix\n         !! The block offsets of the rows of the non-dense matrix\n         !! The block offsets of the columns of the non-dense matrix\n         !! The process-grid local rows of the dense matrix\n         !! The process-grid local columns of the dense matrix\n         !! The block offsets of the rows of the dense matrix\n         !! The block offsets of the columns of the dense matrix\n         !! Mapping of non-dense rows to dense rows\n         !! Mapping of non-dense columns to dense columns\n      LOGICAL, INTENT(IN)                                :: join_rows, join_cols\n         !! Make rows dense\n         !! Make columns dense\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_dense_low'\n\n      INTEGER :: dense_nblkcols_local, dense_nblkcols_total, dense_nblkrows_local, &\n                 dense_nblkrows_total, dense_nlocal_blocks, error_handle, nfullcols, nfullrows, &\n                 und_nblkcols_total, und_nblkrows_total\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: col_internal_offsets, dense_local_col_blk_offsets, &\n                                            dense_local_row_blk_offsets, row_internal_offsets, und_local_col_blk_offsets, &\n                                            und_local_row_blk_offsets\n      INTEGER, DIMENSION(dbcsr_meta_size)                :: meta\n      TYPE(dbcsr_data_obj)                               :: dense_data, und_data\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      !\n      nfullrows = nfull_elements(und_row_blk_offsets, und_local_rows)\n      nfullcols = nfull_elements(und_col_blk_offsets, und_local_cols)\n      !\n      und_nblkrows_total = SIZE(und_row_blk_offsets) - 1\n      und_nblkcols_total = SIZE(und_col_blk_offsets) - 1\n      !\n      ! Find the local data offsets (but indexed by the global\n      ! rows/columns) for the undense data.\n      ALLOCATE (und_local_row_blk_offsets(und_nblkrows_total + 1))\n      ALLOCATE (und_local_col_blk_offsets(und_nblkcols_total + 1))\n      CALL global_offsets_to_local( &\n         und_row_blk_offsets, &\n         und_local_rows, &\n         und_local_row_blk_offsets)\n      CALL global_offsets_to_local( &\n         und_col_blk_offsets, &\n         und_local_cols, &\n         und_local_col_blk_offsets)\n      !\n      dense_nblkrows_total = SIZE(dense_row_blk_offsets) - 1\n      dense_nblkcols_total = SIZE(dense_col_blk_offsets) - 1\n      dense_nblkrows_local = SIZE(dense_local_rows)\n      dense_nblkcols_local = SIZE(dense_local_cols)\n      !\n      ! Find the local data offsets (but indexed by the (dense) global\n      ! rows/columns) for the dense data.\n      ALLOCATE (dense_local_row_blk_offsets(dense_nblkrows_total + 1))\n      ALLOCATE (dense_local_col_blk_offsets(dense_nblkcols_total + 1))\n      CALL global_offsets_to_local( &\n         dense_row_blk_offsets, &\n         dense_local_rows, &\n         dense_local_row_blk_offsets)\n      CALL global_offsets_to_local( &\n         dense_col_blk_offsets, &\n         dense_local_cols, &\n         dense_local_col_blk_offsets)\n      ! Find the offset of blocks within dense rows/columns.  This is needed\n      ! since the blocked rows/columns are not necessarily in the same order.\n      ALLOCATE (row_internal_offsets(und_nblkrows_total))\n      ALLOCATE (col_internal_offsets(und_nblkcols_total))\n      CALL get_internal_offsets( &\n         und_local_rows, row_map, &\n         und_local_row_blk_offsets, &\n         dense_local_row_blk_offsets, &\n         row_internal_offsets)\n      CALL get_internal_offsets( &\n         und_local_cols, col_map, &\n         und_local_col_blk_offsets, &\n         dense_local_col_blk_offsets, &\n         col_internal_offsets)\n      !\n      und_data = und_matrix%data_area\n      CALL dbcsr_data_hold(und_data)\n      CALL dbcsr_data_init(dense_data)\n      CALL dbcsr_data_new(dense_data, dbcsr_data_get_type(und_data), &\n                          data_size=nfullrows*nfullcols, &\n                          memory_type=dbcsr_data_get_memory_type(und_data))\n      !\n      ! Reshuffle the data\n      CALL make_dense_data(und_matrix, &\n                           dense_data, nfullrows, nfullcols, &\n                           und_local_row_blk_offsets, und_local_col_blk_offsets, &\n                           dense_local_row_blk_offsets, dense_local_col_blk_offsets, &\n                           row_map=row_map, col_map=col_map, &\n                           row_internal_offsets=row_internal_offsets, &\n                           col_internal_offsets=col_internal_offsets, &\n                           join_rows=join_rows, join_cols=join_cols, make_tr=.FALSE.)\n      CALL dbcsr_switch_data_area(dense_matrix, dense_data)\n      CALL dbcsr_data_release(dense_data)\n      CALL dbcsr_data_release(und_data)\n      !\n      ! Create the new dense index.\n      dense_nlocal_blocks = dense_nblkrows_local*dense_nblkcols_local\n      CALL dbcsr_addto_index_array(dense_matrix, &\n                                   dbcsr_slot_row_p, &\n                                   reservation=dense_nblkrows_total + 1, extra=2*dense_nlocal_blocks)\n      CALL dbcsr_addto_index_array(dense_matrix, &\n                                   dbcsr_slot_col_i, &\n                                   reservation=dense_nlocal_blocks)\n      CALL dbcsr_addto_index_array(dense_matrix, &\n                                   dbcsr_slot_blk_p, &\n                                   reservation=dense_nlocal_blocks)\n      !\n      meta = dense_matrix%index(1:dbcsr_meta_size)\n      CALL dbcsr_pack_meta(dense_matrix, meta)\n      meta(dbcsr_slot_nze) = nfullrows*nfullcols\n      meta(dbcsr_slot_nblks) = dense_nlocal_blocks\n      CALL make_dense_index(dense_matrix%row_p, &\n                            dense_matrix%col_i, &\n                            dense_matrix%blk_p, &\n                            dense_nblkrows_total, dense_nblkcols_total, &\n                            dense_local_rows, &\n                            dense_local_cols, &\n                            dense_local_row_blk_offsets, &\n                            dense_local_col_blk_offsets, &\n                            make_tr=.FALSE., &\n                            meta=meta)\n      CALL dbcsr_unpack_meta(dense_matrix, meta)\n      !\n      DEALLOCATE (und_local_row_blk_offsets)\n      DEALLOCATE (und_local_col_blk_offsets)\n      DEALLOCATE (dense_local_row_blk_offsets)\n      DEALLOCATE (dense_local_col_blk_offsets)\n      DEALLOCATE (row_internal_offsets)\n      DEALLOCATE (col_internal_offsets)\n      !\n      CALL timestop(error_handle)\n   END SUBROUTINE dbcsr_make_dense_low\n\n   SUBROUTINE dbcsr_make_undense(matrix, undense_matrix, distribution, &\n                                 row_blk_offsets, col_blk_offsets, row_blk_sizes, col_blk_sizes, &\n                                 row_map, col_map)\n      !! Makes a blocked matrix from a dense matrix, inplace\n      !! @note\n      !! Used for making matrices dense/undense\n      !! @endnote\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! dense matrix\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: undense_matrix\n         !! matrix to make undense\n      TYPE(dbcsr_distribution_obj), INTENT(IN)           :: distribution\n         !! distribution of non-dense rows and columns\n      TYPE(array_i1d_obj), INTENT(IN)                    :: row_blk_offsets, col_blk_offsets, &\n                                                            row_blk_sizes, col_blk_sizes, row_map, &\n                                                            col_map\n         !! non-dense row block offsets\n         !! non-dense column block offsets\n         !! non-dense row block sizes\n         !! non-dense column block sizes\n         !! mapping from non-dense rows\n         !! mapping from non-dense columns\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_make_undense'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: handle, nblkcols_local, nblkcols_total, &\n                                                            nblkrows_local, nblkrows_total, &\n                                                            nfullcols_local, nfullrows_local\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: col_internal_offsets, dense_local_col_blk_offsets, &\n                                            dense_local_row_blk_offsets, local_col_blk_offsets, local_row_blk_offsets, &\n                                            row_internal_offsets\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: local_cols, local_rows, meta\n      REAL(kind=dp)                                      :: cs\n      TYPE(dbcsr_data_obj)                               :: blocked_data, dense_data\n      TYPE(dbcsr_distribution_obj)                       :: dense_distribution\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (dbg) THEN\n         cs = dbcsr_checksum(matrix)\n         WRITE (*, *) routineN//\" prod cs pre\", cs\n      END IF\n      dense_distribution = dbcsr_distribution(matrix)\n      nfullrows_local = matrix%nfullrows_local\n      nfullcols_local = matrix%nfullcols_local\n      nblkrows_local = dbcsr_distribution_nlocal_rows(distribution)\n      nblkcols_local = dbcsr_distribution_nlocal_cols(distribution)\n      nblkrows_total = dbcsr_distribution_nrows(distribution)\n      nblkcols_total = dbcsr_distribution_ncols(distribution)\n      local_rows => dbcsr_distribution_local_rows(distribution)\n      local_cols => dbcsr_distribution_local_cols(distribution)\n      CALL dbcsr_create(undense_matrix, template=matrix, &\n                        dist=distribution, &\n                        row_blk_size_obj=row_blk_sizes, &\n                        col_blk_size_obj=col_blk_sizes)\n      ! Restore previous offsets, just to try to keep the same memory.\n      CALL array_release(undense_matrix%row_blk_offset)\n      CALL array_release(undense_matrix%col_blk_offset)\n      undense_matrix%row_blk_offset = row_blk_offsets\n      undense_matrix%col_blk_offset = col_blk_offsets\n      CALL array_hold(undense_matrix%row_blk_offset)\n      CALL array_hold(undense_matrix%col_blk_offset)\n      !\n      ALLOCATE (local_row_blk_offsets(nblkrows_total + 1))\n      ALLOCATE (local_col_blk_offsets(nblkcols_total + 1))\n      CALL dbcsr_clearfrom_index_array(undense_matrix, dbcsr_slot_row_p)\n      CALL dbcsr_clearfrom_index_array(undense_matrix, dbcsr_slot_col_i)\n      CALL dbcsr_clearfrom_index_array(undense_matrix, dbcsr_slot_blk_p)\n      CALL dbcsr_addto_index_array(undense_matrix, dbcsr_slot_row_p, &\n                                   reservation=nblkrows_total + 1, extra=nblkrows_local*nblkcols_local*2)\n      CALL dbcsr_addto_index_array(undense_matrix, dbcsr_slot_col_i, &\n                                   reservation=nblkrows_local*nblkcols_local)\n      CALL dbcsr_addto_index_array(undense_matrix, dbcsr_slot_blk_p, &\n                                   reservation=nblkrows_local*nblkcols_local)\n      meta => undense_matrix%index(1:dbcsr_meta_size)\n      CALL dbcsr_pack_meta(undense_matrix, meta)\n      meta(dbcsr_slot_nblks) = nblkrows_local*nblkcols_local\n      meta(dbcsr_slot_nze) = nfullrows_local*nfullcols_local\n      CALL global_offsets_to_local(array_data(row_blk_offsets), &\n                                   local_rows, local_row_blk_offsets(1:nblkrows_local + 1))\n      CALL global_offsets_to_local(array_data(col_blk_offsets), &\n                                   local_cols, local_col_blk_offsets(1:nblkcols_local + 1))\n      CALL make_undense_index(undense_matrix%row_p, undense_matrix%col_i, undense_matrix%blk_p, &\n                              distribution, &\n                              local_row_blk_offsets(1:nblkrows_local + 1), &\n                              local_col_blk_offsets(1:nblkcols_local + 1), &\n                              meta)\n      CALL dbcsr_unpack_meta(undense_matrix, meta)\n      !\n      CALL global_offsets_to_local(array_data(row_blk_offsets), &\n                                   local_rows, local_row_blk_offsets)\n      CALL global_offsets_to_local(array_data(col_blk_offsets), &\n                                   local_cols, local_col_blk_offsets)\n      !\n      ALLOCATE (dense_local_row_blk_offsets(1 + dbcsr_distribution_nrows(dense_distribution)))\n      ALLOCATE (dense_local_col_blk_offsets(1 + dbcsr_distribution_ncols(dense_distribution)))\n      CALL global_offsets_to_local(array_data(matrix%row_blk_offset), &\n                                   dbcsr_distribution_local_rows(dense_distribution), &\n                                   dense_local_row_blk_offsets)\n      CALL global_offsets_to_local(array_data(matrix%col_blk_offset), &\n                                   dbcsr_distribution_local_cols(dense_distribution), &\n                                   dense_local_col_blk_offsets)\n      ! Find the offset of blocks within dense rows/columns.  This is needed\n      ! since the blocked rows/columns are not necessarily in the same order.\n      ALLOCATE (row_internal_offsets(nblkrows_total))\n      ALLOCATE (col_internal_offsets(nblkcols_total))\n      CALL get_internal_offsets( &\n         local_rows, array_data(row_map), &\n         local_row_blk_offsets, &\n         dense_local_row_blk_offsets, &\n         row_internal_offsets)\n      CALL get_internal_offsets( &\n         local_cols, array_data(col_map), &\n         local_col_blk_offsets, &\n         dense_local_col_blk_offsets, &\n         col_internal_offsets)\n      !\n      dense_data = matrix%data_area\n      CALL dbcsr_data_hold(dense_data)\n      CALL dbcsr_data_init(blocked_data)\n      CALL dbcsr_data_new(blocked_data, dbcsr_data_get_type(dense_data), &\n                          data_size=nfullrows_local*nfullcols_local, &\n                          memory_type=dbcsr_data_get_memory_type(dense_data))\n      CALL dbcsr_switch_data_area(undense_matrix, blocked_data)\n      CALL dbcsr_data_release(blocked_data)\n      ! Reshuffle the data\n      CALL make_undense_data(undense_matrix, dense_data, &\n                             nfullrows_local, nfullcols_local, &\n                             dense_local_row_blk_offsets, dense_local_col_blk_offsets, &\n                             array_data(row_map), array_data(col_map), &\n                             row_internal_offsets, col_internal_offsets)\n      CALL dbcsr_data_release(dense_data)\n      IF (dbg) THEN\n         cs = dbcsr_checksum(matrix)\n         WRITE (*, *) routineN//\" prod cs pst\", cs\n      END IF\n      DEALLOCATE (local_row_blk_offsets)\n      DEALLOCATE (local_col_blk_offsets)\n      DEALLOCATE (dense_local_row_blk_offsets)\n      DEALLOCATE (dense_local_col_blk_offsets)\n      DEALLOCATE (row_internal_offsets)\n      DEALLOCATE (col_internal_offsets)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_make_undense\n\n   SUBROUTINE make_dense_data(matrix, dense_data, nfullrows, nfullcols, &\n                              und_row_blk_offsets, und_col_blk_offsets, &\n                              dense_row_blk_offsets, dense_col_blk_offsets, &\n                              row_map, col_map, &\n                              row_internal_offsets, col_internal_offsets, &\n                              join_rows, join_cols, make_tr)\n      !! Shuffles the data from blocked to standard dense form\n      !! @note\n      !! Used for making matrices dense/undense\n      !! @endnote\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! Existing blocked matrix\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: dense_data\n         !! Dense data\n      INTEGER, INTENT(IN)                                :: nfullrows, nfullcols\n         !! size of new data\n         !! size of new data\n      INTEGER, DIMENSION(:), INTENT(IN) :: und_row_blk_offsets, und_col_blk_offsets, &\n                                           dense_row_blk_offsets, dense_col_blk_offsets, row_map, col_map, row_internal_offsets, &\n                                           col_internal_offsets\n      LOGICAL, INTENT(IN)                                :: join_rows, join_cols, make_tr\n         !! make rows dense, default is yes\n         !! make columns dense, default is yes\n         !! make the dense blocks transposed\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'make_dense_data'\n\n      INTEGER :: blk_col, blk_col_size, blk_row, blk_row_size, dense_col, dense_row, error_handle, &\n                 target_col_offset, target_cs, target_offset, target_row_offset, target_rs, tco, tro\n      LOGICAL                                            :: tr\n      TYPE(dbcsr_data_obj)                               :: block\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      IF (dbcsr_data_get_size(dense_data) < nfullrows*nfullcols) &\n         DBCSR_ABORT(\"Dense data too small\")\n      IF (.NOT. join_cols .AND. .NOT. join_rows) &\n         DBCSR_WARN(\"Joining neither rows nor columns is untested\")\n      !\n      CALL dbcsr_data_clear(dense_data)\n      IF (dbcsr_data_get_size(matrix%data_area) .GT. 0 &\n          .AND. nfullrows .GT. 0 .AND. nfullcols .GT. 0) THEN\n!$OMP PARALLEL DEFAULT(NONE) &\n!$OMP PRIVATE (block, iter, &\n!$OMP         target_rs, target_cs, blk_row, blk_col, tr, blk_row_size, blk_col_size,&\n!$OMP         tro, tco, target_offset,&\n!$OMP         target_row_offset, target_col_offset,&\n!$OMP         dense_row, dense_col) &\n!$OMP SHARED (&\n!$OMP         dense_data, matrix, &\n!$OMP         make_tr, join_rows, join_cols, &\n!$OMP         und_row_blk_offsets, und_col_blk_offsets,&\n!$OMP         dense_row_blk_offsets, dense_col_blk_offsets,&\n!$OMP         row_internal_offsets, col_internal_offsets,&\n!$OMP         row_map, col_map,&\n!$OMP         nfullrows, nfullcols)\n         CALL dbcsr_data_init(block)\n         CALL dbcsr_data_new(block, &\n                             dbcsr_type_1d_to_2d(dbcsr_data_get_type(dense_data)))\n         CALL dbcsr_iterator_start(iter, matrix, dynamic=.TRUE., shared=.TRUE., &\n                                   contiguous_pointers=.FALSE., read_only=.TRUE.)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, blk_row, blk_col, block, tr, &\n                                           row_size=blk_row_size, col_size=blk_col_size)\n            dense_row = row_map(blk_row)\n            dense_col = col_map(blk_col)\n            !\n            ! Calculate the target block row/column size and the offset\n            ! within the target block where the undense block is placed.\n            IF (join_rows) THEN\n               target_row_offset = dense_row_blk_offsets(dense_row)\n               target_rs = dense_row_blk_offsets(dense_row + 1) - &\n                           dense_row_blk_offsets(dense_row)\n               tro = 1 + row_internal_offsets(blk_row)\n            ELSE\n               target_row_offset = und_row_blk_offsets(blk_row)\n               target_rs = blk_row_size\n               tro = 1\n            END IF\n            IF (join_cols) THEN\n               target_col_offset = dense_col_blk_offsets(dense_col)\n               target_cs = dense_col_blk_offsets(dense_col + 1) - &\n                           dense_col_blk_offsets(dense_col)\n               tco = 1 + col_internal_offsets(blk_col)\n            ELSE\n               target_col_offset = und_col_blk_offsets(blk_col)\n               target_cs = blk_col_size\n               tco = 1\n            END IF\n            target_offset = (target_row_offset - 1)*nfullcols &\n                            + (target_col_offset - 1)*( &\n                            dense_row_blk_offsets(dense_row + 1) - &\n                            dense_row_blk_offsets(dense_row))\n            CALL dbcsr_block_partial_copy(dst=dense_data, &\n                                          dst_offset=target_offset, &\n                                          dst_rs=target_rs, dst_cs=target_cs, dst_tr=make_tr, &\n                                          dst_r_lb=tro, dst_c_lb=tco, &\n                                          src=block, src_rs=blk_row_size, src_cs=blk_col_size, src_tr=tr, &\n                                          src_r_lb=1, src_c_lb=1, nrow=blk_row_size, ncol=blk_col_size)\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_data_clear_pointer(block)\n         CALL dbcsr_data_release(block)\n!$OMP END PARALLEL\n      END IF\n      CALL timestop(error_handle)\n   END SUBROUTINE make_dense_data\n\n   SUBROUTINE make_undense_data(matrix, dense_data, nfullrows, nfullcols, &\n                                dense_row_blk_offsets, dense_col_blk_offsets, &\n                                row_map, col_map, row_internal_offsets, col_internal_offsets)\n      !! Shuffles the data from standard dense to blocked form\n      !! @note\n      !! Used for making matrices dense/undense\n      !! @endnote\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! Matrix with data to fill\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: dense_data\n         !! Dense data\n      INTEGER, INTENT(IN)                                :: nfullrows, nfullcols\n         !! number of full rows in local submatrix\n         !! number of full columns in local submatrix\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: dense_row_blk_offsets, &\n                                                            dense_col_blk_offsets, row_map, &\n                                                            col_map, row_internal_offsets, &\n                                                            col_internal_offsets\n         !! row block offsets for dense data\n         !! column block offsets for dense data\n         !! mapping from undense to dense rows\n         !! mapping from undense to dense rows\n\n      INTEGER :: blk_col, blk_col_size, blk_row, blk_row_size, dense_col, dense_col_offset, &\n                 dense_cs, dense_offset, dense_row, dense_row_offset, dense_rs, sco, sro\n      LOGICAL                                            :: tr\n      TYPE(dbcsr_data_obj)                               :: block\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      IF (dbcsr_data_get_size(dense_data) < nfullrows*nfullcols) &\n         DBCSR_ABORT(\"Dense data too small\")\n      IF (dbcsr_data_get_size(matrix%data_area) .GT. 0) THEN\n         CALL dbcsr_data_clear(matrix%data_area)\n!$OMP PARALLEL DEFAULT(NONE) &\n!$OMP PRIVATE (block, iter,&\n!$OMP          blk_row, blk_col, tr,&\n!$OMP          blk_row_size, blk_col_size, sro, sco,&\n!$OMP          dense_row_offset, dense_col_offset, dense_row, dense_col,&\n!$OMP          dense_cs, dense_rs,&\n!$OMP          dense_offset) &\n!$OMP SHARED (&\n!$OMP         matrix, dense_data, &\n!$OMP         nfullrows, nfullcols, &\n!$OMP         dense_row_blk_offsets, dense_col_blk_offsets,&\n!$OMP         row_map, col_map,&\n!$OMP         row_internal_offsets, col_internal_offsets)\n         CALL dbcsr_data_init(block)\n         CALL dbcsr_data_new(block, &\n                             dbcsr_type_1d_to_2d(dbcsr_data_get_type(dense_data)))\n         CALL dbcsr_iterator_start(iter, matrix, dynamic=.TRUE., shared=.TRUE., &\n                                   contiguous_pointers=.FALSE.)\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, blk_row, blk_col, block, tr, &\n                                           row_size=blk_row_size, col_size=blk_col_size)\n            dense_row = row_map(blk_row)\n            dense_col = col_map(blk_col)\n            dense_row_offset = dense_row_blk_offsets(dense_row)\n            dense_col_offset = dense_col_blk_offsets(dense_col)\n            dense_rs = dense_row_blk_offsets(dense_row + 1) - &\n                       dense_row_blk_offsets(dense_row)\n            dense_cs = dense_col_blk_offsets(dense_col + 1) - &\n                       dense_col_blk_offsets(dense_col)\n            sro = 1 + row_internal_offsets(blk_row)\n            sco = 1 + col_internal_offsets(blk_col)\n            dense_offset = (dense_row_offset - 1)*nfullcols &\n                           + (dense_col_offset - 1)*dense_rs\n            CALL dbcsr_block_partial_copy( &\n               dst=block, dst_rs=blk_row_size, dst_cs=blk_col_size, dst_tr=tr, &\n               dst_r_lb=1, dst_c_lb=1, &\n               src=dense_data, src_offset=dense_offset, &\n               src_rs=dense_rs, src_cs=dense_cs, src_tr=.FALSE., &\n               src_r_lb=sro, src_c_lb=sco, &\n               nrow=blk_row_size, ncol=blk_col_size)\n         END DO\n         CALL dbcsr_iterator_stop(iter)\n         CALL dbcsr_data_clear_pointer(block)\n         CALL dbcsr_data_release(block)\n!$OMP END PARALLEL\n      END IF\n   END SUBROUTINE make_undense_data\n\n   SUBROUTINE dbcsr_replicate_all(matrix)\n      !! Replicates a DBCSR on all processors.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix to replicate\n\n      CALL dbcsr_replicate(matrix, replicate_rows=.TRUE., &\n                           replicate_columns=.TRUE.)\n   END SUBROUTINE dbcsr_replicate_all\n\n   SUBROUTINE dbcsr_replicate(matrix, replicate_rows, replicate_columns, &\n                              restrict_source)\n      !! Replicates a DBCSR matrix among process rows and columns\n      !!\n      !! Direction definition\n      !! Row replication means that all processors in a process grid sharing\n      !! the same row get the data of the entire row. (In a 1-column grid the\n      !! operation has no effect.) Similar logic applies to column replication.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix to replicate\n      LOGICAL, INTENT(IN)                                :: replicate_rows, replicate_columns\n         !! Row should be replicated among all processors\n         !! Column should be replicated among all processors\n      INTEGER, INTENT(IN), OPTIONAL                      :: restrict_source\n         !! Send only from this node (ignores blocks on other nodes)\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_replicate'\n      INTEGER, PARAMETER                                 :: metalen = 3\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      CHARACTER                                          :: rep_type\n      INTEGER :: blk, blk_l, blk_p, blk_ps, blks, col, col_size, data_type, dst_p, handle, &\n                 mynode, mypcol, myprow, nblks, numnodes, nze, offset, row, row_size, smp, &\n                 src_p, stored_blk_p, stored_col, stored_row\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: rd_disp, recv_meta, rm_disp, send_meta\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: recv_count\n      INTEGER, DIMENSION(2)                              :: send_count\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_blk_size, col_dist, row_blk_size, &\n                                                            row_dist, tmp_index\n      INTEGER, DIMENSION(:, :), POINTER                  :: blacs2mpi\n      LOGICAL                                            :: had_subcomms, i_am_restricted, rest_src, &\n                                                            tr\n      TYPE(dbcsr_data_obj)                               :: data_block, recv_data, send_data, &\n                                                            tmp_data\n      TYPE(dbcsr_distribution_obj)                       :: target_dist\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_mp_obj)                                 :: mp_obj\n      TYPE(dbcsr_type)                                   :: replicated\n      TYPE(mp_comm_type)                                 :: mp_group\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (.NOT. dbcsr_valid_index(matrix)) &\n         DBCSR_ABORT(\"Matrix not initialized.\")\n      !IF(matrix%replication_type /= dbcsr_repl_none) &\n      !   DBCSR_WARN(\"Replicating a non-distributed matrix makes no sense.\")\n      IF (replicate_rows .AND. replicate_columns) THEN\n         rep_type = dbcsr_repl_full\n      ELSEIF (replicate_rows .AND. .NOT. replicate_columns) THEN\n         rep_type = dbcsr_repl_row\n      ELSEIF (replicate_columns .AND. .NOT. replicate_rows) THEN\n         rep_type = dbcsr_repl_col\n      ELSE\n         rep_type = dbcsr_repl_none\n         IF (.NOT. replicate_rows .AND. .NOT. replicate_columns) &\n            DBCSR_ABORT(\"Some replication must be specified\")\n      END IF\n      data_type = dbcsr_get_data_type(matrix)\n      row_blk_size => array_data(matrix%row_blk_size)\n      col_blk_size => array_data(matrix%col_blk_size)\n      target_dist = matrix%dist\n      row_dist => dbcsr_distribution_row_dist(target_dist)\n      col_dist => dbcsr_distribution_col_dist(target_dist)\n      mp_obj = dbcsr_distribution_mp(target_dist)\n      blacs2mpi => dbcsr_mp_pgrid(mp_obj)\n      numnodes = dbcsr_mp_numnodes(mp_obj)\n      mynode = dbcsr_mp_mynode(mp_obj)\n      myprow = dbcsr_mp_myprow(mp_obj)\n      mypcol = dbcsr_mp_mypcol(mp_obj)\n      IF (MAXVAL(row_dist) .GT. UBOUND(blacs2mpi, 1)) &\n         DBCSR_ABORT('Row distribution references unexistent processor rows')\n      IF (dbg) THEN\n         IF (MAXVAL(row_dist) .NE. UBOUND(blacs2mpi, 1)) &\n            DBCSR_WARN('Range of row distribution not equal to processor rows')\n      END IF\n      IF (MAXVAL(col_dist) .GT. UBOUND(blacs2mpi, 2)) &\n         DBCSR_ABORT('Col distribution references unexistent processor cols')\n      IF (dbg) THEN\n         IF (MAXVAL(col_dist) .NE. UBOUND(blacs2mpi, 2)) &\n            DBCSR_WARN('Range of col distribution not equal to processor cols')\n      END IF\n      ! Define the number of nodes with which I will communicate. Also\n      ! setup row and column communicators.\n      had_subcomms = dbcsr_mp_has_subgroups(mp_obj)\n      SELECT CASE (rep_type)\n      CASE (dbcsr_repl_full)\n         numnodes = dbcsr_mp_numnodes(mp_obj)\n         mp_group = dbcsr_mp_group(mp_obj)\n         mynode = dbcsr_mp_mynode(mp_obj)\n      CASE (dbcsr_repl_row)\n         numnodes = dbcsr_mp_npcols(mp_obj)\n         CALL dbcsr_mp_grid_setup(mp_obj)\n         mp_group = dbcsr_mp_my_row_group(mp_obj)\n         mynode = dbcsr_mp_mypcol(mp_obj)\n      CASE (dbcsr_repl_col)\n         numnodes = dbcsr_mp_nprows(mp_obj)\n         CALL dbcsr_mp_grid_setup(mp_obj)\n         mp_group = dbcsr_mp_my_col_group(mp_obj)\n         mynode = dbcsr_mp_myprow(mp_obj)\n      CASE (dbcsr_repl_none)\n         numnodes = 1\n         mp_group = dbcsr_mp_group(mp_obj)\n         mynode = 0\n      END SELECT\n      IF ((rep_type == dbcsr_repl_row .OR. rep_type == dbcsr_repl_col) .AND. .NOT. dbcsr_mp_has_subgroups(mp_obj)) &\n         DBCSR_ABORT(\"Only full replication supported when subcommunicators are turned off.\")\n      !\n      IF (PRESENT(restrict_source)) THEN\n         rest_src = .TRUE.\n         i_am_restricted = mynode .NE. restrict_source\n      ELSE\n         rest_src = .FALSE.\n         i_am_restricted = .FALSE.\n      END IF\n      !\n      ALLOCATE (recv_count(2, 0:numnodes - 1))\n      ALLOCATE (rd_disp(0:numnodes - 1))\n      ALLOCATE (rm_disp(0:numnodes - 1))\n      CALL dbcsr_create(replicated, name='Replicated '//TRIM(matrix%name), &\n                        template=matrix, &\n                        matrix_type=dbcsr_type_no_symmetry, &\n                        replication_type=rep_type)\n      !\n      ! Count initial sizes for sending. Also, ensure that blocks are on their\n      ! home processors.\n      send_count(1:2) = 0\n      CALL dbcsr_iterator_start(iter, matrix)\n      IF (.NOT. i_am_restricted) THEN\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, &\n                                           row_size=row_size, col_size=col_size, blk=blk)\n            !tr = .FALSE.\n            !CALL dbcsr_get_stored_coordinates (matrix, row, col, tr, dst_p)\n            !IF(dst_p /= mynode) &\n            !   DBCSR_ABORT(\"Matrix is not correctly distributed. Call dbcsr_redistribute.\")\n            nze = row_size*col_size\n            send_count(1) = send_count(1) + 1\n            send_count(2) = send_count(2) + nze\n         END DO\n         send_count(2) = dbcsr_data_get_size_referenced(matrix%data_area)\n      END IF\n      CALL dbcsr_iterator_stop(iter)\n      ! Exchange how much data others have.\n      CALL mp_allgather(send_count(1:2), recv_count, mp_group)\n      CALL dbcsr_data_init(recv_data)\n      nze = SUM(recv_count(2, :))\n      nblks = SUM(recv_count(1, :))\n      CALL dbcsr_data_new(recv_data, data_type=data_type, data_size=nze)\n      ! send_data should have the correct size\n      CALL dbcsr_data_init(send_data)\n      IF (send_count(2) .EQ. 0) THEN\n         CALL dbcsr_data_new(send_data, data_type=data_type, data_size=0)\n      ELSE\n         CALL dbcsr_data_new(send_data, data_type=data_type)\n         send_data = pointer_view(send_data, matrix%data_area, 1, send_count(2))\n      END IF\n      ALLOCATE (recv_meta(metalen*nblks))\n      ALLOCATE (send_meta(metalen*send_count(1)))\n      recv_meta(:) = 0\n      ! Fill in the meta data structures and copy the data.\n      rd_disp = -1; rm_disp = -1\n      rd_disp(0) = 1; rm_disp(0) = 1\n      DO dst_p = 1, numnodes - 1\n         rm_disp(dst_p) = rm_disp(dst_p - 1) &\n                          + metalen*recv_count(1, dst_p - 1)\n         rd_disp(dst_p) = rd_disp(dst_p - 1) &\n                          + recv_count(2, dst_p - 1)\n      END DO\n      CALL dbcsr_data_init(data_block)\n      CALL dbcsr_data_new(data_block, data_type=data_type)\n      CALL dbcsr_iterator_start(iter, matrix)\n      smp = 1\n      IF (.NOT. i_am_restricted) THEN\n         DO WHILE (dbcsr_iterator_blocks_left(iter))\n            CALL dbcsr_iterator_next_block(iter, row, col, blk, &\n                                           transposed=tr, blk_p=blk_p)\n            send_meta(smp + 0) = row\n            send_meta(smp + 1) = col\n            send_meta(smp + 2) = blk_p\n            smp = smp + metalen\n         END DO\n      END IF\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(data_block)\n      CALL dbcsr_data_release(data_block)\n      ! Exchange the data and metadata structures.\n      CALL mp_allgather(send_meta, recv_meta, metalen*recv_count(1, :), &\n                        rm_disp - 1, mp_group)\n      CALL dbcsr_allgatherv(send_data, dbcsr_data_get_size(send_data), &\n                            recv_data, recv_count(2, :), &\n                            rd_disp - 1, mp_group)\n      ! Release the send buffer. If it had a non-zero size then it was a\n      ! pointer into the regular matrix and the data pointer should be\n      ! cleared and not deallocated.\n      IF (send_count(2) .NE. 0) THEN\n         CALL dbcsr_data_clear_pointer(send_data)\n      END IF\n      CALL dbcsr_data_release(send_data)\n      !\n      ! Now fill in the data.\n      CALL dbcsr_work_create(replicated, &\n                             SUM(recv_count(1, :)), &\n                             SUM(recv_count(2, :)), n=1, &\n                             work_mutable=.FALSE.)\n      CALL dbcsr_data_hold(recv_data)\n      CALL dbcsr_data_release(replicated%wms(1)%data_area)\n      replicated%wms(1)%data_area = recv_data\n      blk_ps = 1\n      blks = 1\n      DO src_p = 0, numnodes - 1\n         nze = recv_count(2, src_p)\n         !CALL dbcsr_data_set (replicated%wms(1)%data_area, blk_ps, nze,&\n         !     recv_data, rd_disp(src_p))\n         offset = rd_disp(src_p) - 1\n         DO blk_l = 1, recv_count(1, src_p)\n            IF (dbg) WRITE (*, *) \"src_p, blk_l\", src_p, blk_l\n            stored_row = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1))\n            stored_col = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 1)\n            stored_blk_p = recv_meta(rm_disp(src_p) + metalen*(blk_l - 1) + 2)\n            replicated%wms(1)%row_i(blks) = stored_row\n            replicated%wms(1)%col_i(blks) = stored_col\n            replicated%wms(1)%blk_p(blks) = SIGN(ABS(stored_blk_p) + offset, &\n                                                 stored_blk_p)\n            nze = row_blk_size(stored_row) &\n                  *col_blk_size(stored_col)\n            blk_ps = MAX(blk_ps, ABS(stored_blk_p) + nze + offset)\n            blks = blks + 1\n         END DO\n      END DO\n      CALL dbcsr_data_set_size_referenced(replicated%wms(1)%data_area, blk_ps - 1)\n      !\n      replicated%wms(1)%lastblk = blks - 1\n      replicated%wms(1)%datasize = blk_ps - 1\n      CALL dbcsr_finalize(replicated, reshuffle=.TRUE.)\n      !\n      ! Remove communicators if they were forcibly created.\n      IF (had_subcomms .AND. &\n          (rep_type .EQ. dbcsr_repl_row .OR. rep_type .EQ. dbcsr_repl_col)) THEN\n         CALL dbcsr_mp_grid_remove(mp_obj)\n      END IF\n      DEALLOCATE (recv_count)\n      DEALLOCATE (rd_disp)\n      DEALLOCATE (rm_disp)\n      CALL dbcsr_data_release(recv_data)\n      DEALLOCATE (recv_meta)\n      DEALLOCATE (send_meta)\n      matrix%replication_type = replicated%replication_type\n      ! Now replace the data and index\n      CALL dbcsr_switch_data_area(matrix, replicated%data_area, &\n                                  previous_data_area=tmp_data)\n      CALL dbcsr_switch_data_area(replicated, tmp_data)\n      CALL dbcsr_data_release(tmp_data)\n      tmp_index => matrix%index\n      matrix%index => replicated%index\n      replicated%index => tmp_index\n      CALL dbcsr_repoint_index(matrix)\n      matrix%nze = replicated%nze\n      matrix%nblks = replicated%nblks\n      CALL dbcsr_release(replicated)\n      CALL dbcsr_verify_matrix(matrix)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_replicate\n\n   SUBROUTINE dbcsr_complete_redistribute(matrix, redist, keep_sparsity, summation)\n      !! Fully redistributes a DBCSR matrix.\n      !! The new distribution may be arbitrary as long as the total\n      !! number full rows and columns matches that of the existing\n      !! matrix.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix to redistribute\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: redist\n         !! redistributed matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: keep_sparsity, summation\n         !! retains the sparsity of the redist matrix\n         !! sum blocks with identical row and col from different processes\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_complete_redistribute'\n      INTEGER, PARAMETER                                 :: metalen = 7\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER :: blk, blk_col_new, blk_ps, blk_row_new, blks, cnt_fnd, cnt_new, cnt_skip, col, &\n                 col_int, col_offset_new, col_offset_old, col_rle, col_size, col_size_new, data_offset_l, &\n                 data_type, dst_p, handle, i, meta_l, numnodes, nze_rle, row, row_int, &\n                 row_offset_new, row_offset_old, row_rle, row_size, row_size_new, src_p, stored_col_new, &\n                 stored_row_new\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: col_end_new, col_end_old, col_start_new, &\n                                            col_start_old, rd_disp, recv_meta, rm_disp, row_end_new, row_end_old, row_start_new, &\n                                            row_start_old, sd_disp, sdp, send_meta, sm_disp, smp\n      INTEGER, ALLOCATABLE, DIMENSION(:, :) :: col_reblocks, n_col_reblocks, n_row_reblocks, &\n                                               recv_count, row_reblocks, send_count, total_recv_count, total_send_count\n      INTEGER, DIMENSION(:), POINTER                     :: col_blk_size_new, col_blk_size_old, &\n                                                            col_dist_new, row_blk_size_new, &\n                                                            row_blk_size_old, row_dist_new\n      INTEGER, DIMENSION(:, :), POINTER                  :: pgrid\n      LOGICAL                                            :: found, my_keep_sparsity, my_summation, &\n                                                            sym, tr, valid_block\n      REAL(kind=dp)                                      :: cs1, cs2\n      TYPE(dbcsr_data_obj)                               :: buff_data, data_block, recv_data, &\n                                                            send_data\n      TYPE(dbcsr_distribution_obj)                       :: dist_new\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_mp_obj)                                 :: mp_obj_new\n      TYPE(mp_comm_type)                                 :: mp_group\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. dbcsr_valid_index(matrix)) &\n         DBCSR_ABORT(\"Input not valid.\")\n      IF (matrix%replication_type .NE. dbcsr_repl_none) &\n         DBCSR_WARN(\"Can not redistribute replicated matrix.\")\n      IF (dbcsr_has_symmetry(matrix) .AND. .NOT. dbcsr_has_symmetry(redist)) &\n         DBCSR_ABORT(\"Can not redistribute a symmetric matrix into a non-symmetric one\")\n      !\n      my_keep_sparsity = .FALSE.\n      IF (PRESENT(keep_sparsity)) my_keep_sparsity = keep_sparsity\n      !\n      my_summation = .FALSE.\n      IF (PRESENT(summation)) my_summation = summation\n\n      ! zero blocks that might be present in the target (redist) but not in the source (matrix)\n      CALL dbcsr_set(redist, 0.0_dp)\n\n      sym = dbcsr_has_symmetry(redist)\n      data_type = matrix%data_type\n      ! Get row and column start and end positions\n      ! Old matrix\n      row_blk_size_old => array_data(matrix%row_blk_size)\n      col_blk_size_old => array_data(matrix%col_blk_size)\n      ALLOCATE (row_start_old(dbcsr_nblkrows_total(matrix)), &\n                row_end_old(dbcsr_nblkrows_total(matrix)), &\n                col_start_old(dbcsr_nblkcols_total(matrix)), &\n                col_end_old(dbcsr_nblkcols_total(matrix)))\n      CALL convert_sizes_to_offsets(row_blk_size_old, &\n                                    row_start_old, row_end_old)\n      CALL convert_sizes_to_offsets(col_blk_size_old, &\n                                    col_start_old, col_end_old)\n      ! New matrix\n      dist_new = dbcsr_distribution(redist)\n      row_blk_size_new => array_data(redist%row_blk_size)\n      col_blk_size_new => array_data(redist%col_blk_size)\n      ALLOCATE (row_start_new(dbcsr_nblkrows_total(redist)), &\n                row_end_new(dbcsr_nblkrows_total(redist)), &\n                col_start_new(dbcsr_nblkcols_total(redist)), &\n                col_end_new(dbcsr_nblkcols_total(redist)))\n      CALL convert_sizes_to_offsets(row_blk_size_new, &\n                                    row_start_new, row_end_new)\n      CALL convert_sizes_to_offsets(col_blk_size_new, &\n                                    col_start_new, col_end_new)\n      row_dist_new => dbcsr_distribution_row_dist(dist_new)\n      col_dist_new => dbcsr_distribution_col_dist(dist_new)\n      ! Create mappings\n      i = dbcsr_nfullrows_total(redist)\n      ALLOCATE (row_reblocks(4, i))\n      ALLOCATE (n_row_reblocks(2, dbcsr_nblkrows_total(matrix)))\n      CALL dbcsr_reblocking_targets(row_reblocks, i, n_row_reblocks, &\n                                    row_blk_size_old, row_blk_size_new)\n      i = dbcsr_nfullcols_total(redist)\n      ALLOCATE (col_reblocks(4, i))\n      ALLOCATE (n_col_reblocks(2, dbcsr_nblkcols_total(matrix)))\n      CALL dbcsr_reblocking_targets(col_reblocks, i, n_col_reblocks, &\n                                    col_blk_size_old, col_blk_size_new)\n      !\n      mp_obj_new = dbcsr_distribution_mp(dist_new)\n      pgrid => dbcsr_mp_pgrid(mp_obj_new)\n      numnodes = dbcsr_mp_numnodes(mp_obj_new)\n      mp_group = dbcsr_mp_group(mp_obj_new)\n      !\n      IF (MAXVAL(row_dist_new) > UBOUND(pgrid, 1)) &\n         DBCSR_ABORT('Row distribution references unexistent processor rows')\n      IF (dbg) THEN\n         IF (MAXVAL(row_dist_new) .NE. UBOUND(pgrid, 1)) &\n            DBCSR_WARN('Range of row distribution not equal to processor rows')\n      END IF\n      IF (MAXVAL(col_dist_new) > UBOUND(pgrid, 2)) &\n         DBCSR_ABORT('Col distribution references unexistent processor cols')\n      IF (dbg) THEN\n         IF (MAXVAL(col_dist_new) .NE. UBOUND(pgrid, 2)) &\n            DBCSR_WARN('Range of col distribution not equal to processor cols')\n      END IF\n      ALLOCATE (send_count(2, 0:numnodes - 1))\n      ALLOCATE (recv_count(2, 0:numnodes - 1))\n      ALLOCATE (total_send_count(2, 0:numnodes - 1))\n      ALLOCATE (total_recv_count(2, 0:numnodes - 1))\n      ALLOCATE (sdp(0:numnodes - 1))\n      ALLOCATE (sd_disp(0:numnodes - 1))\n      ALLOCATE (smp(0:numnodes - 1))\n      ALLOCATE (sm_disp(0:numnodes - 1))\n      ALLOCATE (rd_disp(0:numnodes - 1))\n      ALLOCATE (rm_disp(0:numnodes - 1))\n      IF (dbg) THEN\n         cs1 = dbcsr_checksum(matrix)\n      END IF\n      !cs1 = dbcsr_checksum (matrix)\n      !call dbcsr_print(matrix)\n      !\n      !\n      ! Count initial sizes for sending.\n      !\n      ! We go through every element of every local block and determine\n      ! to which processor it must be sent. It could be more efficient,\n      ! but at least the index data are run-length encoded.\n      send_count(:, :) = 0\n      CALL dbcsr_iterator_start(iter, matrix)\n      dst_p = -1\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, blk)\n         DO col_int = n_col_reblocks(1, col), &\n            n_col_reblocks(1, col) + n_col_reblocks(2, col) - 1\n            blk_col_new = col_reblocks(1, col_int)\n            DO row_int = n_row_reblocks(1, row), &\n               n_row_reblocks(1, row) + n_row_reblocks(2, row) - 1\n               blk_row_new = row_reblocks(1, row_int)\n               IF (.NOT. sym .OR. blk_col_new .GE. blk_row_new) THEN\n                  tr = .FALSE.\n                  CALL dbcsr_get_stored_coordinates(redist, &\n                                                    blk_row_new, blk_col_new, dst_p)\n                  send_count(1, dst_p) = send_count(1, dst_p) + 1\n                  send_count(2, dst_p) = send_count(2, dst_p) + &\n                                         col_reblocks(2, col_int)*row_reblocks(2, row_int)\n               END IF\n            END DO\n         END DO\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      !\n      !\n      CALL mp_alltoall(send_count, recv_count, 2, mp_group)\n      ! Allocate data structures needed for data exchange.\n      CALL dbcsr_data_init(recv_data)\n      CALL dbcsr_data_new(recv_data, data_type, SUM(recv_count(2, :)))\n      ALLOCATE (recv_meta(metalen*SUM(recv_count(1, :))))\n      CALL dbcsr_data_init(send_data)\n      CALL dbcsr_data_new(send_data, data_type, SUM(send_count(2, :)))\n      ALLOCATE (send_meta(metalen*SUM(send_count(1, :))))\n      ! Fill in the meta data structures and copy the data.\n      DO dst_p = 0, numnodes - 1\n         total_send_count(1, dst_p) = send_count(1, dst_p)\n         total_send_count(2, dst_p) = send_count(2, dst_p)\n         total_recv_count(1, dst_p) = recv_count(1, dst_p)\n         total_recv_count(2, dst_p) = recv_count(2, dst_p)\n      END DO\n      sd_disp = -1; sm_disp = -1\n      rd_disp = -1; rm_disp = -1\n      sd_disp(0) = 1; sm_disp(0) = 1\n      rd_disp(0) = 1; rm_disp(0) = 1\n      DO dst_p = 1, numnodes - 1\n         sm_disp(dst_p) = sm_disp(dst_p - 1) &\n                          + metalen*total_send_count(1, dst_p - 1)\n         sd_disp(dst_p) = sd_disp(dst_p - 1) &\n                          + total_send_count(2, dst_p - 1)\n         rm_disp(dst_p) = rm_disp(dst_p - 1) &\n                          + metalen*total_recv_count(1, dst_p - 1)\n         rd_disp(dst_p) = rd_disp(dst_p - 1) &\n                          + total_recv_count(2, dst_p - 1)\n      END DO\n      sdp(:) = sd_disp     ! sdp points to the the next place to store\n      ! data. It is postincremented.\n      smp(:) = sm_disp - metalen  ! But smp points to the \"working\" data, not\n      ! the next. It is pre-incremented, so we must\n      ! first rewind it.\n      !\n      CALL dbcsr_data_init(data_block)\n      CALL dbcsr_data_new(data_block, data_type)\n      CALL dbcsr_iterator_start(iter, matrix)\n      dst_p = -1\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, data_block, tr, blk, &\n                                        row_size=row_size, col_size=col_size)\n         !IF (tr) WRITE(*,*)\"block at\",row,col,\" is transposed\"\n         DO col_int = n_col_reblocks(1, col), &\n            n_col_reblocks(1, col) + n_col_reblocks(2, col) - 1\n            blk_col_new = col_reblocks(1, col_int)\n            DO row_int = n_row_reblocks(1, row), &\n               n_row_reblocks(1, row) + n_row_reblocks(2, row) - 1\n               blk_row_new = row_reblocks(1, row_int)\n               loc_ok: IF (.NOT. sym .OR. blk_col_new .GE. blk_row_new) THEN\n                  IF (dbg) &\n                     WRITE (*, *) 'using block', blk_row_new, 'x', blk_col_new\n                  ! Start a new RLE run\n                  tr = .FALSE.\n                  CALL dbcsr_get_stored_coordinates(redist, &\n                                                    blk_row_new, blk_col_new, dst_p)\n                  row_offset_old = row_reblocks(3, row_int)\n                  col_offset_old = col_reblocks(3, col_int)\n                  row_offset_new = row_reblocks(4, row_int)\n                  col_offset_new = col_reblocks(4, col_int)\n                  row_rle = row_reblocks(2, row_int)\n                  col_rle = col_reblocks(2, col_int)\n                  smp(dst_p) = smp(dst_p) + metalen\n                  send_meta(smp(dst_p)) = blk_row_new   ! new blocked row\n                  send_meta(smp(dst_p) + 1) = blk_col_new ! new blocked column\n                  send_meta(smp(dst_p) + 2) = row_offset_new  ! row in new block\n                  send_meta(smp(dst_p) + 3) = col_offset_new  ! col in new block\n                  send_meta(smp(dst_p) + 4) = row_rle ! RLE rows\n                  send_meta(smp(dst_p) + 5) = col_rle ! RLE columns\n                  send_meta(smp(dst_p) + 6) = sdp(dst_p) - sd_disp(dst_p) ! Offset in data\n                  nze_rle = row_rle*col_rle\n                  ! Copy current block into the send buffer\n                  CALL dbcsr_block_partial_copy( &\n                     send_data, dst_offset=sdp(dst_p) - 1, &\n                     dst_rs=row_rle, dst_cs=col_rle, dst_tr=.FALSE., &\n                     dst_r_lb=1, dst_c_lb=1, &\n                     src=data_block, &\n                     src_rs=row_size, src_cs=col_size, src_tr=tr, &\n                     src_r_lb=row_offset_old, src_c_lb=col_offset_old, &\n                     nrow=row_rle, ncol=col_rle)\n                  sdp(dst_p) = sdp(dst_p) + nze_rle\n               END IF loc_ok\n            END DO ! row_int\n         END DO ! col_int\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(data_block)\n      CALL dbcsr_data_release(data_block)\n\n      ! Exchange the data and metadata structures.\n      !\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         CALL hybrid_alltoall_s1( &\n            send_data%d%r_sp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%r_sp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_obj_new)\n      CASE (dbcsr_type_real_8)\n         !CALL mp_alltoall(&\n         !     send_data%d%r_dp(:), total_send_count(2,:), sd_disp(:)-1,&\n         !     recv_data%d%r_dp(:), total_recv_count(2,:), rd_disp(:)-1,&\n         !     mp_group)\n         CALL hybrid_alltoall_d1( &\n            send_data%d%r_dp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%r_dp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_obj_new)\n      CASE (dbcsr_type_complex_4)\n         CALL hybrid_alltoall_c1( &\n            send_data%d%c_sp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%c_sp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_obj_new)\n      CASE (dbcsr_type_complex_8)\n         CALL hybrid_alltoall_z1( &\n            send_data%d%c_dp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%c_dp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_obj_new)\n      CASE default\n         DBCSR_ABORT(\"Invalid matrix type\")\n      END SELECT\n      CALL hybrid_alltoall_i1(send_meta(:), metalen*total_send_count(1, :), sm_disp(:) - 1, &\n                              recv_meta(:), metalen*total_recv_count(1, :), rm_disp(:) - 1, mp_obj_new)\n      !\n      ! Now fill in the data.\n      CALL dbcsr_work_create(redist, &\n                             nblks_guess=SUM(recv_count(1, :)), &\n                             sizedata_guess=SUM(recv_count(2, :)), work_mutable=.TRUE.)\n      CALL dbcsr_data_init(buff_data)\n      CALL dbcsr_data_init(data_block)\n      CALL dbcsr_data_new(buff_data, dbcsr_type_1d_to_2d(data_type), &\n                          redist%max_rbs, redist%max_cbs)\n      CALL dbcsr_data_new(data_block, dbcsr_type_1d_to_2d(data_type))\n\n      !blk_p = 1\n      !blk = 1\n      blk_ps = 0\n      blks = 0\n      cnt_fnd = 0; cnt_new = 0; cnt_skip = 0\n      DO src_p = 0, numnodes - 1\n         data_offset_l = rd_disp(src_p)\n         DO meta_l = 1, recv_count(1, src_p)\n            stored_row_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1))\n            stored_col_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 1)\n            row_offset_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 2)\n            col_offset_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 3)\n            row_rle = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 4)\n            col_rle = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 5)\n            data_offset_l = rd_disp(src_p) &\n                            + recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 6)\n\n            CALL dbcsr_data_clear_pointer(data_block)\n            CALL dbcsr_get_block_p(redist, stored_row_new, stored_col_new, &\n                                   data_block, tr, found)\n            valid_block = found\n\n            IF (found) cnt_fnd = cnt_fnd + 1\n            IF (.NOT. found .AND. .NOT. my_keep_sparsity) THEN\n               ! We have to set up a buffer block\n               CALL dbcsr_data_set_pointer(data_block, &\n                                           rsize=row_blk_size_new(stored_row_new), &\n                                           csize=col_blk_size_new(stored_col_new), &\n                                           pointee=buff_data)\n               CALL dbcsr_data_clear(data_block)\n               !r2_dp => r2_dp_buff(1:row_blk_size_new (stored_row_new),&\n               !     1:col_blk_size_new (stored_col_new))\n               !r2_dp(:,:) = 0.0_dp\n               tr = .FALSE.\n               blks = blks + 1\n               blk_ps = blk_ps + row_blk_size_new(stored_row_new)* &\n                        col_blk_size_new(stored_col_new)\n               valid_block = .TRUE.\n               cnt_new = cnt_new + 1\n            END IF\n            nze_rle = row_rle*col_rle\n\n            IF (valid_block) THEN\n               row_size_new = row_blk_size_new(stored_row_new)\n               col_size_new = col_blk_size_new(stored_col_new)\n               CALL dbcsr_block_partial_copy( &\n                  dst=data_block, dst_tr=tr, &\n                  dst_rs=row_size_new, dst_cs=col_size_new, &\n                  dst_r_lb=row_offset_new, dst_c_lb=col_offset_new, &\n                  src=recv_data, src_offset=data_offset_l - 1, &\n                  src_rs=row_rle, src_cs=col_rle, src_tr=.FALSE., &\n                  src_r_lb=1, src_c_lb=1, &\n                  nrow=row_rle, ncol=col_rle)\n            ELSE\n               cnt_skip = cnt_skip + 1\n            END IF\n\n            data_offset_l = data_offset_l + nze_rle\n            IF ((.NOT. found .OR. my_summation) .AND. valid_block) THEN\n               IF (dbg) WRITE (*, *) routineN//\" Adding new block at\", &\n                  stored_row_new, stored_col_new\n               CALL dbcsr_put_block(redist, stored_row_new, stored_col_new, &\n                                    data_block, transposed=tr, summation=my_summation)\n               !DEALLOCATE (r2_dp)\n            ELSE\n               IF (.NOT. my_keep_sparsity .AND. dbg) &\n                  WRITE (*, *) routineN//\" Reusing block at\", &\n                  stored_row_new, stored_col_new\n            END IF\n         END DO\n      END DO\n\n      CALL dbcsr_data_clear_pointer(data_block)\n      CALL dbcsr_data_release(buff_data)\n      CALL dbcsr_data_release(data_block)\n      !\n      IF (dbg) THEN\n         WRITE (*, *) routineN//\" Declared blocks=\", redist%wms(1)%lastblk, &\n            \"actual=\", blks\n         WRITE (*, *) routineN//\" Declared data size=\", redist%wms(1)%datasize, &\n            \"actual=\", blk_ps\n      END IF\n\n      CALL dbcsr_finalize(redist)\n\n      DEALLOCATE (send_count)\n      DEALLOCATE (recv_count)\n      DEALLOCATE (sdp); DEALLOCATE (sd_disp)\n      DEALLOCATE (smp); DEALLOCATE (sm_disp)\n      DEALLOCATE (rd_disp)\n      DEALLOCATE (rm_disp)\n\n      CALL dbcsr_data_release(recv_data)\n      CALL dbcsr_data_release(send_data)\n\n      DEALLOCATE (recv_meta)\n      DEALLOCATE (send_meta)\n\n      !if (dbg) call dbcsr_print(redist)\n      IF (dbg) THEN\n         cs2 = dbcsr_checksum(redist)\n         WRITE (*, *) routineN//\" Checksums=\", cs1, cs2, cs1 - cs2\n      END IF\n      !IF(cs1-cs2 > 0.00001) DBCSR_ABORT(\"Mangled data!\")\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_complete_redistribute\n\n   SUBROUTINE dbcsr_redistribute(matrix, redist)\n      !! Redistributes a DBCSR matrix.\n      !! The new distribution should have compatible row and column blocks.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix to redistribute\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: redist\n         !! redistributed matrix, which should already be created\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_redistribute'\n      INTEGER, PARAMETER                                 :: metalen = 2\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER :: blk, blk_ps, blks, col, col_size, data_type, dst_p, handle, meta_l, &\n                 numnodes, nze, row, row_size, src_p, stored_col_new, stored_row_new\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: rd_disp, recv_meta, rm_disp, sd_disp, &\n                                                            sdp, send_meta, sm_disp, smp\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: recv_count, send_count, &\n                                                            total_recv_count, total_send_count\n      INTEGER, DIMENSION(:), POINTER                     :: col_blk_size_new, col_dist_new, &\n                                                            row_blk_size_new, row_dist_new\n      INTEGER, DIMENSION(:, :), POINTER                  :: pgrid\n      LOGICAL                                            :: sym_tr, tr\n      TYPE(dbcsr_data_obj)                               :: data_block, recv_data, send_data\n      TYPE(dbcsr_distribution_obj)                       :: dist_new\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_mp_obj)                                 :: mp_obj_new\n      TYPE(mp_comm_type)                                 :: mp_group\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      !call dbcsr_print_dist (matrix%dist)\n      !call dbcsr_print_dist (redist%dist)\n      IF (.NOT. dbcsr_valid_index(matrix)) &\n         DBCSR_ABORT(\"Input not valid.\")\n      IF (matrix%replication_type .NE. dbcsr_repl_none) &\n         DBCSR_WARN(\"Can not redistribute replicated matrix.\")\n      data_type = matrix%data_type\n      ! Get row and column start and end positions\n      ! Old matrix\n      ! New matrix\n      dist_new = dbcsr_distribution(redist)\n      row_blk_size_new => array_data(redist%row_blk_size)\n      col_blk_size_new => array_data(redist%col_blk_size)\n      row_dist_new => dbcsr_distribution_row_dist(dist_new)\n      col_dist_new => dbcsr_distribution_col_dist(dist_new)\n      !\n      mp_obj_new = dbcsr_distribution_mp(dist_new)\n      pgrid => dbcsr_mp_pgrid(mp_obj_new)\n      numnodes = dbcsr_mp_numnodes(mp_obj_new)\n      mp_group = dbcsr_mp_group(mp_obj_new)\n      !\n      IF (MAXVAL(row_dist_new) .GT. UBOUND(pgrid, 1)) &\n         DBCSR_ABORT('Row distribution references unexistent processor rows')\n      IF (dbg) THEN\n         IF (MAXVAL(row_dist_new) .NE. UBOUND(pgrid, 1)) &\n            DBCSR_WARN('Range of row distribution not equal to processor rows')\n      END IF\n      IF (MAXVAL(col_dist_new) .GT. UBOUND(pgrid, 2)) &\n         DBCSR_ABORT('Col distribution references unexistent processor cols')\n      IF (dbg) THEN\n         IF (MAXVAL(col_dist_new) .NE. UBOUND(pgrid, 2)) &\n            DBCSR_WARN('Range of col distribution not equal to processor cols')\n      END IF\n      ALLOCATE (send_count(2, 0:numnodes - 1))\n      ALLOCATE (recv_count(2, 0:numnodes - 1))\n      ALLOCATE (total_send_count(2, 0:numnodes - 1))\n      ALLOCATE (total_recv_count(2, 0:numnodes - 1))\n      ALLOCATE (sdp(0:numnodes - 1))\n      ALLOCATE (sd_disp(0:numnodes - 1))\n      ALLOCATE (smp(0:numnodes - 1))\n      ALLOCATE (sm_disp(0:numnodes - 1))\n      ALLOCATE (rd_disp(0:numnodes - 1))\n      ALLOCATE (rm_disp(0:numnodes - 1))\n      ! Count initial sizes for sending.\n      !\n      send_count(:, :) = 0\n      CALL dbcsr_iterator_start(iter, matrix)\n      dst_p = -1\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, blk, tr, &\n                                        row_size=row_size, col_size=col_size)\n         sym_tr = .FALSE.\n         CALL dbcsr_get_stored_coordinates(redist, &\n                                           row, col, dst_p)\n         nze = row_size*col_size\n         send_count(1, dst_p) = send_count(1, dst_p) + 1\n         send_count(2, dst_p) = send_count(2, dst_p) + nze\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL mp_alltoall(send_count, recv_count, 2, mp_group)\n      ! Allocate data structures needed for data exchange.\n      CALL dbcsr_data_init(recv_data)\n      CALL dbcsr_data_new(recv_data, data_type, SUM(recv_count(2, :)))\n      ALLOCATE (recv_meta(metalen*SUM(recv_count(1, :))))\n      CALL dbcsr_data_init(send_data)\n      CALL dbcsr_data_new(send_data, data_type, SUM(send_count(2, :)))\n      ALLOCATE (send_meta(metalen*SUM(send_count(1, :))))\n      ! Fill in the meta data structures and copy the data.\n      DO dst_p = 0, numnodes - 1\n         total_send_count(1, dst_p) = send_count(1, dst_p)\n         total_send_count(2, dst_p) = send_count(2, dst_p)\n         total_recv_count(1, dst_p) = recv_count(1, dst_p)\n         total_recv_count(2, dst_p) = recv_count(2, dst_p)\n      END DO\n      sd_disp = -1; sm_disp = -1\n      rd_disp = -1; rm_disp = -1\n      sd_disp(0) = 1; sm_disp(0) = 1\n      rd_disp(0) = 1; rm_disp(0) = 1\n      DO dst_p = 1, numnodes - 1\n         sm_disp(dst_p) = sm_disp(dst_p - 1) &\n                          + metalen*total_send_count(1, dst_p - 1)\n         sd_disp(dst_p) = sd_disp(dst_p - 1) &\n                          + total_send_count(2, dst_p - 1)\n         rm_disp(dst_p) = rm_disp(dst_p - 1) &\n                          + metalen*total_recv_count(1, dst_p - 1)\n         rd_disp(dst_p) = rd_disp(dst_p - 1) &\n                          + total_recv_count(2, dst_p - 1)\n      END DO\n      sdp(:) = sd_disp     ! sdp points to the the next place to store\n      ! data. It is postincremented.\n      smp(:) = sm_disp - metalen  ! But smp points to the \"working\" data, not\n      ! the next. It is pre-incremented, so we must\n      ! first rewind it.\n      CALL dbcsr_data_init(data_block)\n      CALL dbcsr_data_new(data_block, data_type)\n      CALL dbcsr_iterator_start(iter, matrix)\n      dst_p = -1\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, data_block, tr, blk)\n         !IF (tr) WRITE(*,*)\"block at\",row,col,\" is transposed\"\n         sym_tr = .FALSE.\n         CALL dbcsr_get_stored_coordinates(redist, &\n                                           row, col, dst_p)\n         smp(dst_p) = smp(dst_p) + metalen\n         IF (tr) THEN\n            send_meta(smp(dst_p)) = -row\n         ELSE\n            send_meta(smp(dst_p)) = row\n         END IF\n         send_meta(smp(dst_p) + 1) = col ! new blocked column\n         nze = dbcsr_data_get_size(data_block)\n         CALL dbcsr_data_set(send_data, lb=sdp(dst_p), data_size=nze, &\n                             src=data_block, source_lb=1)\n         !send_data(sdp(dst_p):sdp(dst_p)+SIZE(r_dp)-1) &\n         !     = r_dp(:)\n         sdp(dst_p) = sdp(dst_p) + nze\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(data_block)\n      ! Exchange the data and metadata structures.\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         CALL hybrid_alltoall_s1( &\n            send_data%d%r_sp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%r_sp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_obj_new)\n      CASE (dbcsr_type_real_8)\n         !CALL mp_alltoall(&\n         !     send_data%d%r_dp(:), total_send_count(2,:), sd_disp(:)-1,&\n         !     recv_data%d%r_dp(:), total_recv_count(2,:), rd_disp(:)-1,&\n         !     mp_group)\n         CALL hybrid_alltoall_d1( &\n            send_data%d%r_dp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%r_dp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_obj_new)\n      CASE (dbcsr_type_complex_4)\n         CALL hybrid_alltoall_c1( &\n            send_data%d%c_sp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%c_sp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_obj_new)\n      CASE (dbcsr_type_complex_8)\n         CALL hybrid_alltoall_z1( &\n            send_data%d%c_dp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%c_dp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_obj_new)\n      END SELECT\n      !CALL mp_alltoall(send_data(:), total_send_count(2,:), sd_disp(:)-1,&\n      !     recv_data(:), total_recv_count(2,:), rd_disp(:)-1, mp_group)\n      CALL hybrid_alltoall_i1(send_meta(:), metalen*total_send_count(1, :), sm_disp(:) - 1, &\n                              recv_meta(:), metalen*total_recv_count(1, :), rm_disp(:) - 1, mp_obj_new)\n      ! Now fill in the data.\n      CALL dbcsr_work_create(redist, &\n                             SUM(recv_count(1, :)), &\n                             SUM(recv_count(2, :)), work_mutable=.FALSE., n=1)\n      !\n      blk_ps = 1\n      blks = 0\n      DO src_p = 0, numnodes - 1\n         !data_offset_l = rd_disp(src_p)\n         DO meta_l = 1, recv_count(1, src_p)\n            row = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1))\n            tr = row .LT. 0\n            stored_row_new = ABS(row)\n            stored_col_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 1)\n            nze = row_blk_size_new(stored_row_new)*col_blk_size_new(stored_col_new)\n            !r_dp => recv_data(blk_ps:blk_ps+nze-1)\n            !CALL dbcsr_put_block(redist, stored_row_new, stored_col_new, r_dp, tr)\n            !### this should be changed to be like the make images (i.e., copy data in finalize, not here & now)\n            data_block = pointer_view(data_block, recv_data, blk_ps, nze)\n            CALL dbcsr_put_block(redist, stored_row_new, stored_col_new, data_block, transposed=tr)\n            blk_ps = blk_ps + nze\n            blks = blks + 1\n         END DO\n      END DO\n      CALL dbcsr_data_clear_pointer(data_block)\n      CALL dbcsr_data_release(data_block)\n      !\n      IF (dbg) THEN\n         WRITE (*, *) routineN//\" Declared blocks=\", redist%wms(1)%lastblk, &\n            \"actual=\", blks\n         WRITE (*, *) routineN//\" Declared data size=\", redist%wms(1)%datasize, &\n            \"actual=\", blk_ps\n      END IF\n      CALL dbcsr_finalize(redist)\n      CALL dbcsr_data_release(recv_data)\n      CALL dbcsr_data_release(send_data)\n      DEALLOCATE (send_count)\n      DEALLOCATE (recv_count)\n      DEALLOCATE (sdp); DEALLOCATE (sd_disp)\n      DEALLOCATE (smp); DEALLOCATE (sm_disp)\n      DEALLOCATE (rd_disp)\n      DEALLOCATE (rm_disp)\n      DEALLOCATE (recv_meta)\n      DEALLOCATE (send_meta)\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_redistribute\n\n   SUBROUTINE dbcsr_datablock_redistribute(dblk, row_p, col_i, blk_p, &\n                                           proc_nblks, proc_darea_sizes, new_matrix)\n      !! Redistributes data blocks of a DBCSR matrix read from a file.\n      !! This routine should be used with dbcsr_binary_read in the module\n      !! dbcsr_io.F\n\n      TYPE(dbcsr_data_obj), INTENT(IN)         :: dblk\n         !! data blocks of the DBCSR matrix that the current node possesses after reading the data file\n      INTEGER, DIMENSION(:), INTENT(IN), &\n         POINTER                                :: row_p, col_i, blk_p, &\n                                                   proc_nblks, proc_darea_sizes\n         !! row_p of the DBCSR matrix that the current node possesses after reading the data file\n         !! col_i of the DBCSR matrix that the current node possesses after reading the data file\n         !! blk_p of the DBCSR matrix that the current node possesses after reading the data file\n         !! 1D array holding nblks of those nodes of the mp environment, that created the file, whose contents have been read by the\n         !! current node of the present mp environment\n         !! 1D array holding data_area_size of those nodes of the mp environment, that created the file, whose contents have been\n         !! read by the current node of the present mp environment\n      TYPE(dbcsr_type), INTENT(INOUT)           :: new_matrix\n         !! redistributed matrix\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_datablock_redistribute'\n      INTEGER, PARAMETER                       :: metalen = 2\n\n      COMPLEX(kind=dp), DIMENSION(:), POINTER, CONTIGUOUS :: c_dp\n      COMPLEX(kind=sp), DIMENSION(:), POINTER, CONTIGUOUS :: c_sp\n      INTEGER :: bcol, blk, blk_ps, blk_size, blks, brow, col_size, data_type, &\n                 dst_p, handle, i, ind, job_count, meta_l, &\n                 nblkrows_total, numnodes, row_size, src_p, stored_col_new, &\n                 stored_row_new\n      INTEGER(kind=int_8)                      :: actual_blk, blkp, end_ind, &\n                                                  start_ind\n      INTEGER(kind=int_8), ALLOCATABLE, &\n         DIMENSION(:)                           :: extra_darea_size, extra_nblks\n      INTEGER, ALLOCATABLE, DIMENSION(:)       :: rd_disp, recv_meta, rm_disp, &\n                                                  sd_disp, sdp, send_meta, &\n                                                  sm_disp, smp\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)    :: recv_count, send_count, &\n                                                  total_recv_count, &\n                                                  total_send_count\n      INTEGER, DIMENSION(:), POINTER           :: col_blk_size, row_blk_size\n      LOGICAL                                  :: sym_tr, tr\n      REAL(kind=dp), DIMENSION(:), POINTER, CONTIGUOUS :: r_dp\n      REAL(kind=sp), DIMENSION(:), POINTER, CONTIGUOUS :: r_sp\n      TYPE(dbcsr_data_obj)                     :: data_block, recv_data, &\n                                                  send_data\n      TYPE(dbcsr_distribution_obj)             :: dist\n      TYPE(dbcsr_mp_obj)                       :: mp_env\n      TYPE(mp_comm_type)                                 :: mp_group\n\n      CALL timeset(routineN, handle)\n\n      dist = dbcsr_distribution(new_matrix)\n      mp_env = dbcsr_distribution_mp(dist)\n      numnodes = dbcsr_mp_numnodes(mp_env)\n      mp_group = dbcsr_mp_group(mp_env)\n\n      data_type = dbcsr_get_data_type(new_matrix)\n      nblkrows_total = dbcsr_nblkrows_total(new_matrix)\n      row_blk_size => array_data(new_matrix%row_blk_size)\n      col_blk_size => array_data(new_matrix%col_blk_size)\n\n      ALLOCATE (send_count(2, 0:numnodes - 1))\n      ALLOCATE (recv_count(2, 0:numnodes - 1))\n      ALLOCATE (total_send_count(2, 0:numnodes - 1))\n      ALLOCATE (total_recv_count(2, 0:numnodes - 1))\n      ALLOCATE (sdp(0:numnodes - 1))\n      ALLOCATE (sd_disp(0:numnodes - 1))\n      ALLOCATE (smp(0:numnodes - 1))\n      ALLOCATE (sm_disp(0:numnodes - 1))\n      ALLOCATE (rd_disp(0:numnodes - 1))\n      ALLOCATE (rm_disp(0:numnodes - 1))\n      send_count(:, :) = 0\n      dst_p = -1\n\n      job_count = COUNT(proc_nblks .NE. 0)\n\n      ALLOCATE (extra_nblks(job_count))\n      ALLOCATE (extra_darea_size(job_count))\n      IF (job_count > 0) THEN\n         CALL cumsum_l(INT((/0, proc_nblks(1:job_count - 1)/), kind=int_8), extra_nblks)\n         CALL cumsum_l(INT((/0, proc_darea_sizes(1:job_count - 1)/), kind=int_8), extra_darea_size)\n      END IF\n\n      i = 0\n      DO ind = 1, job_count*nblkrows_total\n         brow = MOD(ind - 1, nblkrows_total) + 1\n         IF (brow .EQ. 1) i = i + 1\n         row_size = row_blk_size(brow)\n         DO blk = row_p(ind + i - 1) + 1, row_p(ind + i)\n            actual_blk = INT(blk, kind=int_8) + extra_nblks(i)\n            bcol = col_i(actual_blk)\n            col_size = col_blk_size(bcol)\n            blk_size = row_size*col_size\n            sym_tr = .FALSE.\n            CALL dbcsr_get_stored_coordinates(new_matrix, brow, bcol, dst_p)\n            send_count(1, dst_p) = send_count(1, dst_p) + 1\n            send_count(2, dst_p) = send_count(2, dst_p) + blk_size\n         END DO\n      END DO\n      CALL mp_alltoall(send_count, recv_count, 2, mp_group)\n      CALL dbcsr_data_init(recv_data)\n      CALL dbcsr_data_new(recv_data, data_type, SUM(recv_count(2, :)))\n      ALLOCATE (recv_meta(metalen*SUM(recv_count(1, :))))\n      CALL dbcsr_data_init(send_data)\n      CALL dbcsr_data_new(send_data, data_type, SUM(send_count(2, :)))\n      ALLOCATE (send_meta(metalen*SUM(send_count(1, :))))\n      DO dst_p = 0, numnodes - 1\n         total_send_count(1, dst_p) = send_count(1, dst_p)\n         total_send_count(2, dst_p) = send_count(2, dst_p)\n         total_recv_count(1, dst_p) = recv_count(1, dst_p)\n         total_recv_count(2, dst_p) = recv_count(2, dst_p)\n      END DO\n      sd_disp = -1; sm_disp = -1; rd_disp = -1; rm_disp = -1\n      sd_disp(0) = 1; sm_disp(0) = 1; rd_disp(0) = 1; rm_disp(0) = 1\n      DO dst_p = 1, numnodes - 1\n         sm_disp(dst_p) = sm_disp(dst_p - 1) + metalen*total_send_count(1, dst_p - 1)\n         sd_disp(dst_p) = sd_disp(dst_p - 1) + total_send_count(2, dst_p - 1)\n         rm_disp(dst_p) = rm_disp(dst_p - 1) + metalen*total_recv_count(1, dst_p - 1)\n         rd_disp(dst_p) = rd_disp(dst_p - 1) + total_recv_count(2, dst_p - 1)\n      END DO\n      sdp(:) = sd_disp\n      smp(:) = sm_disp - metalen\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         r_sp => dblk%d%r_sp\n      CASE (dbcsr_type_real_8)\n         r_dp => dblk%d%r_dp\n      CASE (dbcsr_type_complex_4)\n         c_sp => dblk%d%c_sp\n      CASE (dbcsr_type_complex_8)\n         c_dp => dblk%d%c_dp\n      END SELECT\n\n      CALL dbcsr_data_init(data_block)\n      CALL dbcsr_data_new(data_block, data_type)\n      i = 0\n      dst_p = -1\n      DO ind = 1, job_count*nblkrows_total\n         brow = MOD(ind - 1, nblkrows_total) + 1\n         IF (brow .EQ. 1) i = i + 1\n         row_size = row_blk_size(brow)\n         DO blk = row_p(ind + i - 1) + 1, row_p(ind + i)\n            actual_blk = INT(blk, kind=int_8) + extra_nblks(i)\n            bcol = col_i(actual_blk)\n            col_size = col_blk_size(bcol)\n            blk_size = row_size*col_size\n            blkp = INT(blk_p(actual_blk), kind=int_8)\n            start_ind = blkp + extra_darea_size(i)\n            end_ind = blkp + extra_darea_size(i) + blk_size - 1\n\n            SELECT CASE (data_type)\n            CASE (dbcsr_type_real_4)\n               data_block%d%r_sp => r_sp(start_ind:end_ind)\n            CASE (dbcsr_type_real_8)\n               data_block%d%r_dp => r_dp(start_ind:end_ind)\n            CASE (dbcsr_type_complex_4)\n               data_block%d%c_sp => c_sp(start_ind:end_ind)\n            CASE (dbcsr_type_complex_8)\n               data_block%d%c_dp => c_dp(start_ind:end_ind)\n            END SELECT\n            sym_tr = .FALSE.\n            CALL dbcsr_get_stored_coordinates(new_matrix, brow, bcol, dst_p)\n            smp(dst_p) = smp(dst_p) + metalen\n            tr = .FALSE.\n!           IF (tr) THEN\n!              send_meta(smp(dst_p)) = -brow\n!           ELSE\n            send_meta(smp(dst_p)) = brow\n!           ENDIF\n            send_meta(smp(dst_p) + 1) = bcol\n            blk_size = dbcsr_data_get_size(data_block)\n\n            CALL dbcsr_data_set(send_data, lb=sdp(dst_p), &\n                                data_size=blk_size, src=data_block, source_lb=1)\n            sdp(dst_p) = sdp(dst_p) + blk_size\n         END DO\n      END DO\n      CALL dbcsr_data_clear_pointer(data_block)\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         CALL hybrid_alltoall_s1( &\n            send_data%d%r_sp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%r_sp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_env)\n      CASE (dbcsr_type_real_8)\n         CALL hybrid_alltoall_d1( &\n            send_data%d%r_dp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%r_dp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_env)\n      CASE (dbcsr_type_complex_4)\n         CALL hybrid_alltoall_c1( &\n            send_data%d%c_sp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%c_sp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_env)\n      CASE (dbcsr_type_complex_8)\n         CALL hybrid_alltoall_z1( &\n            send_data%d%c_dp(:), total_send_count(2, :), sd_disp(:) - 1, &\n            recv_data%d%c_dp(:), total_recv_count(2, :), rd_disp(:) - 1, &\n            mp_env)\n      END SELECT\n      CALL hybrid_alltoall_i1(send_meta(:), metalen*total_send_count(1, :), sm_disp(:) - 1, &\n                              recv_meta(:), metalen*total_recv_count(1, :), rm_disp(:) - 1, mp_env)\n      CALL dbcsr_work_create(new_matrix, SUM(recv_count(1, :)), &\n                             SUM(recv_count(2, :)), work_mutable=.FALSE., n=1)\n\n      blk_ps = 1\n      blks = 0\n      DO src_p = 0, numnodes - 1\n         DO meta_l = 1, recv_count(1, src_p)\n            brow = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1))\n            tr = brow .LT. 0\n            stored_row_new = ABS(brow)\n            stored_col_new = recv_meta(rm_disp(src_p) + metalen*(meta_l - 1) + 1)\n            blk_size = row_blk_size(stored_row_new)*col_blk_size(stored_col_new)\n\n            data_block = pointer_view(data_block, recv_data, blk_ps, blk_size)\n            CALL dbcsr_put_block(new_matrix, stored_row_new, stored_col_new, data_block, transposed=tr)\n\n            blk_ps = blk_ps + blk_size\n            blks = blks + 1\n         END DO\n      END DO\n      CALL dbcsr_data_clear_pointer(data_block)\n      DEALLOCATE (data_block%d)\n      CALL dbcsr_finalize(new_matrix, reshuffle=.TRUE.)\n      CALL dbcsr_data_release(recv_data)\n      CALL dbcsr_data_release(send_data)\n\n      DEALLOCATE (send_count)\n      DEALLOCATE (recv_count)\n      DEALLOCATE (sdp); DEALLOCATE (sd_disp)\n      DEALLOCATE (smp); DEALLOCATE (sm_disp)\n      DEALLOCATE (rd_disp)\n      DEALLOCATE (rm_disp)\n      DEALLOCATE (recv_meta)\n      DEALLOCATE (send_meta)\n      DEALLOCATE (extra_nblks); DEALLOCATE (extra_darea_size)\n\n      CALL timestop(handle)\n   CONTAINS\n\n      SUBROUTINE cumsum_l(arr, cumsum)\n         INTEGER(kind=int_8), DIMENSION(:), INTENT(IN)      :: arr\n         INTEGER(kind=int_8), DIMENSION(:), INTENT(OUT)     :: cumsum\n\n         INTEGER                                            :: i\n\n         IF (SIZE(cumsum) > 0) THEN\n            cumsum(1) = arr(1)\n            DO i = 2, SIZE(cumsum)\n               cumsum(i) = cumsum(i - 1) + arr(i)\n            END DO\n         END IF\n      END SUBROUTINE cumsum_l\n   END SUBROUTINE dbcsr_datablock_redistribute\n\nEND MODULE dbcsr_transformations\n"
  },
  {
    "path": "src/tas/PACKAGE",
    "content": "{\n\"description\": \"tall-and-skinny matrices\",\n\"archive\": \"libdbcsr\",\n\"requires\":[\"../base\", \"../data\", \"../mm\", \"../ops\", \"../block\", \"../core\", \"../work\", \"../utils\", \"../dist\", \"../mpi\"],\n}\n"
  },
  {
    "path": "src/tas/dbcsr_tas.fypp",
    "content": "#!--------------------------------------------------------------------------------------------------!\n#! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n#! This file is part of the DBCSR library.                                                          !\n#!                                                                                                  !\n#! For information on the license, see the LICENSE file.                                            !\n#! For further information please visit https://dbcsr.cp2k.org                                      !\n#! SPDX-License-Identifier: GPL-2.0+                                                                !\n#!--------------------------------------------------------------------------------------------------!\n#:mute\n\n#! datatypes\n#:set dtype_float_prec = ['real_8', 'real_4', 'real_8', 'real_4']\n#:set dtype_float_type = ['REAL(kind=real_8)', 'REAL(kind=real_4)', 'COMPLEX(kind=real_8)', 'COMPLEX(kind=real_4)']\n#:set dtype_float_suffix = ['r_dp', 'r_sp', 'c_dp', 'c_sp']\n#:set dtype_float_suffix_dbcsr = ['d', 's', 'z', 'c']\n#:set dtype_float_param = ['dbcsr_type_real_8', 'dbcsr_type_real_4', 'dbcsr_type_complex_8', 'dbcsr_type_complex_4']\n\n#:set dtype_int_type = ['INTEGER']\n#:set dtype_int_suffix = ['i']\n#:set dtype_int_param = ['dbcsr_type_int_4']\n\n#:set dtype_all_type = dtype_float_type + dtype_int_type\n#:set dtype_all_suffix = dtype_float_suffix + dtype_int_suffix\n#:set dtype_all_param = dtype_float_param + dtype_int_param\n\n#:set dtype_float_list = list(zip(dtype_float_param, dtype_float_type, dtype_float_suffix))\n#:set dtype_float_list_prec = list(zip(dtype_float_prec, dtype_float_param, dtype_float_type, dtype_float_suffix))\n#:set dtype_float_list_dbcsr = list(zip(dtype_float_param, dtype_float_type, dtype_float_suffix, dtype_float_suffix_dbcsr))\n\n#:set dtype_int_list = list(zip(dtype_int_param, dtype_int_type, dtype_int_suffix))\n#:set dtype_all_list = list(zip(dtype_all_param, dtype_all_type, dtype_all_suffix))\n\n#:endmute\n"
  },
  {
    "path": "src/tas/dbcsr_tas_base.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tas_base\n   !! Tall-and-skinny matrices: base routines similar to DBCSR API, mostly wrappers around existing\n   !! DBCSR routines.\n\n   #:include \"dbcsr_tas.fypp\"\n\n   USE dbcsr_block_access, ONLY: &\n      dbcsr_get_block_p, dbcsr_put_block, dbcsr_reserve_blocks\n   USE dbcsr_data_methods, ONLY: &\n      dbcsr_data_new, dbcsr_data_release, dbcsr_type_1d_to_2d\n   USE dbcsr_data_methods_low, ONLY: &\n      dbcsr_data_clear_pointer, dbcsr_data_init\n   USE dbcsr_data_types, ONLY: &\n      dbcsr_data_obj, dbcsr_scalar_type\n   USE dbcsr_dist_methods, ONLY: &\n      dbcsr_distribution_col_dist, dbcsr_distribution_new, dbcsr_distribution_row_dist, dbcsr_distribution_hold\n   USE dbcsr_iterator_operations, ONLY: &\n      dbcsr_iterator_blocks_left, dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop\n   USE dbcsr_methods, ONLY: &\n      dbcsr_distribution_release, dbcsr_get_data_type, dbcsr_mp_release, dbcsr_nblkcols_total, &\n      dbcsr_nblkrows_total, dbcsr_nfullrows_total, dbcsr_nfullcols_total, dbcsr_release, &\n      dbcsr_get_data_size, dbcsr_get_num_blocks, dbcsr_get_nze\n   USE dbcsr_operations, ONLY: &\n      dbcsr_get_info, dbcsr_set, dbcsr_filter, dbcsr_clear\n   USE dbcsr_tas_types, ONLY: &\n      dbcsr_tas_distribution_type, dbcsr_tas_iterator, dbcsr_tas_split_info, dbcsr_tas_type\n   USE dbcsr_tas_global, ONLY: &\n      dbcsr_tas_blk_size_arb, dbcsr_tas_dist_arb, dbcsr_tas_distribution, dbcsr_tas_rowcol_data\n   USE dbcsr_tas_split, ONLY: &\n      block_index_global_to_local, block_index_local_to_global, colsplit, &\n      dbcsr_tas_info_hold, dbcsr_tas_release_info, dbcsr_tas_create_split, &\n      group_to_mrowcol, rowsplit, dbcsr_tas_get_split_info\n   USE dbcsr_tas_util, ONLY: &\n      dbcsr_mp_environ, index_unique\n   USE dbcsr_types, ONLY: &\n      dbcsr_distribution_obj, dbcsr_iterator, dbcsr_mp_obj, dbcsr_type, dbcsr_type_no_symmetry\n   USE dbcsr_work_operations, ONLY: &\n      dbcsr_create, dbcsr_finalize\n   USE dbcsr_kinds, ONLY: &\n      default_string_length, int_8, real_8, real_4\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_cart_rank, mp_environ, mp_sum, mp_comm_type\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_base'\n\n   PUBLIC :: &\n      ! DBCSR wrappers / interface routines\n      dbcsr_tas_blk_sizes, &\n      dbcsr_tas_clear, &\n      dbcsr_tas_copy, &\n      dbcsr_tas_create, &\n      dbcsr_tas_destroy, &\n      dbcsr_tas_distribution_destroy, &\n      dbcsr_tas_distribution_new, &\n      dbcsr_tas_filter, &\n      dbcsr_tas_finalize, &\n      dbcsr_tas_get_block_p, &\n      dbcsr_tas_get_data_size, &\n      dbcsr_tas_get_data_type, &\n      dbcsr_tas_get_info, &\n      dbcsr_tas_get_num_blocks, &\n      dbcsr_tas_get_nze, &\n      dbcsr_tas_get_nze_total, &\n      dbcsr_tas_get_num_blocks_total, &\n      dbcsr_tas_get_stored_coordinates, &\n      dbcsr_tas_info, &\n      dbcsr_tas_iterator_blocks_left, &\n      dbcsr_tas_iterator_next_block, &\n      dbcsr_tas_iterator_start, &\n      dbcsr_tas_iterator_stop, &\n      dbcsr_tas_nblkcols_local, &\n      dbcsr_tas_nblkcols_total, &\n      dbcsr_tas_nblkrows_local, &\n      dbcsr_tas_nblkrows_total, &\n      dbcsr_tas_nfullrows_total, &\n      dbcsr_tas_nfullcols_total, &\n      dbcsr_tas_put_block, &\n      dbcsr_tas_reserve_blocks, &\n      dbcsr_tas_set, &\n      dbcsr_repl_get_stored_coordinates\n   PUBLIC :: &\n      ! conversion routines\n      dbcsr_tas_convert_to_dbcsr, &\n      dbcsr_tas_convert_to_tas\n\n   INTERFACE dbcsr_tas_create\n      MODULE PROCEDURE dbcsr_tas_create_new\n      MODULE PROCEDURE dbcsr_tas_create_template\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_get_block_p\n      MODULE PROCEDURE dbcsr_tas_get_block_p_area\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_put_block\n      MODULE PROCEDURE dbcsr_tas_put_block_area\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_reserve_blocks\n      MODULE PROCEDURE dbcsr_tas_reserve_blocks_template\n      MODULE PROCEDURE dbcsr_tas_reserve_blocks_index\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_iterator_next_block\n      MODULE PROCEDURE dbcsr_tas_iterator_next_area_block\n      MODULE PROCEDURE dbcsr_tas_iterator_next_block_index\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_iterator_next_block\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE dbcsr_tas_iterator_next_block_${dsuffix}$\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_put_block\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE dbcsr_tas_put_block_${dsuffix}$\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_get_block_p\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE dbcsr_tas_get_block_p_${dsuffix}$\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_set\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE dbcsr_tas_set_${dsuffix}$\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_filter\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE dbcsr_tas_filter_${dsuffix}$\n      #:endfor\n   END INTERFACE\n\nCONTAINS\n\n   SUBROUTINE dbcsr_tas_create_new(matrix, name, dist, data_type, &\n                                   row_blk_size, col_blk_size, own_dist)\n      !! Create new tall-and-skinny matrix.\n      !! Exactly like dbcsr_create_new but with custom types for row_blk_size and col_blk_size instead of\n      !! arrays.\n\n      TYPE(dbcsr_tas_type), INTENT(OUT)              :: matrix\n      CHARACTER(len=*), INTENT(IN)                   :: name\n      TYPE(dbcsr_tas_distribution_type), INTENT(INOUT) :: dist\n      INTEGER, INTENT(IN), OPTIONAL                  :: data_type\n      CLASS(dbcsr_tas_rowcol_data), INTENT(IN)       :: row_blk_size, col_blk_size\n      LOGICAL, INTENT(IN), OPTIONAL                  :: own_dist\n         !! whether matrix should own distribution\n\n      TYPE(dbcsr_tas_split_info)                     :: info\n\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS     :: row_blk_size_vec, col_blk_size_vec\n      INTEGER                                        :: nrows, ncols, irow, col, icol, row\n      CHARACTER(LEN=*), PARAMETER                    :: routineN = 'dbcsr_tas_create_new'\n      INTEGER                                        :: handle\n\n      CALL timeset(routineN, handle)\n\n      CALL dbcsr_tas_copy_distribution(dist, matrix%dist, own_dist)\n      matrix%nblkrows = row_blk_size%nmrowcol\n      matrix%nblkcols = col_blk_size%nmrowcol\n\n      DBCSR_ASSERT(matrix%nblkrows == dist%row_dist%nmrowcol)\n      DBCSR_ASSERT(matrix%nblkcols == dist%col_dist%nmrowcol)\n\n      matrix%nfullrows = row_blk_size%nfullrowcol\n      matrix%nfullcols = col_blk_size%nfullrowcol\n\n      ALLOCATE (matrix%row_blk_size, source=row_blk_size)\n      ALLOCATE (matrix%col_blk_size, source=col_blk_size)\n\n      info = dbcsr_tas_info(matrix)\n\n      SELECT CASE (info%split_rowcol)\n      CASE (rowsplit)\n         matrix%nblkrowscols_split = matrix%nblkrows\n\n         ASSOCIATE (rows => dist%local_rowcols)\n            nrows = SIZE(rows)\n            ncols = INT(dist%col_dist%nmrowcol)\n            ALLOCATE (row_blk_size_vec(nrows))\n            ALLOCATE (col_blk_size_vec(ncols))\n            DO irow = 1, nrows\n               row_blk_size_vec(irow) = row_blk_size%data(rows(irow))\n            END DO\n            DO col = 1, ncols\n               col_blk_size_vec(col) = col_blk_size%data(INT(col, KIND=int_8))\n            END DO\n         END ASSOCIATE\n      CASE (colsplit)\n         matrix%nblkrowscols_split = matrix%nblkcols\n\n         ASSOCIATE (cols => dist%local_rowcols)\n            ncols = SIZE(cols)\n            nrows = INT(dist%row_dist%nmrowcol)\n            ALLOCATE (row_blk_size_vec(nrows))\n            ALLOCATE (col_blk_size_vec(ncols))\n            DO icol = 1, ncols\n               col_blk_size_vec(icol) = col_blk_size%data(cols(icol))\n            END DO\n            DO row = 1, nrows\n               row_blk_size_vec(row) = row_blk_size%data(INT(row, KIND=int_8))\n            END DO\n         END ASSOCIATE\n      END SELECT\n\n      CALL dbcsr_create(matrix=matrix%matrix, &\n                        name=name, &\n                        dist=dist%dbcsr_dist, &\n                        matrix_type=dbcsr_type_no_symmetry, &\n                        row_blk_size=row_blk_size_vec, &\n                        col_blk_size=col_blk_size_vec, &\n                        data_type=data_type, &\n                        reuse_arrays=.TRUE.)\n\n      matrix%valid = .TRUE.\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_create_template(matrix_in, matrix, name, data_type)\n      !! Create matrix from template\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix_in\n      TYPE(dbcsr_tas_type), INTENT(OUT)                    :: matrix\n      CHARACTER(len=*), INTENT(IN), OPTIONAL               :: name\n      INTEGER, INTENT(IN), OPTIONAL                        :: data_type\n\n      CALL dbcsr_create(matrix%matrix, template=matrix_in%matrix, matrix_type=dbcsr_type_no_symmetry, &\n                        data_type=data_type)\n      CALL dbcsr_finalize(matrix%matrix)\n\n      CALL dbcsr_tas_copy_distribution(matrix_in%dist, matrix%dist)\n      ALLOCATE (matrix%row_blk_size, source=matrix_in%row_blk_size)\n      ALLOCATE (matrix%col_blk_size, source=matrix_in%col_blk_size)\n      matrix%nblkrows = matrix_in%nblkrows\n      matrix%nblkcols = matrix_in%nblkcols\n      matrix%nblkrowscols_split = matrix_in%nblkrowscols_split\n      matrix%nfullrows = matrix_in%nfullrows\n      matrix%nfullcols = matrix_in%nfullcols\n      matrix%valid = .TRUE.\n\n      IF (PRESENT(name)) THEN\n         matrix%matrix%name = name\n      ELSE\n         matrix%matrix%name = matrix_in%matrix%name\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_destroy(matrix)\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix\n\n      CALL dbcsr_release(matrix%matrix)\n      CALL dbcsr_tas_distribution_destroy(matrix%dist)\n      DEALLOCATE (matrix%row_blk_size)\n      DEALLOCATE (matrix%col_blk_size)\n      matrix%valid = .FALSE.\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_copy(matrix_b, matrix_a, summation)\n      !! Copy matrix_a to matrix_b\n\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix_b\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix_a\n      LOGICAL, INTENT(IN), OPTIONAL                      :: summation\n         !! Whether to sum matrices b = a + b\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_copy'\n      INTEGER                                            :: handle\n      TYPE(dbcsr_tas_iterator)                             :: iter\n      TYPE(dbcsr_data_obj)                               :: block\n      LOGICAL :: transposed\n      INTEGER   :: data_type\n      INTEGER(KIND=int_8)                                :: row, column\n\n      CALL timeset(routineN, handle)\n      DBCSR_ASSERT(matrix_b%valid)\n\n      CALL dbcsr_tas_get_info(matrix_a, data_type=data_type)\n\n      IF (PRESENT(summation)) THEN\n         IF (.NOT. summation) CALL dbcsr_tas_clear(matrix_b)\n      ELSE\n         CALL dbcsr_tas_clear(matrix_b)\n      END IF\n\n      CALL dbcsr_tas_reserve_blocks(matrix_a, matrix_b)\n\n      CALL dbcsr_data_init(block)\n      CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type))\n      CALL dbcsr_tas_iterator_start(iter, matrix_a)\n      DO WHILE (dbcsr_tas_iterator_blocks_left(iter))\n         CALL dbcsr_tas_iterator_next_block(iter, row, column, block, transposed)\n         CALL dbcsr_tas_put_block(matrix_b, row, column, block, transposed, summation=summation)\n      END DO\n      CALL dbcsr_tas_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(block)\n      CALL dbcsr_data_release(block)\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_reserve_blocks_template(matrix_in, matrix_out)\n      !! Make sure that matrix_out has same blocks reserved as matrix_in. This assumes that both\n      !! matrices have same number of block rows and block columns.\n\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix_in\n      TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_out\n      TYPE(dbcsr_tas_iterator)                        :: iter\n      INTEGER :: iblk, nblk\n      INTEGER(KIND=int_8)                  :: row, column\n      INTEGER :: blk\n      INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: row_res, col_res\n\n      nblk = dbcsr_tas_get_num_blocks(matrix_in)\n      ALLOCATE (row_res(nblk), col_res(nblk))\n      CALL dbcsr_tas_iterator_start(iter, matrix_in)\n      DO iblk = 1, nblk\n         CALL dbcsr_tas_iterator_next_block(iter, row, column, blk)\n         row_res(iblk) = row\n         col_res(iblk) = column\n      END DO\n      DBCSR_ASSERT(.NOT. dbcsr_tas_iterator_blocks_left(iter))\n      CALL dbcsr_tas_iterator_stop(iter)\n\n      CALL dbcsr_tas_reserve_blocks(matrix_out, row_res, col_res)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_finalize(matrix)\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix\n\n      CALL dbcsr_finalize(matrix%matrix)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_distribution_new(dist, mp_comm, &\n                                         row_dist, col_dist, split_info, nosplit)\n      !! create new distribution.\n      !! Exactly like dbcsr_distribution_new but with custom types for row_dist and col_dist instead of\n      !! arrays.\n\n      TYPE(dbcsr_tas_distribution_type), INTENT(OUT)   :: dist\n      TYPE(mp_comm_type), INTENT(IN)                              :: mp_comm\n      CLASS(dbcsr_tas_distribution), INTENT(IN)        :: row_dist, col_dist\n      TYPE(dbcsr_tas_split_info), INTENT(IN), OPTIONAL :: split_info\n         !! Strategy of how to split process grid (optional). If not present a default split heuristic is applied.\n      LOGICAL, INTENT(IN), OPTIONAL                    :: nosplit\n         !! if .TRUE. don't split process grid (optional)\n      !LOGICAL, INTENT(IN), OPTIONAL                    :: strict_split\n\n      TYPE(dbcsr_tas_split_info)                       :: split_info_prv\n\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS       :: row_dist_vec\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS       :: col_dist_vec\n      TYPE(dbcsr_mp_obj)                               :: mp_environ_tmp\n      INTEGER                                          :: nrows, ncols, irow, col, icol, row, &\n                                                          split_rowcol, nsplit, handle\n      LOGICAL                                          :: opt_nsplit\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_distribution_new'\n\n      CALL timeset(routineN, handle)\n      IF (PRESENT(split_info)) THEN\n         CALL dbcsr_tas_info_hold(split_info)\n         split_info_prv = split_info\n      ELSE\n         ! default split heuristic: split into submatrices that have roughly same block dimensions\n         IF (row_dist%nmrowcol >= col_dist%nmrowcol) THEN\n            split_rowcol = rowsplit\n            nsplit = INT((row_dist%nmrowcol - 1)/col_dist%nmrowcol + 1)\n         ELSE\n            split_rowcol = colsplit\n            nsplit = INT((col_dist%nmrowcol - 1)/row_dist%nmrowcol + 1)\n         END IF\n         opt_nsplit = .TRUE.\n         IF (PRESENT(nosplit)) THEN\n            IF (nosplit) THEN\n               nsplit = 1\n               opt_nsplit = .FALSE.\n            END IF\n         END IF\n         CALL dbcsr_tas_create_split(split_info_prv, mp_comm, split_rowcol, nsplit=nsplit, opt_nsplit=opt_nsplit)\n      END IF\n\n      SELECT CASE (split_info_prv%split_rowcol)\n      CASE (rowsplit)\n         CALL group_to_mrowcol(split_info_prv, row_dist, split_info_prv%igroup, dist%local_rowcols)\n         nrows = SIZE(dist%local_rowcols)\n         ncols = INT(col_dist%nmrowcol)\n         ALLOCATE (row_dist_vec(nrows))\n         ALLOCATE (col_dist_vec(ncols))\n         DO irow = 1, nrows\n            row_dist_vec(irow) = row_dist%dist(dist%local_rowcols(irow)) - split_info_prv%pgrid_split_size*split_info_prv%igroup\n         END DO\n         DO col = 1, ncols\n            col_dist_vec(col) = col_dist%dist(INT(col, KIND=int_8))\n         END DO\n      CASE (colsplit)\n         CALL group_to_mrowcol(split_info_prv, col_dist, split_info_prv%igroup, dist%local_rowcols)\n         ncols = SIZE(dist%local_rowcols)\n         nrows = INT(row_dist%nmrowcol)\n         ALLOCATE (col_dist_vec(ncols))\n         ALLOCATE (row_dist_vec(nrows))\n         DO icol = 1, ncols\n            col_dist_vec(icol) = col_dist%dist(dist%local_rowcols(icol)) - split_info_prv%pgrid_split_size*split_info_prv%igroup\n         END DO\n         DO row = 1, nrows\n            row_dist_vec(row) = row_dist%dist(INT(row, KIND=int_8))\n         END DO\n      END SELECT\n\n      mp_environ_tmp = dbcsr_mp_environ(split_info_prv%mp_comm_group)\n\n      dist%info = split_info_prv\n\n      CALL dbcsr_distribution_new(dist%dbcsr_dist, mp_environ_tmp, row_dist_vec, col_dist_vec, reuse_arrays=.TRUE.)\n      ALLOCATE (dist%row_dist, source=row_dist)\n      ALLOCATE (dist%col_dist, source=col_dist)\n      CALL dbcsr_mp_release(mp_environ_tmp)\n\n      !IF(PRESENT(strict_split)) dist%strict_split = strict_split\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_distribution_destroy(dist)\n      TYPE(dbcsr_tas_distribution_type), INTENT(INOUT)     :: dist\n\n      ! Note: Issue with Cray CCE compiler\n      ! commented out the following deallocate statements on polymorphic variables,\n      ! these cause segfaults with CCE compiler at a later point\n\n      !IF (ALLOCATED(dist%row_dist)) THEN\n      !   DEALLOCATE (dist%row_dist)\n      !ENDIF\n      !IF (ALLOCATED(dist%col_dist)) THEN\n      !   DEALLOCATE (dist%col_dist)\n      !ENDIF\n\n      IF (ALLOCATED(dist%local_rowcols)) THEN\n         DEALLOCATE (dist%local_rowcols)\n      END IF\n      CALL dbcsr_tas_release_info(dist%info)\n      CALL dbcsr_distribution_release(dist%dbcsr_dist)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_get_stored_coordinates(matrix, row, column, processor)\n      !! As dbcsr_get_stored_coordinates\n\n      TYPE(dbcsr_tas_type), INTENT(IN)                   :: matrix\n      INTEGER(KIND=int_8), INTENT(IN)                    :: row, column\n         !! global matrix blocked row\n         !! global matrix blocked column\n      INTEGER, INTENT(OUT)                               :: processor\n         !! process ID\n\n      INTEGER, DIMENSION(2)                              :: pcoord\n      TYPE(dbcsr_tas_split_info)                         :: info\n\n      pcoord(1) = matrix%dist%row_dist%dist(row)\n      pcoord(2) = matrix%dist%col_dist%dist(column)\n      info = dbcsr_tas_info(matrix)\n\n      ! workaround for inefficient mpi_cart_rank\n      processor = pcoord(1)*info%pdims(2) + pcoord(2)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_repl_get_stored_coordinates(matrix, row, column, processors)\n      !! Get all processors for a given row/col combination if matrix is replicated on each process\n      !! subgroup.\n\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix\n         !! tall-and-skinny matrix whose DBCSR submatrices are replicated matrices\n      INTEGER, INTENT(IN)                                :: row, column\n         !! row of a submatrix\n         !! column of a submatrix\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: processors\n\n      INTEGER                                            :: igroup\n      INTEGER(KIND=int_8)                                :: col_s, row_s\n      INTEGER, DIMENSION(2)                              :: pcoord\n      TYPE(dbcsr_tas_split_info)                         :: info\n\n      row_s = INT(row, KIND=int_8); col_s = INT(column, KIND=int_8)\n\n      info = dbcsr_tas_info(matrix)\n      pcoord(1) = matrix%dist%row_dist%dist(row_s)\n      pcoord(2) = matrix%dist%col_dist%dist(col_s)\n\n      DO igroup = 0, info%ngroup - 1\n         CALL mp_cart_rank(info%mp_comm, pcoord, processors(igroup + 1))\n         SELECT CASE (info%split_rowcol)\n         CASE (rowsplit)\n            row_s = row_s + dbcsr_tas_nblkrows_local(matrix)\n            pcoord(1) = matrix%dist%row_dist%dist(row_s)\n         CASE (colsplit)\n            col_s = col_s + dbcsr_tas_nblkcols_local(matrix)\n            pcoord(2) = matrix%dist%col_dist%dist(col_s)\n         END SELECT\n      END DO\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_convert_to_dbcsr(matrix_rect, matrix_dbcsr)\n      !! Convert a tall-and-skinny matrix into a normal DBCSR matrix.\n      !! This is not recommended for matrices with a very large dimension.\n\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix_rect\n      TYPE(dbcsr_type), INTENT(OUT)                      :: matrix_dbcsr\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_convert_to_dbcsr'\n\n      INTEGER                                            :: handle\n      INTEGER(KIND=int_8)                                :: col, row\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_dist_vec, col_size_vec, &\n                                                            row_dist_vec, row_size_vec\n      LOGICAL                                            :: tr\n      TYPE(dbcsr_data_obj)                               :: block\n      TYPE(dbcsr_distribution_obj)                       :: dist\n      TYPE(dbcsr_mp_obj)                                 :: mp_environ_tmp\n      TYPE(dbcsr_tas_iterator)                           :: iter\n      TYPE(dbcsr_tas_split_info)                         :: info\n      INTEGER                                            :: block_number, rb_count, nblks_local\n      INTEGER, DIMENSION(:), ALLOCATABLE                 :: nz_rows, nz_cols\n\n      CALL timeset(routineN, handle)\n\n      info = dbcsr_tas_info(matrix_rect)\n\n      ALLOCATE (row_dist_vec(matrix_rect%nblkrows))\n      ALLOCATE (row_size_vec(matrix_rect%nblkrows))\n      ALLOCATE (col_dist_vec(matrix_rect%nblkcols))\n      ALLOCATE (col_size_vec(matrix_rect%nblkcols))\n\n      DO row = 1, matrix_rect%nblkrows\n         row_dist_vec(row) = matrix_rect%dist%row_dist%dist(row)\n         row_size_vec(row) = matrix_rect%row_blk_size%data(row)\n      END DO\n\n      DO col = 1, matrix_rect%nblkcols\n         col_dist_vec(col) = matrix_rect%dist%col_dist%dist(col)\n         col_size_vec(col) = matrix_rect%col_blk_size%data(col)\n      END DO\n\n      mp_environ_tmp = dbcsr_mp_environ(info%mp_comm)\n      CALL dbcsr_distribution_new(dist, mp_environ_tmp, row_dist_vec, col_dist_vec, reuse_arrays=.TRUE.)\n      CALL dbcsr_mp_release(mp_environ_tmp)\n\n      CALL dbcsr_create(matrix=matrix_dbcsr, &\n                        name=TRIM(matrix_rect%matrix%name), &\n                        dist=dist, &\n                        matrix_type=dbcsr_type_no_symmetry, &\n                        row_blk_size=row_size_vec, &\n                        col_blk_size=col_size_vec, &\n                        data_type=dbcsr_get_data_type(matrix_rect%matrix), &\n                        reuse_arrays=.TRUE.)\n\n      CALL dbcsr_distribution_release(dist)\n\n      CALL dbcsr_data_init(block)\n      CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(dbcsr_tas_get_data_type(matrix_rect)))\n\n      nblks_local = dbcsr_tas_get_num_blocks(matrix_rect)\n      CALL dbcsr_tas_iterator_start(iter, matrix_rect)\n      ALLOCATE (nz_rows(nblks_local), nz_cols(nblks_local))\n      rb_count = 0\n      DO WHILE (dbcsr_tas_iterator_blocks_left(iter))\n         CALL dbcsr_tas_iterator_next_block(iter, row, col, block_number)\n         rb_count = rb_count + 1\n         nz_rows(rb_count) = INT(row)\n         nz_cols(rb_count) = INT(col)\n      END DO\n\n      CALL dbcsr_reserve_blocks(matrix_dbcsr, nz_rows, nz_cols)\n\n      CALL dbcsr_tas_iterator_stop(iter)\n      CALL dbcsr_tas_iterator_start(iter, matrix_rect)\n      DO WHILE (dbcsr_tas_iterator_blocks_left(iter))\n         CALL dbcsr_tas_iterator_next_block(iter, row, col, block, tr)\n         CALL dbcsr_put_block(matrix_dbcsr, INT(row), INT(col), block)\n      END DO\n\n      CALL dbcsr_tas_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(block)\n      CALL dbcsr_data_release(block)\n\n      CALL dbcsr_finalize(matrix_dbcsr)\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_convert_to_tas(info, matrix_rect, matrix_dbcsr)\n      !! Converts a DBCSR matrix into the tall-and-skinny matrix type.\n\n      TYPE(dbcsr_tas_split_info), INTENT(IN)               :: info\n         !! Strategy of how to split process grid\n      TYPE(dbcsr_tas_type), INTENT(OUT)                    :: matrix_rect\n      TYPE(dbcsr_type), INTENT(IN)                         :: matrix_dbcsr\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_convert_to_tas'\n\n      CHARACTER(len=default_string_length)               :: name\n      INTEGER                                            :: col, data_type, handle, numnodes, row\n      INTEGER(KIND=int_8)                                :: nbcols, nbrows\n      INTEGER, DIMENSION(2)                              :: pcoord, pdims\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_blk_size, row_blk_size\n      LOGICAL                                            :: tr\n      TYPE(dbcsr_data_obj)                               :: block\n      TYPE(dbcsr_distribution_obj)                       :: dbcsr_dist\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_tas_blk_size_arb)                         :: col_blk_size_obj, row_blk_size_obj\n      TYPE(dbcsr_tas_dist_arb)                             :: col_dist_obj, row_dist_obj\n      TYPE(dbcsr_tas_distribution_type)                    :: dist\n\n      NULLIFY (col_blk_size, row_blk_size)\n      CALL timeset(routineN, handle)\n      CALL mp_environ(numnodes, pdims, pcoord, info%mp_comm)\n      CALL dbcsr_get_info(matrix_dbcsr, distribution=dbcsr_dist, name=name, data_type=data_type, &\n                          row_blk_size=row_blk_size, col_blk_size=col_blk_size)\n\n      nbrows = dbcsr_nblkrows_total(matrix_dbcsr)\n      nbcols = dbcsr_nblkcols_total(matrix_dbcsr)\n\n      row_dist_obj = dbcsr_tas_dist_arb(dbcsr_distribution_row_dist(dbcsr_dist), pdims(1), nbrows)\n      col_dist_obj = dbcsr_tas_dist_arb(dbcsr_distribution_col_dist(dbcsr_dist), pdims(2), nbcols)\n\n      row_blk_size_obj = dbcsr_tas_blk_size_arb(row_blk_size)\n      col_blk_size_obj = dbcsr_tas_blk_size_arb(col_blk_size)\n\n      CALL dbcsr_tas_distribution_new(dist, info%mp_comm, row_dist_obj, col_dist_obj)\n\n      CALL dbcsr_tas_create(matrix_rect, TRIM(name)//\"_compressed\", &\n                            dist, data_type, row_blk_size_obj, col_blk_size_obj)\n\n      CALL dbcsr_data_init(block)\n\n      CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type))\n      CALL dbcsr_iterator_start(iter, matrix_dbcsr)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, block, tr)\n         CALL dbcsr_tas_put_block(matrix_rect, INT(row, KIND=int_8), INT(col, KIND=int_8), block)\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(block)\n      CALL dbcsr_data_release(block)\n\n      CALL dbcsr_tas_finalize(matrix_rect)\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_iterator_start(iter, matrix_in)\n      !! As dbcsr_iterator_start\n      TYPE(dbcsr_tas_iterator), INTENT(INOUT)              :: iter\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix_in\n\n      CALL dbcsr_iterator_start(iter%iter, matrix_in%matrix)\n\n      iter%dist = matrix_in%dist\n   END SUBROUTINE\n\n   FUNCTION dbcsr_tas_iterator_blocks_left(iter)\n      !! As dbcsr_iterator_blocks_left\n      TYPE(dbcsr_tas_iterator), INTENT(IN)                 :: iter\n      LOGICAL                                            :: dbcsr_tas_iterator_blocks_left\n\n      dbcsr_tas_iterator_blocks_left = dbcsr_iterator_blocks_left(iter%iter)\n   END FUNCTION\n\n   SUBROUTINE dbcsr_tas_iterator_stop(iter)\n      !! As dbcsr_iterator_stop\n      TYPE(dbcsr_tas_iterator), INTENT(INOUT)              :: iter\n\n      CALL dbcsr_iterator_stop(iter%iter)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_iterator_next_area_block(iterator, row, column, block, transposed, block_number, &\n      !! As dbcsr_iterator_next_block\n                                                 row_size, col_size)\n      TYPE(dbcsr_tas_iterator), INTENT(INOUT)              :: iterator\n      INTEGER(KIND=int_8), INTENT(OUT)                   :: row, column\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: block\n      LOGICAL, INTENT(OUT)                               :: transposed\n      INTEGER, INTENT(OUT), OPTIONAL                     :: block_number, row_size, col_size\n\n      INTEGER                                            :: column_group, row_group\n\n      CALL dbcsr_iterator_next_block(iterator%iter, row_group, column_group, block, transposed, block_number, &\n                                     row_size, col_size)\n\n      CALL block_index_local_to_global(iterator%dist%info, iterator%dist, row_group=row_group, column_group=column_group, &\n                                       row=row, column=column)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_iterator_next_block_index(iterator, row, column, block_number, &\n                                                  transposed, blk_p, row_size, col_size)\n      !! As dbcsr_iterator_next_block\n\n      TYPE(dbcsr_tas_iterator), INTENT(INOUT)              :: iterator\n      INTEGER(KIND=int_8), INTENT(OUT)                   :: row, column\n         !! global block row\n         !! global block column\n      INTEGER, INTENT(OUT)                               :: block_number\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: transposed\n      INTEGER, INTENT(OUT), OPTIONAL                     :: blk_p, row_size, col_size\n\n      INTEGER                                            :: column_group, row_group\n\n      CALL dbcsr_iterator_next_block(iterator%iter, row_group, column_group, block_number, transposed, blk_p, &\n                                     row_size, col_size)\n\n      CALL block_index_local_to_global(iterator%dist%info, iterator%dist, row_group=row_group, column_group=column_group, &\n                                       row=row, column=column)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_reserve_blocks_index(matrix, rows, columns)\n      !! As dbcsr_reserve_blocks\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix\n      INTEGER(KIND=int_8), DIMENSION(:), INTENT(IN)      :: rows, columns\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_reserve_blocks_index'\n\n      INTEGER                                            :: handle, icol, irow\n      INTEGER, DIMENSION(SIZE(rows), 2)                :: rowcols_group\n      INTEGER, DIMENSION(:, :), ALLOCATABLE             :: rowcols_group_u\n\n      CALL timeset(routineN, handle)\n\n      DO irow = 1, SIZE(rows)\n         CALL block_index_global_to_local(dbcsr_tas_info(matrix), matrix%dist, row=rows(irow), &\n                                          row_group=rowcols_group(irow, 1))\n      END DO\n\n      DO icol = 1, SIZE(columns)\n         CALL block_index_global_to_local(dbcsr_tas_info(matrix), matrix%dist, column=columns(icol), &\n                                          column_group=rowcols_group(icol, 2))\n      END DO\n\n      CALL index_unique(rowcols_group, rowcols_group_u) ! make sure that index is unique, not sure\n      ! if this is really needed or whether DBCSR\n      ! takes care of duplicate indices\n\n      CALL dbcsr_reserve_blocks(matrix%matrix, rowcols_group_u(:, 1), rowcols_group_u(:, 2))\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_put_block_area(matrix, row, col, block, transposed, summation, &\n      !! As dbcsr_put_block\n                                       scale)\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix\n      INTEGER(KIND=int_8), INTENT(IN)                    :: row, col\n      TYPE(dbcsr_data_obj)                               :: block\n      LOGICAL, INTENT(IN), OPTIONAL                      :: transposed, summation\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL      :: scale\n\n      INTEGER                                            :: col_group, row_group\n\n      CALL block_index_global_to_local(dbcsr_tas_info(matrix), matrix%dist, row=row, column=col, &\n                                       row_group=row_group, column_group=col_group)\n      CALL dbcsr_put_block(matrix%matrix, row_group, col_group, block, transposed=transposed, summation=summation, scale=scale)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_get_block_p_area(matrix, row, col, block, transposed, found, row_size, col_size)\n      !! As dbcsr_get_block_p\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix\n      INTEGER(KIND=int_8), INTENT(IN)                    :: row, col\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: block\n      LOGICAL, INTENT(OUT)                               :: transposed, found\n      INTEGER, INTENT(OUT), OPTIONAL                     :: row_size, col_size\n\n      INTEGER                                            :: col_group, row_group\n\n      CALL block_index_global_to_local(dbcsr_tas_info(matrix), matrix%dist, row=row, column=col, &\n                                       row_group=row_group, column_group=col_group)\n\n      CALL dbcsr_get_block_p(matrix%matrix, row_group, col_group, block, transposed, found, row_size=row_size, col_size=col_size)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_copy_distribution(dist_in, dist_out, own_dist)\n      !! Copy a distribution\n\n      TYPE(dbcsr_tas_distribution_type), INTENT(INOUT)     :: dist_in\n      TYPE(dbcsr_tas_distribution_type), INTENT(OUT)       :: dist_out\n      LOGICAL, INTENT(IN), OPTIONAL                      :: own_dist\n         !! Whether distribution should be owned by dist_out\n\n      LOGICAL                                            :: own_dist_prv\n\n      IF (PRESENT(own_dist)) THEN\n         own_dist_prv = own_dist\n      ELSE\n         own_dist_prv = .FALSE.\n      END IF\n\n      IF (.NOT. own_dist_prv) THEN\n         CALL dbcsr_distribution_hold(dist_in%dbcsr_dist)\n         CALL dbcsr_tas_info_hold(dist_in%info)\n      END IF\n\n      dist_out = dist_in\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_blk_sizes(matrix, row, col, row_size, col_size)\n      !! Get block size for a given row & column\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix\n      INTEGER(KIND=int_8), INTENT(IN)                    :: row, col\n      INTEGER, INTENT(OUT)                               :: row_size, col_size\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_blk_sizes'\n      INTEGER :: handle\n\n      CALL timeset(routineN, handle)\n\n      row_size = matrix%row_blk_size%data(row)\n      col_size = matrix%col_blk_size%data(col)\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   FUNCTION dbcsr_tas_info(matrix)\n      !! get info on mpi grid splitting\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix\n      TYPE(dbcsr_tas_split_info)                           :: dbcsr_tas_info\n\n      dbcsr_tas_info = matrix%dist%info\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_nblkrows_total(matrix) RESULT(nblkrows_total)\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix\n      INTEGER(KIND=int_8)                                :: nblkrows_total\n\n      nblkrows_total = matrix%nblkrows\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_nfullrows_total(matrix) RESULT(nfullrows_total)\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix\n      INTEGER(KIND=int_8)                                :: nfullrows_total\n\n      nfullrows_total = matrix%nfullrows\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_nblkcols_total(matrix) RESULT(nblkcols_total)\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix\n      INTEGER(KIND=int_8)                                :: nblkcols_total\n\n      nblkcols_total = matrix%nblkcols\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_nfullcols_total(matrix) RESULT(nfullcols_total)\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix\n      INTEGER(KIND=int_8)                                :: nfullcols_total\n\n      nfullcols_total = matrix%nfullcols\n   END FUNCTION\n   FUNCTION dbcsr_tas_nblkcols_local(matrix) RESULT(nblkcols_local)\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix\n      INTEGER                                            :: nblkcols_local\n\n      nblkcols_local = dbcsr_nblkcols_total(matrix%matrix)\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_nblkrows_local(matrix) RESULT(nblkrows_local)\n      TYPE(dbcsr_tas_type), INTENT(IN)                     :: matrix\n      INTEGER                                            :: nblkrows_local\n\n      nblkrows_local = dbcsr_nblkrows_total(matrix%matrix)\n   END FUNCTION\n\n   PURE FUNCTION dbcsr_tas_get_num_blocks(matrix) RESULT(num_blocks)\n      !! As dbcsr_get_num_blocks: get number of local blocks\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix\n      INTEGER                        :: num_blocks\n\n      num_blocks = dbcsr_get_num_blocks(matrix%matrix)\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_get_num_blocks_total(matrix) RESULT(num_blocks)\n      !! get total number of blocks\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix\n      INTEGER(KIND=int_8)              :: num_blocks\n      TYPE(dbcsr_tas_split_info)       :: info\n\n      info = dbcsr_tas_info(matrix)\n      num_blocks = dbcsr_tas_get_num_blocks(matrix)\n      CALL mp_sum(num_blocks, info%mp_comm)\n\n   END FUNCTION\n\n   PURE FUNCTION dbcsr_tas_get_nze(matrix)\n      !! As dbcsr_get_nze: get number of local non-zero elements\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix\n      INTEGER :: dbcsr_tas_get_nze\n\n      dbcsr_tas_get_nze = dbcsr_get_nze(matrix%matrix)\n\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_get_nze_total(matrix)\n      !! Get total number of non-zero elements\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix\n      INTEGER(KIND=int_8)              :: dbcsr_tas_get_nze_total\n      TYPE(dbcsr_tas_split_info)       :: info\n\n      dbcsr_tas_get_nze_total = dbcsr_tas_get_nze(matrix)\n      info = dbcsr_tas_info(matrix)\n      CALL mp_sum(dbcsr_tas_get_nze_total, info%mp_comm)\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_get_data_type(matrix) RESULT(data_type)\n      !! As dbcsr_get_data_type\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix\n      INTEGER                          :: data_type\n\n      data_type = dbcsr_get_data_type(matrix%matrix)\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_get_data_size(matrix) RESULT(data_size)\n      !! As dbcsr_get_data_size\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix\n      INTEGER                          :: data_size\n\n      data_size = dbcsr_get_data_size(matrix%matrix)\n   END FUNCTION\n\n   SUBROUTINE dbcsr_tas_clear(matrix)\n      !! Clear matrix (erase all data)\n      TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix\n\n      CALL dbcsr_clear(matrix%matrix)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_get_info(matrix, nblkrows_total, nblkcols_total, &\n                                 nfullrows_total, nfullcols_total, &\n                                 nblkrows_local, nblkcols_local, &\n                                 nfullrows_local, nfullcols_local, &\n                                 nprow, npcol, my_prow, my_pcol, &\n                                 local_rows, local_cols, proc_row_dist, proc_col_dist, &\n                                 row_blk_size, col_blk_size, distribution, name, data_area, &\n                                 matrix_type, data_type)\n\n      TYPE(dbcsr_tas_type), INTENT(IN)                                :: matrix\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL                      :: nblkrows_total, nblkcols_total, nfullrows_total, &\n                                                                         nfullcols_total\n      INTEGER, INTENT(OUT), OPTIONAL                                  :: nblkrows_local, nblkcols_local, nfullrows_local, &\n                                                                         nfullcols_local, nprow, npcol, my_prow, my_pcol\n      INTEGER(KIND=int_8), DIMENSION(:), OPTIONAL, ALLOCATABLE        :: local_rows, local_cols\n      CLASS(dbcsr_tas_distribution), ALLOCATABLE, OPTIONAL, &\n         INTENT(OUT)                                                  :: proc_row_dist, proc_col_dist\n      CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE, OPTIONAL, &\n         INTENT(OUT)                                                  :: row_blk_size, col_blk_size\n      TYPE(dbcsr_tas_distribution_type), OPTIONAL                     :: distribution\n      CHARACTER(len=*), INTENT(OUT), OPTIONAL                         :: name\n      TYPE(dbcsr_data_obj), INTENT(OUT), OPTIONAL                     :: data_area\n      CHARACTER, OPTIONAL                                             :: matrix_type\n      INTEGER, OPTIONAL                                               :: data_type\n\n      TYPE(dbcsr_tas_split_info)                                      :: info\n      INTEGER                                                         :: numnodes, irow, icol\n      INTEGER, DIMENSION(2)                                           :: pdims, pcoord\n      INTEGER, DIMENSION(:), POINTER                                  :: local_rows_local, local_cols_local\n\n      NULLIFY (local_rows_local, local_cols_local)\n      CALL dbcsr_get_info(matrix%matrix, nblkrows_local=nblkrows_local, nblkcols_local=nblkcols_local, &\n                          nfullrows_local=nfullrows_local, nfullcols_local=nfullcols_local, &\n                          local_rows=local_rows_local, local_cols=local_cols_local, &\n                          name=name, data_area=data_area, matrix_type=matrix_type, data_type=data_type)\n\n      IF (PRESENT(nblkrows_total)) nblkrows_total = dbcsr_tas_nblkrows_total(matrix)\n      IF (PRESENT(nblkcols_total)) nblkcols_total = dbcsr_tas_nblkcols_total(matrix)\n\n      IF (PRESENT(nfullrows_total)) nfullrows_total = dbcsr_tas_nfullrows_total(matrix)\n      IF (PRESENT(nfullcols_total)) nfullcols_total = dbcsr_tas_nfullcols_total(matrix)\n\n      info = dbcsr_tas_info(matrix)\n\n      CALL mp_environ(numnodes, pdims, pcoord, info%mp_comm)\n      IF (PRESENT(my_prow)) my_prow = pcoord(1)\n      IF (PRESENT(my_pcol)) my_pcol = pcoord(2)\n      IF (PRESENT(nprow)) nprow = pdims(1)\n      IF (PRESENT(npcol)) npcol = pdims(2)\n\n      IF (PRESENT(local_rows)) THEN\n         ALLOCATE (local_rows(SIZE(local_rows_local)))\n         DO irow = 1, SIZE(local_rows_local)\n            CALL block_index_local_to_global(info, matrix%dist, row_group=local_rows_local(irow), row=local_rows(irow))\n         END DO\n      END IF\n\n      IF (PRESENT(local_cols)) THEN\n         ALLOCATE (local_cols(SIZE(local_cols_local)))\n         DO icol = 1, SIZE(local_cols_local)\n            CALL block_index_local_to_global(info, matrix%dist, column_group=local_cols_local(icol), column=local_cols(icol))\n         END DO\n      END IF\n\n      IF (PRESENT(proc_row_dist)) ALLOCATE (proc_row_dist, SOURCE=matrix%dist%row_dist)\n      IF (PRESENT(proc_col_dist)) ALLOCATE (proc_col_dist, SOURCE=matrix%dist%col_dist)\n\n      IF (PRESENT(row_blk_size)) ALLOCATE (row_blk_size, SOURCE=matrix%row_blk_size)\n      IF (PRESENT(col_blk_size)) ALLOCATE (col_blk_size, SOURCE=matrix%col_blk_size)\n      IF (PRESENT(distribution)) distribution = matrix%dist\n\n   END SUBROUTINE\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE dbcsr_tas_iterator_next_block_${dsuffix}$ (iterator, row, column, block, transposed, block_number, &\n      !! As dbcsr_iterator_next_block\n                                                            row_size, col_size)\n         TYPE(dbcsr_tas_iterator), INTENT(INOUT) :: iterator\n         INTEGER(KIND=int_8), INTENT(OUT)      :: row, column\n         ${dtype}$, DIMENSION(:, :), POINTER   :: block\n         LOGICAL, INTENT(OUT)                  :: transposed\n         INTEGER, INTENT(OUT), OPTIONAL        :: block_number\n         INTEGER, INTENT(OUT), OPTIONAL        :: row_size, col_size\n\n         INTEGER                               :: row_group, column_group\n\n         CALL dbcsr_iterator_next_block(iterator%iter, row_group, column_group, block, transposed, block_number, &\n                                        row_size, col_size)\n\n         CALL block_index_local_to_global(iterator%dist%info, iterator%dist, row_group=row_group, column_group=column_group, &\n                                          row=row, column=column)\n\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n   !! As dbcsr_put_block\n      SUBROUTINE dbcsr_tas_put_block_${dsuffix}$ (matrix, row, col, block, transposed, summation, &\n                                                  scale)\n         TYPE(dbcsr_tas_type), INTENT(INOUT)     :: matrix\n         ${dtype}$, DIMENSION(:, :), INTENT(IN) :: block\n         LOGICAL, INTENT(IN), OPTIONAL         :: transposed, summation\n         INTEGER(KIND=int_8), INTENT(IN)       :: row, col\n         ${dtype}$, INTENT(IN), OPTIONAL       :: scale\n\n         INTEGER                     :: col_group, row_group\n\n         CALL block_index_global_to_local(matrix%dist%info, matrix%dist, row=row, column=col, &\n                                          row_group=row_group, column_group=col_group)\n\n         CALL dbcsr_put_block(matrix%matrix, row_group, col_group, block, transposed=transposed, summation=summation, scale=scale)\n\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE dbcsr_tas_get_block_p_${dsuffix}$ (matrix, row, col, block, transposed, found, row_size, col_size)\n      !! As dbcsr_get_block_p\n         TYPE(dbcsr_tas_type), INTENT(INOUT)  :: matrix\n         INTEGER(KIND=int_8), INTENT(IN)    :: row, col\n         ${dtype}$, DIMENSION(:, :), POINTER :: block\n         LOGICAL, INTENT(OUT)               :: transposed\n         LOGICAL, INTENT(OUT)               :: found\n         INTEGER, INTENT(OUT), OPTIONAL     :: row_size, col_size\n\n         INTEGER                     :: col_group, row_group\n\n         CALL block_index_global_to_local(matrix%dist%info, matrix%dist, row=row, column=col, &\n                                          row_group=row_group, column_group=col_group)\n\n         CALL dbcsr_get_block_p(matrix%matrix, row_group, col_group, block, transposed, found, row_size=row_size, col_size=col_size)\n\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE dbcsr_tas_set_${dsuffix}$ (matrix, alpha)\n      !! As dbcsr_set\n         TYPE(dbcsr_tas_type), INTENT(INOUT)    :: matrix\n         ${dtype}$, INTENT(IN)                :: alpha\n         CALL dbcsr_set(matrix%matrix, alpha)\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE dbcsr_tas_filter_${dsuffix}$ (matrix, eps, method, use_absolute)\n      !! As dbcsr_filter\n         TYPE(dbcsr_tas_type), INTENT(INOUT)    :: matrix\n         ${dtype}$, INTENT(IN)                :: eps\n         INTEGER, INTENT(IN), OPTIONAL        :: method\n         LOGICAL, INTENT(IN), OPTIONAL        :: use_absolute\n\n         CALL dbcsr_filter(matrix%matrix, eps, method, use_absolute)\n\n      END SUBROUTINE\n   #:endfor\n\nEND MODULE\n"
  },
  {
    "path": "src/tas/dbcsr_tas_global.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tas_global\n   !! Global data (distribution and block sizes) for tall-and-skinny matrices\n   !! For very sparse matrices with one very large dimension, storing array data of the same size\n   !! as the matrix dimensions may require too much memory and we need to compute them on the fly for a\n   !! given row or column. Hence global array data such as distribution and block sizes are specified as\n   !! function objects, leaving up to the caller how to efficiently store global data.\n\n   USE dbcsr_kinds, ONLY: int_8, dp\n   USE dbcsr_toollib, ONLY: sort\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_global'\n\n   PUBLIC :: &\n      dbcsr_tas_blk_size_arb, &\n      dbcsr_tas_blk_size_repl, &\n      dbcsr_tas_blk_size_one, &\n      dbcsr_tas_dist_arb, &\n      dbcsr_tas_dist_arb_default, &\n      dbcsr_tas_dist_cyclic, &\n      dbcsr_tas_dist_repl, &\n      dbcsr_tas_distribution, &\n      dbcsr_tas_rowcol_data, &\n      dbcsr_tas_default_distvec\n\n   ! abstract type for distribution vectors along one dimension\n   TYPE, ABSTRACT :: dbcsr_tas_distribution\n      ! number of process rows / columns:\n      INTEGER :: nprowcol = -1\n      ! number of matrix rows / columns:\n      INTEGER(KIND=int_8) :: nmrowcol = -1_int_8\n   CONTAINS\n      ! map matrix rows/cols to distribution rows/cols:\n      PROCEDURE(rowcol_dist), deferred :: dist\n      ! map distribution rows/cols to matrix rows/cols:\n      PROCEDURE(dist_rowcols), deferred :: rowcols\n   END TYPE\n\n   ! type for cyclic (round robin) distribution:\n   ! - may not be load balanced for arbitrary block sizes\n   ! - memory efficient for large dimensions\n   TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_cyclic\n      INTEGER :: split_size = -1\n   CONTAINS\n      PROCEDURE :: dist => cyclic_dist\n      PROCEDURE :: rowcols => cyclic_rowcols\n   END TYPE\n\n   ! type for arbitrary distributions\n   ! - stored as an array\n   ! - not memory efficient for large dimensions\n   TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_arb\n      INTEGER, DIMENSION(:), ALLOCATABLE :: dist_vec\n   CONTAINS\n      PROCEDURE :: dist => arb_dist\n      PROCEDURE :: rowcols => arb_rowcols\n   END TYPE\n\n   ! type for replicated distribution\n   ! - a submatrix distribution replicated on all process groups\n   ! - memory efficient for large dimensions\n   TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_repl\n      INTEGER, DIMENSION(:), ALLOCATABLE :: dist_vec\n      INTEGER :: nmrowcol_local = -1\n      INTEGER :: n_repl = -1\n      INTEGER :: dist_size = -1\n   CONTAINS\n      PROCEDURE :: dist => repl_dist\n      PROCEDURE :: rowcols => repl_rowcols\n   END TYPE\n\n   ! abstract type for integer data (e.g. block sizes) along one dimension\n   TYPE, ABSTRACT :: dbcsr_tas_rowcol_data\n      ! number of matrix rows / columns (blocks):\n      INTEGER(KIND=int_8) :: nmrowcol = -1_int_8\n      ! number of matrix rows / columns (elements):\n      INTEGER(KIND=int_8) :: nfullrowcol = -1_int_8\n   CONTAINS\n      ! integer data for each block row / col\n      PROCEDURE(rowcol_data), deferred :: DATA\n   END TYPE\n\n   ! type for arbitrary block sizes\n   ! - stored as an array\n   ! - not memory efficient for large dimensions\n   TYPE, EXTENDS(dbcsr_tas_rowcol_data) :: dbcsr_tas_blk_size_arb\n      INTEGER, DIMENSION(:), ALLOCATABLE :: blk_size_vec\n   CONTAINS\n      PROCEDURE :: DATA => blk_size_arb\n   END TYPE\n\n   ! type for replicated block sizes\n   ! - submatrix block sizes replicated on all process groups\n   ! - memory efficient for large dimensions\n   TYPE, EXTENDS(dbcsr_tas_rowcol_data) :: dbcsr_tas_blk_size_repl\n      INTEGER, DIMENSION(:), ALLOCATABLE :: blk_size_vec\n      INTEGER :: nmrowcol_local = -1\n   CONTAINS\n      PROCEDURE :: DATA => blk_size_repl\n   END TYPE\n\n   ! type for blocks of size one\n   ! - memory efficient for large dimensions\n   TYPE, EXTENDS(dbcsr_tas_rowcol_data) :: dbcsr_tas_blk_size_one\n   CONTAINS\n      PROCEDURE :: DATA => blk_size_one\n   END TYPE\n\n   ABSTRACT INTERFACE\n      FUNCTION rowcol_dist(t, rowcol)\n         !! map matrix rows/cols to distribution rows/cols:\n         IMPORT :: dbcsr_tas_distribution, int_8\n         CLASS(dbcsr_tas_distribution), INTENT(IN) :: t\n         INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n         INTEGER :: rowcol_dist\n      END FUNCTION\n\n      FUNCTION dist_rowcols(t, dist)\n         !! map distribution rows/cols to matrix rows/cols:\n         IMPORT :: dbcsr_tas_distribution, int_8\n         CLASS(dbcsr_tas_distribution), INTENT(IN) :: t\n         INTEGER, INTENT(IN) :: dist\n         INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: dist_rowcols\n      END FUNCTION\n\n      FUNCTION rowcol_data(t, rowcol)\n         !! integer data for each block row / col\n         IMPORT :: dbcsr_tas_rowcol_data, int_8\n         CLASS(dbcsr_tas_rowcol_data), INTENT(IN) :: t\n         INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n         INTEGER :: rowcol_data\n      END FUNCTION\n\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_dist_cyclic\n      MODULE PROCEDURE new_dbcsr_tas_dist_cyclic\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_dist_arb\n      MODULE PROCEDURE new_dbcsr_tas_dist_arb\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_dist_repl\n      MODULE PROCEDURE new_dbcsr_tas_dist_repl\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_blk_size_arb\n      MODULE PROCEDURE new_dbcsr_tas_blk_size_arb\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_blk_size_repl\n      MODULE PROCEDURE new_dbcsr_tas_blk_size_repl\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_blk_size_one\n      MODULE PROCEDURE new_dbcsr_tas_blk_size_one\n   END INTERFACE\n\nCONTAINS\n   FUNCTION blk_size_arb(t, rowcol)\n      CLASS(dbcsr_tas_blk_size_arb), INTENT(IN) :: t\n      INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n      INTEGER :: blk_size_arb\n      blk_size_arb = t%blk_size_vec(rowcol)\n   END FUNCTION\n\n   FUNCTION blk_size_repl(t, rowcol)\n      CLASS(dbcsr_tas_blk_size_repl), INTENT(IN) :: t\n      INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n      INTEGER :: blk_size_repl\n      INTEGER :: igroup\n      INTEGER :: rowcol_local\n\n      igroup = INT((rowcol - 1_int_8)/t%nmrowcol_local)\n      rowcol_local = INT(MOD(rowcol - 1_int_8, INT(t%nmrowcol_local, KIND=int_8))) + 1\n      blk_size_repl = t%blk_size_vec(rowcol_local)\n\n   END FUNCTION\n\n   FUNCTION blk_size_one(t, rowcol)\n      CLASS(dbcsr_tas_blk_size_one), INTENT(IN) :: t\n      INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n      INTEGER :: blk_size_one\n\n      MARK_USED(t)\n      MARK_USED(rowcol)\n      blk_size_one = 1\n   END FUNCTION\n\n   FUNCTION new_dbcsr_tas_blk_size_arb(blk_size_vec)\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: blk_size_vec\n      TYPE(dbcsr_tas_blk_size_arb)                         :: new_dbcsr_tas_blk_size_arb\n\n      ALLOCATE (new_dbcsr_tas_blk_size_arb%blk_size_vec(SIZE(blk_size_vec)))\n      new_dbcsr_tas_blk_size_arb%blk_size_vec(:) = blk_size_vec(:)\n      new_dbcsr_tas_blk_size_arb%nmrowcol = SIZE(blk_size_vec)\n      new_dbcsr_tas_blk_size_arb%nfullrowcol = SUM(blk_size_vec)\n   END FUNCTION\n\n   FUNCTION new_dbcsr_tas_blk_size_repl(blk_size_vec, n_repl)\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: blk_size_vec\n      INTEGER, INTENT(IN)                                :: n_repl\n      TYPE(dbcsr_tas_blk_size_repl)                        :: new_dbcsr_tas_blk_size_repl\n\n      new_dbcsr_tas_blk_size_repl%nmrowcol_local = SIZE(blk_size_vec)\n      ALLOCATE (new_dbcsr_tas_blk_size_repl%blk_size_vec(new_dbcsr_tas_blk_size_repl%nmrowcol_local))\n      new_dbcsr_tas_blk_size_repl%blk_size_vec(:) = blk_size_vec(:)\n      new_dbcsr_tas_blk_size_repl%nmrowcol = new_dbcsr_tas_blk_size_repl%nmrowcol_local*n_repl\n      new_dbcsr_tas_blk_size_repl%nfullrowcol = SUM(blk_size_vec)*n_repl\n   END FUNCTION\n\n   FUNCTION new_dbcsr_tas_blk_size_one(nrowcol)\n      INTEGER(KIND=int_8), INTENT(IN)      :: nrowcol\n      TYPE(dbcsr_tas_blk_size_one)         :: new_dbcsr_tas_blk_size_one\n\n      new_dbcsr_tas_blk_size_one%nmrowcol = nrowcol\n      new_dbcsr_tas_blk_size_one%nfullrowcol = nrowcol\n   END FUNCTION\n\n   FUNCTION arb_dist(t, rowcol)\n      CLASS(dbcsr_tas_dist_arb), INTENT(IN) :: t\n      INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n      INTEGER :: arb_dist\n\n      arb_dist = t%dist_vec(rowcol)\n   END FUNCTION\n\n   FUNCTION repl_dist(t, rowcol)\n      CLASS(dbcsr_tas_dist_repl), INTENT(IN) :: t\n      INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n      INTEGER :: repl_dist\n      INTEGER :: rowcol_local\n      INTEGER :: igroup\n\n      igroup = INT((rowcol - 1_int_8)/t%nmrowcol_local)\n      rowcol_local = INT(MOD(rowcol - 1_int_8, INT(t%nmrowcol_local, KIND=int_8))) + 1\n\n      repl_dist = t%dist_vec(rowcol_local) + igroup*t%dist_size\n\n   END FUNCTION\n\n   FUNCTION repl_rowcols(t, dist)\n      CLASS(dbcsr_tas_dist_repl), INTENT(IN) :: t\n      INTEGER, INTENT(IN) :: dist\n      INTEGER :: nrowcols\n      INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: repl_rowcols, rowcols_tmp\n      INTEGER :: igroup\n      INTEGER :: rowcol, count\n      LOGICAL :: cond\n\n      igroup = dist/t%dist_size\n\n      nrowcols = t%nmrowcol_local\n      count = 0\n      ALLOCATE (rowcols_tmp(nrowcols))\n      rowcols_tmp(:) = 0\n      DO rowcol = 1, nrowcols\n         cond = t%dist_vec(rowcol) + igroup*t%dist_size == dist\n\n         IF (cond) THEN\n            count = count + 1\n            rowcols_tmp(count) = rowcol\n         END IF\n      END DO\n\n      ALLOCATE (repl_rowcols(count))\n      repl_rowcols(:) = rowcols_tmp(1:count) + igroup*t%nmrowcol_local\n\n   END FUNCTION\n\n   FUNCTION arb_rowcols(t, dist)\n      CLASS(dbcsr_tas_dist_arb), INTENT(IN) :: t\n      INTEGER, INTENT(IN) :: dist\n      INTEGER(KIND=int_8) :: rowcol, nrowcols\n      INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: arb_rowcols, rowcols_tmp\n      INTEGER :: count\n\n      nrowcols = t%nmrowcol\n      count = 0\n      ALLOCATE (rowcols_tmp(nrowcols))\n      rowcols_tmp(:) = 0\n      DO rowcol = 1, nrowcols\n         IF (t%dist_vec(rowcol) == dist) THEN\n            count = count + 1\n            rowcols_tmp(count) = rowcol\n         END IF\n      END DO\n\n      ALLOCATE (arb_rowcols(count))\n      arb_rowcols(:) = rowcols_tmp(1:count)\n   END FUNCTION\n\n   FUNCTION new_dbcsr_tas_dist_cyclic(split_size, nprowcol, nmrowcol)\n      INTEGER, INTENT(IN)                                :: split_size, nprowcol\n      INTEGER(KIND=int_8), INTENT(IN)                    :: nmrowcol\n      TYPE(dbcsr_tas_dist_cyclic)                          :: new_dbcsr_tas_dist_cyclic\n\n      new_dbcsr_tas_dist_cyclic%split_size = split_size\n      new_dbcsr_tas_dist_cyclic%nprowcol = nprowcol\n      new_dbcsr_tas_dist_cyclic%nmrowcol = nmrowcol\n   END FUNCTION\n\n   FUNCTION new_dbcsr_tas_dist_arb(dist_vec, nprowcol, nmrowcol)\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: dist_vec\n      INTEGER, INTENT(IN)                                :: nprowcol\n      INTEGER(KIND=int_8), INTENT(IN)                    :: nmrowcol\n      TYPE(dbcsr_tas_dist_arb)                             :: new_dbcsr_tas_dist_arb\n\n      ALLOCATE (new_dbcsr_tas_dist_arb%dist_vec(nmrowcol))\n      new_dbcsr_tas_dist_arb%dist_vec(:) = dist_vec(:)\n      new_dbcsr_tas_dist_arb%nprowcol = nprowcol\n      new_dbcsr_tas_dist_arb%nmrowcol = nmrowcol\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_dist_arb_default(nprowcol, nmrowcol, block_sizes)\n      !! Distribution that is more or less cyclic (round robin) and load balanced with different\n      !! weights for each element.\n      !! This is used for creating adhoc distributions whenever matrices are mapped to new grids.\n      !! Only for small dimensions since distribution is created as an array\n\n      INTEGER                           :: nprowcol\n      INTEGER(KIND=int_8), INTENT(IN)   :: nmrowcol\n      CLASS(dbcsr_tas_rowcol_data), INTENT(IN) :: block_sizes\n      TYPE(dbcsr_tas_dist_arb)            :: dbcsr_tas_dist_arb_default\n      INTEGER, DIMENSION(nmrowcol) :: dist_vec, bsize_vec\n      INTEGER(KIND=int_8) :: ind\n\n      DO ind = 1, nmrowcol\n         bsize_vec(ind) = block_sizes%data(ind)\n      END DO\n\n      CALL dbcsr_tas_default_distvec(INT(nmrowcol), nprowcol, bsize_vec, dist_vec)\n      dbcsr_tas_dist_arb_default = dbcsr_tas_dist_arb(dist_vec, nprowcol, nmrowcol)\n\n   END FUNCTION\n\n   SUBROUTINE dbcsr_tas_default_distvec(nblk, nproc, blk_size, dist)\n      !! get a load-balanced and randomized distribution along one tensor dimension\n      INTEGER, INTENT(IN)                                :: nblk\n         !! number of blocks (along one tensor dimension)\n      INTEGER, INTENT(IN)                                :: nproc\n         !! number of processes (along one process grid dimension)\n      INTEGER, DIMENSION(nblk), INTENT(IN)                :: blk_size\n         !! block sizes\n      INTEGER, DIMENSION(nblk), INTENT(OUT)               :: dist\n         !! distribution\n\n      CALL distribute_lpt_random(nblk, nproc, blk_size, dist)\n\n   END SUBROUTINE\n\n   SUBROUTINE distribute_lpt_random(nel, nbin, weights, dist)\n      !! distribute `nel` elements with weights `weights` over `nbin` bins.\n      !! load balanced distribution is obtained by using LPT algorithm together with randomization over equivalent bins\n      !! (i.e. randomization over all bins with the smallest accumulated weight)\n      INTEGER, INTENT(IN)                                :: nel, nbin\n      INTEGER, DIMENSION(nel), INTENT(IN)                :: weights\n      INTEGER, DIMENSION(nel), INTENT(OUT)               :: dist\n\n      INTEGER                                            :: i, i_select, ibin, iel, min_occup, &\n                                                            n_avail\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: bins_avail\n      INTEGER, DIMENSION(4)                              :: iseed\n      INTEGER, DIMENSION(nel)                            :: sort_index, weights_s\n      INTEGER, DIMENSION(nbin)                           :: occup\n      LOGICAL, DIMENSION(nbin)                           :: bin_mask\n      REAL(dp)                                           :: rand\n      INTEGER, PARAMETER                                 :: n_idle = 1000\n\n      ! initialize seed based on input arguments such that random numbers are deterministic across all processes\n      iseed(1) = nel; iseed(2) = nbin; iseed(3) = MAXVAL(weights); iseed(4) = MINVAL(weights)\n\n      iseed(4) = iseed(4)*2 + 1 ! odd\n\n      iseed(:) = MODULO(iseed(:), 2**12)\n\n      DO i = 1, n_idle\n         CALL dlarnv(1, iseed, 1, rand)\n      END DO\n\n      occup(:) = 0\n      weights_s = weights\n      CALL sort(weights_s, nel, sort_index)\n\n      occup(:) = 0\n      DO iel = nel, 1, -1\n         min_occup = MINVAL(occup, 1)\n\n         ! available bins with min. occupancy\n         bin_mask = occup == min_occup\n         n_avail = COUNT(bin_mask)\n         ALLOCATE (bins_avail(n_avail))\n         bins_avail(:) = PACK((/(i, i=1, nbin)/), MASK=bin_mask)\n\n         CALL dlarnv(1, iseed, 1, rand)\n         i_select = FLOOR(rand*n_avail) + 1\n         ibin = bins_avail(i_select)\n         DEALLOCATE (bins_avail)\n\n         dist(sort_index(iel)) = ibin - 1\n         occup(ibin) = occup(ibin) + weights_s(iel)\n      END DO\n\n   END SUBROUTINE\n\n   FUNCTION new_dbcsr_tas_dist_repl(dist_vec, nprowcol, nmrowcol, n_repl, dist_size)\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: dist_vec\n      INTEGER, INTENT(IN)                                :: nprowcol, nmrowcol, n_repl, dist_size\n      TYPE(dbcsr_tas_dist_repl)                            :: new_dbcsr_tas_dist_repl\n\n      new_dbcsr_tas_dist_repl%n_repl = n_repl\n      new_dbcsr_tas_dist_repl%dist_size = dist_size\n      ALLOCATE (new_dbcsr_tas_dist_repl%dist_vec(nmrowcol))\n      new_dbcsr_tas_dist_repl%dist_vec(:) = MOD(dist_vec(:), dist_size)\n      new_dbcsr_tas_dist_repl%nprowcol = nprowcol\n      new_dbcsr_tas_dist_repl%nmrowcol_local = nmrowcol\n      new_dbcsr_tas_dist_repl%nmrowcol = nmrowcol*n_repl\n   END FUNCTION\n\n   FUNCTION cyclic_dist(t, rowcol)\n      CLASS(dbcsr_tas_dist_cyclic), INTENT(IN) :: t\n      INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n      INTEGER :: cyclic_dist\n\n      cyclic_dist = INT(MOD((rowcol - 1)/INT(t%split_size, KIND=int_8), INT(t%nprowcol, KIND=int_8)))\n\n   END FUNCTION\n\n   FUNCTION cyclic_rowcols(t, dist)\n      CLASS(dbcsr_tas_dist_cyclic), INTENT(IN) :: t\n      INTEGER, INTENT(IN) :: dist\n      INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: cyclic_rowcols\n      INTEGER :: count, nsplit, isplit, irowcol, max_size\n      INTEGER(KIND=int_8) :: rowcol\n      INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: rowcols_tmp\n\n      nsplit = INT((t%nmrowcol - 1)/INT(t%split_size, KIND=int_8) + 1_int_8)\n      max_size = nsplit*t%split_size\n      ALLOCATE (rowcols_tmp(max_size))\n      rowcols_tmp(:) = 0\n      count = 0\n      loop: DO isplit = 1, nsplit\n         DO irowcol = 1, t%split_size\n            rowcol = INT((dist + (isplit - 1)*t%nprowcol), KIND=int_8)*INT(t%split_size, KIND=int_8) + &\n                     INT(irowcol, KIND=int_8)\n            IF (rowcol > t%nmrowcol) THEN\n               EXIT loop\n            ELSE\n               count = count + 1\n               rowcols_tmp(count) = rowcol\n            END IF\n         END DO\n      END DO loop\n\n      ALLOCATE (cyclic_rowcols(count))\n      cyclic_rowcols(:) = rowcols_tmp(1:count)\n   END FUNCTION\n\nEND MODULE\n"
  },
  {
    "path": "src/tas/dbcsr_tas_io.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tas_io\n\n   !! tall-and-skinny matrices: Input / Output\n   USE dbcsr_tas_types, ONLY: &\n      dbcsr_tas_type, dbcsr_tas_split_info\n   USE dbcsr_tas_global, ONLY: &\n      dbcsr_tas_rowcol_data, dbcsr_tas_distribution\n   USE dbcsr_kinds, ONLY: &\n      int_8, real_8, default_string_length\n   USE dbcsr_tas_base, ONLY: &\n      dbcsr_tas_get_info, dbcsr_tas_get_num_blocks, dbcsr_tas_get_num_blocks_total, dbcsr_tas_get_nze_total, &\n      dbcsr_tas_get_nze, dbcsr_tas_nblkrows_total, dbcsr_tas_nblkcols_total, dbcsr_tas_info\n   USE dbcsr_tas_split, ONLY: &\n      dbcsr_tas_get_split_info, rowsplit, colsplit\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_environ, mp_sum, mp_max, mp_comm_type\n   USE dbcsr_dist_methods, ONLY: &\n      dbcsr_distribution_row_dist, dbcsr_distribution_col_dist\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_io'\n\n   PUBLIC :: &\n      dbcsr_tas_write_dist, &\n      dbcsr_tas_write_matrix_info, &\n      dbcsr_tas_write_split_info, &\n      prep_output_unit\n\nCONTAINS\n\n   SUBROUTINE dbcsr_tas_write_matrix_info(matrix, unit_nr, full_info)\n      !! Write basic infos of tall-and-skinny matrix: block dimensions, full dimensions, process grid dimensions\n\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix\n      INTEGER, INTENT(IN)            :: unit_nr\n      LOGICAL, OPTIONAL, INTENT(IN)  :: full_info\n         !! Whether to print distribution and block size vectors\n\n      INTEGER(KIND=int_8)                      :: nblkrows_total, nblkcols_total, nfullrows_total, &\n                                                  nfullcols_total\n      INTEGER                                  :: nprow, npcol, unit_nr_prv\n      CLASS(dbcsr_tas_distribution), ALLOCATABLE :: proc_row_dist, proc_col_dist\n      CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE  :: row_blk_size, col_blk_size\n      INTEGER(KIND=int_8)                      :: iblk\n      CHARACTER(default_string_length)         :: name\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n      IF (unit_nr_prv == 0) RETURN\n\n      CALL dbcsr_tas_get_info(matrix, nblkrows_total=nblkrows_total, nblkcols_total=nblkcols_total, &\n                              nfullrows_total=nfullrows_total, nfullcols_total=nfullcols_total, &\n                              nprow=nprow, npcol=npcol, proc_row_dist=proc_row_dist, proc_col_dist=proc_col_dist, &\n                              row_blk_size=row_blk_size, col_blk_size=col_blk_size, name=name)\n\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, \"(T2,A)\") &\n            \"GLOBAL INFO OF \"//TRIM(name)\n         WRITE (unit_nr_prv, \"(T4,A,1X)\", advance=\"no\") \"block dimensions:\"\n         WRITE (unit_nr_prv, \"(I12,I12)\", advance=\"no\") nblkrows_total, nblkcols_total\n         WRITE (unit_nr_prv, \"(/T4,A,1X)\", advance=\"no\") \"full dimensions:\"\n         WRITE (unit_nr_prv, \"(I14,I14)\", advance=\"no\") nfullrows_total, nfullcols_total\n         WRITE (unit_nr_prv, \"(/T4,A,1X)\", advance=\"no\") \"process grid dimensions:\"\n         WRITE (unit_nr_prv, \"(I10,I10)\", advance=\"no\") nprow, npcol\n         IF (PRESENT(full_info)) THEN\n            IF (full_info) THEN\n               WRITE (unit_nr_prv, '(/T4,A)', advance='no') \"Block sizes:\"\n               WRITE (unit_nr_prv, '(/T8,A)', advance='no') 'Row:'\n               DO iblk = 1, row_blk_size%nmrowcol\n                  WRITE (unit_nr_prv, '(I4,1X)', advance='no') row_blk_size%data(iblk)\n               END DO\n               WRITE (unit_nr_prv, '(/T8,A)', advance='no') 'Column:'\n               DO iblk = 1, col_blk_size%nmrowcol\n                  WRITE (unit_nr_prv, '(I4,1X)', advance='no') col_blk_size%data(iblk)\n               END DO\n               WRITE (unit_nr_prv, '(/T4,A)', advance='no') \"Block distribution:\"\n               WRITE (unit_nr_prv, '(/T8,A)', advance='no') 'Row:'\n               DO iblk = 1, proc_row_dist%nmrowcol\n                  WRITE (unit_nr_prv, '(I4,1X)', advance='no') proc_row_dist%dist(iblk)\n               END DO\n               WRITE (unit_nr_prv, '(/T8,A)', advance='no') 'Column:'\n               DO iblk = 1, proc_col_dist%nmrowcol\n                  WRITE (unit_nr_prv, '(I4,1X)', advance='no') proc_col_dist%dist(iblk)\n               END DO\n\n            END IF\n         END IF\n         WRITE (unit_nr_prv, *)\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_write_dist(matrix, unit_nr, full_info)\n      !! Write info on tall-and-skinny matrix distribution & load balance\n\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix\n      INTEGER, INTENT(IN)              :: unit_nr\n      LOGICAL, INTENT(IN), OPTIONAL    :: full_info\n         !! Whether to print subgroup DBCSR distribution\n\n      CHARACTER(default_string_length) :: name\n      INTEGER                          :: ngroup, igroup, nproc, iproc, &\n                                          nblock_p_max, nelement_p_max, &\n                                          nblock, nelement\n      INTEGER(KIND=int_8), DIMENSION(2) :: tmp_i8\n      INTEGER, DIMENSION(2)            :: tmp\n      INTEGER(KIND=int_8)              :: nblock_tot, nblock_p_sum, nelement_p_sum, nelement_s_max, &\n                                          nblock_s, nelement_s, nblock_s_max\n      REAL(KIND=real_8)                :: occupation\n      INTEGER, DIMENSION(:), POINTER   :: rowdist, coldist\n      INTEGER                          :: split_rowcol, icol, irow, unit_nr_prv\n      TYPE(mp_comm_type)               :: mp_comm, mp_comm_group\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n      IF (unit_nr_prv == 0) RETURN\n\n      CALL dbcsr_tas_get_split_info(matrix%dist%info, mp_comm, ngroup, igroup, mp_comm_group, split_rowcol)\n      CALL dbcsr_tas_get_info(matrix, name=name)\n      CALL mp_environ(nproc, iproc, mp_comm)\n\n      nblock = dbcsr_tas_get_num_blocks(matrix)\n      nelement = dbcsr_tas_get_nze(matrix)\n\n      nblock_p_sum = dbcsr_tas_get_num_blocks_total(matrix)\n      nelement_p_sum = dbcsr_tas_get_nze_total(matrix)\n\n      tmp = (/nblock, nelement/)\n      CALL mp_max(tmp, mp_comm)\n      nblock_p_max = tmp(1); nelement_p_max = tmp(2)\n\n      nblock_s = nblock\n      nelement_s = nelement\n\n      CALL mp_sum(nblock_s, mp_comm_group)\n      CALL mp_sum(nelement_s, mp_comm_group)\n\n      tmp_i8 = (/nblock_s, nelement_s/)\n      CALL mp_max(tmp_i8, mp_comm)\n      nblock_s_max = tmp_i8(1); nelement_s_max = tmp_i8(2)\n\n      nblock_tot = dbcsr_tas_nblkrows_total(matrix)*dbcsr_tas_nblkcols_total(matrix)\n      occupation = -1.0_real_8\n      IF (nblock_tot .NE. 0) occupation = 100.0_real_8*REAL(nblock_p_sum, real_8)/REAL(nblock_tot, real_8)\n\n      rowdist => dbcsr_distribution_row_dist(matrix%matrix%dist)\n      coldist => dbcsr_distribution_col_dist(matrix%matrix%dist)\n\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, \"(T2,A)\") &\n            \"DISTRIBUTION OF \"//TRIM(name)\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Number of non-zero blocks:\", nblock_p_sum\n         WRITE (unit_nr_prv, \"(T15,A,T75,F6.2)\") \"Percentage of non-zero blocks:\", occupation\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Average number of blocks per group:\", (nblock_p_sum + ngroup - 1)/ngroup\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Maximum number of blocks per group:\", nblock_s_max\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Average number of matrix elements per group:\", (nelement_p_sum + ngroup - 1)/ngroup\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Maximum number of matrix elements per group:\", nelement_s_max\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Average number of blocks per CPU:\", (nblock_p_sum + nproc - 1)/nproc\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Maximum number of blocks per CPU:\", nblock_p_max\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Average number of matrix elements per CPU:\", (nelement_p_sum + nproc - 1)/nproc\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Maximum number of matrix elements per CPU:\", nelement_p_max\n         IF (PRESENT(full_info)) THEN\n            IF (full_info) THEN\n               WRITE (unit_nr_prv, \"(T15,A)\") \"Row distribution on subgroup:\"\n               WRITE (unit_nr_prv, '(T15)', advance='no')\n               DO irow = 1, SIZE(rowdist)\n                  WRITE (unit_nr_prv, '(I3, 1X)', advance='no') rowdist(irow)\n               END DO\n               WRITE (unit_nr_prv, \"(/T15,A)\") \"Column distribution on subgroup:\"\n               WRITE (unit_nr_prv, '(T15)', advance='no')\n               DO icol = 1, SIZE(coldist)\n                  WRITE (unit_nr_prv, '(I3, 1X)', advance='no') coldist(icol)\n               END DO\n               WRITE (unit_nr_prv, *)\n            END IF\n         END IF\n      END IF\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_write_split_info(info, unit_nr, name)\n      !! Print info on how matrix is split\n      TYPE(dbcsr_tas_split_info), INTENT(IN)             :: info\n      INTEGER, INTENT(IN) :: unit_nr\n      CHARACTER(len=*), INTENT(IN), OPTIONAL             :: name\n      INTEGER                                            :: groupsize, igroup, &\n                                                            mynode, nsplit, &\n                                                            numnodes, split_rowcol, unit_nr_prv\n      INTEGER, DIMENSION(2)                              :: coord, dims, groupcoord, groupdims, &\n                                                            pgrid_offset\n      CHARACTER(len=:), ALLOCATABLE                      :: name_prv\n      TYPE(mp_comm_type)                                 :: mp_comm, mp_comm_group\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n      IF (unit_nr_prv == 0) RETURN\n\n      IF (PRESENT(name)) THEN\n         ALLOCATE (name_prv, SOURCE=TRIM(name))\n      ELSE\n         ALLOCATE (name_prv, SOURCE=\"\")\n      END IF\n\n      CALL dbcsr_tas_get_split_info(info, mp_comm, nsplit, igroup, mp_comm_group, split_rowcol, pgrid_offset)\n\n      CALL mp_environ(numnodes, mynode, mp_comm)\n      CALL mp_environ(numnodes, dims, coord, mp_comm)\n      CALL mp_environ(groupsize, groupdims, groupcoord, mp_comm_group)\n\n      IF (unit_nr_prv > 0) THEN\n         SELECT CASE (split_rowcol)\n         CASE (rowsplit)\n            WRITE (unit_nr_prv, \"(T4,A,I4,1X,A,I4)\") name_prv//\"splitting rows by factor\", nsplit\n         CASE (colsplit)\n            WRITE (unit_nr_prv, \"(T4,A,I4,1X,A,I4)\") name_prv//\"splitting columns by factor\", nsplit\n         END SELECT\n         WRITE (unit_nr_prv, \"(T4,A,I4,A1,I4)\") name_prv//\"global grid sizes:\", dims(1), \"x\", dims(2)\n      END IF\n\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, \"(T4,A,I4,A1,I4)\") &\n            name_prv//\"grid sizes on subgroups:\", &\n            groupdims(1), \"x\", groupdims(2)\n      END IF\n\n   END SUBROUTINE\n\n   FUNCTION prep_output_unit(unit_nr) RESULT(unit_nr_out)\n      INTEGER, INTENT(IN), OPTIONAL :: unit_nr\n      INTEGER                       :: unit_nr_out\n\n      IF (PRESENT(unit_nr)) THEN\n         unit_nr_out = unit_nr\n      ELSE\n         unit_nr_out = 0\n      END IF\n\n   END FUNCTION\n\nEND MODULE\n\n"
  },
  {
    "path": "src/tas/dbcsr_tas_mm.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tas_mm\n   !! Matrix multiplication for tall-and-skinny matrices. This uses the k-split (non-recursive) CARMA\n   !! algorithm that is communication-optimal as long as the two smaller dimensions have\n   !! the same size.\n   !! Submatrices are obtained by splitting a dimension of the process grid. Multiplication of\n   !! submatrices uses DBCSR Cannon algorithm. Due to unknown sparsity pattern of result matrix, parameters\n   !! (group sizes and process grid dimensions) can not be derived from matrix dimensions and need to be\n   !! set manually.\n\n   #:include \"dbcsr_tas.fypp\"\n\n   USE dbcsr_data_methods, ONLY: &\n      dbcsr_scalar_zero, dbcsr_scalar, dbcsr_scalar_multiply\n   USE dbcsr_data_types, ONLY: &\n      dbcsr_scalar_type, dbcsr_type_real_8, dbcsr_type_real_4, dbcsr_type_complex_8, dbcsr_type_complex_4\n   USE dbcsr_multiply_api, ONLY: dbcsr_multiply\n   USE dbcsr_tas_base, ONLY: &\n      dbcsr_tas_create, dbcsr_tas_destroy, dbcsr_tas_distribution_destroy, dbcsr_tas_distribution_new, &\n      dbcsr_tas_get_data_type, dbcsr_tas_info, dbcsr_tas_nblkcols_total, &\n      dbcsr_tas_nblkrows_total, dbcsr_tas_filter, dbcsr_tas_get_info, dbcsr_tas_iterator_blocks_left, &\n      dbcsr_tas_get_nze_total, dbcsr_tas_reserve_blocks, dbcsr_tas_iterator_start, dbcsr_tas_iterator_next_block, &\n      dbcsr_tas_iterator_stop, dbcsr_tas_copy, dbcsr_tas_get_block_p, dbcsr_tas_clear, dbcsr_tas_get_num_blocks, &\n      dbcsr_tas_nfullrows_total, dbcsr_tas_nfullcols_total\n   USE dbcsr_tas_types, ONLY: &\n      dbcsr_tas_distribution_type, dbcsr_tas_split_info, dbcsr_tas_type, dbcsr_tas_iterator\n   USE dbcsr_tas_global, ONLY: &\n      dbcsr_tas_dist_cyclic, dbcsr_tas_dist_arb, dbcsr_tas_distribution, dbcsr_tas_dist_arb_default, &\n      dbcsr_tas_rowcol_data, dbcsr_tas_blk_size_one, dbcsr_tas_default_distvec\n   USE dbcsr_tas_reshape_ops, ONLY: &\n      dbcsr_tas_merge, dbcsr_tas_replicate, dbcsr_tas_reshape\n   USE dbcsr_tas_split, ONLY: &\n      rowsplit, colsplit, dbcsr_tas_get_split_info, dbcsr_tas_create_split, dbcsr_tas_mp_comm, &\n      dbcsr_tas_release_info, accept_pgrid_dims, dbcsr_tas_info_hold, default_nsplit_accept_ratio\n   USE dbcsr_tas_util, ONLY: &\n      swap, invert_transpose_flag, array_eq, dbcsr_mp_environ\n   USE dbcsr_types, ONLY: &\n      dbcsr_no_transpose, dbcsr_transpose, dbcsr_type, dbcsr_distribution_obj, dbcsr_mp_obj, &\n      dbcsr_type_no_symmetry\n   USE dbcsr_kinds, ONLY: &\n      int_8, real_8, real_4, default_string_length\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_environ, mp_sum, mp_comm_free, mp_cart_create, mp_max, mp_sync, mp_comm_type\n   USE dbcsr_operations, ONLY: &\n      dbcsr_scale, dbcsr_get_info, dbcsr_copy, dbcsr_clear, dbcsr_add, dbcsr_zero\n   USE dbcsr_tas_io, ONLY: &\n      dbcsr_tas_write_dist, dbcsr_tas_write_matrix_info, dbcsr_tas_write_split_info, prep_output_unit\n   USE dbcsr_work_operations, ONLY: dbcsr_create, dbcsr_finalize\n   USE dbcsr_transformations, ONLY: dbcsr_redistribute\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new\n   USE dbcsr_methods, ONLY: &\n      dbcsr_mp_release, dbcsr_release, dbcsr_distribution_release, dbcsr_get_nze, dbcsr_nfullrows_total, dbcsr_nfullcols_total\n   USE dbcsr_config, ONLY: dbcsr_cfg\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_mm'\n\n   PUBLIC :: &\n      dbcsr_tas_multiply, &\n      dbcsr_tas_batched_mm_init, &\n      dbcsr_tas_batched_mm_finalize, &\n      dbcsr_tas_result_index, &\n      dbcsr_tas_set_batched_state, &\n      dbcsr_tas_batched_mm_complete\n\nCONTAINS\n\n   RECURSIVE SUBROUTINE dbcsr_tas_multiply(transa, transb, transc, alpha, matrix_a, matrix_b, beta, matrix_c, &\n                                           optimize_dist, split_opt, filter_eps, flop, move_data_a, &\n                                           move_data_b, retain_sparsity, simple_split, result_index, unit_nr, log_verbose)\n      !! tall-and-skinny matrix-matrix multiplication. Undocumented dummy arguments are identical to\n      !! arguments of dbcsr_multiply (see dbcsr_mm, dbcsr_multiply_generic).\n\n      CHARACTER(LEN=1), INTENT(IN)               :: transa, transb, transc\n      TYPE(dbcsr_scalar_type), INTENT(IN)        :: alpha, beta\n      TYPE(dbcsr_tas_type), TARGET, &\n         INTENT(INOUT)                           :: matrix_a, matrix_b, matrix_c\n      LOGICAL, INTENT(IN), OPTIONAL              :: optimize_dist\n         !! Whether distribution should be optimized internally. In the current implementation this guarantees optimal parameters\n         !! only for dense matrices.\n      TYPE(dbcsr_tas_split_info), INTENT(OUT), &\n         OPTIONAL                       :: split_opt\n         !! optionally return split info containing optimal grid and split parameters. This can be used to choose optimal process\n         !! grids for subsequent matrix multiplications with matrices of similar shape and sparsity.\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL    :: filter_eps\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL :: flop\n      LOGICAL, INTENT(IN), OPTIONAL              :: move_data_a, move_data_b, simple_split, retain_sparsity\n         !! memory optimization: move data to matrix_c such that matrix_a is empty on return\n         !! memory optimization: move data to matrix_c such that matrix_b is empty on return\n         !! for internal use only\n      INTEGER(int_8), DIMENSION(:, :), ALLOCATABLE, INTENT(OUT), OPTIONAL :: result_index\n      INTEGER, OPTIONAL, INTENT(IN)              :: unit_nr\n         !! unit number for logging output\n      LOGICAL, OPTIONAL, INTENT(IN)              :: log_verbose\n         !! only for testing: verbose output\n\n      TYPE(dbcsr_tas_type), POINTER              :: matrix_b_rs, matrix_a_rs, matrix_c_rs, &\n                                                    matrix_c_rep, matrix_b_rep, matrix_a_rep\n\n      REAL(KIND=real_8)                          :: filter_eps_prv\n      INTEGER(KIND=int_8), DIMENSION(2)          :: dims_a, dims_b, dims_c\n      INTEGER, DIMENSION(2)                      :: pdims, pcoord, pcoord_sub, pdims_sub\n      INTEGER(KIND=int_8), DIMENSION(3)          :: dims\n      INTEGER                                    :: max_mm_dim, data_type, handle, handle2, handle3, handle4, &\n                                                    unit_nr_prv, nsplit, nsplit_opt, numproc, numproc_sub, iproc, &\n                                                    split_rc, split_a, split_b, split_c, &\n                                                    batched_repl, max_mm_dim_batched, nsplit_batched\n      CHARACTER(LEN=1)                           :: tr_case, transa_prv, transb_prv, transc_prv\n      TYPE(dbcsr_scalar_type)                    :: zero\n      LOGICAL                                    :: new_a, new_b, new_c, simple_split_prv, opt_pgrid, &\n                                                    move_a, move_b, do_batched, &\n                                                    nodata_3\n      TYPE(dbcsr_tas_split_info)                 :: info, info_a, info_b, info_c\n      CHARACTER(LEN=*), PARAMETER                :: routineN = 'dbcsr_tas_multiply'\n      INTEGER(KIND=int_8)                        :: nze_a, nze_b, nze_c, nze_c_sum\n      TYPE(dbcsr_type)                           :: matrix_a_mm, matrix_b_mm, matrix_c_mm\n      TYPE(mp_comm_type)                         :: mp_comm, comm_tmp, mp_comm_group, mp_comm_mm, mp_comm_opt\n\n      CALL timeset(routineN, handle)\n      CALL mp_sync(matrix_a%dist%info%mp_comm)\n      CALL timeset(\"dbcsr_tas_total\", handle2)\n\n      NULLIFY (matrix_b_rs, matrix_a_rs, matrix_c_rs)\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n\n      IF (PRESENT(simple_split)) THEN\n         simple_split_prv = simple_split\n      ELSE\n         simple_split_prv = .FALSE.\n\n         info_a = dbcsr_tas_info(matrix_a); info_b = dbcsr_tas_info(matrix_b); info_c = dbcsr_tas_info(matrix_c)\n         IF (info_a%strict_split(1) .OR. info_b%strict_split(1) .OR. info_c%strict_split(1)) simple_split_prv = .TRUE.\n      END IF\n\n      nodata_3 = .TRUE.\n      IF (PRESENT(retain_sparsity)) THEN\n         IF (retain_sparsity) nodata_3 = .FALSE.\n      END IF\n\n      ! get prestored info for multiplication strategy in case of batched mm\n      batched_repl = 0\n      do_batched = .FALSE.\n      IF (matrix_a%do_batched > 0) THEN\n         do_batched = .TRUE.\n         IF (matrix_a%do_batched == 3) THEN\n            DBCSR_ASSERT(batched_repl == 0)\n            batched_repl = 1\n            CALL dbcsr_tas_get_split_info( &\n               dbcsr_tas_info(matrix_a%mm_storage%store_batched_repl), &\n               nsplit=nsplit_batched)\n            DBCSR_ASSERT(nsplit_batched > 0)\n            max_mm_dim_batched = 3\n         END IF\n      END IF\n\n      IF (matrix_b%do_batched > 0) THEN\n         do_batched = .TRUE.\n         IF (matrix_b%do_batched == 3) THEN\n            DBCSR_ASSERT(batched_repl == 0)\n            batched_repl = 2\n            CALL dbcsr_tas_get_split_info( &\n               dbcsr_tas_info(matrix_b%mm_storage%store_batched_repl), &\n               nsplit=nsplit_batched)\n            DBCSR_ASSERT(nsplit_batched > 0)\n            max_mm_dim_batched = 1\n         END IF\n      END IF\n\n      IF (matrix_c%do_batched > 0) THEN\n         do_batched = .TRUE.\n         IF (matrix_c%do_batched == 3) THEN\n            DBCSR_ASSERT(batched_repl == 0)\n            batched_repl = 3\n            CALL dbcsr_tas_get_split_info( &\n               dbcsr_tas_info(matrix_c%mm_storage%store_batched_repl), &\n               nsplit=nsplit_batched)\n            DBCSR_ASSERT(nsplit_batched > 0)\n            max_mm_dim_batched = 2\n         END IF\n      END IF\n\n      move_a = .FALSE.\n      move_b = .FALSE.\n\n      IF (PRESENT(move_data_a)) move_a = move_data_a\n      IF (PRESENT(move_data_b)) move_b = move_data_b\n\n      IF (.NOT. dbcsr_tas_get_data_type(matrix_a) .EQ. dbcsr_tas_get_data_type(matrix_b)) THEN\n         DBCSR_ABORT(\"matrices must have same datatype\")\n      END IF\n\n      data_type = dbcsr_tas_get_data_type(matrix_a)\n\n      transa_prv = transa; transb_prv = transb; transc_prv = transc\n\n      dims_a = [dbcsr_tas_nblkrows_total(matrix_a), dbcsr_tas_nblkcols_total(matrix_a)]\n      dims_b = [dbcsr_tas_nblkrows_total(matrix_b), dbcsr_tas_nblkcols_total(matrix_b)]\n      dims_c = [dbcsr_tas_nblkrows_total(matrix_c), dbcsr_tas_nblkcols_total(matrix_c)]\n\n      IF (unit_nr_prv .GT. 0) THEN\n         WRITE (unit_nr_prv, '(A)') repeat(\"-\", 80)\n         WRITE (unit_nr_prv, '(A,1X,A,1X,A,1X,A,1X,A,1X,A)') \"DBCSR TAS MATRIX MULTIPLICATION:\", &\n            TRIM(matrix_a%matrix%name), 'x', TRIM(matrix_b%matrix%name), '=', TRIM(matrix_c%matrix%name)\n         WRITE (unit_nr_prv, '(A)') repeat(\"-\", 80)\n      END IF\n      IF (do_batched) THEN\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, \"(T2,A)\") &\n               \"BATCHED PROCESSING OF MATMUL\"\n            IF (batched_repl > 0) THEN\n               WRITE (unit_nr_prv, \"(T4,A,T80,I1)\") \"reusing replicated matrix:\", batched_repl\n            END IF\n         END IF\n      END IF\n\n      IF (transa_prv .EQ. dbcsr_transpose) THEN\n         CALL swap(dims_a)\n      END IF\n\n      IF (transb_prv .EQ. dbcsr_transpose) THEN\n         CALL swap(dims_b)\n      END IF\n\n      dims_c = [dims_a(1), dims_b(2)]\n\n      IF (.NOT. (dims_a(2) .EQ. dims_b(1))) THEN\n         DBCSR_ABORT(\"inconsistent matrix dimensions\")\n      END IF\n\n      dims(:) = [dims_a(1), dims_a(2), dims_b(2)]\n\n      tr_case = ''\n\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, \"(T2,A, 1X, I12, 1X, I12, 1X, I12)\") \"mm dims:\", dims(1), dims(2), dims(3)\n      END IF\n\n      CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_a), mp_comm=mp_comm)\n      CALL mp_environ(numproc, iproc, mp_comm)\n\n      ! derive optimal matrix layout and split factor from occupancies\n      nze_a = dbcsr_tas_get_nze_total(matrix_a)\n      nze_b = dbcsr_tas_get_nze_total(matrix_b)\n\n      IF (.NOT. simple_split_prv) THEN\n         CALL dbcsr_tas_result_index(transa, transb, transc, matrix_a, matrix_b, matrix_c, filter_eps, &\n                                     blk_ind=result_index, nze=nze_c, retain_sparsity=retain_sparsity)\n\n         IF (PRESENT(result_index)) THEN\n            CALL mp_sync(matrix_a%dist%info%mp_comm)\n            CALL timestop(handle2)\n            CALL timestop(handle)\n            RETURN\n         END IF\n\n         max_mm_dim = MAXLOC(dims, 1)\n         nsplit = split_factor_estimate(max_mm_dim, nze_a, nze_b, nze_c, numproc)\n         nsplit_opt = nsplit\n\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, \"(T2,A)\") &\n               \"MM PARAMETERS\"\n            WRITE (unit_nr_prv, \"(T4,A,T68,I13)\") \"Est. number of matrix elements per CPU of result matrix:\", &\n               (nze_c + numproc - 1)/numproc\n\n            WRITE (unit_nr_prv, \"(T4,A,T68,I13)\") \"Est. optimal split factor:\", nsplit\n         END IF\n\n      ELSEIF (batched_repl > 0) THEN\n         nsplit = nsplit_batched\n         nsplit_opt = nsplit\n         max_mm_dim = max_mm_dim_batched\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, \"(T2,A)\") &\n               \"MM PARAMETERS\"\n            WRITE (unit_nr_prv, \"(T4,A,T68,I13)\") \"Est. optimal split factor:\", nsplit\n         END IF\n\n      ELSE\n         nsplit = 0\n         max_mm_dim = MAXLOC(dims, 1)\n      END IF\n\n      ! reshape matrices to the optimal layout and split factor\n      split_a = rowsplit; split_b = rowsplit; split_c = rowsplit\n      SELECT CASE (max_mm_dim)\n      CASE (1)\n\n         split_a = rowsplit; split_c = rowsplit\n         CALL reshape_mm_compatible(matrix_a, matrix_c, matrix_a_rs, matrix_c_rs, &\n                                    new_a, new_c, transa_prv, transc_prv, optimize_dist=optimize_dist, &\n                                    nsplit=nsplit, &\n                                    opt_nsplit=batched_repl == 0, &\n                                    split_rc_1=split_a, split_rc_2=split_c, &\n                                    nodata2=nodata_3, comm_new=comm_tmp, &\n                                    move_data_1=move_a, unit_nr=unit_nr_prv)\n\n         info = dbcsr_tas_info(matrix_a_rs)\n         CALL dbcsr_tas_get_split_info(info, split_rowcol=split_rc, mp_comm=mp_comm)\n\n         new_b = .FALSE.\n         IF (matrix_b%do_batched <= 2) THEN\n            ALLOCATE (matrix_b_rs)\n            CALL reshape_mm_small(mp_comm, matrix_b, matrix_b_rs, transb_prv == dbcsr_transpose, transb_prv, move_data=move_b)\n            new_b = .TRUE.\n         END IF\n\n         tr_case = transa_prv\n\n         IF (unit_nr_prv > 0) THEN\n            IF (tr_case == 'N') THEN\n               WRITE (unit_nr_prv, \"(T2,A, 1X, A)\") \"mm case:\", \"| x + = |\"\n            ELSE\n               WRITE (unit_nr_prv, \"(T2,A, 1X, A)\") \"mm case:\", \"--T x + = --T\"\n            END IF\n         END IF\n\n      CASE (2)\n\n         split_a = colsplit; split_b = rowsplit\n         CALL reshape_mm_compatible(matrix_a, matrix_b, matrix_a_rs, matrix_b_rs, new_a, new_b, transa_prv, transb_prv, &\n                                    optimize_dist=optimize_dist, &\n                                    nsplit=nsplit, &\n                                    opt_nsplit=batched_repl == 0, &\n                                    split_rc_1=split_a, split_rc_2=split_b, &\n                                    comm_new=comm_tmp, &\n                                    move_data_1=move_a, move_data_2=move_b, unit_nr=unit_nr_prv)\n\n         info = dbcsr_tas_info(matrix_a_rs)\n         CALL dbcsr_tas_get_split_info(info, split_rowcol=split_rc, mp_comm=mp_comm)\n\n         IF (matrix_c%do_batched == 1) THEN\n            matrix_c%mm_storage%batched_beta = beta\n         ELSEIF (matrix_c%do_batched > 1) THEN\n            matrix_c%mm_storage%batched_beta = &\n               dbcsr_scalar_multiply(matrix_c%mm_storage%batched_beta, beta)\n         END IF\n\n         IF (matrix_c%do_batched <= 2) THEN\n            ALLOCATE (matrix_c_rs)\n            CALL reshape_mm_small(mp_comm, matrix_c, matrix_c_rs, transc_prv == dbcsr_transpose, transc_prv, nodata=nodata_3)\n\n            ! just leave sparsity structure for retain sparsity but no values\n            IF (.NOT. nodata_3) CALL dbcsr_zero(matrix_c_rs%matrix)\n\n            IF (matrix_c%do_batched >= 1) matrix_c%mm_storage%store_batched => matrix_c_rs\n         ELSEIF (matrix_c%do_batched == 3) THEN\n            matrix_c_rs => matrix_c%mm_storage%store_batched\n         END IF\n\n         new_c = matrix_c%do_batched == 0\n         tr_case = transa_prv\n\n         IF (unit_nr_prv > 0) THEN\n            IF (tr_case == 'N') THEN\n               WRITE (unit_nr_prv, \"(T2,A, 1X, A)\") \"mm case:\", \"-- x --T = +\"\n            ELSE\n               WRITE (unit_nr_prv, \"(T2,A, 1X, A)\") \"mm case:\", \"|T x | = +\"\n            END IF\n         END IF\n\n      CASE (3)\n\n         split_b = colsplit; split_c = colsplit\n         CALL reshape_mm_compatible(matrix_b, matrix_c, matrix_b_rs, matrix_c_rs, new_b, new_c, transb_prv, &\n                                    transc_prv, optimize_dist=optimize_dist, &\n                                    nsplit=nsplit, &\n                                    opt_nsplit=batched_repl == 0, &\n                                    split_rc_1=split_b, split_rc_2=split_c, &\n                                    nodata2=nodata_3, comm_new=comm_tmp, &\n                                    move_data_1=move_b, unit_nr=unit_nr_prv)\n         info = dbcsr_tas_info(matrix_b_rs)\n         CALL dbcsr_tas_get_split_info(info, split_rowcol=split_rc, mp_comm=mp_comm)\n\n         new_a = .FALSE.\n         IF (matrix_a%do_batched <= 2) THEN\n            ALLOCATE (matrix_a_rs)\n            CALL reshape_mm_small(mp_comm, matrix_a, matrix_a_rs, transa_prv == dbcsr_transpose, transa_prv, move_data=move_a)\n            new_a = .TRUE.\n         END IF\n\n         tr_case = transb_prv\n\n         IF (unit_nr_prv > 0) THEN\n            IF (tr_case == 'N') THEN\n               WRITE (unit_nr_prv, \"(T2,A, 1X, A)\") \"mm case:\", \"+ x -- = --\"\n            ELSE\n               WRITE (unit_nr_prv, \"(T2,A, 1X, A)\") \"mm case:\", \"+ x |T = |T\"\n            END IF\n         END IF\n\n      END SELECT\n\n      CALL dbcsr_tas_get_split_info(info, nsplit=nsplit, mp_comm=mp_comm, mp_comm_group=mp_comm_group)\n\n      CALL mp_environ(numproc, pdims, pcoord, mp_comm)\n      CALL mp_environ(numproc_sub, pdims_sub, pcoord_sub, mp_comm_group)\n\n      opt_pgrid = .NOT. accept_pgrid_dims(pdims_sub, relative=.TRUE.)\n\n      IF (PRESENT(filter_eps)) THEN\n         filter_eps_prv = filter_eps\n      ELSE\n         filter_eps_prv = 0.0_real_8\n      END IF\n\n      IF (unit_nr_prv /= 0) THEN\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, \"(T2, A)\") \"SPLIT / PARALLELIZATION INFO\"\n         END IF\n         CALL dbcsr_tas_write_split_info(info, unit_nr_prv)\n         IF (ASSOCIATED(matrix_a_rs)) CALL dbcsr_tas_write_matrix_info(matrix_a_rs, unit_nr_prv, full_info=log_verbose)\n         IF (ASSOCIATED(matrix_b_rs)) CALL dbcsr_tas_write_matrix_info(matrix_b_rs, unit_nr_prv, full_info=log_verbose)\n         IF (ASSOCIATED(matrix_c_rs)) CALL dbcsr_tas_write_matrix_info(matrix_c_rs, unit_nr_prv, full_info=log_verbose)\n         IF (unit_nr_prv > 0) THEN\n            IF (opt_pgrid) THEN\n               WRITE (unit_nr_prv, \"(T4, A, 1X, A)\") \"Change process grid:\", \"Yes\"\n            ELSE\n               WRITE (unit_nr_prv, \"(T4, A, 1X, A)\") \"Change process grid:\", \"No\"\n            END IF\n         END IF\n      END IF\n\n      zero = dbcsr_scalar_zero(data_type)\n\n      pdims = 0\n      CALL mp_cart_create(mp_comm_group, 2, pdims, pcoord, mp_comm_mm)\n\n      ! Convert DBCSR submatrices to optimized process grids and multiply\n      SELECT CASE (max_mm_dim)\n      CASE (1)\n         IF (matrix_b%do_batched <= 2) THEN\n            ALLOCATE (matrix_b_rep)\n            CALL dbcsr_tas_replicate(matrix_b_rs%matrix, dbcsr_tas_info(matrix_a_rs), matrix_b_rep, move_data=.TRUE.)\n            IF (matrix_b%do_batched == 1 .or. matrix_b%do_batched == 2) THEN\n               matrix_b%mm_storage%store_batched_repl => matrix_b_rep\n               CALL dbcsr_tas_set_batched_state(matrix_b, state=3)\n            END IF\n         ELSEIF (matrix_b%do_batched == 3) THEN\n            matrix_b_rep => matrix_b%mm_storage%store_batched_repl\n         END IF\n\n         IF (new_b) THEN\n            CALL dbcsr_tas_destroy(matrix_b_rs)\n            DEALLOCATE (matrix_b_rs)\n         END IF\n         IF (unit_nr_prv /= 0) THEN\n            CALL dbcsr_tas_write_dist(matrix_a_rs, unit_nr_prv)\n            CALL dbcsr_tas_write_dist(matrix_b_rep, unit_nr_prv, full_info=log_verbose)\n         END IF\n\n         CALL convert_to_new_pgrid(mp_comm_mm, matrix_a_rs%matrix, matrix_a_mm, optimize_pgrid=opt_pgrid, move_data=move_a)\n\n         ! keep communicators alive even after releasing TAS matrices (communicator management does not work between DBCSR and TAS)\n         info_a = dbcsr_tas_info(matrix_a_rs)\n         CALL dbcsr_tas_info_hold(info_a)\n\n         IF (new_a) THEN\n            CALL dbcsr_tas_destroy(matrix_a_rs)\n            DEALLOCATE (matrix_a_rs)\n         END IF\n         CALL convert_to_new_pgrid(mp_comm_mm, matrix_b_rep%matrix, matrix_b_mm, optimize_pgrid=opt_pgrid, &\n                                   move_data=matrix_b%do_batched == 0)\n\n         info_b = dbcsr_tas_info(matrix_b_rep)\n         CALL dbcsr_tas_info_hold(info_b)\n\n         IF (matrix_b%do_batched == 0) THEN\n            CALL dbcsr_tas_destroy(matrix_b_rep)\n            DEALLOCATE (matrix_b_rep)\n         END IF\n\n         CALL convert_to_new_pgrid(mp_comm_mm, matrix_c_rs%matrix, matrix_c_mm, nodata=nodata_3, optimize_pgrid=opt_pgrid)\n\n         info_c = dbcsr_tas_info(matrix_c_rs)\n         CALL dbcsr_tas_info_hold(info_c)\n\n         CALL mp_sync(matrix_a%dist%info%mp_comm)\n         CALL timeset(\"dbcsr_tas_dbcsr\", handle4)\n         SELECT CASE (tr_case)\n         CASE (dbcsr_no_transpose)\n            CALL timeset(\"dbcsr_tas_mm_1N\", handle3)\n\n            CALL dbcsr_multiply(transa=dbcsr_no_transpose, transb=dbcsr_no_transpose, alpha=alpha, &\n                                matrix_a=matrix_a_mm, matrix_b=matrix_b_mm, beta=beta, matrix_c=matrix_c_mm, &\n                                filter_eps=filter_eps_prv, retain_sparsity=retain_sparsity, flop=flop)\n            CALL timestop(handle3)\n         CASE (dbcsr_transpose)\n            CALL timeset(\"dbcsr_tas_mm_1T\", handle3)\n            CALL dbcsr_multiply(transa=dbcsr_transpose, transb=dbcsr_no_transpose, alpha=alpha, &\n                                matrix_a=matrix_b_mm, matrix_b=matrix_a_mm, beta=beta, matrix_c=matrix_c_mm, &\n                                filter_eps=filter_eps_prv, retain_sparsity=retain_sparsity, flop=flop)\n\n            CALL timestop(handle3)\n         END SELECT\n         CALL mp_sync(matrix_a%dist%info%mp_comm)\n         CALL timestop(handle4)\n\n         CALL dbcsr_release(matrix_a_mm)\n         CALL dbcsr_release(matrix_b_mm)\n\n         nze_c = dbcsr_get_nze(matrix_c_mm)\n\n         IF (.NOT. new_c) THEN\n            CALL redistribute_and_sum(matrix_c_mm, matrix_c_rs%matrix, local_copy=.NOT. opt_pgrid, alpha=beta)\n         ELSE\n            CALL redistribute_and_sum(matrix_c_mm, matrix_c_rs%matrix, local_copy=.NOT. opt_pgrid)\n         END IF\n\n         CALL dbcsr_release(matrix_c_mm)\n\n         IF (PRESENT(filter_eps)) CALL dbcsr_tas_filter(matrix_c_rs, filter_eps)\n\n         IF (unit_nr_prv /= 0) THEN\n            CALL dbcsr_tas_write_dist(matrix_c_rs, unit_nr_prv)\n         END IF\n\n      CASE (2)\n         IF (matrix_c%do_batched <= 1) THEN\n            ALLOCATE (matrix_c_rep)\n            CALL dbcsr_tas_replicate(matrix_c_rs%matrix, dbcsr_tas_info(matrix_a_rs), matrix_c_rep, nodata=nodata_3)\n            IF (matrix_c%do_batched == 1) THEN\n               matrix_c%mm_storage%store_batched_repl => matrix_c_rep\n               CALL dbcsr_tas_set_batched_state(matrix_c, state=3)\n            END IF\n         ELSEIF (matrix_c%do_batched == 2) THEN\n            ALLOCATE (matrix_c_rep)\n            CALL dbcsr_tas_replicate(matrix_c_rs%matrix, dbcsr_tas_info(matrix_a_rs), matrix_c_rep, nodata=nodata_3)\n            ! just leave sparsity structure for retain sparsity but no values\n            IF (.not. nodata_3) CALL dbcsr_zero(matrix_c_rep%matrix)\n            matrix_c%mm_storage%store_batched_repl => matrix_c_rep\n            CALL dbcsr_tas_set_batched_state(matrix_c, state=3)\n         ELSEIF (matrix_c%do_batched == 3) THEN\n            matrix_c_rep => matrix_c%mm_storage%store_batched_repl\n         END IF\n\n         IF (unit_nr_prv /= 0) THEN\n            CALL dbcsr_tas_write_dist(matrix_a_rs, unit_nr_prv)\n            CALL dbcsr_tas_write_dist(matrix_b_rs, unit_nr_prv)\n         END IF\n\n         CALL convert_to_new_pgrid(mp_comm_mm, matrix_a_rs%matrix, matrix_a_mm, optimize_pgrid=opt_pgrid, move_data=move_a)\n\n         ! keep communicators alive even after releasing TAS matrices (communicator management does not work between DBCSR and TAS)\n         info_a = dbcsr_tas_info(matrix_a_rs)\n         CALL dbcsr_tas_info_hold(info_a)\n\n         IF (new_a) THEN\n            CALL dbcsr_tas_destroy(matrix_a_rs)\n            DEALLOCATE (matrix_a_rs)\n         END IF\n\n         CALL convert_to_new_pgrid(mp_comm_mm, matrix_b_rs%matrix, matrix_b_mm, optimize_pgrid=opt_pgrid, move_data=move_b)\n\n         info_b = dbcsr_tas_info(matrix_b_rs)\n         CALL dbcsr_tas_info_hold(info_b)\n\n         IF (new_b) THEN\n            CALL dbcsr_tas_destroy(matrix_b_rs)\n            DEALLOCATE (matrix_b_rs)\n         END IF\n\n         CALL convert_to_new_pgrid(mp_comm_mm, matrix_c_rep%matrix, matrix_c_mm, nodata=nodata_3, optimize_pgrid=opt_pgrid)\n\n         info_c = dbcsr_tas_info(matrix_c_rep)\n         CALL dbcsr_tas_info_hold(info_c)\n\n         CALL mp_sync(matrix_a%dist%info%mp_comm)\n         CALL timeset(\"dbcsr_tas_dbcsr\", handle4)\n         CALL timeset(\"dbcsr_tas_mm_2\", handle3)\n         CALL dbcsr_multiply(transa=transa_prv, transb=transb_prv, alpha=alpha, matrix_a=matrix_a_mm, &\n                             matrix_b=matrix_b_mm, beta=beta, matrix_c=matrix_c_mm, &\n                             filter_eps=filter_eps_prv/REAL(nsplit, KIND=real_8), retain_sparsity=retain_sparsity, flop=flop)\n         CALL mp_sync(matrix_a%dist%info%mp_comm)\n         CALL timestop(handle3)\n         CALL timestop(handle4)\n\n         CALL dbcsr_release(matrix_a_mm)\n         CALL dbcsr_release(matrix_b_mm)\n\n         nze_c = dbcsr_get_nze(matrix_c_mm)\n\n         CALL redistribute_and_sum(matrix_c_mm, matrix_c_rep%matrix, local_copy=.NOT. opt_pgrid, alpha=beta)\n         nze_c_sum = dbcsr_tas_get_nze_total(matrix_c_rep)\n\n         CALL dbcsr_release(matrix_c_mm)\n\n         IF (unit_nr_prv /= 0) THEN\n            CALL dbcsr_tas_write_dist(matrix_c_rep, unit_nr_prv, full_info=log_verbose)\n         END IF\n\n         IF (matrix_c%do_batched == 0) THEN\n            CALL dbcsr_tas_merge(matrix_c_rs%matrix, matrix_c_rep, move_data=.TRUE.)\n         ELSE\n            matrix_c%mm_storage%batched_out = .TRUE. ! postpone merging submatrices to dbcsr_tas_batched_mm_finalize\n         END IF\n\n         IF (matrix_c%do_batched == 0) THEN\n            CALL dbcsr_tas_destroy(matrix_c_rep)\n            DEALLOCATE (matrix_c_rep)\n         END IF\n\n         IF (PRESENT(filter_eps)) CALL dbcsr_tas_filter(matrix_c_rs, filter_eps)\n\n         ! set upper limit on memory consumption for replicated matrix and complete batched mm\n         ! if limit is exceeded\n         IF (nze_c_sum > default_nsplit_accept_ratio*MAX(nze_a, nze_b)) THEN\n            CALL dbcsr_tas_batched_mm_complete(matrix_c)\n         END IF\n\n      CASE (3)\n         IF (matrix_a%do_batched <= 2) THEN\n            ALLOCATE (matrix_a_rep)\n            CALL dbcsr_tas_replicate(matrix_a_rs%matrix, dbcsr_tas_info(matrix_b_rs), matrix_a_rep, move_data=.TRUE.)\n            IF (matrix_a%do_batched == 1 .or. matrix_a%do_batched == 2) THEN\n               matrix_a%mm_storage%store_batched_repl => matrix_a_rep\n               CALL dbcsr_tas_set_batched_state(matrix_a, state=3)\n            END IF\n         ELSEIF (matrix_a%do_batched == 3) THEN\n            matrix_a_rep => matrix_a%mm_storage%store_batched_repl\n         END IF\n\n         IF (new_a) THEN\n            CALL dbcsr_tas_destroy(matrix_a_rs)\n            DEALLOCATE (matrix_a_rs)\n         END IF\n         IF (unit_nr_prv /= 0) THEN\n            CALL dbcsr_tas_write_dist(matrix_a_rep, unit_nr_prv, full_info=log_verbose)\n            CALL dbcsr_tas_write_dist(matrix_b_rs, unit_nr_prv)\n         END IF\n\n         CALL convert_to_new_pgrid(mp_comm_mm, matrix_a_rep%matrix, matrix_a_mm, optimize_pgrid=opt_pgrid, &\n                                   move_data=matrix_a%do_batched == 0)\n\n         ! keep communicators alive even after releasing TAS matrices (communicator management does not work between DBCSR and TAS)\n         info_a = dbcsr_tas_info(matrix_a_rep)\n         CALL dbcsr_tas_info_hold(info_a)\n\n         IF (matrix_a%do_batched == 0) THEN\n            CALL dbcsr_tas_destroy(matrix_a_rep)\n            DEALLOCATE (matrix_a_rep)\n         END IF\n\n         CALL convert_to_new_pgrid(mp_comm_mm, matrix_b_rs%matrix, matrix_b_mm, optimize_pgrid=opt_pgrid, move_data=move_b)\n\n         info_b = dbcsr_tas_info(matrix_b_rs)\n         CALL dbcsr_tas_info_hold(info_b)\n\n         IF (new_b) THEN\n            CALL dbcsr_tas_destroy(matrix_b_rs)\n            DEALLOCATE (matrix_b_rs)\n         END IF\n         CALL convert_to_new_pgrid(mp_comm_mm, matrix_c_rs%matrix, matrix_c_mm, nodata=nodata_3, optimize_pgrid=opt_pgrid)\n\n         info_c = dbcsr_tas_info(matrix_c_rs)\n         CALL dbcsr_tas_info_hold(info_c)\n\n         CALL mp_sync(matrix_a%dist%info%mp_comm)\n         CALL timeset(\"dbcsr_tas_dbcsr\", handle4)\n         SELECT CASE (tr_case)\n         CASE (dbcsr_no_transpose)\n            CALL timeset(\"dbcsr_tas_mm_3N\", handle3)\n            CALL dbcsr_multiply(transa=dbcsr_no_transpose, transb=dbcsr_no_transpose, alpha=alpha, &\n                                matrix_a=matrix_a_mm, matrix_b=matrix_b_mm, beta=beta, matrix_c=matrix_c_mm, &\n                                filter_eps=filter_eps_prv, retain_sparsity=retain_sparsity, flop=flop)\n            CALL timestop(handle3)\n         CASE (dbcsr_transpose)\n            CALL timeset(\"dbcsr_tas_mm_3T\", handle3)\n            CALL dbcsr_multiply(transa=dbcsr_no_transpose, transb=dbcsr_transpose, alpha=alpha, &\n                                matrix_a=matrix_b_mm, matrix_b=matrix_a_mm, beta=beta, matrix_c=matrix_c_mm, &\n                                filter_eps=filter_eps_prv, retain_sparsity=retain_sparsity, flop=flop)\n            CALL timestop(handle3)\n         END SELECT\n         CALL mp_sync(matrix_a%dist%info%mp_comm)\n         CALL timestop(handle4)\n\n         CALL dbcsr_release(matrix_a_mm)\n         CALL dbcsr_release(matrix_b_mm)\n\n         nze_c = dbcsr_get_nze(matrix_c_mm)\n\n         IF (.NOT. new_c) THEN\n            CALL redistribute_and_sum(matrix_c_mm, matrix_c_rs%matrix, local_copy=.NOT. opt_pgrid, alpha=beta)\n         ELSE\n            CALL redistribute_and_sum(matrix_c_mm, matrix_c_rs%matrix, local_copy=.NOT. opt_pgrid)\n         END IF\n\n         CALL dbcsr_release(matrix_c_mm)\n\n         IF (PRESENT(filter_eps)) CALL dbcsr_tas_filter(matrix_c_rs, filter_eps)\n\n         IF (unit_nr_prv /= 0) THEN\n            CALL dbcsr_tas_write_dist(matrix_c_rs, unit_nr_prv)\n         END IF\n      END SELECT\n\n      CALL mp_comm_free(mp_comm_mm)\n\n      CALL dbcsr_tas_get_split_info(info_c, mp_comm=mp_comm)\n\n      IF (PRESENT(split_opt)) THEN\n         SELECT CASE (max_mm_dim)\n         CASE (1, 3)\n            CALL mp_sum(nze_c, mp_comm)\n         CASE (2)\n            CALL dbcsr_tas_get_split_info(info_c, mp_comm=mp_comm, mp_comm_group=mp_comm_group)\n            CALL mp_sum(nze_c, mp_comm_group)\n            CALL mp_max(nze_c, mp_comm)\n\n         END SELECT\n         nsplit_opt = split_factor_estimate(max_mm_dim, nze_a, nze_b, nze_c, numproc)\n         ! ideally we should rederive the split factor from the actual sparsity of C, but\n         ! due to parameter beta, we can not get the sparsity of AxB from DBCSR if not new_c\n         mp_comm_opt = dbcsr_tas_mp_comm(mp_comm, split_rc, nsplit_opt)\n         CALL dbcsr_tas_create_split(split_opt, mp_comm_opt, split_rc, nsplit_opt, own_comm=.TRUE.)\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, \"(T2,A)\") &\n               \"MM PARAMETERS\"\n            WRITE (unit_nr_prv, \"(T4,A,T68,I13)\") \"Number of matrix elements per CPU of result matrix:\", &\n               (nze_c + numproc - 1)/numproc\n\n            WRITE (unit_nr_prv, \"(T4,A,T68,I13)\") \"Optimal split factor:\", nsplit_opt\n         END IF\n\n      END IF\n\n      IF (new_c) THEN\n         CALL dbcsr_scale(matrix_c%matrix, beta)\n         CALL dbcsr_tas_reshape(matrix_c_rs, matrix_c, summation=.TRUE., transposed=transc_prv /= transc, &\n                                move_data=.TRUE.)\n         CALL dbcsr_tas_destroy(matrix_c_rs)\n         DEALLOCATE (matrix_c_rs)\n         IF (PRESENT(filter_eps)) CALL dbcsr_tas_filter(matrix_c, filter_eps)\n      ELSEIF (matrix_c%do_batched > 0) THEN\n         IF (matrix_c%mm_storage%batched_out) THEN\n            matrix_c%mm_storage%batched_trans = transc_prv /= transc\n         END IF\n      END IF\n\n      IF (PRESENT(move_data_a)) THEN\n         IF (move_data_a) CALL dbcsr_tas_clear(matrix_a)\n      END IF\n      IF (PRESENT(move_data_b)) THEN\n         IF (move_data_b) CALL dbcsr_tas_clear(matrix_b)\n      END IF\n\n      IF (PRESENT(flop)) THEN\n         CALL mp_sum(flop, mp_comm)\n         flop = (flop + numproc - 1)/numproc\n      END IF\n\n      IF (PRESENT(optimize_dist)) THEN\n         IF (optimize_dist) CALL mp_comm_free(comm_tmp)\n      END IF\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, '(A)') repeat(\"-\", 80)\n         WRITE (unit_nr_prv, '(A,1X,A,1X,A,1X,A,1X,A,1X,A)') \"TAS MATRIX MULTIPLICATION DONE\"\n         WRITE (unit_nr_prv, '(A)') repeat(\"-\", 80)\n      END IF\n\n      CALL dbcsr_tas_release_info(info_a)\n      CALL dbcsr_tas_release_info(info_b)\n      CALL dbcsr_tas_release_info(info_c)\n\n      CALL mp_sync(matrix_a%dist%info%mp_comm)\n      CALL timestop(handle2)\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE redistribute_and_sum(matrix_in, matrix_out, local_copy, alpha)\n      TYPE(dbcsr_type), INTENT(IN) :: matrix_in\n      TYPE(dbcsr_type), INTENT(INOUT) :: matrix_out\n      LOGICAL, INTENT(IN), OPTIONAL :: local_copy\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: alpha\n      TYPE(dbcsr_type) :: matrix_tmp\n      LOGICAL :: local_copy_prv\n\n      IF (PRESENT(local_copy)) THEN\n         local_copy_prv = local_copy\n      ELSE\n         local_copy_prv = .FALSE.\n      END IF\n\n      IF (.NOT. local_copy_prv) THEN\n         CALL dbcsr_create(matrix_tmp, matrix_out)\n         CALL dbcsr_redistribute(matrix_in, matrix_tmp)\n         CALL dbcsr_add(matrix_out, matrix_tmp, alpha_scalar=alpha)\n         CALL dbcsr_release(matrix_tmp)\n      ELSE\n         CALL dbcsr_add(matrix_out, matrix_in, alpha_scalar=alpha)\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE reshape_mm_small(mp_comm, matrix_in, matrix_out, transposed, trans, nodata, move_data)\n      !! Make sure that smallest matrix involved in a multiplication is not split and bring it to\n      !! the same process grid as the other 2 matrices.\n\n      TYPE(mp_comm_type), INTENT(IN)               :: mp_comm\n         !! communicator that defines Cartesian topology\n      TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix_in\n      TYPE(dbcsr_tas_type), INTENT(OUT)   :: matrix_out\n      LOGICAL, INTENT(IN)               :: transposed\n         !! Whether matrix_out should be transposed\n      CHARACTER(LEN=1), INTENT(INOUT)   :: trans\n         !! update transpose flag for DBCSR mm according to 'transposed' argument\n      LOGICAL, INTENT(IN), OPTIONAL     :: nodata, move_data\n         !! Data of matrix_in should not be copied to matrix_out\n         !! memory optimization: move data such that matrix_in is empty on return.\n\n      INTEGER                           :: numnodes\n      INTEGER(KIND=int_8), DIMENSION(2) :: dims\n      INTEGER, DIMENSION(2)             :: pdims, pcoord\n      TYPE(dbcsr_tas_dist_arb)            :: new_row_dist, new_col_dist\n      TYPE(dbcsr_tas_distribution_type)   :: dist\n      LOGICAL                           :: nodata_prv\n      CHARACTER(LEN=*), PARAMETER       :: routineN = 'reshape_mm_small'\n      INTEGER                           :: handle\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(nodata)) THEN\n         nodata_prv = nodata\n      ELSE\n         nodata_prv = .FALSE.\n      END IF\n\n      IF (transposed) THEN\n         SELECT CASE (trans)\n         CASE (dbcsr_transpose)\n            trans = dbcsr_no_transpose\n         CASE (dbcsr_no_transpose)\n            trans = dbcsr_transpose\n         END SELECT\n      END IF\n\n      CALL mp_environ(numnodes, pdims, pcoord, mp_comm)\n\n      dims = [dbcsr_tas_nblkrows_total(matrix_in), dbcsr_tas_nblkcols_total(matrix_in)]\n\n      IF (transposed) CALL swap(dims)\n\n      IF (.NOT. transposed) THEN\n         new_row_dist = dbcsr_tas_dist_arb_default(pdims(1), dims(1), matrix_in%row_blk_size)\n         new_col_dist = dbcsr_tas_dist_arb_default(pdims(2), dims(2), matrix_in%col_blk_size)\n         CALL dbcsr_tas_distribution_new(dist, mp_comm, new_row_dist, new_col_dist, nosplit=.TRUE.)\n         CALL dbcsr_tas_create(matrix_out, matrix_in%matrix%name, dist, dbcsr_tas_get_data_type(matrix_in), &\n                               matrix_in%row_blk_size, matrix_in%col_blk_size, own_dist=.TRUE.)\n      ELSE\n         new_row_dist = dbcsr_tas_dist_arb_default(pdims(1), dims(1), matrix_in%col_blk_size)\n         new_col_dist = dbcsr_tas_dist_arb_default(pdims(2), dims(2), matrix_in%row_blk_size)\n         CALL dbcsr_tas_distribution_new(dist, mp_comm, new_row_dist, new_col_dist, nosplit=.TRUE.)\n         CALL dbcsr_tas_create(matrix_out, matrix_in%matrix%name, dist, dbcsr_tas_get_data_type(matrix_in), &\n                               matrix_in%col_blk_size, matrix_in%row_blk_size, own_dist=.TRUE.)\n\n      END IF\n      IF (.NOT. nodata_prv) CALL dbcsr_tas_reshape(matrix_in, matrix_out, transposed=transposed, move_data=move_data)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE reshape_mm_compatible(matrix1_in, matrix2_in, matrix1_out, matrix2_out, new1, new2, trans1, trans2, &\n                                    optimize_dist, nsplit, opt_nsplit, split_rc_1, split_rc_2, nodata1, nodata2, &\n                                    move_data_1, move_data_2, comm_new, unit_nr)\n      !! Reshape either matrix1 or matrix2 to make sure that their process grids are compatible with\n      !! the same split factor.\n\n      TYPE(dbcsr_tas_type), TARGET, &\n         INTENT(INOUT)                           :: matrix1_in, matrix2_in\n      TYPE(dbcsr_tas_type), POINTER, INTENT(OUT) :: matrix1_out, matrix2_out\n      LOGICAL, INTENT(OUT)                       :: new1, new2\n         !! Whether matrix1_out is a new matrix or simply pointing to matrix1_in\n         !! Whether matrix2_out is a new matrix or simply pointing to matrix2_in\n      CHARACTER(LEN=1), INTENT(INOUT)            :: trans1, trans2\n         !! transpose flag of matrix1_in for multiplication\n         !! transpose flag of matrix2_in for multiplication\n      LOGICAL, INTENT(IN), OPTIONAL              :: optimize_dist\n         !! experimental: optimize matrix splitting and distribution\n      INTEGER, INTENT(IN), OPTIONAL              :: nsplit\n         !! Optimal split factor (set to 0 if split factor should not be changed)\n      LOGICAL, INTENT(IN), OPTIONAL              :: opt_nsplit\n      INTEGER, INTENT(INOUT)                     :: split_rc_1, split_rc_2\n         !! Whether to split rows or columns for matrix 1\n         !! Whether to split rows or columns for matrix 2\n      TYPE(mp_comm_type), INTENT(OUT), OPTIONAL             :: comm_new\n         !! returns the new communicator only if optimize_dist\n      LOGICAL, OPTIONAL, INTENT(IN)              :: nodata1, nodata2\n         !! Don't copy matrix data from matrix1_in to matrix1_out\n         !! Don't copy matrix data from matrix2_in to matrix2_out\n      LOGICAL, OPTIONAL, INTENT(INOUT)           :: move_data_1, move_data_2\n         !! memory optimization: move data such that matrix1_in may be empty on return.\n         !! memory optimization: move data such that matrix2_in may be empty on return.\n      INTEGER, INTENT(IN), OPTIONAL              :: unit_nr\n         !! output unit\n\n      INTEGER(KIND=int_8), DIMENSION(2)          :: dims1, dims2, dims_ref\n      INTEGER(KIND=int_8)                        :: d1, d2\n      CHARACTER(LEN=*), PARAMETER                :: routineN = 'reshape_mm_compatible'\n      INTEGER                                    :: handle, numnodes, unit_nr_prv, &\n                                                    nsplit_prv, ref, split_rc_ref\n      INTEGER, DIMENSION(2)                      :: pcoord, pdims\n      LOGICAL                                    :: optimize_dist_prv, trans1_newdist, trans2_newdist\n      TYPE(dbcsr_tas_dist_cyclic)                :: row_dist_1, col_dist_1, row_dist_2, col_dist_2\n      TYPE(dbcsr_tas_distribution_type)          :: dist_1, dist_2\n      TYPE(dbcsr_tas_split_info)                 :: split_info\n      INTEGER(KIND=int_8)                        :: nze1, nze2\n      LOGICAL                                    :: nodata1_prv, nodata2_prv\n      TYPE(mp_comm_type)                         :: mp_comm\n\n      CALL timeset(routineN, handle)\n      new1 = .FALSE.; new2 = .FALSE.\n\n      IF (PRESENT(nodata1)) THEN\n         nodata1_prv = nodata1\n      ELSE\n         nodata1_prv = .FALSE.\n      END IF\n\n      IF (PRESENT(nodata2)) THEN\n         nodata2_prv = nodata2\n      ELSE\n         nodata2_prv = .FALSE.\n      END IF\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n\n      NULLIFY (matrix1_out, matrix2_out)\n\n      IF (PRESENT(optimize_dist)) THEN\n         optimize_dist_prv = optimize_dist\n      ELSE\n         optimize_dist_prv = .FALSE.\n      END IF\n\n      dims1 = [dbcsr_tas_nblkrows_total(matrix1_in), dbcsr_tas_nblkcols_total(matrix1_in)]\n      dims2 = [dbcsr_tas_nblkrows_total(matrix2_in), dbcsr_tas_nblkcols_total(matrix2_in)]\n      nze1 = dbcsr_tas_get_nze_total(matrix1_in)\n      nze2 = dbcsr_tas_get_nze_total(matrix2_in)\n\n      IF (trans1 == dbcsr_transpose) split_rc_1 = MOD(split_rc_1, 2) + 1\n\n      IF (trans2 == dbcsr_transpose) split_rc_2 = MOD(split_rc_2, 2) + 1\n\n      IF (nze1 >= nze2) THEN\n         ref = 1\n         split_rc_ref = split_rc_1\n         dims_ref = dims1\n      ELSE\n         ref = 2\n         split_rc_ref = split_rc_2\n         dims_ref = dims2\n      END IF\n\n      IF (PRESENT(nsplit)) THEN\n         nsplit_prv = nsplit\n      ELSE\n         nsplit_prv = 0\n      END IF\n\n      IF (optimize_dist_prv) THEN\n         DBCSR_ASSERT(PRESENT(comm_new))\n      END IF\n\n      IF ((.NOT. optimize_dist_prv) .AND. dist_compatible(matrix1_in, matrix2_in, split_rc_1, split_rc_2)) THEN\n         CALL change_split(matrix1_in, matrix1_out, nsplit_prv, split_rc_1, new1, &\n                           move_data=move_data_1, nodata=nodata1, opt_nsplit=opt_nsplit)\n         CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix1_out), nsplit=nsplit_prv)\n         CALL change_split(matrix2_in, matrix2_out, nsplit_prv, split_rc_2, new2, &\n                           move_data=move_data_2, nodata=nodata2, opt_nsplit=.FALSE.)\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, \"(T2,A,1X,A,1X,A,1X,A)\") \"No redistribution of\", TRIM(matrix1_in%matrix%name), &\n               \"and\", TRIM(matrix2_in%matrix%name)\n            IF (new1) THEN\n               WRITE (unit_nr_prv, \"(T2,A,1X,A,1X,A)\") \"Change split factor of\", TRIM(matrix1_in%matrix%name), \": Yes\"\n            ELSE\n               WRITE (unit_nr_prv, \"(T2,A,1X,A,1X,A)\") \"Change split factor of\", TRIM(matrix1_in%matrix%name), \": No\"\n            END IF\n            IF (new2) THEN\n               WRITE (unit_nr_prv, \"(T2,A,1X,A,1X,A)\") \"Change split factor of\", TRIM(matrix2_in%matrix%name), \": Yes\"\n            ELSE\n               WRITE (unit_nr_prv, \"(T2,A,1X,A,1X,A)\") \"Change split factor of\", TRIM(matrix2_in%matrix%name), \": No\"\n            END IF\n         END IF\n      ELSE\n\n         IF (optimize_dist_prv) THEN\n            IF (unit_nr_prv > 0) THEN\n               WRITE (unit_nr_prv, \"(T2,A,1X,A,1X,A,1X,A)\") \"Optimizing distribution of\", TRIM(matrix1_in%matrix%name), &\n                  \"and\", TRIM(matrix2_in%matrix%name)\n            END IF\n\n            trans1_newdist = (split_rc_1 == colsplit)\n            trans2_newdist = (split_rc_2 == colsplit)\n\n            IF (trans1_newdist) THEN\n               CALL swap(dims1)\n               CALL invert_transpose_flag(trans1)\n            END IF\n\n            IF (trans2_newdist) THEN\n               CALL swap(dims2)\n               CALL invert_transpose_flag(trans2)\n            END IF\n\n            IF (nsplit_prv == 0) THEN\n               SELECT CASE (split_rc_ref)\n               CASE (rowsplit)\n                  d1 = dims_ref(1)\n                  d2 = dims_ref(2)\n               CASE (colsplit)\n                  d1 = dims_ref(2)\n                  d2 = dims_ref(1)\n               END SELECT\n               nsplit_prv = INT((d1 - 1)/d2 + 1)\n            END IF\n\n            DBCSR_ASSERT(nsplit_prv > 0)\n\n            CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix1_in), mp_comm=mp_comm)\n            comm_new = dbcsr_tas_mp_comm(mp_comm, rowsplit, nsplit_prv)\n            CALL dbcsr_tas_create_split(split_info, comm_new, rowsplit, nsplit_prv)\n\n            CALL mp_environ(numnodes, pdims, pcoord, comm_new)\n\n            ! use a very simple cyclic distribution that may not be load balanced if block\n            ! sizes are not equal. However we can not use arbitrary distributions\n            ! for large dimensions since this would require storing distribution vectors as arrays\n            ! which can not be stored for large dimensions.\n            row_dist_1 = dbcsr_tas_dist_cyclic(1, pdims(1), dims1(1))\n            col_dist_1 = dbcsr_tas_dist_cyclic(1, pdims(2), dims1(2))\n\n            row_dist_2 = dbcsr_tas_dist_cyclic(1, pdims(1), dims2(1))\n            col_dist_2 = dbcsr_tas_dist_cyclic(1, pdims(2), dims2(2))\n\n            CALL dbcsr_tas_distribution_new(dist_1, comm_new, row_dist_1, col_dist_1, split_info=split_info)\n            CALL dbcsr_tas_distribution_new(dist_2, comm_new, row_dist_2, col_dist_2, split_info=split_info)\n            CALL dbcsr_tas_release_info(split_info)\n\n            ALLOCATE (matrix1_out)\n            IF (.NOT. trans1_newdist) THEN\n               CALL dbcsr_tas_create(matrix1_out, matrix1_in%matrix%name, dist_1, dbcsr_tas_get_data_type(matrix1_in), &\n                                     matrix1_in%row_blk_size, matrix1_in%col_blk_size, own_dist=.TRUE.)\n\n            ELSE\n               CALL dbcsr_tas_create(matrix1_out, matrix1_in%matrix%name, dist_1, dbcsr_tas_get_data_type(matrix1_in), &\n                                     matrix1_in%col_blk_size, matrix1_in%row_blk_size, own_dist=.TRUE.)\n            END IF\n\n            ALLOCATE (matrix2_out)\n            IF (.NOT. trans2_newdist) THEN\n               CALL dbcsr_tas_create(matrix2_out, matrix2_in%matrix%name, dist_2, dbcsr_tas_get_data_type(matrix2_in), &\n                                     matrix2_in%row_blk_size, matrix2_in%col_blk_size, own_dist=.TRUE.)\n            ELSE\n               CALL dbcsr_tas_create(matrix2_out, matrix2_in%matrix%name, dist_2, dbcsr_tas_get_data_type(matrix2_in), &\n                                     matrix2_in%col_blk_size, matrix2_in%row_blk_size, own_dist=.TRUE.)\n            END IF\n\n            IF (.NOT. nodata1_prv) CALL dbcsr_tas_reshape(matrix1_in, matrix1_out, transposed=trans1_newdist, move_data=move_data_1)\n            IF (.NOT. nodata2_prv) CALL dbcsr_tas_reshape(matrix2_in, matrix2_out, transposed=trans2_newdist, move_data=move_data_2)\n            new1 = .TRUE.\n            new2 = .TRUE.\n\n         ELSE\n            SELECT CASE (ref)\n            CASE (1)\n               IF (unit_nr_prv > 0) THEN\n                  WRITE (unit_nr_prv, \"(T2,A,1X,A)\") \"Redistribution of\", TRIM(matrix2_in%matrix%name)\n               END IF\n\n               CALL change_split(matrix1_in, matrix1_out, nsplit_prv, split_rc_1, new1, &\n                                 move_data=move_data_1, nodata=nodata1, opt_nsplit=opt_nsplit)\n\n               ALLOCATE (matrix2_out)\n               CALL reshape_mm_template(matrix1_out, matrix2_in, matrix2_out, trans2, split_rc_2, &\n                                        nodata=nodata2, move_data=move_data_2)\n               new2 = .TRUE.\n            CASE (2)\n               IF (unit_nr_prv > 0) THEN\n                  WRITE (unit_nr_prv, \"(T2,A,1X,A)\") \"Redistribution of\", TRIM(matrix1_in%matrix%name)\n               END IF\n\n               CALL change_split(matrix2_in, matrix2_out, nsplit_prv, split_rc_2, new2, &\n                                 move_data=move_data_2, nodata=nodata2, opt_nsplit=opt_nsplit)\n\n               ALLOCATE (matrix1_out)\n               CALL reshape_mm_template(matrix2_out, matrix1_in, matrix1_out, trans1, split_rc_1, &\n                                        nodata=nodata1, move_data=move_data_1)\n               new1 = .TRUE.\n            END SELECT\n         END IF\n      END IF\n\n      IF (PRESENT(move_data_1) .AND. new1) move_data_1 = .TRUE.\n      IF (PRESENT(move_data_2) .AND. new2) move_data_2 = .TRUE.\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE change_split(matrix_in, matrix_out, nsplit, split_rowcol, is_new, opt_nsplit, move_data, nodata)\n      !! Change split factor without redistribution\n\n      TYPE(dbcsr_tas_type), TARGET, &\n         INTENT(INOUT)                           :: matrix_in\n      TYPE(dbcsr_tas_type), POINTER, INTENT(OUT) :: matrix_out\n      INTEGER, INTENT(IN)                        :: nsplit\n         !! new split factor, set to 0 to not change split of matrix_in\n      INTEGER, INTENT(IN)                        :: split_rowcol\n         !! split rows or columns\n      LOGICAL, INTENT(OUT)                       :: is_new\n         !! whether matrix_out is new or a pointer to matrix_in\n      LOGICAL, INTENT(IN), OPTIONAL              :: opt_nsplit\n         !! whether nsplit should be optimized for current process grid\n      LOGICAL, INTENT(IN), OPTIONAL              :: nodata\n         !! Data of matrix_in should not be copied to matrix_out\n      LOGICAL, INTENT(INOUT), OPTIONAL           :: move_data\n         !! memory optimization: move data such that matrix_in is empty on return.\n\n      INTEGER                                    :: &\n         split_rc, nsplit_old, handle, data_type, nsplit_new, nsplit_prv\n      TYPE(dbcsr_tas_split_info)                 :: split_info\n      CHARACTER(len=default_string_length)       :: name\n      TYPE(dbcsr_tas_distribution_type)          :: dist\n      LOGICAL                                    :: nodata_prv\n      CLASS(dbcsr_tas_distribution), ALLOCATABLE :: rdist, cdist\n      CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE  :: rbsize, cbsize\n      TYPE(mp_comm_type)                         :: mp_comm\n      CHARACTER(LEN=*), PARAMETER                :: routineN = 'change_split'\n\n      NULLIFY (matrix_out)\n\n      is_new = .TRUE.\n\n      CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_in), mp_comm=mp_comm, &\n                                    split_rowcol=split_rc, nsplit=nsplit_old)\n\n      IF (nsplit == 0) THEN\n         IF (split_rowcol == split_rc) THEN\n            matrix_out => matrix_in\n            is_new = .FALSE.\n            RETURN\n         ELSE\n            nsplit_prv = 1\n         END IF\n      ELSE\n         nsplit_prv = nsplit\n      END IF\n\n      CALL timeset(routineN, handle)\n\n      nodata_prv = .FALSE.\n      IF (PRESENT(nodata)) nodata_prv = nodata\n\n      CALL dbcsr_tas_get_info(matrix_in, data_type=data_type, name=name, &\n                              row_blk_size=rbsize, col_blk_size=cbsize, &\n                              proc_row_dist=rdist, proc_col_dist=cdist)\n\n      CALL dbcsr_tas_create_split(split_info, mp_comm, split_rowcol, nsplit_prv, opt_nsplit=opt_nsplit)\n\n      CALL dbcsr_tas_get_split_info(split_info, nsplit=nsplit_new)\n\n      IF (nsplit_old == nsplit_new .AND. split_rc == split_rowcol) THEN\n         matrix_out => matrix_in\n         is_new = .FALSE.\n         CALL dbcsr_tas_release_info(split_info)\n         CALL timestop(handle)\n         RETURN\n      END IF\n\n      CALL dbcsr_tas_distribution_new(dist, mp_comm, rdist, cdist, &\n                                      split_info=split_info)\n\n      CALL dbcsr_tas_release_info(split_info)\n\n      ALLOCATE (matrix_out)\n      CALL dbcsr_tas_create(matrix_out, name, dist, &\n                            data_type, &\n                            rbsize, cbsize, own_dist=.TRUE.)\n\n      IF (.NOT. nodata_prv) CALL dbcsr_tas_copy(matrix_out, matrix_in)\n\n      IF (PRESENT(move_data)) THEN\n         IF (.NOT. nodata_prv) THEN\n            IF (move_data) CALL dbcsr_tas_clear(matrix_in)\n            move_data = .TRUE.\n         END IF\n      END IF\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   FUNCTION dist_compatible(mat_a, mat_b, split_rc_a, split_rc_b, unit_nr)\n      !! Check whether matrices have same distribution and same split.\n      TYPE(dbcsr_tas_type), INTENT(IN)           :: mat_a, mat_b\n      INTEGER, INTENT(IN)                        :: split_rc_a, split_rc_b\n      INTEGER, INTENT(IN), OPTIONAL              :: unit_nr\n      LOGICAL                                    :: dist_compatible\n\n      INTEGER                                    :: same_local_rowcols, split_check_a, split_check_b\n      TYPE(dbcsr_tas_split_info)                 :: info_a, info_b\n      INTEGER                                    :: unit_nr_prv, numproc\n      INTEGER, DIMENSION(2)                      :: pdims_a, pdims_b, pcoord_a, pcoord_b\n      INTEGER(int_8), DIMENSION(:), ALLOCATABLE         :: local_rowcols_a, local_rowcols_b\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n\n      dist_compatible = .FALSE.\n\n      info_a = dbcsr_tas_info(mat_a)\n      info_b = dbcsr_tas_info(mat_b)\n      CALL dbcsr_tas_get_split_info(info_a, split_rowcol=split_check_a)\n      CALL dbcsr_tas_get_split_info(info_b, split_rowcol=split_check_b)\n      IF (split_check_b /= split_rc_b .OR. split_check_a /= split_rc_a .OR. split_rc_a /= split_rc_b) THEN\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, *) \"matrix layout a not compatible\", split_check_a, split_rc_a\n            WRITE (unit_nr_prv, *) \"matrix layout b not compatible\", split_check_b, split_rc_b\n         END IF\n         RETURN\n      END IF\n\n      ! check if communicators are equivalent\n      ! Note: mpi_comm_compare is not sufficient since this does not compare associated Cartesian grids.\n      ! It's sufficient to check dimensions of global grid, subgrids will be determined later on (change_split)\n      CALL mp_environ(numproc, pdims_a, pcoord_a, info_a%mp_comm)\n      CALL mp_environ(numproc, pdims_b, pcoord_b, info_b%mp_comm)\n      IF (.NOT. array_eq(pdims_a, pdims_b)) THEN\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, *) \"mp dims not compatible:\", pdims_a, \"|\", pdims_b\n         END IF\n         RETURN\n      END IF\n\n      ! check that distribution is the same by comparing local rows / columns for each matrix\n      SELECT CASE (split_rc_a)\n      CASE (rowsplit)\n         CALL dbcsr_tas_get_info(mat_a, local_rows=local_rowcols_a)\n         CALL dbcsr_tas_get_info(mat_b, local_rows=local_rowcols_b)\n      CASE (colsplit)\n         CALL dbcsr_tas_get_info(mat_a, local_cols=local_rowcols_a)\n         CALL dbcsr_tas_get_info(mat_b, local_cols=local_rowcols_b)\n      END SELECT\n\n      same_local_rowcols = MERGE(1, 0, array_eq(local_rowcols_a, local_rowcols_b))\n\n      CALL mp_sum(same_local_rowcols, info_a%mp_comm)\n\n      IF (same_local_rowcols == numproc) THEN\n         dist_compatible = .TRUE.\n      ELSE\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, *) \"local rowcols not compatible\"\n            WRITE (unit_nr_prv, *) \"local rowcols A\", local_rowcols_a\n            WRITE (unit_nr_prv, *) \"local rowcols B\", local_rowcols_b\n         END IF\n      END IF\n\n   END FUNCTION\n\n   SUBROUTINE reshape_mm_template(template, matrix_in, matrix_out, trans, split_rc, nodata, move_data)\n      !! Reshape matrix_in s.t. it has same process grid, distribution and split as template\n      TYPE(dbcsr_tas_type), INTENT(IN)           :: template\n      TYPE(dbcsr_tas_type), INTENT(INOUT)        :: matrix_in\n      TYPE(dbcsr_tas_type), INTENT(OUT)          :: matrix_out\n      CHARACTER(LEN=1), INTENT(INOUT)            :: trans\n      INTEGER, INTENT(IN)                        :: split_rc\n      LOGICAL, INTENT(IN), OPTIONAL              :: nodata, move_data\n      CLASS(dbcsr_tas_distribution), ALLOCATABLE :: row_dist, col_dist\n\n      TYPE(dbcsr_tas_distribution_type)          :: dist_new\n      TYPE(dbcsr_tas_split_info)                 :: info_template, info_matrix\n      INTEGER                                    :: dim_split_template, dim_split_matrix, &\n                                                    numnodes, handle\n      INTEGER, DIMENSION(2)                      :: pcoord, pdims\n      LOGICAL                                    :: nodata_prv, transposed\n      TYPE(mp_comm_type)                         :: mp_comm\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'reshape_mm_template'\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(nodata)) THEN\n         nodata_prv = nodata\n      ELSE\n         nodata_prv = .FALSE.\n      END IF\n\n      info_template = dbcsr_tas_info(template)\n      info_matrix = dbcsr_tas_info(matrix_in)\n\n      dim_split_template = info_template%split_rowcol\n      dim_split_matrix = split_rc\n\n      transposed = dim_split_template .NE. dim_split_matrix\n      IF (transposed) THEN\n         SELECT CASE (trans)\n         CASE (dbcsr_transpose)\n            trans = dbcsr_no_transpose\n         CASE (dbcsr_no_transpose)\n            trans = dbcsr_transpose\n         END SELECT\n      END IF\n\n      CALL mp_environ(numnodes, pdims, pcoord, info_template%mp_comm)\n\n      SELECT CASE (dim_split_template)\n      CASE (1)\n         IF (.NOT. transposed) THEN\n            ALLOCATE (row_dist, source=template%dist%row_dist)\n            ALLOCATE (col_dist, source=dbcsr_tas_dist_arb_default(pdims(2), matrix_in%nblkcols, matrix_in%col_blk_size))\n         ELSE\n            ALLOCATE (row_dist, source=template%dist%row_dist)\n            ALLOCATE (col_dist, source=dbcsr_tas_dist_arb_default(pdims(2), matrix_in%nblkrows, matrix_in%row_blk_size))\n         END IF\n      CASE (2)\n         IF (.NOT. transposed) THEN\n            ALLOCATE (row_dist, source=dbcsr_tas_dist_arb_default(pdims(1), matrix_in%nblkrows, matrix_in%row_blk_size))\n            ALLOCATE (col_dist, source=template%dist%col_dist)\n         ELSE\n            ALLOCATE (row_dist, source=dbcsr_tas_dist_arb_default(pdims(1), matrix_in%nblkcols, matrix_in%col_blk_size))\n            ALLOCATE (col_dist, source=template%dist%col_dist)\n         END IF\n      END SELECT\n\n      CALL dbcsr_tas_get_split_info(info_template, mp_comm=mp_comm)\n      CALL dbcsr_tas_distribution_new(dist_new, mp_comm, row_dist, col_dist, split_info=info_template)\n      IF (.NOT. transposed) THEN\n         CALL dbcsr_tas_create(matrix_out, matrix_in%matrix%name, dist_new, dbcsr_tas_get_data_type(matrix_in), &\n                               matrix_in%row_blk_size, matrix_in%col_blk_size, own_dist=.TRUE.)\n      ELSE\n         CALL dbcsr_tas_create(matrix_out, matrix_in%matrix%name, dist_new, dbcsr_tas_get_data_type(matrix_in), &\n                               matrix_in%col_blk_size, matrix_in%row_blk_size, own_dist=.TRUE.)\n      END IF\n\n      IF (.NOT. nodata_prv) CALL dbcsr_tas_reshape(matrix_in, matrix_out, transposed=transposed, move_data=move_data)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_result_index(transa, transb, transc, matrix_a, matrix_b, matrix_c, filter_eps, &\n                                     unit_nr, blk_ind, nze, retain_sparsity)\n      !! Estimate sparsity pattern of C resulting from A x B = C by multiplying the block norms of A and B\n      !! Same dummy arguments as dbcsr_tas_multiply\n      CHARACTER(LEN=1), INTENT(IN)               :: transa, transb, transc\n      TYPE(dbcsr_tas_type), INTENT(INOUT), TARGET        :: matrix_a, matrix_b, matrix_c\n      TYPE(dbcsr_tas_type), POINTER                      :: matrix_a_bnorm, matrix_b_bnorm, matrix_c_bnorm\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL    :: filter_eps\n      INTEGER, INTENT(IN), OPTIONAL              :: unit_nr\n      INTEGER(int_8), DIMENSION(:, :), ALLOCATABLE, INTENT(OUT), OPTIONAL :: blk_ind\n      LOGICAL, INTENT(IN), OPTIONAL :: retain_sparsity\n      INTEGER(int_8), INTENT(OUT), OPTIONAL :: nze\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_result_index'\n      LOGICAL :: retain_sparsity_prv\n      INTEGER :: bn, row_size, col_size, handle, iblk, nblk\n      INTEGER(int_8) :: row, col\n      TYPE(dbcsr_tas_iterator) :: iter\n      TYPE(mp_comm_type) :: mp_comm\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(retain_sparsity)) THEN\n         retain_sparsity_prv = retain_sparsity\n      ELSE\n         retain_sparsity_prv = .FALSE.\n      END IF\n\n      IF (.NOT. retain_sparsity_prv) THEN\n         ALLOCATE (matrix_a_bnorm, matrix_b_bnorm, matrix_c_bnorm)\n         CALL create_block_norms_matrix(matrix_a, matrix_a_bnorm)\n         CALL create_block_norms_matrix(matrix_b, matrix_b_bnorm)\n         CALL create_block_norms_matrix(matrix_c, matrix_c_bnorm, nodata=.TRUE.)\n\n         CALL dbcsr_tas_multiply(transa, transb, transc, dbcsr_scalar(1.0_real_8), matrix_a_bnorm, &\n                                 matrix_b_bnorm, dbcsr_scalar(0.0_real_8), matrix_c_bnorm, &\n                                 filter_eps=filter_eps, move_data_a=.TRUE., move_data_b=.TRUE., &\n                                 simple_split=.TRUE., unit_nr=unit_nr)\n         CALL dbcsr_tas_destroy(matrix_a_bnorm)\n         CALL dbcsr_tas_destroy(matrix_b_bnorm)\n\n         DEALLOCATE (matrix_a_bnorm, matrix_b_bnorm)\n      ELSE\n         matrix_c_bnorm => matrix_c\n      END IF\n\n      nblk = dbcsr_tas_get_num_blocks(matrix_c_bnorm)\n      IF (PRESENT(blk_ind)) ALLOCATE (blk_ind(nblk, 2))\n\n      CALL dbcsr_tas_iterator_start(iter, matrix_c_bnorm)\n      IF (PRESENT(nze)) nze = 0\n      DO iblk = 1, nblk\n         CALL dbcsr_tas_iterator_next_block(iter, row, col, bn)\n         row_size = matrix_c%row_blk_size%data(row)\n         col_size = matrix_c%col_blk_size%data(col)\n         IF (PRESENT(nze)) nze = nze + row_size*col_size\n         IF (PRESENT(blk_ind)) blk_ind(iblk, :) = [row, col]\n      END DO\n      CALL dbcsr_tas_iterator_stop(iter)\n\n      IF (PRESENT(nze)) THEN\n         CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_a), mp_comm=mp_comm)\n         CALL mp_sum(nze, mp_comm)\n      END IF\n\n      IF (.NOT. retain_sparsity_prv) THEN\n         CALL dbcsr_tas_destroy(matrix_c_bnorm)\n         DEALLOCATE (matrix_c_bnorm)\n      END IF\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   FUNCTION split_factor_estimate(max_mm_dim, nze_a, nze_b, nze_c, numnodes) RESULT(nsplit)\n      !! Estimate optimal split factor for AxB=C from occupancies (number of non-zero elements)\n      !! This estimate is based on the minimization of communication volume whereby\n      !! the communication of CARMA n-split step and CANNON-multiplication of submatrices are\n      !! considered.\n      !! \\result estimated split factor\n\n      INTEGER, INTENT(IN)                         :: max_mm_dim\n      INTEGER(KIND=int_8), INTENT(IN)             :: nze_a, nze_b, nze_c\n         !! number of non-zeroes in A\n         !! number of non-zeroes in B\n         !! number of non-zeroes in C\n      INTEGER, INTENT(IN)                         :: numnodes\n         !! number of MPI ranks\n      INTEGER                                     :: nsplit\n      INTEGER(KIND=int_8)                         :: max_nze, min_nze\n      REAL(real_8) :: s_opt_factor\n\n      s_opt_factor = dbcsr_cfg%tas_split_factor%val\n\n      SELECT CASE (max_mm_dim)\n      CASE (1)\n         min_nze = MAX(nze_b, 1_int_8)\n         max_nze = MAX(MAXVAL([nze_a, nze_c]), 1_int_8)\n      CASE (2)\n         min_nze = MAX(nze_c, 1_int_8)\n         max_nze = MAX(MAXVAL([nze_a, nze_b]), 1_int_8)\n      CASE (3)\n         min_nze = MAX(nze_a, 1_int_8)\n         max_nze = MAX(MAXVAL([nze_b, nze_c]), 1_int_8)\n      CASE DEFAULT\n         DBCSR_ABORT(\"\")\n      END SELECT\n\n      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)))\n      IF (nsplit == 0) nsplit = 1\n\n   END FUNCTION\n\n   SUBROUTINE create_block_norms_matrix(matrix_in, matrix_out, nodata)\n      !! Create a matrix with block sizes one that contains the block norms of matrix_in\n      TYPE(dbcsr_tas_type), INTENT(INOUT)        :: matrix_in\n      TYPE(dbcsr_tas_type), INTENT(OUT)          :: matrix_out\n      LOGICAL, INTENT(IN), OPTIONAL              :: nodata\n      TYPE(dbcsr_tas_blk_size_one)               :: row_blk_size, col_blk_size\n      TYPE(dbcsr_tas_iterator)                   :: iter\n      INTEGER(KIND=int_8)                        :: row, column, nblkrows, nblkcols\n      CHARACTER(len=default_string_length)       :: name\n      INTEGER                                    :: data_type\n\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         ${dtype}$, DIMENSION(:, :), POINTER        :: block_get_${dsuffix}$\n         ${dtype}$, DIMENSION(:, :), POINTER        :: block_put_${dsuffix}$\n      #:endfor\n      LOGICAL                                    :: tr, nodata_prv, found\n\n      DBCSR_ASSERT(matrix_in%valid)\n\n      IF (PRESENT(nodata)) THEN\n         nodata_prv = nodata\n      ELSE\n         nodata_prv = .FALSE.\n      END IF\n\n      CALL dbcsr_tas_get_info(matrix_in, data_type=data_type, name=name, &\n                              nblkrows_total=nblkrows, nblkcols_total=nblkcols)\n\n      row_blk_size = dbcsr_tas_blk_size_one(nblkrows)\n      col_blk_size = dbcsr_tas_blk_size_one(nblkcols)\n\n      ! not sure if assumption that same distribution can be taken still holds\n      CALL dbcsr_tas_create(matrix_out, name, matrix_in%dist, &\n                            data_type, &\n                            row_blk_size, col_blk_size)\n\n      IF (.NOT. nodata_prv) THEN\n         CALL dbcsr_tas_reserve_blocks(matrix_in, matrix_out)\n\n         CALL dbcsr_tas_iterator_start(iter, matrix_in)\n\n         DO WHILE (dbcsr_tas_iterator_blocks_left(iter))\n\n            #:for dparam, dtype, dsuffix in dtype_float_list\n               IF (data_type == ${dparam}$) THEN\n                  CALL dbcsr_tas_iterator_next_block(iter, row, column, block_get_${dsuffix}$, tr)\n                  CALL dbcsr_tas_get_block_p(matrix_out, row, column, block_put_${dsuffix}$, tr, found)\n                  DBCSR_ASSERT(found)\n                  block_put_${dsuffix}$ (1, 1) = SQRT(SUM(block_get_${dsuffix}$**2)) ! norm2 works only for real\n               END IF\n            #:endfor\n         END DO\n         CALL dbcsr_tas_iterator_stop(iter)\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE convert_to_new_pgrid(mp_comm_cart, matrix_in, matrix_out, move_data, nodata, optimize_pgrid)\n      !! Convert a DBCSR matrix to a new process grid\n\n      TYPE(mp_comm_type), INTENT(IN)             :: mp_comm_cart\n         !! new process grid\n      TYPE(dbcsr_type), INTENT(INOUT)            :: matrix_in\n      TYPE(dbcsr_type), INTENT(OUT)              :: matrix_out\n      LOGICAL, INTENT(IN), OPTIONAL              :: move_data, nodata\n         !! memory optimization: move data such that matrix_in is empty on return.\n         !! Data of matrix_in should not be copied to matrix_out\n      LOGICAL, INTENT(IN), OPTIONAL              :: optimize_pgrid\n         !! Whether to change process grid\n\n      INTEGER                                    :: &\n         nbrows, nbcols, data_type, nproc, handle\n      INTEGER, DIMENSION(2)                      :: pdims, pcoord\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_dist, col_dist, rbsize, rcsize\n      TYPE(dbcsr_distribution_obj)               :: dist, dist_old\n      TYPE(dbcsr_mp_obj)                         :: mp_obj\n      CHARACTER(len=default_string_length)       :: name\n      LOGICAL                                    :: nodata_prv, optimize_pgrid_prv\n      CHARACTER(LEN=*), PARAMETER                :: routineN = 'convert_to_new_pgrid'\n\n      NULLIFY (row_dist, col_dist, rbsize, rcsize)\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(optimize_pgrid)) THEN\n         optimize_pgrid_prv = optimize_pgrid\n      ELSE\n         optimize_pgrid_prv = .TRUE.\n      END IF\n\n      IF (PRESENT(nodata)) THEN\n         nodata_prv = nodata\n      ELSE\n         nodata_prv = .FALSE.\n      END IF\n\n      IF (.NOT. optimize_pgrid_prv) THEN\n         CALL dbcsr_create(matrix_out, template=matrix_in)\n         IF (.NOT. nodata_prv) CALL dbcsr_copy(matrix_out, matrix_in)\n         CALL timestop(handle)\n         RETURN\n      END IF\n\n      CALL dbcsr_get_info(matrix_in, nblkrows_total=nbrows, nblkcols_total=nbcols, &\n                          row_blk_size=rbsize, col_blk_size=rcsize, &\n                          data_type=data_type, distribution=dist_old, name=name)\n      CALL mp_environ(nproc, pdims, pcoord, mp_comm_cart)\n\n      ALLOCATE (row_dist(nbrows), col_dist(nbcols))\n      CALL dbcsr_tas_default_distvec(nbrows, pdims(1), rbsize, row_dist)\n      CALL dbcsr_tas_default_distvec(nbcols, pdims(2), rcsize, col_dist)\n\n      mp_obj = dbcsr_mp_environ(mp_comm_cart)\n      CALL dbcsr_distribution_new(dist, mp_obj, row_dist, col_dist, reuse_arrays=.TRUE.)\n      CALL dbcsr_mp_release(mp_obj)\n\n      CALL dbcsr_create(matrix_out, name, dist, dbcsr_type_no_symmetry, rbsize, rcsize, data_type=data_type)\n      CALL dbcsr_distribution_release(dist)\n\n      IF (.NOT. nodata_prv) THEN\n         CALL dbcsr_redistribute(matrix_in, matrix_out)\n         IF (PRESENT(move_data)) THEN\n            IF (move_data) CALL dbcsr_clear(matrix_in)\n         END IF\n      END IF\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_batched_mm_init(matrix)\n      TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix\n      CALL dbcsr_tas_set_batched_state(matrix, state=1)\n      ALLOCATE (matrix%mm_storage)\n      matrix%mm_storage%batched_out = .FALSE.\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_batched_mm_finalize(matrix)\n      TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix\n      INTEGER :: handle\n\n      CALL mp_sync(matrix%dist%info%mp_comm)\n      CALL timeset(\"dbcsr_tas_total\", handle)\n\n      IF (matrix%do_batched == 0) RETURN\n\n      IF (matrix%mm_storage%batched_out) THEN\n         CALL dbcsr_scale(matrix%matrix, matrix%mm_storage%batched_beta)\n      END IF\n\n      CALL dbcsr_tas_batched_mm_complete(matrix)\n\n      matrix%mm_storage%batched_out = .FALSE.\n\n      DEALLOCATE (matrix%mm_storage)\n      CALL dbcsr_tas_set_batched_state(matrix, state=0)\n\n      CALL mp_sync(matrix%dist%info%mp_comm)\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_set_batched_state(matrix, state, opt_grid)\n      !! set state flags during batched multiplication\n\n      TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix\n      LOGICAL, INTENT(IN), OPTIONAL :: opt_grid\n      !! whether process grid was already optimized and should not be changed\n      INTEGER, INTENT(IN), OPTIONAL :: state\n      !! - 0 no batched MM\n      !! - 1 batched MM but mm_storage not yet initialized\n      !! - 2 batched MM and mm_storage requires update\n      !! - 3 batched MM and mm_storage initialized\n\n      IF (PRESENT(opt_grid)) THEN\n         matrix%has_opt_pgrid = opt_grid\n         matrix%dist%info%strict_split(1) = .TRUE.\n      END IF\n\n      IF (PRESENT(state)) THEN\n         matrix%do_batched = state\n         SELECT CASE (state)\n         CASE (0, 1)\n            ! reset to default\n            IF (matrix%has_opt_pgrid) THEN\n               matrix%dist%info%strict_split(1) = .TRUE.\n            ELSE\n               matrix%dist%info%strict_split(1) = matrix%dist%info%strict_split(2)\n            END IF\n         CASE (2, 3)\n            matrix%dist%info%strict_split(1) = .TRUE.\n         CASE DEFAULT\n            DBCSR_ABORT(\"should not happen\")\n         END SELECT\n      END IF\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_batched_mm_complete(matrix, warn)\n      TYPE(dbcsr_tas_type), INTENT(INOUT) :: matrix\n      LOGICAL, INTENT(IN), OPTIONAL :: warn\n\n      IF (matrix%do_batched == 0) RETURN\n      ASSOCIATE (storage => matrix%mm_storage)\n         IF (PRESENT(warn)) THEN\n            IF (warn .AND. matrix%do_batched == 3) THEN\n               CALL dbcsr_warn(__LOCATION__, &\n                               \"Optimizations for batched multiplication are disabled because of conflicting data access\")\n            END IF\n         END IF\n         IF (storage%batched_out .AND. matrix%do_batched == 3) THEN\n\n            CALL dbcsr_tas_merge(storage%store_batched%matrix, &\n                                 storage%store_batched_repl, move_data=.TRUE.)\n\n            CALL dbcsr_tas_reshape(storage%store_batched, matrix, summation=.TRUE., &\n                                   transposed=storage%batched_trans, move_data=.TRUE.)\n            CALL dbcsr_tas_destroy(storage%store_batched)\n            DEALLOCATE (storage%store_batched)\n         END IF\n\n         IF (ASSOCIATED(storage%store_batched_repl)) THEN\n            CALL dbcsr_tas_destroy(storage%store_batched_repl)\n            DEALLOCATE (storage%store_batched_repl)\n         END IF\n      END ASSOCIATE\n\n      CALL dbcsr_tas_set_batched_state(matrix, state=2)\n\n   END SUBROUTINE\n\nEND MODULE\n"
  },
  {
    "path": "src/tas/dbcsr_tas_reshape_ops.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tas_reshape_ops\n   !! communication routines to reshape / replicate / merge tall-and-skinny matrices.\n   #:include \"dbcsr_tas.fypp\"\n\n   USE dbcsr_block_access, ONLY: &\n      dbcsr_put_block, dbcsr_reserve_blocks\n   USE dbcsr_data_methods, ONLY: &\n      dbcsr_data_clear_pointer, dbcsr_data_init, dbcsr_data_new, dbcsr_data_release, &\n      dbcsr_type_1d_to_2d, dbcsr_data_get_sizes, dbcsr_data_set_pointer\n   USE dbcsr_data_methods_low, ONLY: &\n      internal_data_allocate, internal_data_deallocate, dbcsr_get_data_p_2d_d, dbcsr_get_data_p_2d_s, &\n      dbcsr_get_data_p_2d_z, dbcsr_get_data_p_2d_c\n   USE dbcsr_data_types, ONLY: &\n      dbcsr_data_obj, dbcsr_type_real_8, dbcsr_type_real_4, dbcsr_type_complex_8, dbcsr_type_complex_4\n   USE dbcsr_dist_methods, ONLY: &\n      dbcsr_distribution_col_dist, dbcsr_distribution_row_dist\n   USE dbcsr_dist_operations, ONLY: &\n      dbcsr_get_stored_coordinates\n   USE dbcsr_iterator_operations, ONLY: &\n      dbcsr_iterator_blocks_left, dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop\n   USE dbcsr_methods, ONLY: &\n      dbcsr_blk_column_size, dbcsr_blk_row_size\n   USE dbcsr_operations, ONLY: &\n      dbcsr_get_info, dbcsr_clear\n   USE dbcsr_tas_base, ONLY: &\n      dbcsr_tas_blk_sizes, dbcsr_tas_create, dbcsr_tas_distribution_new, dbcsr_tas_finalize, &\n      dbcsr_tas_get_data_type, dbcsr_tas_get_stored_coordinates, dbcsr_tas_info, &\n      dbcsr_tas_iterator_blocks_left, dbcsr_tas_iterator_next_block, dbcsr_tas_iterator_start, &\n      dbcsr_tas_iterator_stop, dbcsr_tas_put_block, dbcsr_tas_reserve_blocks, &\n      dbcsr_repl_get_stored_coordinates, dbcsr_tas_clear\n   USE dbcsr_tas_types, ONLY: &\n      dbcsr_tas_distribution_type, dbcsr_tas_iterator, dbcsr_tas_split_info, dbcsr_tas_type\n   USE dbcsr_tas_global, ONLY: &\n      dbcsr_tas_blk_size_arb, dbcsr_tas_blk_size_repl, dbcsr_tas_dist_arb, dbcsr_tas_dist_repl, &\n      dbcsr_tas_distribution, dbcsr_tas_rowcol_data\n   USE dbcsr_tas_split, ONLY: &\n      colsplit, dbcsr_tas_get_split_info, rowsplit\n   USE dbcsr_types, ONLY: &\n      dbcsr_distribution_obj, dbcsr_iterator, dbcsr_type\n   USE dbcsr_work_operations, ONLY: &\n      dbcsr_finalize\n   USE dbcsr_kinds, ONLY: &\n      int_8, real_8, real_4\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_alltoall, mp_environ, mp_isend, mp_irecv, mp_waitall, mp_comm_type, mp_request_type\n   USE dbcsr_tas_util, ONLY: &\n      swap, index_unique\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_reshape_ops'\n\n   PUBLIC :: &\n      dbcsr_tas_merge, &\n      dbcsr_tas_replicate, &\n      dbcsr_tas_reshape\n\n   TYPE block_buffer_type\n      INTEGER :: nblock = -1\n      INTEGER(KIND=int_8), DIMENSION(:, :), ALLOCATABLE :: indx\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         ${dtype}$, DIMENSION(:), ALLOCATABLE :: msg_${dsuffix}$\n      #:endfor\n      INTEGER :: data_type = -1\n      INTEGER :: endpos = -1\n   END TYPE\n\n   INTERFACE block_buffer_get_next_block\n      MODULE PROCEDURE block_buffer_get_next_area_block\n      #!for dparam, dtype, dsuffix in dtype_float_list\n      !MODULE PROCEDURE block_buffer_get_next_block_${dsuffix}$ ! issue: ambiguous interface\n      #!endfor\n   END INTERFACE\n\n   INTERFACE block_buffer_add_block\n      MODULE PROCEDURE block_buffer_add_area_block\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE block_buffer_add_block_${dsuffix}$\n      #:endfor\n   END INTERFACE\n\nCONTAINS\n\n   RECURSIVE SUBROUTINE dbcsr_tas_reshape(matrix_in, matrix_out, summation, transposed, move_data)\n      !! copy data (involves reshape)\n\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix_in, matrix_out\n      LOGICAL, INTENT(IN), OPTIONAL                      :: summation\n         !! whether matrix_out = matrix_out + matrix_in\n      LOGICAL, INTENT(IN), OPTIONAL                      :: transposed\n      LOGICAL, INTENT(IN), OPTIONAL                      :: move_data\n         !! memory optimization: move data to matrix_out such that matrix_in is empty on return\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_reshape'\n\n      INTEGER                                            :: handle, handle2, iproc, mynode, nblock, &\n                                                            ndata, numnodes, bcount, nblk\n      INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:, :)  :: index_recv, blks_to_allocate\n      INTEGER(KIND=int_8), DIMENSION(2)                  :: blk_index\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: num_blocks_recv, num_blocks_send, &\n                                                            num_entries_recv, num_entries_send, &\n                                                            num_rec, num_send\n      TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:, :)              :: req_array\n      INTEGER, DIMENSION(2)                              :: blk_size\n      LOGICAL                                            :: tr, tr_in, move_prv\n      TYPE(block_buffer_type), ALLOCATABLE, DIMENSION(:) :: buffer_recv, buffer_send\n      TYPE(dbcsr_data_obj)                               :: block\n      TYPE(dbcsr_tas_iterator)                           :: iter\n      TYPE(dbcsr_tas_split_info)                         :: info\n      TYPE(mp_comm_type)                                 :: mp_comm\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(summation)) THEN\n         IF (.NOT. summation) CALL dbcsr_clear(matrix_out%matrix)\n      ELSE\n         CALL dbcsr_clear(matrix_out%matrix)\n      END IF\n\n      IF (PRESENT(move_data)) THEN\n         move_prv = move_data\n      ELSE\n         move_prv = .FALSE.\n      END IF\n\n      IF (PRESENT(transposed)) THEN\n         tr_in = transposed\n      ELSE\n         tr_in = .FALSE.\n      END IF\n\n      IF (.NOT. matrix_out%valid) THEN\n         DBCSR_ABORT(\"can not reshape into invalid matrix\")\n      END IF\n\n      info = dbcsr_tas_info(matrix_in)\n      mp_comm = info%mp_comm\n      CALL mp_environ(numnodes, mynode, mp_comm)\n      ALLOCATE (buffer_send(0:numnodes - 1))\n      ALLOCATE (buffer_recv(0:numnodes - 1))\n      ALLOCATE (num_blocks_recv(0:numnodes - 1))\n      ALLOCATE (num_blocks_send(0:numnodes - 1))\n      ALLOCATE (num_entries_recv(0:numnodes - 1))\n      ALLOCATE (num_entries_send(0:numnodes - 1))\n      ALLOCATE (num_rec(0:2*numnodes - 1))\n      ALLOCATE (num_send(0:2*numnodes - 1))\n      num_send(:) = 0\n      ALLOCATE (req_array(1:numnodes, 4))\n      CALL dbcsr_tas_iterator_start(iter, matrix_in)\n\n      CALL timeset(routineN//\"_get_coord\", handle2)\n      DO WHILE (dbcsr_tas_iterator_blocks_left(iter))\n         CALL dbcsr_tas_iterator_next_block(iter, blk_index(1), blk_index(2), nblock, transposed=tr, &\n                                            row_size=blk_size(1), col_size=blk_size(2))\n\n         IF (tr_in) THEN\n            CALL dbcsr_tas_get_stored_coordinates(matrix_out, blk_index(2), blk_index(1), iproc)\n         ELSE\n            CALL dbcsr_tas_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iproc)\n         END IF\n\n         num_send(2*iproc) = num_send(2*iproc) + PRODUCT(blk_size)\n         num_send(2*iproc + 1) = num_send(2*iproc + 1) + 1\n      END DO\n      CALL dbcsr_tas_iterator_stop(iter)\n      CALL timestop(handle2)\n\n      CALL timeset(routineN//\"_alltoall\", handle2)\n      CALL mp_alltoall(num_send, num_rec, 2, mp_comm)\n      CALL timestop(handle2)\n\n      CALL timeset(routineN//\"_buffer_fill\", handle2)\n      DO iproc = 0, numnodes - 1\n         num_entries_recv(iproc) = num_rec(2*iproc)\n         num_blocks_recv(iproc) = num_rec(2*iproc + 1)\n         num_entries_send(iproc) = num_send(2*iproc)\n         num_blocks_send(iproc) = num_send(2*iproc + 1)\n\n         CALL block_buffer_create(buffer_send(iproc), num_blocks_send(iproc), num_entries_send(iproc), &\n                                  dbcsr_tas_get_data_type(matrix_in))\n\n         CALL block_buffer_create(buffer_recv(iproc), num_blocks_recv(iproc), num_entries_recv(iproc), &\n                                  dbcsr_tas_get_data_type(matrix_in))\n\n      END DO\n\n      CALL dbcsr_data_init(block)\n      CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(dbcsr_tas_get_data_type(matrix_in))) ! need to convert to 2d data type\n      CALL dbcsr_tas_iterator_start(iter, matrix_in)\n      DO WHILE (dbcsr_tas_iterator_blocks_left(iter))\n         CALL dbcsr_tas_iterator_next_block(iter, blk_index(1), blk_index(2), block, tr, &\n                                            row_size=blk_size(1), col_size=blk_size(2))\n\n         DBCSR_ASSERT(tr .EQV. .FALSE.)\n\n         IF (tr_in) THEN\n            CALL dbcsr_tas_get_stored_coordinates(matrix_out, blk_index(2), blk_index(1), iproc)\n         ELSE\n            CALL dbcsr_tas_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iproc)\n         END IF\n         CALL block_buffer_add_block(buffer_send(iproc), blk_index, block, transposed=tr_in)\n      END DO\n      CALL dbcsr_tas_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(block)\n\n      IF (move_prv) CALL dbcsr_tas_clear(matrix_in)\n\n      CALL timestop(handle2)\n\n      CALL timeset(routineN//\"_communicate_buffer\", handle2)\n      CALL dbcsr_tas_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array)\n\n      DO iproc = 0, numnodes - 1\n         CALL block_buffer_destroy(buffer_send(iproc))\n      END DO\n\n      CALL timestop(handle2)\n\n      CALL timeset(routineN//\"_buffer_obtain\", handle2)\n\n      nblk = SUM(num_blocks_recv)\n      ALLOCATE (blks_to_allocate(nblk, 2))\n\n      bcount = 0\n      DO iproc = 0, numnodes - 1\n         CALL block_buffer_get_index(buffer_recv(iproc), index_recv)\n         blks_to_allocate(bcount + 1:bcount + SIZE(index_recv, 1), :) = index_recv(:, :)\n         bcount = bcount + SIZE(index_recv, 1)\n         DEALLOCATE (index_recv)\n      END DO\n\n      CALL dbcsr_tas_reserve_blocks(matrix_out, blks_to_allocate(:, 1), blks_to_allocate(:, 2))\n      DEALLOCATE (blks_to_allocate)\n\n      DO iproc = 0, numnodes - 1\n         ! First, we need to get the index to create block\n         DO WHILE (block_buffer_blocks_left(buffer_recv(iproc)))\n            CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index)\n            CALL dbcsr_tas_blk_sizes(matrix_out, blk_index(1), blk_index(2), blk_size(1), blk_size(2))\n            CALL internal_data_allocate(block%d, blk_size)\n            CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index, block)\n            CALL dbcsr_tas_put_block(matrix_out, blk_index(1), blk_index(2), block, summation=summation)\n            CALL internal_data_deallocate(block%d)\n         END DO\n         CALL block_buffer_destroy(buffer_recv(iproc))\n      END DO\n      CALL dbcsr_data_clear_pointer(block)\n      CALL dbcsr_data_release(block)\n\n      CALL timestop(handle2)\n\n      CALL dbcsr_tas_finalize(matrix_out)\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_replicate(matrix_in, info, matrix_out, nodata, move_data)\n      !! Replicate matrix_in such that each submatrix of matrix_out is an exact copy of matrix_in\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_in\n      TYPE(dbcsr_tas_split_info), INTENT(IN)             :: info\n      TYPE(dbcsr_tas_type), INTENT(OUT)                  :: matrix_out\n      LOGICAL, INTENT(IN), OPTIONAL                      :: nodata\n         !! Don't copy data but create matrix_out\n      LOGICAL, INTENT(IN), OPTIONAL                      :: move_data\n         !! memory optimization: move data to matrix_out such that matrix_in is empty on return\n\n      INTEGER                                            :: data_type, nblkcols, nblkrows\n      INTEGER, DIMENSION(2)                              :: pcoord, pdims\n      INTEGER, DIMENSION(:), POINTER                     :: col_blk_size, col_dist, &\n                                                            row_blk_size, row_dist\n      TYPE(dbcsr_distribution_obj)                       :: dbcsr_dist\n      TYPE(dbcsr_tas_dist_arb), TARGET                     :: dir_dist\n      TYPE(dbcsr_tas_dist_repl), TARGET                    :: repl_dist\n\n      CLASS(dbcsr_tas_distribution), ALLOCATABLE :: col_dist_obj, row_dist_obj\n      CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: row_bsize_obj, col_bsize_obj\n      TYPE(dbcsr_tas_blk_size_repl), TARGET :: repl_blksize\n      TYPE(dbcsr_tas_blk_size_arb), TARGET :: dir_blksize\n      TYPE(dbcsr_tas_distribution_type) :: dist\n      INTEGER :: numnodes, mynode\n      TYPE(block_buffer_type), ALLOCATABLE, DIMENSION(:) :: buffer_recv, buffer_send\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: num_blocks_recv, num_blocks_send, &\n                                                            num_entries_recv, num_entries_send, &\n                                                            num_rec, num_send\n      INTEGER, ALLOCATABLE, DIMENSION(:, :) :: blks_to_allocate\n      INTEGER, DIMENSION(2) :: blk_size\n      INTEGER, DIMENSION(2) :: blk_index\n      INTEGER(KIND=int_8), DIMENSION(2) :: blk_index_i8\n      TYPE(dbcsr_iterator) :: iter\n      INTEGER :: nblock, i, iproc, bcount, nblk\n      INTEGER, DIMENSION(:), ALLOCATABLE :: iprocs\n      LOGICAL :: tr, nodata_prv, move_prv\n      INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:, :) :: index_recv\n      INTEGER :: ndata\n      TYPE(mp_comm_type) :: mp_comm\n      TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:, :) :: req_array\n\n      TYPE(dbcsr_data_obj) :: block\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_replicate'\n\n      INTEGER :: handle, handle2\n\n      NULLIFY (col_blk_size, row_blk_size)\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(nodata)) THEN\n         nodata_prv = nodata\n      ELSE\n         nodata_prv = .FALSE.\n      END IF\n\n      IF (PRESENT(move_data)) THEN\n         move_prv = move_data\n      ELSE\n         move_prv = .FALSE.\n      END IF\n\n      CALL dbcsr_get_info(matrix_in, distribution=dbcsr_dist, data_type=data_type, &\n                          nblkrows_total=nblkrows, nblkcols_total=nblkcols, &\n                          row_blk_size=row_blk_size, col_blk_size=col_blk_size)\n      row_dist => dbcsr_distribution_row_dist(dbcsr_dist)\n      col_dist => dbcsr_distribution_col_dist(dbcsr_dist)\n\n      mp_comm = info%mp_comm\n\n      CALL mp_environ(numnodes, mynode, mp_comm)\n      CALL mp_environ(numnodes, pdims, pcoord, mp_comm)\n\n      SELECT CASE (info%split_rowcol)\n      CASE (rowsplit)\n         repl_dist = dbcsr_tas_dist_repl(row_dist, pdims(1), nblkrows, info%ngroup, info%pgrid_split_size)\n         dir_dist = dbcsr_tas_dist_arb(col_dist, pdims(2), INT(nblkcols, KIND=int_8))\n         repl_blksize = dbcsr_tas_blk_size_repl(row_blk_size, info%ngroup)\n         dir_blksize = dbcsr_tas_blk_size_arb(col_blk_size)\n         ALLOCATE (row_dist_obj, source=repl_dist)\n         ALLOCATE (col_dist_obj, source=dir_dist)\n         ALLOCATE (row_bsize_obj, source=repl_blksize)\n         ALLOCATE (col_bsize_obj, source=dir_blksize)\n      CASE (colsplit)\n         dir_dist = dbcsr_tas_dist_arb(row_dist, pdims(1), INT(nblkrows, KIND=int_8))\n         repl_dist = dbcsr_tas_dist_repl(col_dist, pdims(2), nblkcols, info%ngroup, info%pgrid_split_size)\n         dir_blksize = dbcsr_tas_blk_size_arb(row_blk_size)\n         repl_blksize = dbcsr_tas_blk_size_repl(col_blk_size, info%ngroup)\n         ALLOCATE (row_dist_obj, source=dir_dist)\n         ALLOCATE (col_dist_obj, source=repl_dist)\n         ALLOCATE (row_bsize_obj, source=dir_blksize)\n         ALLOCATE (col_bsize_obj, source=repl_blksize)\n      END SELECT\n\n      CALL dbcsr_tas_distribution_new(dist, mp_comm, row_dist_obj, col_dist_obj, split_info=info)\n      CALL dbcsr_tas_create(matrix_out, TRIM(matrix_in%name)//\" replicated\", &\n                            dist, data_type, row_bsize_obj, col_bsize_obj, own_dist=.TRUE.)\n\n      IF (nodata_prv) THEN\n         CALL dbcsr_tas_finalize(matrix_out)\n         CALL timestop(handle)\n         RETURN\n      END IF\n\n      ALLOCATE (buffer_send(0:numnodes - 1))\n      ALLOCATE (buffer_recv(0:numnodes - 1))\n      ALLOCATE (num_blocks_recv(0:numnodes - 1))\n      ALLOCATE (num_blocks_send(0:numnodes - 1))\n      ALLOCATE (num_entries_recv(0:numnodes - 1))\n      ALLOCATE (num_entries_send(0:numnodes - 1))\n      ALLOCATE (num_rec(0:2*numnodes - 1))\n      ALLOCATE (num_send(0:2*numnodes - 1))\n      num_send(:) = 0\n      ALLOCATE (req_array(1:numnodes, 4))\n\n      ALLOCATE (iprocs(info%ngroup))\n      CALL dbcsr_iterator_start(iter, matrix_in)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, blk_index(1), blk_index(2), nblock, transposed=tr, &\n                                        row_size=blk_size(1), col_size=blk_size(2))\n         CALL dbcsr_repl_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iprocs)\n         DO i = 1, SIZE(iprocs)\n            num_send(2*iprocs(i)) = num_send(2*iprocs(i)) + PRODUCT(blk_size)\n            num_send(2*iprocs(i) + 1) = num_send(2*iprocs(i) + 1) + 1\n         END DO\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n\n      CALL timeset(routineN//\"_alltoall\", handle2)\n      CALL mp_alltoall(num_send, num_rec, 2, mp_comm)\n      CALL timestop(handle2)\n\n      DO iproc = 0, numnodes - 1\n         num_entries_recv(iproc) = num_rec(2*iproc)\n         num_blocks_recv(iproc) = num_rec(2*iproc + 1)\n         num_entries_send(iproc) = num_send(2*iproc)\n         num_blocks_send(iproc) = num_send(2*iproc + 1)\n\n         CALL block_buffer_create(buffer_send(iproc), num_blocks_send(iproc), num_entries_send(iproc), &\n                                  data_type)\n\n         CALL block_buffer_create(buffer_recv(iproc), num_blocks_recv(iproc), num_entries_recv(iproc), &\n                                  data_type)\n\n      END DO\n\n      CALL dbcsr_data_init(block)\n      CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type))\n      CALL dbcsr_iterator_start(iter, matrix_in)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, blk_index(1), blk_index(2), block, tr, &\n                                        row_size=blk_size(1), col_size=blk_size(2))\n         CALL dbcsr_repl_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iprocs)\n         DO i = 1, SIZE(iprocs)\n            CALL block_buffer_add_block(buffer_send(iprocs(i)), INT(blk_index, KIND=int_8), block)\n         END DO\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(block)\n\n      IF (move_prv) CALL dbcsr_clear(matrix_in)\n\n      CALL timeset(routineN//\"_communicate_buffer\", handle2)\n      CALL dbcsr_tas_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array)\n\n      DO iproc = 0, numnodes - 1\n         CALL block_buffer_destroy(buffer_send(iproc))\n      END DO\n\n      CALL timestop(handle2)\n\n      nblk = SUM(num_blocks_recv)\n      ALLOCATE (blks_to_allocate(nblk, 2))\n\n      bcount = 0\n      DO iproc = 0, numnodes - 1\n         CALL block_buffer_get_index(buffer_recv(iproc), index_recv)\n         blks_to_allocate(bcount + 1:bcount + SIZE(index_recv, 1), :) = INT(index_recv(:, :))\n         bcount = bcount + SIZE(index_recv, 1)\n         DEALLOCATE (index_recv)\n      END DO\n\n      CALL dbcsr_reserve_blocks(matrix_out%matrix, blks_to_allocate(:, 1), blks_to_allocate(:, 2))\n      DEALLOCATE (blks_to_allocate)\n\n      DO iproc = 0, numnodes - 1\n         ! First, we need to get the index to create block\n         DO WHILE (block_buffer_blocks_left(buffer_recv(iproc)))\n            CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index_i8)\n            CALL dbcsr_tas_blk_sizes(matrix_out, blk_index_i8(1), blk_index_i8(2), blk_size(1), blk_size(2))\n            CALL internal_data_allocate(block%d, blk_size)\n            CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index_i8, block)\n            CALL dbcsr_put_block(matrix_out%matrix, INT(blk_index_i8(1)), INT(blk_index_i8(2)), block)\n            CALL internal_data_deallocate(block%d)\n         END DO\n\n         CALL block_buffer_destroy(buffer_recv(iproc))\n      END DO\n      CALL dbcsr_data_clear_pointer(block)\n      CALL dbcsr_data_release(block)\n\n      CALL dbcsr_tas_finalize(matrix_out)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_merge(matrix_out, matrix_in, summation, move_data)\n      !! Merge submatrices of matrix_in to matrix_out by sum\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix_out\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix_in\n      LOGICAL, INTENT(IN), OPTIONAL                      :: summation\n      LOGICAL, INTENT(IN), OPTIONAL                      :: move_data\n         !! memory optimization: move data to matrix_out such that matrix_in is empty on return\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_merge'\n      INTEGER                                            :: data_type, handle, handle2, iproc, &\n                                                            mynode, nblock, ndata, numnodes, nblk, bcount\n      INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:, :)  :: index_recv\n      INTEGER(KIND=int_8), DIMENSION(2)                  :: blk_index_i8\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: iprocs, num_blocks_recv, &\n                                                            num_blocks_send, num_entries_recv, &\n                                                            num_entries_send, num_rec, num_send\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: blks_to_allocate, blks_to_allocate_u\n      INTEGER, DIMENSION(2)                              :: blk_index, blk_size\n      LOGICAL                                            :: tr, move_prv\n      TYPE(block_buffer_type), ALLOCATABLE, DIMENSION(:) :: buffer_recv, buffer_send\n      TYPE(dbcsr_data_obj)                               :: block\n      TYPE(dbcsr_iterator)                               :: iter\n      TYPE(dbcsr_tas_split_info)                         :: info\n      TYPE(mp_comm_type)                                 :: mp_comm\n      TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:, :) :: req_array\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(summation)) THEN\n         IF (.NOT. summation) CALL dbcsr_clear(matrix_out)\n      ELSE\n         CALL dbcsr_clear(matrix_out)\n      END IF\n\n      IF (PRESENT(move_data)) THEN\n         move_prv = move_data\n      ELSE\n         move_prv = .FALSE.\n      END IF\n\n      data_type = dbcsr_tas_get_data_type(matrix_in)\n\n      info = dbcsr_tas_info(matrix_in)\n      CALL dbcsr_tas_get_split_info(info, mp_comm=mp_comm)\n      CALL mp_environ(numnodes, mynode, mp_comm)\n\n      ALLOCATE (buffer_send(0:numnodes - 1))\n      ALLOCATE (buffer_recv(0:numnodes - 1))\n      ALLOCATE (num_blocks_recv(0:numnodes - 1))\n      ALLOCATE (num_blocks_send(0:numnodes - 1))\n      ALLOCATE (num_entries_recv(0:numnodes - 1))\n      ALLOCATE (num_entries_send(0:numnodes - 1))\n      ALLOCATE (num_rec(0:2*numnodes - 1))\n      ALLOCATE (num_send(0:2*numnodes - 1))\n      num_send(:) = 0\n      ALLOCATE (req_array(1:numnodes, 4))\n\n      ALLOCATE (iprocs(info%ngroup))\n\n      CALL dbcsr_iterator_start(iter, matrix_in%matrix)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, blk_index(1), blk_index(2), nblock, transposed=tr, &\n                                        row_size=blk_size(1), col_size=blk_size(2))\n         CALL dbcsr_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iproc)\n         num_send(2*iproc) = num_send(2*iproc) + PRODUCT(blk_size)\n         num_send(2*iproc + 1) = num_send(2*iproc + 1) + 1\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n\n      CALL timeset(routineN//\"_alltoall\", handle2)\n      CALL mp_alltoall(num_send, num_rec, 2, mp_comm)\n      CALL timestop(handle2)\n\n      DO iproc = 0, numnodes - 1\n         num_entries_recv(iproc) = num_rec(2*iproc)\n         num_blocks_recv(iproc) = num_rec(2*iproc + 1)\n         num_entries_send(iproc) = num_send(2*iproc)\n         num_blocks_send(iproc) = num_send(2*iproc + 1)\n\n         CALL block_buffer_create(buffer_send(iproc), num_blocks_send(iproc), num_entries_send(iproc), &\n                                  data_type)\n\n         CALL block_buffer_create(buffer_recv(iproc), num_blocks_recv(iproc), num_entries_recv(iproc), &\n                                  data_type)\n\n      END DO\n\n      CALL dbcsr_data_init(block)\n      CALL dbcsr_data_new(block, dbcsr_type_1d_to_2d(data_type))\n      CALL dbcsr_iterator_start(iter, matrix_in%matrix)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, blk_index(1), blk_index(2), block, tr, &\n                                        row_size=blk_size(1), col_size=blk_size(2))\n         CALL dbcsr_get_stored_coordinates(matrix_out, blk_index(1), blk_index(2), iproc)\n         CALL block_buffer_add_block(buffer_send(iproc), INT(blk_index, KIND=int_8), block)\n      END DO\n\n      CALL dbcsr_iterator_stop(iter)\n\n      IF (move_prv) CALL dbcsr_tas_clear(matrix_in)\n\n      CALL timeset(routineN//\"_communicate_buffer\", handle2)\n      CALL dbcsr_tas_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array)\n\n      DO iproc = 0, numnodes - 1\n         CALL block_buffer_destroy(buffer_send(iproc))\n      END DO\n\n      CALL timestop(handle2)\n\n      nblk = SUM(num_blocks_recv)\n      ALLOCATE (blks_to_allocate(nblk, 2))\n\n      bcount = 0\n      DO iproc = 0, numnodes - 1\n         CALL block_buffer_get_index(buffer_recv(iproc), index_recv)\n         blks_to_allocate(bcount + 1:bcount + SIZE(index_recv, 1), :) = INT(index_recv(:, :))\n         bcount = bcount + SIZE(index_recv, 1)\n         DEALLOCATE (index_recv)\n      END DO\n\n      CALL index_unique(blks_to_allocate, blks_to_allocate_u)\n\n      CALL dbcsr_reserve_blocks(matrix_out, blks_to_allocate_u(:, 1), blks_to_allocate_u(:, 2))\n      DEALLOCATE (blks_to_allocate, blks_to_allocate_u)\n\n      DO iproc = 0, numnodes - 1\n         ! First, we need to get the index to create block\n         DO WHILE (block_buffer_blocks_left(buffer_recv(iproc)))\n            CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index_i8)\n            blk_size(1) = dbcsr_blk_row_size(matrix_out, INT(blk_index_i8(1)))\n            blk_size(2) = dbcsr_blk_column_size(matrix_out, INT(blk_index_i8(2)))\n            CALL internal_data_allocate(block%d, blk_size)\n            CALL block_buffer_get_next_block(buffer_recv(iproc), ndata, blk_index_i8, block)\n            CALL dbcsr_put_block(matrix_out, INT(blk_index_i8(1)), INT(blk_index_i8(2)), block, summation=.TRUE.)\n            CALL internal_data_deallocate(block%d)\n         END DO\n         CALL block_buffer_destroy(buffer_recv(iproc))\n      END DO\n      CALL dbcsr_data_clear_pointer(block)\n      CALL dbcsr_data_release(block)\n\n      CALL dbcsr_finalize(matrix_out)\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE block_buffer_get_index(buffer, index)\n      !! get all indices from buffer\n      TYPE(block_buffer_type), INTENT(IN)                :: buffer\n      INTEGER(KIND=int_8), ALLOCATABLE, &\n         DIMENSION(:, :), INTENT(OUT)                    :: index\n\n      INTEGER, DIMENSION(2)                              :: indx_shape\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'block_buffer_get_index'\n      INTEGER :: handle\n\n      CALL timeset(routineN, handle)\n\n      indx_shape = SHAPE(buffer%indx) - [0, 1]\n      ALLOCATE (INDEX(indx_shape(1), indx_shape(2)))\n      INDEX(:, :) = buffer%indx(1:indx_shape(1), 1:indx_shape(2))\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   PURE FUNCTION block_buffer_blocks_left(buffer)\n      !! how many blocks left in iterator\n      TYPE(block_buffer_type), INTENT(IN)                :: buffer\n      LOGICAL                                            :: block_buffer_blocks_left\n\n      block_buffer_blocks_left = buffer%endpos .LT. buffer%nblock\n   END FUNCTION\n\n   SUBROUTINE block_buffer_create(buffer, nblock, ndata, data_type)\n      !! Create block buffer for MPI communication.\n\n      TYPE(block_buffer_type), INTENT(OUT) :: buffer\n         !! block buffer\n      INTEGER, INTENT(IN) :: nblock, ndata, data_type\n         !! number of blocks\n         !! total number of block entries\n\n      buffer%nblock = nblock\n      buffer%data_type = data_type\n      buffer%endpos = 0\n      SELECT CASE (data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            ALLOCATE (buffer%msg_${dsuffix}$ (ndata))\n         #:endfor\n      END SELECT\n      ALLOCATE (buffer%indx(nblock, 3))\n   END SUBROUTINE\n\n   SUBROUTINE block_buffer_destroy(buffer)\n      TYPE(block_buffer_type), INTENT(INOUT) :: buffer\n\n      SELECT CASE (buffer%data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            DEALLOCATE (buffer%msg_${dsuffix}$)\n         #:endfor\n      END SELECT\n      DEALLOCATE (buffer%indx)\n      buffer%nblock = -1\n      buffer%data_type = -1\n      buffer%endpos = -1\n   END SUBROUTINE block_buffer_destroy\n\n   SUBROUTINE block_buffer_add_area_block(buffer, index, block, transposed)\n      TYPE(block_buffer_type), INTENT(INOUT)      :: buffer\n      INTEGER(KIND=int_8), DIMENSION(2), &\n         INTENT(IN)                               :: index\n      TYPE(dbcsr_data_obj), INTENT(IN)         :: block\n      LOGICAL, INTENT(IN), OPTIONAL :: transposed\n\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         ${dtype}$, DIMENSION(:, :), POINTER :: block_${dsuffix}$\n      #:endfor\n\n      SELECT CASE (buffer%data_type)\n         #:for dparam, dtype, dsuffix, dsuffix_dbcsr in dtype_float_list_dbcsr\n            CASE (${dparam}$)\n            block_${dsuffix}$ => dbcsr_get_data_p_2d_${dsuffix_dbcsr}$ (block)\n            CALL block_buffer_add_block_${dsuffix}$ (buffer, index, block_${dsuffix}$, transposed)\n         #:endfor\n      END SELECT\n   END SUBROUTINE\n\n   SUBROUTINE block_buffer_get_next_area_block(buffer, ndata, index, block, advance_iter)\n      TYPE(block_buffer_type), INTENT(INOUT)      :: buffer\n      INTEGER, INTENT(OUT)                        :: ndata\n      INTEGER(KIND=int_8), DIMENSION(2), &\n         INTENT(OUT)                              :: index\n      TYPE(dbcsr_data_obj), INTENT(INOUT), OPTIONAL           :: block\n      LOGICAL, INTENT(IN), OPTIONAL               :: advance_iter\n      LOGICAL :: valid\n      INTEGER, DIMENSION(2) :: sizes\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         ${dtype}$, DIMENSION(:, :), POINTER :: data_${dsuffix}$\n      #:endfor\n\n      IF (PRESENT(block)) THEN\n         CALL dbcsr_data_get_sizes(block, sizes, valid)\n         DBCSR_ASSERT(valid)\n         CALL internal_data_deallocate(block%d)\n      END IF\n\n      SELECT CASE (buffer%data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            IF (PRESENT(block)) THEN\n               ALLOCATE (data_${dsuffix}$ (sizes(1), sizes(2)))\n               CALL block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, data_${dsuffix}$, advance_iter=advance_iter)\n               CALL dbcsr_data_set_pointer(block, data_${dsuffix}$)\n            ELSE\n               CALL block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, advance_iter=advance_iter)\n            END IF\n         #:endfor\n      END SELECT\n   END SUBROUTINE\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE block_buffer_add_block_${dsuffix}$ (buffer, index, block, transposed)\n      !! insert a block into block buffer (at current iterator position)\n\n         TYPE(block_buffer_type), INTENT(INOUT)      :: buffer\n         INTEGER(KIND=int_8), DIMENSION(2), &\n            INTENT(IN)                               :: index\n         !! index of block\n         ${dtype}$, DIMENSION(:, :), INTENT(IN)                  :: block\n         !! block\n         LOGICAL, INTENT(IN), OPTIONAL :: transposed\n         INTEGER(KIND=int_8), DIMENSION(2)   :: index_prv\n\n         LOGICAL :: tr\n         INTEGER :: p\n         INTEGER :: ndata\n         INTEGER :: p_data\n\n         IF (PRESENT(transposed)) THEN\n            tr = transposed\n         ELSE\n            tr = .FALSE.\n         END IF\n\n         index_prv(:) = index(:)\n         IF (tr) THEN\n            CALL swap(index_prv)\n         END IF\n         ndata = PRODUCT(SHAPE(block))\n\n         DBCSR_ASSERT(buffer%data_type .EQ. ${dparam}$)\n         p = buffer%endpos\n         IF (p .EQ. 0) THEN\n            p_data = 0\n         ELSE\n            p_data = INT(buffer%indx(p, 3))\n         END IF\n\n         IF (tr) THEN\n            buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata) = RESHAPE(TRANSPOSE(block), [ndata])\n         ELSE\n            buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata) = RESHAPE(block, [ndata])\n         END IF\n\n         buffer%indx(p + 1, 1:2) = index_prv(:)\n         IF (p > 0) THEN\n            buffer%indx(p + 1, 3) = buffer%indx(p, 3) + INT(ndata, KIND=int_8)\n         ELSE\n            buffer%indx(p + 1, 3) = INT(ndata, KIND=int_8)\n         END IF\n         buffer%endpos = buffer%endpos + 1\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, block, advance_iter)\n      !! get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter.\n         TYPE(block_buffer_type), INTENT(INOUT)      :: buffer\n         INTEGER, INTENT(OUT)                        :: ndata\n         INTEGER(KIND=int_8), DIMENSION(2), &\n            INTENT(OUT)                              :: index\n         ${dtype}$, DIMENSION(:, :), INTENT(OUT), OPTIONAL     :: block\n         LOGICAL, INTENT(IN), OPTIONAL               :: advance_iter\n         INTEGER :: p, p_data\n         LOGICAL :: do_advance\n\n         do_advance = .FALSE.\n         IF (PRESENT(advance_iter)) THEN\n            do_advance = advance_iter\n         ELSE IF (PRESENT(block)) THEN\n            do_advance = .TRUE.\n         END IF\n\n         DBCSR_ASSERT(buffer%data_type .EQ. ${dparam}$)\n\n         p = buffer%endpos\n         IF (p .EQ. 0) THEN\n            p_data = 0\n         ELSE\n            p_data = INT(buffer%indx(p, 3))\n         END IF\n\n         IF (p > 0) THEN\n            ndata = INT(buffer%indx(p + 1, 3) - buffer%indx(p, 3))\n         ELSE\n            ndata = INT(buffer%indx(p + 1, 3))\n         END IF\n         index(:) = buffer%indx(p + 1, 1:2)\n\n         IF (PRESENT(block)) THEN\n            block(:, :) = RESHAPE(buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata), SHAPE(block))\n         END IF\n\n         IF (do_advance) buffer%endpos = buffer%endpos + 1\n      END SUBROUTINE\n   #:endfor\n\n   SUBROUTINE dbcsr_tas_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array)\n      !! communicate buffer\n      TYPE(mp_comm_type), INTENT(IN)                    :: mp_comm\n      TYPE(block_buffer_type), DIMENSION(0:), INTENT(INOUT) :: buffer_recv, buffer_send\n      TYPE(mp_request_type), DIMENSION(:, :), INTENT(OUT)               :: req_array\n\n      INTEGER                                :: iproc, mynode, numnodes, rec_counter, &\n                                                send_counter\n      INTEGER                                   :: handle\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_communicate_buffer'\n\n      CALL timeset(routineN, handle)\n      CALL mp_environ(numnodes, mynode, mp_comm)\n\n      IF (numnodes > 1) THEN\n\n         send_counter = 0\n         rec_counter = 0\n\n         DO iproc = 0, numnodes - 1\n            IF (buffer_recv(iproc)%nblock > 0) THEN\n               rec_counter = rec_counter + 1\n               CALL mp_irecv(buffer_recv(iproc)%indx, iproc, mp_comm, req_array(rec_counter, 3), tag=4)\n               SELECT CASE (buffer_recv(iproc)%data_type)\n                  #:for dparam, dtype, dsuffix in dtype_float_list\n                     CASE (${dparam}$)\n                     CALL mp_irecv(buffer_recv(iproc)%msg_${dsuffix}$, iproc, mp_comm, req_array(rec_counter, 4), tag=7)\n                  #:endfor\n               END SELECT\n            END IF\n         END DO\n\n         DO iproc = 0, numnodes - 1\n            IF (buffer_send(iproc)%nblock > 0) THEN\n               send_counter = send_counter + 1\n               CALL mp_isend(buffer_send(iproc)%indx, iproc, mp_comm, req_array(send_counter, 1), tag=4)\n               SELECT CASE (buffer_recv(iproc)%data_type)\n                  #:for dparam, dtype, dsuffix in dtype_float_list\n                     CASE (${dparam}$)\n                     CALL mp_isend(buffer_send(iproc)%msg_${dsuffix}$, iproc, mp_comm, req_array(send_counter, 2), tag=7)\n                  #:endfor\n               END SELECT\n            END IF\n         END DO\n\n         IF (send_counter > 0) THEN\n            CALL mp_waitall(req_array(1:send_counter, 1:2))\n         END IF\n         IF (rec_counter > 0) THEN\n            CALL mp_waitall(req_array(1:rec_counter, 3:4))\n         END IF\n\n      ELSE\n         IF (buffer_recv(0)%nblock > 0) THEN\n            buffer_recv(0)%indx(:, :) = buffer_send(0)%indx(:, :)\n            SELECT CASE (buffer_recv(0)%data_type)\n               #:for dparam, dtype, dsuffix in dtype_float_list\n                  CASE (${dparam}$)\n                  buffer_recv(0)%msg_${dsuffix}$ (:) = buffer_send(0)%msg_${dsuffix}$ (:)\n               #:endfor\n            END SELECT\n         END IF\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE\n\nEND MODULE\n"
  },
  {
    "path": "src/tas/dbcsr_tas_split.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tas_split\n   !! methods to split tall-and-skinny matrices along longest dimension.\n   !! Basically, we are splitting process grid and each subgrid holds its own DBCSR matrix.\n\n   USE dbcsr_tas_types, ONLY: &\n      dbcsr_tas_distribution_type, dbcsr_tas_split_info\n   USE dbcsr_tas_global, ONLY: &\n      dbcsr_tas_distribution\n   USE dbcsr_tas_util, ONLY: &\n      swap\n   USE dbcsr_toollib, ONLY: &\n      sort\n   USE dbcsr_kinds, ONLY: &\n      int_8\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_bcast, mp_cart_create, mp_comm_dup, mp_comm_free, mp_comm_split_direct, mp_dims_create, mp_environ, mp_comm_type\n   USE dbcsr_kinds, ONLY: &\n      real_8\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   PUBLIC :: &\n      block_index_global_to_local, &\n      block_index_local_to_global, &\n      colsplit, &\n      dbcsr_tas_get_split_info, &\n      dbcsr_tas_info_hold, &\n      dbcsr_tas_mp_comm, &\n      dbcsr_tas_mp_dims, &\n      dbcsr_tas_release_info, &\n      dbcsr_tas_create_split, &\n      dbcsr_tas_create_split_rows_or_cols, &\n      dbcsr_tas_set_strict_split, &\n      group_to_mrowcol, &\n      group_to_world_proc_map, &\n      rowsplit, &\n      world_to_group_proc_map, &\n      accept_pgrid_dims, &\n      default_nsplit_accept_ratio, &\n      default_pdims_accept_ratio\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_split'\n\n   INTEGER, PARAMETER :: rowsplit = 1, colsplit = 2\n   REAL(real_8), PARAMETER :: default_pdims_accept_ratio = 1.2_real_8\n   REAL(real_8), PARAMETER :: default_nsplit_accept_ratio = 3.0_real_8\n\n   INTERFACE dbcsr_tas_mp_comm\n      MODULE PROCEDURE dbcsr_tas_mp_comm\n      MODULE PROCEDURE dbcsr_tas_mp_comm_from_matrix_sizes\n   END INTERFACE\n\nCONTAINS\n\n   SUBROUTINE dbcsr_tas_create_split_rows_or_cols(split_info, mp_comm, ngroup, igroup, split_rowcol, own_comm)\n      !! split mpi grid by rows or columns\n\n      TYPE(dbcsr_tas_split_info), INTENT(OUT)            :: split_info\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_comm\n         !! global mpi communicator with a 2d cartesian grid\n      INTEGER, INTENT(INOUT)                             :: ngroup\n         !! number of groups\n      INTEGER, INTENT(IN)                                :: igroup, split_rowcol\n         !! my group ID\n         !! split rows or columns\n      LOGICAL, INTENT(IN), OPTIONAL                      :: own_comm\n         !! Whether split_info should own communicator\n\n      INTEGER :: &\n         igroup_check, iproc, iproc_group, iproc_group_check, numproc, &\n         numproc_group, numproc_group_check, handle\n      INTEGER, DIMENSION(2)                              :: pcoord, pcoord_group, pdims, pdims_group\n      LOGICAL                                            :: to_assert, own_comm_prv\n      TYPE(mp_comm_type)                                 :: mp_comm_group\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_create_split_rows_or_cols'\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(own_comm)) THEN\n         own_comm_prv = own_comm\n      ELSE\n         own_comm_prv = .FALSE.\n      END IF\n\n      IF (own_comm_prv) THEN\n         split_info%mp_comm = mp_comm\n      ELSE\n         CALL mp_comm_dup(mp_comm, split_info%mp_comm)\n      END IF\n\n      split_info%igroup = igroup\n      split_info%split_rowcol = split_rowcol\n\n      CALL mp_comm_split_direct(mp_comm, mp_comm_group, igroup)\n\n      CALL mp_environ(numproc, iproc, mp_comm)\n      CALL mp_environ(numproc, pdims, pcoord, mp_comm)\n      split_info%pdims = pdims\n\n      CALL mp_environ(numproc_group, iproc_group, mp_comm_group)\n\n      IF (iproc == 0) THEN\n         to_assert = MOD(numproc_group, pdims(MOD(split_rowcol, 2) + 1)) == 0\n         DBCSR_ASSERT(to_assert)\n         split_info%pgrid_split_size = numproc_group/pdims(MOD(split_rowcol, 2) + 1)\n      END IF\n      CALL mp_bcast(split_info%pgrid_split_size, 0, split_info%mp_comm)\n\n      ngroup = (pdims(split_rowcol) + split_info%pgrid_split_size - 1)/split_info%pgrid_split_size\n      split_info%ngroup = ngroup\n      split_info%group_size = split_info%pgrid_split_size*pdims(MOD(split_rowcol, 2) + 1)\n\n      CALL world_to_group_proc_map(iproc, pdims, split_rowcol, split_info%pgrid_split_size, igroup_check, pdims_group, iproc_group)\n\n      IF (igroup_check .NE. split_info%igroup) THEN\n         DBCSR_ABORT('inconsistent subgroups')\n      END IF\n\n      CALL mp_cart_create(mp_comm_group, 2, pdims_group, pcoord_group, split_info%mp_comm_group)\n\n      CALL mp_environ(numproc_group_check, iproc_group_check, split_info%mp_comm_group)\n\n      DBCSR_ASSERT(iproc_group_check .EQ. iproc_group)\n\n      CALL mp_comm_free(mp_comm_group)\n\n      ALLOCATE (split_info%refcount)\n      split_info%refcount = 1\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   FUNCTION dbcsr_tas_mp_comm(mp_comm, split_rowcol, nsplit)\n      !! Create default cartesian process grid that is consistent with default split heuristic\n      !! of dbcsr_tas_create_split\n      !! \\return new communicator\n\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_comm\n      INTEGER, INTENT(IN)                                :: split_rowcol\n      INTEGER, INTENT(IN)                             :: nsplit\n      TYPE(mp_comm_type)                                 :: dbcsr_tas_mp_comm\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_mp_comm'\n\n      INTEGER                                            :: handle, iproc, numproc\n      INTEGER, DIMENSION(2)                              :: myploc, npdims\n\n      CALL timeset(routineN, handle)\n\n      CALL mp_environ(numproc, iproc, mp_comm)\n\n      npdims = dbcsr_tas_mp_dims(numproc, split_rowcol, nsplit)\n\n      CALL mp_cart_create(mp_comm, 2, npdims, myploc, dbcsr_tas_mp_comm)\n\n      CALL timestop(handle)\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_mp_dims(numproc, split_rowcol, nsplit)\n      !! Get optimal process grid dimensions consistent with dbcsr_tas_create_split\n      INTEGER, INTENT(IN)                                :: numproc\n      INTEGER, INTENT(IN)                                :: split_rowcol\n      INTEGER, INTENT(IN)                                :: nsplit\n      INTEGER, DIMENSION(2)                              :: dbcsr_tas_mp_dims\n\n      INTEGER                                            :: nsplit_opt\n      INTEGER                                            :: group_size\n      INTEGER, DIMENSION(2)                              :: group_dims\n\n      nsplit_opt = get_opt_nsplit(numproc, nsplit, split_pgrid=.FALSE.)\n\n      group_size = numproc/nsplit_opt\n      group_dims(:) = 0\n\n      CALL mp_dims_create(group_size, group_dims)\n\n      ! here we choose order of group dims s.t. a split factor < nsplit_opt is favoured w.r.t.\n      ! optimal subgrid dimensions\n      SELECT CASE (split_rowcol)\n      CASE (rowsplit)\n         group_dims = [MINVAL(group_dims), MAXVAL(group_dims)]\n      CASE (colsplit)\n         group_dims = [MAXVAL(group_dims), MINVAL(group_dims)]\n      END SELECT\n\n      SELECT CASE (split_rowcol)\n      CASE (rowsplit)\n         dbcsr_tas_mp_dims(:) = [group_dims(1)*nsplit_opt, group_dims(2)]\n      CASE (colsplit)\n         dbcsr_tas_mp_dims(:) = [group_dims(1), group_dims(2)*nsplit_opt]\n      END SELECT\n\n   END FUNCTION\n\n   FUNCTION get_opt_nsplit(numproc, nsplit, split_pgrid, pdim_nonsplit)\n      !! Heuristic to get good split factor for a given process grid OR a given number of processes\n      !! \\return split factor consistent with process grid or number of processes\n\n      INTEGER, INTENT(IN)                        :: numproc, nsplit\n         !! total number of processes or (if split_pgrid) process grid dimension to split\n         !! Desired split factor\n      LOGICAL, INTENT(IN)                        :: split_pgrid\n         !! whether to split process grid\n      INTEGER, INTENT(IN), OPTIONAL              :: pdim_nonsplit\n         !! if split_pgrid: other process grid dimension\n      INTEGER, ALLOCATABLE, DIMENSION(:)         :: nsplit_list, nsplit_list_square, nsplit_list_accept\n      INTEGER                                    :: lb, ub, count, count_square, count_accept, split, &\n                                                    minpos, get_opt_nsplit\n      INTEGER, DIMENSION(2)                      :: dims_sub\n\n      DBCSR_ASSERT(nsplit > 0)\n\n      IF (split_pgrid) THEN\n         DBCSR_ASSERT(PRESENT(pdim_nonsplit))\n      END IF\n\n      lb = CEILING(REAL(nsplit, real_8)/default_nsplit_accept_ratio)\n      ub = FLOOR(REAL(nsplit, real_8)*default_nsplit_accept_ratio)\n\n      IF (ub < lb) ub = lb\n\n      ALLOCATE (nsplit_list(1:ub - lb + 1), nsplit_list_square(1:ub - lb + 1), nsplit_list_accept(1:ub - lb + 1))\n      count = 0\n      count_square = 0\n      count_accept = 0\n      DO split = lb, ub\n         IF (MOD(numproc, split) == 0) THEN\n            count = count + 1\n            nsplit_list(count) = split\n\n            dims_sub = 0\n            IF (.NOT. split_pgrid) THEN\n               CALL mp_dims_create(numproc/split, dims_sub)\n            ELSE\n               dims_sub = [numproc/split, pdim_nonsplit]\n            END IF\n\n            IF (dims_sub(1) == dims_sub(2)) THEN\n               count_square = count_square + 1\n               nsplit_list_square(count_square) = split\n               count_accept = count_accept + 1\n               nsplit_list_accept(count_accept) = split\n            ELSEIF (accept_pgrid_dims(dims_sub, relative=.FALSE.)) THEN\n               count_accept = count_accept + 1\n               nsplit_list_accept(count_accept) = split\n            END IF\n\n         END IF\n      END DO\n\n      IF (count_square > 0) THEN\n         minpos = MINLOC(ABS(nsplit_list_square(1:count_square) - nsplit), DIM=1)\n         get_opt_nsplit = nsplit_list_square(minpos)\n      ELSEIF (count_accept > 0) THEN\n         minpos = MINLOC(ABS(nsplit_list_accept(1:count_accept) - nsplit), DIM=1)\n         get_opt_nsplit = nsplit_list_accept(minpos)\n      ELSEIF (count > 0) THEN\n         minpos = MINLOC(ABS(nsplit_list(1:count) - nsplit), DIM=1)\n         get_opt_nsplit = nsplit_list(minpos)\n      ELSE\n         get_opt_nsplit = nsplit\n         DO WHILE (MOD(numproc, get_opt_nsplit) .NE. 0)\n            get_opt_nsplit = get_opt_nsplit - 1\n         END DO\n      END IF\n\n   END FUNCTION\n\n   FUNCTION dbcsr_tas_mp_comm_from_matrix_sizes(mp_comm, nblkrows, nblkcols) RESULT(mp_comm_new)\n      !! Derive optimal cartesian process grid from matrix sizes. This ensures optimality for\n      !! dense matrices only\n\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_comm\n      INTEGER(KIND=int_8), INTENT(IN)                    :: nblkrows, nblkcols\n         !! total number of block rows\n         !! total number of block columns\n      INTEGER                                            :: nsplit, split_rowcol\n      TYPE(mp_comm_type)                                 :: mp_comm_new\n         !! MPI communicator\n\n      IF (nblkrows >= nblkcols) THEN\n         split_rowcol = rowsplit\n         nsplit = INT((nblkrows - 1)/nblkcols + 1)\n      ELSE\n         split_rowcol = colsplit\n         nsplit = INT((nblkcols - 1)/nblkrows + 1)\n      END IF\n\n      mp_comm_new = dbcsr_tas_mp_comm(mp_comm, split_rowcol, nsplit)\n   END FUNCTION\n\n   SUBROUTINE dbcsr_tas_create_split(split_info, mp_comm, split_rowcol, nsplit, own_comm, opt_nsplit)\n      !! Split Cartesian process grid using a default split heuristic.\n\n      TYPE(dbcsr_tas_split_info), INTENT(OUT)            :: split_info\n         !! object storing all data corresponding to split, submatrices and parallelization\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_comm\n         !! MPI communicator with associated cartesian grid\n      INTEGER, INTENT(IN)                                :: split_rowcol\n         !! split rows or columns\n      INTEGER, INTENT(IN)                                :: nsplit\n         !! desired split factor, set to 0 if split factor of exactly 1 is required\n      LOGICAL, INTENT(IN), OPTIONAL                      :: own_comm\n         !! whether split_info should own communicator\n      LOGICAL, INTENT(IN), OPTIONAL                      :: opt_nsplit\n         !! whether nsplit should be optimized to process grid\n\n      CHARACTER(LEN=*), PARAMETER                        :: routineN = 'dbcsr_tas_create_split'\n\n      INTEGER                                            :: &\n         handle, iproc, numproc, igroup, nsplit_opt, pdim_split, pdim_nonsplit\n      INTEGER, DIMENSION(2)                              :: pcoord, pdims, pdims_group\n      LOGICAL                                            :: opt_nsplit_prv\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(opt_nsplit)) THEN\n         opt_nsplit_prv = opt_nsplit\n      ELSE\n         opt_nsplit_prv = .TRUE.\n      END IF\n\n      DBCSR_ASSERT(nsplit > 0)\n\n      CALL mp_environ(numproc, iproc, mp_comm)\n      CALL mp_environ(numproc, pdims, pcoord, mp_comm)\n\n      SELECT CASE (split_rowcol)\n      CASE (rowsplit)\n         pdim_split = pdims(1)\n         pdim_nonsplit = pdims(2)\n      CASE (colsplit)\n         pdim_split = pdims(2)\n         pdim_nonsplit = pdims(1)\n      END SELECT\n\n      IF (opt_nsplit_prv) THEN\n         nsplit_opt = get_opt_nsplit(pdim_split, nsplit, split_pgrid=.TRUE., pdim_nonsplit=pdim_nonsplit)\n      ELSE\n         IF (MOD(pdims(split_rowcol), nsplit) .NE. 0) THEN\n            DBCSR_ABORT(\"Split factor does not divide process grid dimension\")\n         END IF\n         nsplit_opt = nsplit\n      END IF\n\n      pdims_group = pdims\n      pdims_group(split_rowcol) = pdims_group(split_rowcol)/nsplit_opt\n\n      igroup = pcoord(split_rowcol)/pdims_group(split_rowcol)\n\n      CALL dbcsr_tas_create_split_rows_or_cols(split_info, mp_comm, nsplit_opt, igroup, split_rowcol, own_comm=own_comm)\n\n      IF (nsplit > 0) THEN\n         ALLOCATE (split_info%ngroup_opt, SOURCE=nsplit)\n      END IF\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   FUNCTION accept_pgrid_dims(dims, relative)\n      !! Whether to accept proposed process grid dimensions (based on ratio of dimensions)\n      INTEGER, DIMENSION(2), INTENT(IN)          :: dims\n      LOGICAL, INTENT(IN)                        :: relative\n      INTEGER, DIMENSION(2)                      :: dims_opt\n      LOGICAL                                    :: accept_pgrid_dims\n\n      IF (relative) THEN\n         dims_opt = 0\n         CALL mp_dims_create(PRODUCT(dims), dims_opt)\n         accept_pgrid_dims = (MAXVAL(REAL(dims, real_8))/MAXVAL(dims_opt) .LT. default_pdims_accept_ratio)\n      ELSE\n         accept_pgrid_dims = (MAXVAL(REAL(dims, real_8))/MINVAL(dims) .LT. default_pdims_accept_ratio**2)\n      END IF\n   END FUNCTION\n\n   SUBROUTINE dbcsr_tas_get_split_info(info, mp_comm, nsplit, igroup, mp_comm_group, split_rowcol, pgrid_offset)\n      !! Get info on split\n\n      TYPE(dbcsr_tas_split_info), INTENT(IN)             :: info\n      TYPE(mp_comm_type), INTENT(OUT), OPTIONAL          :: mp_comm, mp_comm_group\n      INTEGER, INTENT(OUT), OPTIONAL                     :: nsplit, igroup, &\n                                                            split_rowcol\n         !! communicator (global process grid)\n         !! split factor\n         !! which group do I belong to\n         !! subgroup communicator (group-local process grid)\n         !! split rows or columns\n      INTEGER, DIMENSION(2), INTENT(OUT), OPTIONAL       :: pgrid_offset\n         !! group-local offset in process grid\n\n      IF (PRESENT(mp_comm)) mp_comm = info%mp_comm\n      IF (PRESENT(mp_comm_group)) mp_comm_group = info%mp_comm_group\n      IF (PRESENT(split_rowcol)) split_rowcol = info%split_rowcol\n      IF (PRESENT(igroup)) igroup = info%igroup\n      IF (PRESENT(nsplit)) nsplit = info%ngroup\n\n      IF (PRESENT(pgrid_offset)) THEN\n         SELECT CASE (info%split_rowcol)\n         CASE (rowsplit)\n            pgrid_offset(:) = [info%igroup*info%pgrid_split_size, 0]\n         CASE (colsplit)\n            pgrid_offset(:) = [0, info%igroup*info%pgrid_split_size]\n         END SELECT\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_release_info(split_info)\n      TYPE(dbcsr_tas_split_info), INTENT(INOUT)          :: split_info\n      LOGICAL                                            :: abort\n\n      abort = .FALSE.\n\n      IF (.NOT. ASSOCIATED(split_info%refcount)) THEN\n         abort = .TRUE.\n      ELSEIF (split_info%refcount < 1) THEN\n         abort = .TRUE.\n      END IF\n\n      IF (abort) THEN\n         DBCSR_ABORT(\"can not destroy non-existing split_info\")\n      END IF\n\n      split_info%refcount = split_info%refcount - 1\n\n      IF (split_info%refcount == 0) THEN\n         CALL mp_comm_free(split_info%mp_comm_group)\n         CALL mp_comm_free(split_info%mp_comm)\n         DEALLOCATE (split_info%refcount)\n      END IF\n\n      split_info%pdims = 0\n\n      IF (ALLOCATED(split_info%ngroup_opt)) DEALLOCATE (split_info%ngroup_opt)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_info_hold(split_info)\n      TYPE(dbcsr_tas_split_info), INTENT(IN)             :: split_info\n\n      INTEGER, POINTER                                   :: ref\n\n      IF (split_info%refcount < 1) THEN\n         DBCSR_ABORT(\"can not hold non-existing split_info\")\n      END IF\n      ref => split_info%refcount\n      ref = ref + 1\n   END SUBROUTINE\n\n   SUBROUTINE world_to_group_proc_map(iproc, pdims, split_rowcol, pgrid_split_size, igroup, &\n                                      pdims_group, iproc_group)\n      !! map global process info to group\n\n      INTEGER, INTENT(IN)                                :: iproc\n         !! global process ID\n      INTEGER, DIMENSION(2), INTENT(IN)                  :: pdims\n         !! global process dimensions\n      INTEGER, INTENT(IN)                                :: split_rowcol, pgrid_split_size\n         !! split rows or column\n         !! how many process rows/cols per group\n      INTEGER, INTENT(OUT)                               :: igroup\n         !! group ID\n      INTEGER, DIMENSION(2), INTENT(OUT), OPTIONAL       :: pdims_group\n         !! local process grid dimensions\n      INTEGER, INTENT(OUT), OPTIONAL                     :: iproc_group\n         !! group local process ID\n\n      INTEGER, DIMENSION(2)                              :: pcoord, pcoord_group\n\n      IF (PRESENT(iproc_group)) THEN\n         DBCSR_ASSERT(PRESENT(pdims_group))\n      END IF\n\n      pcoord = [iproc/pdims(2), MOD(iproc, pdims(2))]\n\n      igroup = pcoord(split_rowcol)/pgrid_split_size\n\n      SELECT CASE (split_rowcol)\n      CASE (rowsplit)\n         IF (PRESENT(pdims_group)) pdims_group = [pgrid_split_size, pdims(2)]\n         IF (PRESENT(iproc_group)) pcoord_group = [MOD(pcoord(1), pgrid_split_size), pcoord(2)]\n      CASE (colsplit)\n         IF (PRESENT(pdims_group)) pdims_group = [pdims(1), pgrid_split_size]\n         IF (PRESENT(iproc_group)) pcoord_group = [pcoord(1), MOD(pcoord(2), pgrid_split_size)]\n      END SELECT\n      IF (PRESENT(iproc_group)) iproc_group = pcoord_group(1)*pdims_group(2) + pcoord_group(2)\n   END SUBROUTINE\n\n   SUBROUTINE group_to_world_proc_map(iproc, pdims, split_rowcol, pgrid_split_size, &\n                                      igroup, iproc_group)\n      !! map local process info to global info\n\n      INTEGER, INTENT(OUT)                               :: iproc\n         !! global process id\n      INTEGER, DIMENSION(2), INTENT(IN)                  :: pdims\n         !! global process grid dimensions\n      INTEGER, INTENT(IN)                                :: split_rowcol, pgrid_split_size, &\n                                                            igroup, iproc_group\n         !! split rows or column\n         !! how many process rows/cols per group\n         !! group ID\n         !! local process ID\n\n      INTEGER, DIMENSION(2)                              :: pcoord, pcoord_group, pdims_group\n\n      SELECT CASE (split_rowcol)\n      CASE (rowsplit)\n         pdims_group = [pgrid_split_size, pdims(2)]\n      CASE (colsplit)\n         pdims_group = [pdims(1), pgrid_split_size]\n      END SELECT\n\n      pcoord_group = [iproc_group/pdims_group(2), MOD(iproc_group, pdims_group(2))]\n\n      SELECT CASE (split_rowcol)\n      CASE (rowsplit)\n         pcoord = [igroup*pgrid_split_size + pcoord_group(1), pcoord_group(2)]\n      CASE (colsplit)\n         pcoord = [pcoord_group(1), igroup*pgrid_split_size + pcoord_group(2)]\n      END SELECT\n      iproc = pcoord(1)*pdims(2) + pcoord(2)\n   END SUBROUTINE\n\n   SUBROUTINE block_index_local_to_global(info, dist, row_group, column_group, &\n                                          row, column)\n      !! map group local block index to global matrix index\n\n      TYPE(dbcsr_tas_split_info), INTENT(IN)             :: info\n      TYPE(dbcsr_tas_distribution_type), INTENT(IN)      :: dist\n      INTEGER, INTENT(IN), OPTIONAL                      :: row_group, column_group\n         !! group local row block index\n         !! group local column block index\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL         :: row, column\n         !! global block row\n         !! global block column\n\n      SELECT CASE (info%split_rowcol)\n      CASE (rowsplit)\n         ASSOCIATE (rows => dist%local_rowcols)\n            IF (PRESENT(row)) row = rows(row_group)\n            IF (PRESENT(column)) column = column_group\n         END ASSOCIATE\n      CASE (colsplit)\n         ASSOCIATE (cols => dist%local_rowcols)\n            IF (PRESENT(row)) row = row_group\n            IF (PRESENT(column)) column = cols(column_group)\n         END ASSOCIATE\n      END SELECT\n   END SUBROUTINE\n\n   SUBROUTINE block_index_global_to_local(info, dist, row, column, row_group, column_group)\n      !! map global block index to group local index\n      TYPE(dbcsr_tas_split_info), INTENT(IN)               :: info\n      TYPE(dbcsr_tas_distribution_type), INTENT(IN)        :: dist\n      INTEGER(KIND=int_8), INTENT(IN), OPTIONAL          :: row, column\n      INTEGER, INTENT(OUT), OPTIONAL                     :: row_group, column_group\n\n      SELECT CASE (info%split_rowcol)\n      CASE (rowsplit)\n         IF (PRESENT(row_group)) row_group = i8_bsearch(dist%local_rowcols, row)\n         IF (PRESENT(column_group)) column_group = INT(column)\n      CASE (colsplit)\n         IF (PRESENT(row_group)) row_group = INT(row)\n         IF (PRESENT(column_group)) column_group = i8_bsearch(dist%local_rowcols, column)\n      END SELECT\n\n   END SUBROUTINE\n\n   FUNCTION i8_bsearch(array, el, l_index, u_index) result(res)\n      !! binary search for 8-byte integers\n      INTEGER(KIND=int_8), intent(in) :: array(:)\n      INTEGER(KIND=int_8), intent(in) :: el\n      INTEGER, INTENT(in), OPTIONAL   :: l_index, u_index\n      INTEGER                         :: res, lindex, uindex, aindex\n\n      lindex = 1\n      uindex = size(array)\n      if (present(l_index)) lindex = l_index\n      if (present(u_index)) uindex = u_index\n      DO WHILE (lindex <= uindex)\n         aindex = (lindex + uindex)/2\n         IF (array(aindex) < el) THEN\n            lindex = aindex + 1\n         ELSE\n            uindex = aindex - 1\n         END IF\n      END DO\n      res = lindex\n   END FUNCTION\n\n   SUBROUTINE group_to_mrowcol(info, rowcol_dist, igroup, rowcols)\n      !! maps a process subgroup to matrix rows/columns\n\n      TYPE(dbcsr_tas_split_info), INTENT(IN)                      :: info\n      CLASS(dbcsr_tas_distribution), INTENT(IN)                   :: rowcol_dist\n      INTEGER, INTENT(IN)                                         :: igroup\n         !! group ID\n      INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE, INTENT(OUT) :: rowcols\n         !! rows/ columns on this group\n      INTEGER, DIMENSION(0:info%pgrid_split_size - 1)             :: nrowcols_group\n      INTEGER                                                     :: pcoord, nrowcols, count, pcoord_group\n      INTEGER, DIMENSION(:), ALLOCATABLE                          :: sort_indices\n\n      nrowcols_group(:) = 0\n      DO pcoord = igroup*info%pgrid_split_size, (igroup + 1)*info%pgrid_split_size - 1\n         pcoord_group = pcoord - igroup*info%pgrid_split_size\n         nrowcols_group(pcoord_group) = SIZE(rowcol_dist%rowcols(pcoord))\n      END DO\n      nrowcols = SUM(nrowcols_group)\n\n      ALLOCATE (rowcols(nrowcols))\n\n      count = 0\n      DO pcoord = igroup*info%pgrid_split_size, (igroup + 1)*info%pgrid_split_size - 1\n         pcoord_group = pcoord - igroup*info%pgrid_split_size\n         rowcols(count + 1:count + nrowcols_group(pcoord_group)) = rowcol_dist%rowcols(pcoord)\n         count = count + nrowcols_group(pcoord_group)\n      END DO\n\n      ALLOCATE (sort_indices(nrowcols))\n      CALL sort(rowcols, nrowcols, sort_indices)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_set_strict_split(info)\n      !! freeze current split factor such that it is never changed during multiplication\n      TYPE(dbcsr_tas_split_info), INTENT(INOUT)                      :: info\n      info%strict_split = [.TRUE., .TRUE.]\n   END SUBROUTINE\n\nEND MODULE\n"
  },
  {
    "path": "src/tas/dbcsr_tas_test.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tas_test\n\n   !! testing infrastructure for tall-and-skinny matrices\n   USE dbcsr_types, ONLY: dbcsr_type_real_8\n   USE dbcsr_data_methods, ONLY: dbcsr_scalar\n   USE dbcsr_methods, ONLY: &\n      dbcsr_release, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_row_block_sizes, dbcsr_col_block_sizes, &\n      dbcsr_mp_release, dbcsr_distribution_release\n   USE dbcsr_multiply_api, ONLY: dbcsr_multiply\n   USE dbcsr_tas_base, ONLY: &\n      dbcsr_tas_convert_to_dbcsr, dbcsr_tas_create, dbcsr_tas_distribution_new, &\n      dbcsr_tas_finalize, dbcsr_tas_get_stored_coordinates, dbcsr_tas_nblkcols_total, &\n      dbcsr_tas_nblkrows_total, dbcsr_tas_put_block, dbcsr_tas_info\n   USE dbcsr_tas_types, ONLY: dbcsr_tas_distribution_type, &\n                              dbcsr_tas_type\n   USE dbcsr_tas_global, ONLY: dbcsr_tas_blk_size_arb, &\n                               dbcsr_tas_dist_cyclic, &\n                               dbcsr_tas_default_distvec\n   USE dbcsr_tas_mm, ONLY: dbcsr_tas_multiply\n   USE dbcsr_tas_split, ONLY: dbcsr_tas_mp_comm, &\n                              dbcsr_tas_get_split_info\n   USE dbcsr_tas_util, ONLY: dbcsr_mp_environ, &\n                             invert_transpose_flag\n   USE dbcsr_types, ONLY: &\n      dbcsr_type, dbcsr_distribution_obj, dbcsr_mp_obj, dbcsr_no_transpose, dbcsr_transpose, &\n      dbcsr_type_no_symmetry\n   USE dbcsr_kinds, ONLY: int_8, &\n                          real_8\n   USE dbcsr_mpiwrap, ONLY: mp_environ, &\n                            mp_cart_create, &\n                            mp_comm_free, mp_comm_type\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new\n   USE dbcsr_work_operations, ONLY: dbcsr_create, &\n                                    dbcsr_finalize\n   USE dbcsr_dist_util, ONLY: dbcsr_checksum\n   USE dbcsr_operations, ONLY: dbcsr_maxabs, &\n                               dbcsr_add\n   USE dbcsr_transformations, ONLY: dbcsr_complete_redistribute\n   USE dbcsr_blas_operations, ONLY: &\n      set_larnv_seed\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   PUBLIC :: &\n      dbcsr_tas_benchmark_mm, &\n      dbcsr_tas_checksum, &\n      dbcsr_tas_random_bsizes, &\n      dbcsr_tas_setup_test_matrix, &\n      dbcsr_tas_test_mm, &\n      dbcsr_tas_reset_randmat_seed\n\n   INTEGER, SAVE :: randmat_counter = 0\n   INTEGER, PARAMETER, PRIVATE :: rand_seed_init = 12341313\n\nCONTAINS\n   SUBROUTINE dbcsr_tas_setup_test_matrix(matrix, mp_comm_out, mp_comm, nrows, ncols, rbsizes, cbsizes, &\n      !! Setup tall-and-skinny matrix for testing\n                                          dist_splitsize, name, sparsity, reuse_comm)\n\n      TYPE(dbcsr_tas_type), INTENT(OUT)                    :: matrix\n      TYPE(mp_comm_type), INTENT(OUT)                               :: mp_comm_out\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_comm\n      INTEGER(KIND=int_8), INTENT(IN)                    :: nrows, ncols\n      INTEGER, DIMENSION(nrows), INTENT(IN)              :: rbsizes\n      INTEGER, DIMENSION(ncols), INTENT(IN)              :: cbsizes\n      INTEGER, DIMENSION(2), INTENT(IN)                  :: dist_splitsize\n      CHARACTER(len=*), INTENT(IN)                       :: name\n      REAL(KIND=real_8), INTENT(IN)                      :: sparsity\n      LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_comm\n\n      INTEGER                                            :: col_size, max_col_size, max_nze, &\n                                                            max_row_size, mynode, node_holds_blk, &\n                                                            numnodes, nze, row_size\n      INTEGER(KIND=int_8)                                :: col, col_s, row, row_s, nrow, ncol\n      INTEGER, DIMENSION(2)                              :: pcoord, pdims\n      LOGICAL                                            :: reuse_comm_prv, tr\n      REAL(KIND=real_8), DIMENSION(1)                    :: rn\n      REAL(KIND=real_8), ALLOCATABLE, DIMENSION(:, :)    :: values\n      TYPE(dbcsr_tas_blk_size_arb)                         :: cbsize_obj, rbsize_obj\n      TYPE(dbcsr_tas_dist_cyclic)                          :: col_dist_obj, row_dist_obj\n      TYPE(dbcsr_tas_distribution_type)                    :: dist\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_tas_setup_test_matrix'\n      INTEGER :: handle\n      INTEGER, DIMENSION(4)                              :: iseed, jseed\n\n      ! we don't reserve blocks prior to putting them, so this time is meaningless and should not\n      ! be considered in benchmark!\n      CALL timeset(routineN, handle)\n\n      ! Check that the counter was initialised (or has not overflowed)\n      DBCSR_ASSERT(randmat_counter .NE. 0)\n      ! the counter goes into the seed. Every new call gives a new random matrix\n      randmat_counter = randmat_counter + 1\n\n      IF (PRESENT(reuse_comm)) THEN\n         reuse_comm_prv = reuse_comm\n      ELSE\n         reuse_comm_prv = .FALSE.\n      END IF\n\n      IF (reuse_comm_prv) THEN\n         mp_comm_out = mp_comm\n      ELSE\n         mp_comm_out = dbcsr_tas_mp_comm(mp_comm, nrows, ncols)\n      END IF\n\n      CALL mp_environ(numnodes, mynode, mp_comm_out)\n      CALL mp_environ(numnodes, pdims, pcoord, mp_comm_out)\n\n      row_dist_obj = dbcsr_tas_dist_cyclic(dist_splitsize(1), pdims(1), nrows)\n      col_dist_obj = dbcsr_tas_dist_cyclic(dist_splitsize(2), pdims(2), ncols)\n\n      rbsize_obj = dbcsr_tas_blk_size_arb(rbsizes)\n      cbsize_obj = dbcsr_tas_blk_size_arb(cbsizes)\n\n      CALL dbcsr_tas_distribution_new(dist, mp_comm_out, row_dist_obj, col_dist_obj)\n      CALL dbcsr_tas_create(matrix, name, dist=dist, data_type=dbcsr_type_real_8, &\n                            row_blk_size=rbsize_obj, col_blk_size=cbsize_obj, own_dist=.TRUE.)\n\n      max_row_size = MAXVAL(rbsizes)\n      max_col_size = MAXVAL(cbsizes)\n      max_nze = max_row_size*max_col_size\n\n      nrow = dbcsr_tas_nblkrows_total(matrix)\n      ncol = dbcsr_tas_nblkcols_total(matrix)\n\n      ALLOCATE (values(max_row_size, max_col_size))\n\n      CALL set_larnv_seed(7, 42, 3, 42, randmat_counter, jseed)\n\n      DO row = 1, dbcsr_tas_nblkrows_total(matrix)\n         DO col = 1, dbcsr_tas_nblkcols_total(matrix)\n            CALL dlarnv(1, jseed, 1, rn)\n            IF (rn(1) .LT. sparsity) THEN\n               tr = .FALSE.\n               row_s = row; col_s = col\n               CALL dbcsr_tas_get_stored_coordinates(matrix, row_s, col_s, node_holds_blk)\n\n               IF (node_holds_blk .EQ. mynode) THEN\n                  row_size = rbsize_obj%data(row_s)\n                  col_size = cbsize_obj%data(col_s)\n                  nze = row_size*col_size\n                  CALL set_larnv_seed(INT(row_s), INT(nrow), INT(col_s), INT(ncol), randmat_counter, iseed)\n                  CALL dlarnv(1, iseed, max_nze, values)\n                  CALL dbcsr_tas_put_block(matrix, row_s, col_s, values(1:row_size, 1:col_size))\n               END IF\n            END IF\n         END DO\n      END DO\n\n      CALL dbcsr_tas_finalize(matrix)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_benchmark_mm(transa, transb, transc, matrix_a, matrix_b, matrix_c, compare_dbcsr, filter_eps, io_unit)\n      !! Benchmark routine. Due to random sparsity (as opposed to structured sparsity pattern), this\n      !! may not be representative for actual applications.\n\n      CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb, transc\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix_a, matrix_b, matrix_c\n\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: filter_eps\n      INTEGER, INTENT(IN), OPTIONAL                      :: io_unit\n      LOGICAL, INTENT(IN) :: compare_dbcsr\n\n      INTEGER                                            :: handle1, handle2\n      TYPE(dbcsr_type)                                   :: dbcsr_a, dbcsr_b, dbcsr_c, &\n                                                            dbcsr_a_mm, dbcsr_b_mm, dbcsr_c_mm\n      TYPE(mp_comm_type)                                 :: mp_comm, comm_dbcsr\n      TYPE(dbcsr_distribution_obj)                       :: dist_a, dist_b, dist_c\n      INTEGER, DIMENSION(2)                              :: npdims, myploc\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: cd_a, cd_b, cd_c, &\n                                                            rd_a, rd_b, rd_c\n      TYPE(dbcsr_mp_obj)                                 :: mp_environ_tmp\n\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: row_blk_size, col_blk_size\n\n      IF (PRESENT(io_unit)) THEN\n      IF (io_unit > 0) THEN\n         WRITE (io_unit, \"(A)\") \"starting tall-and-skinny benchmark\"\n      END IF\n      END IF\n      CALL timeset(\"benchmark_tas_mm\", handle1)\n      CALL dbcsr_tas_multiply(transa, transb, transc, dbcsr_scalar(1.0_real_8), matrix_a, matrix_b, &\n                              dbcsr_scalar(0.0_real_8), matrix_c, &\n                              filter_eps=filter_eps, unit_nr=io_unit)\n      CALL timestop(handle1)\n      IF (PRESENT(io_unit)) THEN\n      IF (io_unit > 0) THEN\n         WRITE (io_unit, \"(A)\") \"tall-and-skinny benchmark completed\"\n      END IF\n      END IF\n\n      IF (compare_dbcsr) THEN\n         CALL dbcsr_tas_convert_to_dbcsr(matrix_a, dbcsr_a)\n         CALL dbcsr_tas_convert_to_dbcsr(matrix_b, dbcsr_b)\n         CALL dbcsr_tas_convert_to_dbcsr(matrix_c, dbcsr_c)\n\n         CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_a), mp_comm=mp_comm)\n         npdims(:) = 0\n         CALL mp_cart_create(mp_comm, 2, npdims, myploc, comm_dbcsr)\n\n         ALLOCATE (rd_a(dbcsr_nblkrows_total(dbcsr_a))); ALLOCATE (cd_a(dbcsr_nblkcols_total(dbcsr_a)))\n         ALLOCATE (rd_b(dbcsr_nblkrows_total(dbcsr_b))); ALLOCATE (cd_b(dbcsr_nblkcols_total(dbcsr_b)))\n         ALLOCATE (rd_c(dbcsr_nblkrows_total(dbcsr_c))); ALLOCATE (cd_c(dbcsr_nblkcols_total(dbcsr_c)))\n         CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_a)), npdims(1), dbcsr_row_block_sizes(dbcsr_a), rd_a)\n         CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_a)), npdims(2), dbcsr_col_block_sizes(dbcsr_a), cd_a)\n         CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_b)), npdims(1), dbcsr_row_block_sizes(dbcsr_b), rd_b)\n         CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_b)), npdims(2), dbcsr_col_block_sizes(dbcsr_b), cd_b)\n         CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_c)), npdims(1), dbcsr_row_block_sizes(dbcsr_c), rd_c)\n         CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_c)), npdims(2), dbcsr_col_block_sizes(dbcsr_c), cd_c)\n\n         mp_environ_tmp = dbcsr_mp_environ(comm_dbcsr)\n         CALL dbcsr_distribution_new(dist_a, mp_environ_tmp, rd_a, cd_a, reuse_arrays=.TRUE.)\n         CALL dbcsr_distribution_new(dist_b, mp_environ_tmp, rd_b, cd_b, reuse_arrays=.TRUE.)\n         CALL dbcsr_distribution_new(dist_c, mp_environ_tmp, rd_c, cd_c, reuse_arrays=.TRUE.)\n         CALL dbcsr_mp_release(mp_environ_tmp)\n\n         row_blk_size => dbcsr_row_block_sizes(dbcsr_a)\n         col_blk_size => dbcsr_col_block_sizes(dbcsr_a)\n         CALL dbcsr_create(matrix=dbcsr_a_mm, name=dbcsr_a%name, dist=dist_a, matrix_type=dbcsr_type_no_symmetry, &\n                           row_blk_size=row_blk_size, col_blk_size=col_blk_size, &\n                           data_type=dbcsr_type_real_8)\n         row_blk_size => dbcsr_row_block_sizes(dbcsr_b)\n         col_blk_size => dbcsr_col_block_sizes(dbcsr_b)\n         CALL dbcsr_create(matrix=dbcsr_b_mm, name=dbcsr_b%name, dist=dist_b, matrix_type=dbcsr_type_no_symmetry, &\n                           row_blk_size=row_blk_size, col_blk_size=col_blk_size, &\n                           data_type=dbcsr_type_real_8)\n         row_blk_size => dbcsr_row_block_sizes(dbcsr_c)\n         col_blk_size => dbcsr_col_block_sizes(dbcsr_c)\n         CALL dbcsr_create(matrix=dbcsr_c_mm, name=dbcsr_c%name, dist=dist_c, matrix_type=dbcsr_type_no_symmetry, &\n                           row_blk_size=row_blk_size, col_blk_size=col_blk_size, &\n                           data_type=dbcsr_type_real_8)\n\n         CALL dbcsr_finalize(dbcsr_a_mm)\n         CALL dbcsr_finalize(dbcsr_b_mm)\n         CALL dbcsr_finalize(dbcsr_c_mm)\n\n         CALL dbcsr_complete_redistribute(dbcsr_a, dbcsr_a_mm)\n         CALL dbcsr_complete_redistribute(dbcsr_b, dbcsr_b_mm)\n         IF (PRESENT(io_unit)) THEN\n         IF (io_unit > 0) THEN\n            WRITE (io_unit, \"(A)\") \"starting dbcsr benchmark\"\n         END IF\n         END IF\n         CALL timeset(\"benchmark_dbcsr_mm\", handle2)\n         CALL dbcsr_multiply(transa, transb, dbcsr_scalar(1.0_real_8), dbcsr_a_mm, dbcsr_b_mm, &\n                             dbcsr_scalar(0.0_real_8), dbcsr_c_mm, filter_eps=filter_eps)\n         CALL timestop(handle2)\n         IF (PRESENT(io_unit)) THEN\n         IF (io_unit > 0) THEN\n            WRITE (io_unit, \"(A)\") \"dbcsr benchmark completed\"\n         END IF\n         END IF\n\n         CALL dbcsr_release(dbcsr_a)\n         CALL dbcsr_release(dbcsr_b)\n         CALL dbcsr_release(dbcsr_c)\n         CALL dbcsr_release(dbcsr_a_mm)\n         CALL dbcsr_release(dbcsr_b_mm)\n         CALL dbcsr_release(dbcsr_c_mm)\n         CALL dbcsr_distribution_release(dist_a)\n         CALL dbcsr_distribution_release(dist_b)\n         CALL dbcsr_distribution_release(dist_c)\n\n         CALL mp_comm_free(comm_dbcsr)\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_test_mm(transa, transb, transc, matrix_a, matrix_b, matrix_c, filter_eps, unit_nr, log_verbose)\n      !! Test tall-and-skinny matrix multiplication for accuracy\n      CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb, transc\n      TYPE(dbcsr_tas_type), INTENT(INOUT)                  :: matrix_a, matrix_b, matrix_c\n      INTEGER, INTENT(IN)                                :: unit_nr\n      LOGICAL, INTENT(IN), OPTIONAL                      :: log_verbose\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL            :: filter_eps\n\n      CHARACTER(LEN=1)                                   :: transa_prv, transb_prv\n      INTEGER                                            :: io_unit, mynode, &\n                                                            numnodes\n      INTEGER, DIMENSION(2)                              :: myploc, npdims\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: cd_a, cd_b, cd_c, &\n                                                            rd_a, rd_b, rd_c\n      REAL(KIND=real_8)                                  :: norm, rc_cs, sq_cs\n      TYPE(dbcsr_distribution_obj)                       :: dist_a, dist_b, dist_c\n      TYPE(dbcsr_mp_obj)                                 :: mp_environ_tmp\n      TYPE(dbcsr_type)                                   :: dbcsr_a, dbcsr_a_mm, dbcsr_b, &\n                                                            dbcsr_b_mm, dbcsr_c, dbcsr_c_mm, &\n                                                            dbcsr_c_mm_check\n      TYPE(mp_comm_type)                                 :: comm_dbcsr, mp_comm\n      REAL(KIND=real_8), PARAMETER :: test_tol = 1.0E-10_real_8\n\n      CALL dbcsr_tas_get_split_info(dbcsr_tas_info(matrix_a), mp_comm=mp_comm)\n      CALL mp_environ(numnodes, mynode, mp_comm)\n      io_unit = -1\n      IF (mynode .EQ. 0) io_unit = unit_nr\n\n      CALL dbcsr_tas_multiply(transa, transb, transc, dbcsr_scalar(1.0_real_8), matrix_a, matrix_b, &\n                              dbcsr_scalar(0.0_real_8), matrix_c, &\n                              filter_eps=filter_eps, unit_nr=io_unit, log_verbose=log_verbose, optimize_dist=.TRUE.)\n\n      CALL dbcsr_tas_convert_to_dbcsr(matrix_a, dbcsr_a)\n      CALL dbcsr_tas_convert_to_dbcsr(matrix_b, dbcsr_b)\n      CALL dbcsr_tas_convert_to_dbcsr(matrix_c, dbcsr_c)\n\n      npdims(:) = 0\n      CALL mp_cart_create(mp_comm, 2, npdims, myploc, comm_dbcsr)\n\n      ALLOCATE (rd_a(dbcsr_nblkrows_total(dbcsr_a))); ALLOCATE (cd_a(dbcsr_nblkcols_total(dbcsr_a)))\n      ALLOCATE (rd_b(dbcsr_nblkrows_total(dbcsr_b))); ALLOCATE (cd_b(dbcsr_nblkcols_total(dbcsr_b)))\n      ALLOCATE (rd_c(dbcsr_nblkrows_total(dbcsr_c))); ALLOCATE (cd_c(dbcsr_nblkcols_total(dbcsr_c)))\n      CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_a)), npdims(1), dbcsr_row_block_sizes(dbcsr_a), rd_a)\n      CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_a)), npdims(2), dbcsr_col_block_sizes(dbcsr_a), cd_a)\n      CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_b)), npdims(1), dbcsr_row_block_sizes(dbcsr_b), rd_b)\n      CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_b)), npdims(2), dbcsr_col_block_sizes(dbcsr_b), cd_b)\n      CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkrows_total(dbcsr_c)), npdims(1), dbcsr_row_block_sizes(dbcsr_c), rd_c)\n      CALL dbcsr_tas_default_distvec(INT(dbcsr_nblkcols_total(dbcsr_c)), npdims(2), dbcsr_col_block_sizes(dbcsr_c), cd_c)\n\n      mp_environ_tmp = dbcsr_mp_environ(comm_dbcsr)\n      CALL dbcsr_distribution_new(dist_a, mp_environ_tmp, rd_a, cd_a, reuse_arrays=.TRUE.)\n      CALL dbcsr_distribution_new(dist_b, mp_environ_tmp, rd_b, cd_b, reuse_arrays=.TRUE.)\n      CALL dbcsr_distribution_new(dist_c, mp_environ_tmp, rd_c, cd_c, reuse_arrays=.TRUE.)\n      CALL dbcsr_mp_release(mp_environ_tmp)\n\n      CALL dbcsr_create(matrix=dbcsr_a_mm, name=\"matrix a\", dist=dist_a, matrix_type=dbcsr_type_no_symmetry, &\n                        row_blk_size_obj=dbcsr_a%row_blk_size, col_blk_size_obj=dbcsr_a%col_blk_size, &\n                        data_type=dbcsr_type_real_8)\n\n      CALL dbcsr_create(matrix=dbcsr_b_mm, name=\"matrix b\", dist=dist_b, matrix_type=dbcsr_type_no_symmetry, &\n                        row_blk_size_obj=dbcsr_b%row_blk_size, col_blk_size_obj=dbcsr_b%col_blk_size, &\n                        data_type=dbcsr_type_real_8)\n\n      CALL dbcsr_create(matrix=dbcsr_c_mm, name=\"matrix c\", dist=dist_c, matrix_type=dbcsr_type_no_symmetry, &\n                        row_blk_size_obj=dbcsr_c%row_blk_size, col_blk_size_obj=dbcsr_c%col_blk_size, &\n                        data_type=dbcsr_type_real_8)\n\n      CALL dbcsr_create(matrix=dbcsr_c_mm_check, name=\"matrix c check\", dist=dist_c, matrix_type=dbcsr_type_no_symmetry, &\n                        row_blk_size_obj=dbcsr_c%row_blk_size, col_blk_size_obj=dbcsr_c%col_blk_size, &\n                        data_type=dbcsr_type_real_8)\n\n      CALL dbcsr_finalize(dbcsr_a_mm)\n      CALL dbcsr_finalize(dbcsr_b_mm)\n      CALL dbcsr_finalize(dbcsr_c_mm)\n      CALL dbcsr_finalize(dbcsr_c_mm_check)\n\n      CALL dbcsr_complete_redistribute(dbcsr_a, dbcsr_a_mm)\n      CALL dbcsr_complete_redistribute(dbcsr_b, dbcsr_b_mm)\n      CALL dbcsr_complete_redistribute(dbcsr_c, dbcsr_c_mm_check)\n\n      transa_prv = transa; transb_prv = transb\n\n      IF (transc == dbcsr_no_transpose) THEN\n         CALL dbcsr_multiply(transa_prv, transb_prv, dbcsr_scalar(1.0_real_8), &\n                             dbcsr_a_mm, dbcsr_b_mm, dbcsr_scalar(0.0_real_8), dbcsr_c_mm, filter_eps=filter_eps)\n      ELSEIF (transc == dbcsr_transpose) THEN\n         CALL invert_transpose_flag(transa_prv)\n         CALL invert_transpose_flag(transb_prv)\n         CALL dbcsr_multiply(transb_prv, transa_prv, dbcsr_scalar(1.0_real_8), &\n                             dbcsr_b_mm, dbcsr_a_mm, dbcsr_scalar(0.0_real_8), dbcsr_c_mm, filter_eps=filter_eps)\n      END IF\n\n      sq_cs = dbcsr_checksum(dbcsr_c_mm)\n      rc_cs = dbcsr_checksum(dbcsr_c_mm_check)\n      CALL dbcsr_add(dbcsr_c_mm_check, dbcsr_c_mm, -1.0_real_8, 1.0_real_8)\n      norm = dbcsr_maxabs(dbcsr_c_mm_check)\n\n      IF (io_unit > 0) THEN\n      IF (ABS(norm) .GT. test_tol) THEN\n         WRITE (io_unit, '(A, A, A, A, A, 1X, A)') TRIM(matrix_a%matrix%name), transa, ' X ', TRIM(matrix_b%matrix%name), &\n            transb, 'failed!'\n         WRITE (io_unit, \"(A,1X,E9.2,1X,E9.2)\") \"checksums\", sq_cs, rc_cs\n         WRITE (io_unit, \"(A,1X,E9.2)\") \"difference norm\", norm\n         DBCSR_ABORT(\"\")\n      ELSE\n         WRITE (io_unit, '(A, A, A, A, A, 1X, A)') TRIM(matrix_a%matrix%name), transa, ' X ', TRIM(matrix_b%matrix%name), &\n            transb, 'passed!'\n         WRITE (io_unit, \"(A,1X,E9.2,1X,E9.2)\") \"checksums\", sq_cs, rc_cs\n         WRITE (io_unit, \"(A,1X,E9.2)\") \"difference norm\", norm\n      END IF\n      END IF\n\n      CALL dbcsr_release(dbcsr_a)\n      CALL dbcsr_release(dbcsr_a_mm)\n      CALL dbcsr_release(dbcsr_b)\n      CALL dbcsr_release(dbcsr_b_mm)\n      CALL dbcsr_release(dbcsr_c)\n      CALL dbcsr_release(dbcsr_c_mm)\n      CALL dbcsr_release(dbcsr_c_mm_check)\n\n      CALL dbcsr_distribution_release(dist_a)\n      CALL dbcsr_distribution_release(dist_b)\n      CALL dbcsr_distribution_release(dist_c)\n\n      CALL mp_comm_free(comm_dbcsr)\n\n   END SUBROUTINE\n\n   FUNCTION dbcsr_tas_checksum(matrix, local, pos)\n      !! Calculate checksum of tall-and-skinny matrix consistent with dbcsr_checksum\n      TYPE(dbcsr_tas_type), INTENT(IN) :: matrix\n      LOGICAL, INTENT(IN), OPTIONAL  :: local, pos\n      TYPE(dbcsr_type)               :: dbcsr_m\n      REAL(KIND=real_8)              :: dbcsr_tas_checksum\n\n      CALL dbcsr_tas_convert_to_dbcsr(matrix, dbcsr_m)\n      dbcsr_tas_checksum = dbcsr_checksum(dbcsr_m, local, pos)\n      CALL dbcsr_release(dbcsr_m)\n   END FUNCTION\n\n   SUBROUTINE dbcsr_tas_random_bsizes(sizes, repeat, block_sizes)\n      !! Create random block sizes\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: sizes\n      INTEGER, INTENT(IN)                                :: repeat\n      INTEGER, DIMENSION(:), INTENT(OUT)                 :: block_sizes\n\n      INTEGER                                            :: d, size_i\n\n      DO d = 1, SIZE(block_sizes)\n         size_i = MOD((d - 1)/repeat, SIZE(sizes)) + 1\n         block_sizes(d) = sizes(size_i)\n      END DO\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_tas_reset_randmat_seed()\n      !! Reset the seed used for generating random matrices to default value\n      randmat_counter = rand_seed_init\n   END SUBROUTINE\n\nEND MODULE\n"
  },
  {
    "path": "src/tas/dbcsr_tas_types.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tas_types\n   !! DBCSR tall-and-skinny base types.\n   !! Mostly wrappers around existing DBCSR routines.\n\n   USE dbcsr_tas_global, ONLY: &\n      dbcsr_tas_distribution, dbcsr_tas_rowcol_data\n   USE dbcsr_types, ONLY: &\n      dbcsr_distribution_obj, dbcsr_iterator, dbcsr_type\n   USE dbcsr_kinds, ONLY: int_8\n   USE dbcsr_data_types, ONLY: dbcsr_scalar_type\n   USE dbcsr_mpiwrap, ONLY: mp_comm_type\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_types'\n\n   PUBLIC :: &\n      dbcsr_tas_distribution_type, &\n      dbcsr_tas_iterator, &\n      dbcsr_tas_split_info, &\n      dbcsr_tas_type, &\n      dbcsr_tas_mm_storage\n\n   ! info on MPI Cartesian grid that is split on MPI subgroups.\n   ! info on distribution of matrix rows / columns to different subgroups.\n   TYPE dbcsr_tas_split_info\n      TYPE(mp_comm_type) :: mp_comm = mp_comm_type() ! global communicator\n      INTEGER, DIMENSION(2) :: pdims = -1 ! dimensions of process grid\n      INTEGER :: igroup = -1 ! which subgroup do I belong to\n      INTEGER :: ngroup = -1 ! how many groups in total\n      INTEGER :: split_rowcol = -1 ! split row or column?\n      INTEGER :: pgrid_split_size = -1 ! how many process rows/cols in subgroups\n      INTEGER :: group_size = -1 ! group size (how many cores) of subgroups\n      TYPE(mp_comm_type) :: mp_comm_group = mp_comm_type() ! sub communicator\n      INTEGER, ALLOCATABLE :: ngroup_opt ! optimal number of groups (split factor)\n      LOGICAL, DIMENSION(2) :: strict_split = [.FALSE., .FALSE.]\n      ! if .true., split factor should not be modified (2 parameters for current and general settings)\n      INTEGER, POINTER :: refcount => NULL() ! lightweight reference counting for communicators\n   END TYPE\n\n   TYPE dbcsr_tas_distribution_type\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info(ngroup_opt=NULL())\n#else\n      TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info()\n#endif\n      TYPE(dbcsr_distribution_obj) :: dbcsr_dist = dbcsr_distribution_obj()\n      CLASS(dbcsr_tas_distribution), ALLOCATABLE :: row_dist\n      CLASS(dbcsr_tas_distribution), ALLOCATABLE :: col_dist\n      INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:) :: local_rowcols\n   END TYPE\n\n   ! storage for batched matrix multiplication\n   TYPE dbcsr_tas_mm_storage\n      TYPE(dbcsr_tas_type), POINTER :: store_batched => NULL() ! intermediate replicated matrix\n      TYPE(dbcsr_tas_type), POINTER :: store_batched_repl => NULL() ! intermediate replicated matrix\n      LOGICAL :: batched_out = .FALSE. ! whether replicated matrix has been changed in mm and should be copied to actual matrix\n      LOGICAL :: batched_trans = .FALSE.\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(dbcsr_scalar_type) :: batched_beta\n#else\n      TYPE(dbcsr_scalar_type) :: batched_beta = dbcsr_scalar_type()\n#endif\n   END TYPE\n\n   ! type for tall-and-skinny matrices\n   TYPE dbcsr_tas_type\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(dbcsr_tas_distribution_type)  :: dist\n#else\n      TYPE(dbcsr_tas_distribution_type)  :: dist = dbcsr_tas_distribution_type()\n#endif\n      CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: row_blk_size\n      CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: col_blk_size\n\n      TYPE(dbcsr_type) :: matrix = dbcsr_type() ! matrix on subgroup\n      INTEGER(KIND=int_8) :: nblkrows = -1_int_8 ! total number of rows\n      INTEGER(KIND=int_8) :: nblkcols = -1_int_8 ! total number of columns\n      INTEGER(KIND=int_8) :: nblkrowscols_split = -1_int_8 ! nblkrows or nblkcols depending on which is splitted\n      INTEGER(KIND=int_8) :: nfullrows = -1_int_8 ! total number of full (not blocked) rows\n      INTEGER(KIND=int_8) :: nfullcols = -1_int_8 ! total number of full (not blocked) columns\n      LOGICAL :: valid = .FALSE. ! has been created?\n\n      ! storage and flags for batched matrix multiplication\n      INTEGER :: do_batched = 0 ! state flag for batched multiplication\n      TYPE(dbcsr_tas_mm_storage), ALLOCATABLE :: mm_storage ! storage for batched processing of matrix matrix multiplication.\n      LOGICAL :: has_opt_pgrid = .FALSE. ! whether pgrid was automatically optimized\n   END TYPE\n\n   TYPE dbcsr_tas_iterator\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info(ngroup_opt=NULL())\n      TYPE(dbcsr_tas_distribution_type) :: dist\n#else\n      TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info()\n      TYPE(dbcsr_tas_distribution_type) :: dist = dbcsr_tas_distribution_type()\n#endif\n      TYPE(dbcsr_iterator) :: iter = dbcsr_iterator()\n   END TYPE dbcsr_tas_iterator\n\nEND MODULE\n"
  },
  {
    "path": "src/tas/dbcsr_tas_util.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tas_util\n\n   !! often used utilities for tall-and-skinny matrices\n\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_new\n   USE dbcsr_types, ONLY: dbcsr_mp_obj, &\n                          dbcsr_transpose, &\n                          dbcsr_no_transpose\n   USE dbcsr_kinds, ONLY: int_8\n   USE dbcsr_mpiwrap, ONLY: mp_cart_rank, &\n                            mp_environ, mp_comm_type\n   USE dbcsr_index_operations, ONLY: dbcsr_sort_indices\n\n#include \"base/dbcsr_base_uses.f90\"\n#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n   USE libxsmm, ONLY: libxsmm_diff\n#  define PURE_ARRAY_EQ\n#else\n#  define PURE_ARRAY_EQ PURE\n#endif\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tas_util'\n\n   PUBLIC :: &\n      array_eq, &\n      dbcsr_mp_environ, &\n      index_unique, &\n      invert_transpose_flag, &\n      swap\n\n   INTERFACE swap\n      MODULE PROCEDURE swap_i8\n      MODULE PROCEDURE swap_i\n   END INTERFACE\n\n   INTERFACE array_eq\n      MODULE PROCEDURE array_eq_i8\n      MODULE PROCEDURE array_eq_i\n   END INTERFACE\n\nCONTAINS\n   FUNCTION dbcsr_mp_environ(mp_comm)\n      !! Create a dbcsr mp environment from communicator\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_comm\n      TYPE(dbcsr_mp_obj)                                 :: dbcsr_mp_environ\n\n      INTEGER                                            :: mynode, numnodes, pcol, prow\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: pgrid\n      INTEGER, DIMENSION(2)                              :: coord, mycoord, npdims\n\n      CALL mp_environ(numnodes, npdims, mycoord, mp_comm)\n      CALL mp_environ(numnodes, mynode, mp_comm)\n      ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1))\n      DO prow = 0, npdims(1) - 1\n         DO pcol = 0, npdims(2) - 1\n            coord = (/prow, pcol/)\n            CALL mp_cart_rank(mp_comm, coord, pgrid(prow, pcol))\n         END DO\n      END DO\n\n      DBCSR_ASSERT(mynode == pgrid(mycoord(1), mycoord(2)))\n\n      CALL dbcsr_mp_new(dbcsr_mp_environ, mp_comm, pgrid, mynode, numnodes, mycoord(1), mycoord(2))\n   END FUNCTION\n\n   SUBROUTINE swap_i8(arr)\n      INTEGER(KIND=int_8), DIMENSION(2), INTENT(INOUT)   :: arr\n\n      INTEGER(KIND=int_8)                                :: tmp\n\n      tmp = arr(1)\n      arr(1) = arr(2)\n      arr(2) = tmp\n   END SUBROUTINE\n\n   SUBROUTINE swap_i(arr)\n      INTEGER, DIMENSION(2), INTENT(INOUT)               :: arr\n\n      INTEGER                                            :: tmp\n\n      tmp = arr(1)\n      arr(1) = arr(2)\n      arr(2) = tmp\n   END SUBROUTINE\n\n   SUBROUTINE index_unique(index_in, index_out)\n      !! Get all unique elements in index_in\n      INTEGER, DIMENSION(:, :), INTENT(IN)   :: index_in\n      INTEGER, ALLOCATABLE, &\n         DIMENSION(:, :), INTENT(OUT)                    :: index_out\n\n      INTEGER                                            :: blk, count, orig_size\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)  :: index_tmp\n      INTEGER, DIMENSION(2)                  :: prev_index\n      INTEGER, DIMENSION(1:SIZE(index_in, 1) &\n                         , 1:SIZE(index_in, 2))                          :: index_sorted\n\n      orig_size = SIZE(index_in, 1)\n      ALLOCATE (index_tmp(orig_size, 2))\n      index_sorted(:, :) = index_in(:, :)\n      CALL dbcsr_sort_indices(orig_size, index_sorted(:, 1), index_sorted(:, 2))\n      count = 0\n      prev_index(:) = [0, 0]\n      DO blk = 1, orig_size\n         IF (ANY(index_sorted(blk, :) .NE. prev_index(:))) THEN\n            count = count + 1\n            index_tmp(count, :) = index_sorted(blk, :)\n            prev_index(:) = index_sorted(blk, :)\n         END IF\n      END DO\n\n      ALLOCATE (index_out(count, 2))\n      index_out(:, :) = index_tmp(1:count, :)\n   END SUBROUTINE\n\n   SUBROUTINE invert_transpose_flag(trans_flag)\n      CHARACTER(LEN=1), INTENT(INOUT)                    :: trans_flag\n\n      IF (trans_flag == dbcsr_transpose) THEN\n         trans_flag = dbcsr_no_transpose\n      ELSEIF (trans_flag == dbcsr_no_transpose) THEN\n         trans_flag = dbcsr_transpose\n      END IF\n   END SUBROUTINE\n\n   PURE_ARRAY_EQ FUNCTION array_eq_i(arr1, arr2)\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: arr1, arr2\n      LOGICAL                                            :: array_eq_i\n#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n      array_eq_i = .NOT. libxsmm_diff(arr1, arr2)\n#else\n      array_eq_i = .FALSE.\n      IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i = ALL(arr1 == arr2)\n#endif\n   END FUNCTION\n\n   PURE_ARRAY_EQ FUNCTION array_eq_i8(arr1, arr2)\n      INTEGER(KIND=int_8), DIMENSION(:), INTENT(IN)      :: arr1, arr2\n      LOGICAL                                            :: array_eq_i8\n#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n      array_eq_i8 = .NOT. libxsmm_diff(arr1, arr2)\n#else\n      array_eq_i8 = .FALSE.\n      IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i8 = ALL(arr1 == arr2)\n#endif\n   END FUNCTION\n\nEND MODULE\n"
  },
  {
    "path": "src/tensors/PACKAGE",
    "content": "{\n\"description\": \"block-sparse tensor framework on top of DBCSR\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../base\",\"../mpi\", \"../ops\", \"../\", \"../utils\", \"../tas\", \"../data\", \"../dist\"]\n}\n"
  },
  {
    "path": "src/tensors/dbcsr_allocate_wrap.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_allocate_wrap\n   !! Wrapper for allocating, copying and reshaping arrays.\n   !! @todo: with fortran 2008 support, this should be replaced by plain ALLOCATE\n   !! @note\n   !! in particular ALLOCATE(..., SOURCE=...) does not work in gcc 5.4.0, see also\n   !! https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44672\n   !! @endnote\n\n   #:include \"dbcsr_tensor.fypp\"\n   #:set maxdim = fortran_max_ndim\n\n   USE dbcsr_kinds, ONLY: ${uselist(dtype_float_prec)}$\n\n#include \"base/dbcsr_base_uses.f90\"\n   IMPLICIT NONE\n   PRIVATE\n\n   PUBLIC :: allocate_any\n\n   INTERFACE allocate_any\n      #:for dparam, dtype, dsuffix in dtype_all_list\n         #:for dim in range(1, maxdim+1)\n            MODULE PROCEDURE allocate_${dim}$d_${dsuffix}$\n         #:endfor\n      #:endfor\n   END INTERFACE\n\nCONTAINS\n\n   #:for dparam, dtype, dsuffix in dtype_all_list\n      #:for dim in range(1, maxdim+1)\n\n         SUBROUTINE allocate_${dim}$d_${dsuffix}$ (array, shape_spec, source, order)\n      !! Allocate array according to shape_spec. Possibly assign array from source.\n      !! @note\n      !! this does not fully replace Fortran RESHAPE intrinsic since source and target array must\n      !! have same rank.\n      !! @endnote\n\n            ${dtype}$, DIMENSION(${shape_colon(dim)}$), ALLOCATABLE, INTENT(OUT) :: array\n         !! target array.\n            INTEGER, DIMENSION(${dim}$), INTENT(IN), OPTIONAL                    :: shape_spec\n         !! shape of array to be allocated. If shape is not specified, it is derived from source.\n            ${dtype}$, DIMENSION(${shape_colon(dim)}$), INTENT(IN), OPTIONAL     :: source\n         !! source array to be copied to target array, must have same rank as target array.\n            INTEGER, DIMENSION(${dim}$), INTENT(IN), OPTIONAL                    :: order\n         !! in which order to copy source to array (same convention as RESHAPE intrinsic).\n            INTEGER, DIMENSION(${dim}$)                                          :: shape_prv\n\n            IF (PRESENT(shape_spec)) THEN\n               IF (PRESENT(order)) THEN\n                  shape_prv(order) = shape_spec\n               ELSE\n                  shape_prv = shape_spec\n               END IF\n            ELSEIF (PRESENT(source)) THEN\n               IF (PRESENT(order)) THEN\n                  shape_prv(order) = SHAPE(source)\n               ELSE\n                  shape_prv = SHAPE(source)\n               END IF\n            ELSE\n               DBCSR_ABORT(\"either source or shape_spec must be present\")\n            END IF\n\n            IF (PRESENT(source)) THEN\n               IF (PRESENT(order)) THEN\n                  ALLOCATE (array(${arrlist(\"shape_prv\", nmax=dim)}$))\n                  array(${shape_colon(dim)}$) = RESHAPE(source, shape_prv, order=order)\n               ELSE\n                  ALLOCATE (array(${arrlist(\"shape_prv\", nmax=dim)}$), source=source)\n               END IF\n            ELSE\n               ALLOCATE (array(${arrlist(\"shape_prv\", nmax=dim)}$))\n            END IF\n\n         END SUBROUTINE\n      #:endfor\n   #:endfor\nEND MODULE\n"
  },
  {
    "path": "src/tensors/dbcsr_array_list_methods.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_array_list_methods\n   !! Representation of arbitrary number of 1d integer arrays with arbitrary sizes.\n   !! This is needed for generic handling of dimension-specific tensor quantities (such as block index).\n\n   #:include \"dbcsr_tensor.fypp\"\n   #:set maxdim = maxrank\n   #:set ndims = range(2,maxdim+1)\n\n   USE dbcsr_tensor_index, ONLY: dbcsr_t_inverse_order\n   USE dbcsr_allocate_wrap, ONLY: allocate_any\n\n#include \"base/dbcsr_base_uses.f90\"\n#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n   USE libxsmm, ONLY: libxsmm_diff\n#  define PURE_ARRAY_EQ\n#else\n#  define PURE_ARRAY_EQ PURE\n#endif\n\n   IMPLICIT NONE\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_array_list_methods'\n\n   PUBLIC  :: &\n      array_eq_i, &\n      array_list, &\n      array_offsets, &\n      array_sublist, &\n      create_array_list, &\n      destroy_array_list, &\n      get_array_elements, &\n      get_arrays, &\n      get_ith_array, &\n      number_of_arrays, &\n      reorder_arrays, &\n      sizes_of_arrays, &\n      sum_of_arrays, &\n      check_equal\n\n   TYPE array_list\n      INTEGER, DIMENSION(:), ALLOCATABLE :: col_data\n      INTEGER, DIMENSION(:), ALLOCATABLE :: ptr\n   END TYPE\n\n   INTERFACE get_ith_array\n      MODULE PROCEDURE allocate_and_get_ith_array\n      MODULE PROCEDURE get_ith_array\n   END INTERFACE\n\nCONTAINS\n\n   PURE FUNCTION number_of_arrays(list)\n      !! number of arrays stored in list\n      TYPE(array_list), INTENT(IN) :: list\n      INTEGER                      :: number_of_arrays\n\n      number_of_arrays = SIZE(list%ptr) - 1\n\n   END FUNCTION number_of_arrays\n\n   PURE FUNCTION get_array_elements(list, indices)\n      !! Get an element for each array.\n\n      TYPE(array_list), INTENT(IN)                           :: list\n      INTEGER, DIMENSION(number_of_arrays(list)), INTENT(IN) :: indices\n         !! element index for each array\n      INTEGER, DIMENSION(number_of_arrays(list))             :: get_array_elements\n\n      INTEGER                                                :: i, ind\n\n      DO i = 1, SIZE(indices)\n         ind = indices(i) + list%ptr(i) - 1\n         get_array_elements(i) = list%col_data(ind)\n      END DO\n\n   END FUNCTION get_array_elements\n\n   SUBROUTINE create_array_list(list, ndata, ${varlist(\"data\")}$)\n      !! collects any number of arrays of different sizes into a single array (list%col_data),\n      !! storing the indices that start a new array (list%ptr).\n      TYPE(array_list), INTENT(OUT)               :: list\n         !! list of arrays\n      INTEGER, INTENT(IN)                         :: ndata\n         !! number of arrays\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist(\"data\")}$\n         !! arrays 1 and 2\n      INTEGER                                     :: ptr, size_all\n\n      size_all = 0\n\n      #:for dim in range(1, maxdim+1)\n         IF (ndata .GE. ${dim}$) THEN\n            DBCSR_ASSERT(PRESENT(data_${dim}$))\n            size_all = size_all + SIZE(data_${dim}$)\n         END IF\n      #:endfor\n\n      ALLOCATE (list%ptr(ndata + 1))\n      ALLOCATE (list%col_data(size_all))\n\n      ptr = 1\n      list%ptr(1) = ptr\n\n      #:for dim in range(1, maxdim+1)\n         IF (ndata .GE. ${dim}$) THEN\n            list%col_data(ptr:ptr + SIZE(data_${dim}$) - 1) = data_${dim}$ (:)\n            ptr = ptr + SIZE(data_${dim}$)\n            list%ptr(${dim+1}$) = ptr\n         END IF\n      #:endfor\n\n   END SUBROUTINE\n\n   FUNCTION array_sublist(list, i_selected)\n      !! extract a subset of arrays\n\n      TYPE(array_list), INTENT(IN)                           :: list\n         !! list of arrays\n      INTEGER, DIMENSION(:), INTENT(IN)                      :: i_selected\n         !! array numbers to retrieve\n      TYPE(array_list)                                       :: array_sublist\n      INTEGER :: ndata\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: ${varlist(\"data\")}$\n\n      ndata = SIZE(i_selected)\n\n      #:for dim in range(1, maxdim+1)\n         IF (ndata == ${dim}$) THEN\n            CALL get_arrays(list, ${varlist(\"data\", nmax=dim)}$, i_selected=i_selected)\n            CALL create_array_list(array_sublist, ndata, ${varlist(\"data\", nmax=dim)}$)\n         END IF\n      #:endfor\n   END FUNCTION\n\n   SUBROUTINE destroy_array_list(list)\n      !! destroy array list.\n      TYPE(array_list), INTENT(INOUT) :: list\n\n      DEALLOCATE (list%ptr, list%col_data)\n   END SUBROUTINE\n\n   SUBROUTINE get_arrays(list, ${varlist(\"data\")}$, i_selected)\n      !! Get all arrays contained in list\n      TYPE(array_list), INTENT(IN)                       :: list\n      INTEGER, ALLOCATABLE, DIMENSION(:), INTENT(OUT), &\n         OPTIONAL                                        :: ${varlist(\"data\")}$\n         !! arrays 1 and 2\n      INTEGER, DIMENSION(:), INTENT(IN), &\n         OPTIONAL                                        :: i_selected\n         !! array numbers to retrieve (if not present, all arrays are returned)\n      INTEGER                                            :: i, ndata\n      INTEGER, DIMENSION(number_of_arrays(list))         :: o\n\n      o(:) = 0\n      IF (PRESENT(i_selected)) THEN\n         ndata = SIZE(i_selected)\n         o(1:ndata) = i_selected(:)\n      ELSE\n         ndata = number_of_arrays(list)\n         o(1:ndata) = (/(i, i=1, ndata)/)\n      END IF\n\n      ASSOCIATE (ptr => list%ptr, col_data => list%col_data)\n         #:for dim in range(1, maxdim+1)\n            IF (ndata > ${dim-1}$) THEN\n               CALL allocate_any(data_${dim}$, source=col_data(ptr(o(${dim}$)):ptr(o(${dim}$) + 1) - 1))\n            END IF\n         #:endfor\n      END ASSOCIATE\n\n   END SUBROUTINE get_arrays\n\n   SUBROUTINE get_ith_array(list, i, array_size, array)\n      !! get ith array\n      TYPE(array_list), INTENT(IN)                    :: list\n      INTEGER, INTENT(IN)                             :: i\n      INTEGER, INTENT(IN)                             :: array_size\n      INTEGER, DIMENSION(array_size), INTENT(OUT)     :: array\n\n      ASSOCIATE (ptr => list%ptr, col_data => list%col_data)\n         DBCSR_ASSERT(i <= number_of_arrays(list))\n\n         array(:) = col_data(ptr(i):ptr(i + 1) - 1)\n\n      END ASSOCIATE\n\n   END SUBROUTINE\n\n   SUBROUTINE allocate_and_get_ith_array(list, i, array)\n      !! get ith array\n      TYPE(array_list), INTENT(IN)                    :: list\n      INTEGER, INTENT(IN)                             :: i\n      INTEGER, DIMENSION(:), ALLOCATABLE, INTENT(OUT) :: array\n\n      ASSOCIATE (ptr => list%ptr, col_data => list%col_data)\n         DBCSR_ASSERT(i <= number_of_arrays(list))\n\n         CALL allocate_any(array, source=col_data(ptr(i):ptr(i + 1) - 1))\n      END ASSOCIATE\n   END SUBROUTINE\n\n   FUNCTION sizes_of_arrays(list)\n      !! sizes of arrays stored in list\n      TYPE(array_list), INTENT(IN)       :: list\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: sizes_of_arrays\n\n      INTEGER                            :: i_data, num_data\n\n      num_data = number_of_arrays(list)\n      ALLOCATE (sizes_of_arrays(num_data))\n      DO i_data = 1, num_data\n         sizes_of_arrays(i_data) = list%ptr(i_data + 1) - list%ptr(i_data)\n      END DO\n   END FUNCTION sizes_of_arrays\n\n   FUNCTION sum_of_arrays(list)\n      !! sum of all elements for each array stored in list\n      TYPE(array_list), INTENT(IN)       :: list\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: sum_of_arrays\n\n      INTEGER                            :: i_data, num_data\n\n      num_data = number_of_arrays(list)\n      ALLOCATE (sum_of_arrays(num_data))\n      DO i_data = 1, num_data\n         sum_of_arrays(i_data) = SUM(list%col_data(list%ptr(i_data):list%ptr(i_data + 1) - 1))\n      END DO\n\n   END FUNCTION sum_of_arrays\n\n   SUBROUTINE array_offsets(list_in, list_out)\n      !! partial sums of array elements.\n      TYPE(array_list), INTENT(IN)  :: list_in\n      TYPE(array_list), INTENT(OUT) :: list_out\n\n      INTEGER                       :: i_data, i_ptr, num_data, partial_sum\n\n      num_data = number_of_arrays(list_in)\n      CALL allocate_any(list_out%ptr, source=list_in%ptr)\n      ALLOCATE (list_out%col_data(SIZE(list_in%col_data)))\n      DO i_data = 1, num_data\n         partial_sum = 1\n         DO i_ptr = list_out%ptr(i_data), list_out%ptr(i_data + 1) - 1\n            list_out%col_data(i_ptr) = partial_sum\n            partial_sum = partial_sum + list_in%col_data(i_ptr)\n         END DO\n      END DO\n   END SUBROUTINE\n\n   SUBROUTINE reorder_arrays(list_in, list_out, order)\n      !! reorder array list.\n      TYPE(array_list), INTENT(IN)                     :: list_in\n      TYPE(array_list), INTENT(OUT)                    :: list_out\n      INTEGER, ALLOCATABLE, DIMENSION(:)               :: ${varlist(\"data\")}$\n      INTEGER, DIMENSION(number_of_arrays(list_in)), &\n         INTENT(IN)                                    :: order\n\n      #:for ndim in ndims\n         IF (number_of_arrays(list_in) == ${ndim}$) THEN\n            CALL get_arrays(list_in, ${varlist(\"data\", nmax=ndim)}$, i_selected=dbcsr_t_inverse_order(order))\n            CALL create_array_list(list_out, number_of_arrays(list_in), &\n                                   ${varlist(\"data\", nmax=ndim)}$)\n         END IF\n      #:endfor\n\n   END SUBROUTINE\n\n   FUNCTION check_equal(list1, list2)\n      !! check whether two array lists are equal\n      TYPE(array_list), INTENT(IN)  :: list1, list2\n      LOGICAL :: check_equal\n\n      check_equal = array_eq_i(list1%col_data, list2%col_data) .AND. array_eq_i(list1%ptr, list2%ptr)\n   END FUNCTION\n\n   PURE_ARRAY_EQ FUNCTION array_eq_i(arr1, arr2)\n      !! check whether two arrays are equal\n      INTEGER, INTENT(IN), DIMENSION(:) :: arr1\n      INTEGER, INTENT(IN), DIMENSION(:) :: arr2\n      LOGICAL                           :: array_eq_i\n\n#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n      array_eq_i = .NOT. libxsmm_diff(arr1, arr2)\n#else\n      array_eq_i = .FALSE.\n      IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i = ALL(arr1 == arr2)\n#endif\n   END FUNCTION\n\nEND MODULE dbcsr_array_list_methods\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tensor\n   !! DBCSR tensor framework for block-sparse tensor contraction.\n   !! Representation of n-rank tensors as DBCSR tall-and-skinny matrices.\n   !! Support for arbitrary redistribution between different representations.\n   !! Support for arbitrary tensor contractions\n   !! \\todo implement checks and error messages\n\n   #:include \"dbcsr_tensor.fypp\"\n   #:set maxdim = maxrank\n   #:set ndims = range(2,maxdim+1)\n\n   USE dbcsr_allocate_wrap, ONLY: &\n      allocate_any\n   USE dbcsr_array_list_methods, ONLY: &\n      get_arrays, reorder_arrays, get_ith_array, array_list, array_sublist, check_equal, array_eq_i, &\n      create_array_list, destroy_array_list, sizes_of_arrays\n   USE dbcsr_api, ONLY: &\n      dbcsr_type, dbcsr_iterator_type, dbcsr_iterator_blocks_left, &\n      dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop, &\n      dbcsr_transpose, dbcsr_no_transpose, dbcsr_scalar, dbcsr_put_block, &\n      ${uselist(dtype_float_param)}$, dbcsr_clear, &\n      dbcsr_release, dbcsr_desymmetrize, dbcsr_has_symmetry\n   USE dbcsr_tas_types, ONLY: &\n      dbcsr_tas_split_info\n   USE dbcsr_tas_base, ONLY: &\n      dbcsr_tas_copy, dbcsr_tas_finalize, dbcsr_tas_get_data_type, dbcsr_tas_get_info, dbcsr_tas_info\n   USE dbcsr_tas_mm, ONLY: &\n      dbcsr_tas_multiply, dbcsr_tas_batched_mm_init, dbcsr_tas_batched_mm_finalize, dbcsr_tas_result_index, &\n      dbcsr_tas_batched_mm_complete, dbcsr_tas_set_batched_state\n   USE dbcsr_tensor_block, ONLY: &\n      dbcsr_t_iterator_type, dbcsr_t_get_block, dbcsr_t_put_block, dbcsr_t_iterator_start, &\n      dbcsr_t_iterator_blocks_left, dbcsr_t_iterator_stop, dbcsr_t_iterator_next_block, &\n      ndims_iterator, dbcsr_t_reserve_blocks, block_nd, destroy_block\n   USE dbcsr_tensor_index, ONLY: &\n      dbcsr_t_get_mapping_info, nd_to_2d_mapping, dbcsr_t_inverse_order, permute_index, get_nd_indices_tensor, &\n      ndims_mapping_row, ndims_mapping_column, ndims_mapping\n   USE dbcsr_tensor_types, ONLY: &\n      dbcsr_t_create, dbcsr_t_get_data_type, dbcsr_t_type, ndims_tensor, dims_tensor, &\n      dbcsr_t_distribution_type, dbcsr_t_distribution, dbcsr_t_nd_mp_comm, dbcsr_t_destroy, &\n      dbcsr_t_distribution_destroy, dbcsr_t_distribution_new_expert, dbcsr_t_get_stored_coordinates, &\n      blk_dims_tensor, dbcsr_t_hold, dbcsr_t_pgrid_type, mp_environ_pgrid, dbcsr_t_filter, &\n      dbcsr_t_clear, dbcsr_t_finalize, dbcsr_t_get_num_blocks, dbcsr_t_scale, &\n      dbcsr_t_get_num_blocks_total, dbcsr_t_get_info, ndims_matrix_row, ndims_matrix_column, &\n      dbcsr_t_max_nblks_local, dbcsr_t_default_distvec, dbcsr_t_contraction_storage, dbcsr_t_nblks_total, &\n      dbcsr_t_distribution_new, dbcsr_t_copy_contraction_storage, dbcsr_t_pgrid_destroy\n   USE dbcsr_kinds, ONLY: &\n      ${uselist(dtype_float_prec)}$, default_string_length, int_8, dp\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_environ, mp_max, mp_comm_free, mp_cart_create, mp_sync, mp_comm_type\n   USE dbcsr_toollib, ONLY: &\n      sort\n   USE dbcsr_tensor_reshape, ONLY: &\n      dbcsr_t_reshape\n   USE dbcsr_tas_split, ONLY: &\n      dbcsr_tas_mp_comm, rowsplit, colsplit, dbcsr_tas_info_hold, dbcsr_tas_release_info, default_nsplit_accept_ratio, &\n      default_pdims_accept_ratio, dbcsr_tas_create_split\n   USE dbcsr_data_types, ONLY: &\n      dbcsr_scalar_type\n   USE dbcsr_tensor_split, ONLY: &\n      dbcsr_t_split_copyback, dbcsr_t_make_compatible_blocks, dbcsr_t_crop\n   USE dbcsr_tensor_io, ONLY: &\n      dbcsr_t_write_tensor_info, dbcsr_t_write_tensor_dist, prep_output_unit, dbcsr_t_write_split_info\n   USE dbcsr_dist_operations, ONLY: &\n      checker_tr\n   USE dbcsr_toollib, ONLY: &\n      swap\n\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor'\n\n   PUBLIC :: &\n      dbcsr_t_contract, &\n      dbcsr_t_copy, &\n      dbcsr_t_get_block, &\n      dbcsr_t_get_stored_coordinates, &\n      dbcsr_t_inverse_order, &\n      dbcsr_t_iterator_blocks_left, &\n      dbcsr_t_iterator_next_block, &\n      dbcsr_t_iterator_start, &\n      dbcsr_t_iterator_stop, &\n      dbcsr_t_iterator_type, &\n      dbcsr_t_put_block, &\n      dbcsr_t_reserve_blocks, &\n      dbcsr_t_copy_matrix_to_tensor, &\n      dbcsr_t_copy_tensor_to_matrix, &\n      dbcsr_t_contract_index, &\n      dbcsr_t_batched_contract_init, &\n      dbcsr_t_batched_contract_finalize\n\nCONTAINS\n\n   SUBROUTINE dbcsr_t_copy(tensor_in, tensor_out, order, summation, bounds, move_data, unit_nr)\n      !! Copy tensor data.\n      !! Redistributes tensor data according to distributions of target and source tensor.\n      !! Permutes tensor index according to `order` argument (if present).\n      !! Source and target tensor formats are arbitrary as long as the following requirements are met:\n      !! * source and target tensors have the same rank and the same sizes in each dimension in terms\n      !!   of tensor elements (block sizes don't need to be the same).\n      !!   If `order` argument is present, sizes must match after index permutation.\n      !! OR\n      !! * target tensor is not yet created, in this case an exact copy of source tensor is returned.\n\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_in, tensor_out\n         !! Source\n         !! Target\n      INTEGER, DIMENSION(ndims_tensor(tensor_in)), &\n         INTENT(IN), OPTIONAL                        :: order\n         !! Permutation of target tensor index. Exact same convention as order argument of RESHAPE intrinsic\n      LOGICAL, INTENT(IN), OPTIONAL                  :: summation, move_data\n      INTEGER, DIMENSION(2, ndims_tensor(tensor_in)), &\n         INTENT(IN), OPTIONAL                        :: bounds\n         !! crop tensor data: start and end index for each tensor dimension\n      INTEGER, INTENT(IN), OPTIONAL                  :: unit_nr\n      INTEGER :: handle\n\n      CALL mp_sync(tensor_in%pgrid%mp_comm_2d)\n      CALL timeset(\"dbcsr_t_total\", handle)\n\n      ! make sure that it is safe to use dbcsr_t_copy during a batched contraction\n      CALL dbcsr_tas_batched_mm_complete(tensor_in%matrix_rep, warn=.TRUE.)\n      CALL dbcsr_tas_batched_mm_complete(tensor_out%matrix_rep, warn=.TRUE.)\n\n      CALL dbcsr_t_copy_expert(tensor_in, tensor_out, order, summation, bounds, move_data, unit_nr)\n      CALL mp_sync(tensor_in%pgrid%mp_comm_2d)\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_copy_expert(tensor_in, tensor_out, order, summation, bounds, move_data, unit_nr)\n      !! expert routine for copying a tensor. For internal use only.\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_in, tensor_out\n      INTEGER, DIMENSION(ndims_tensor(tensor_in)), &\n         INTENT(IN), OPTIONAL                        :: order\n      LOGICAL, INTENT(IN), OPTIONAL                  :: summation, move_data\n      INTEGER, DIMENSION(2, ndims_tensor(tensor_in)), &\n         INTENT(IN), OPTIONAL                        :: bounds\n      INTEGER, INTENT(IN), OPTIONAL                  :: unit_nr\n\n      TYPE(dbcsr_t_type), POINTER                    :: in_tmp_1, in_tmp_2, &\n                                                        in_tmp_3, out_tmp_1\n      INTEGER                                        :: handle, unit_nr_prv\n      INTEGER, DIMENSION(:), ALLOCATABLE             :: map1_in_1, map1_in_2, map2_in_1, map2_in_2\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_copy'\n      LOGICAL                                        :: dist_compatible_tas, dist_compatible_tensor, &\n                                                        summation_prv, new_in_1, new_in_2, &\n                                                        new_in_3, new_out_1, block_compatible, &\n                                                        move_prv\n      TYPE(array_list)                               :: blk_sizes_in\n\n      CALL timeset(routineN, handle)\n\n      DBCSR_ASSERT(tensor_out%valid)\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n\n      IF (PRESENT(move_data)) THEN\n         move_prv = move_data\n      ELSE\n         move_prv = .FALSE.\n      END IF\n\n      dist_compatible_tas = .FALSE.\n      dist_compatible_tensor = .FALSE.\n      block_compatible = .FALSE.\n      new_in_1 = .FALSE.\n      new_in_2 = .FALSE.\n      new_in_3 = .FALSE.\n      new_out_1 = .FALSE.\n\n      IF (PRESENT(summation)) THEN\n         summation_prv = summation\n      ELSE\n         summation_prv = .FALSE.\n      END IF\n\n      IF (PRESENT(bounds)) THEN\n         ALLOCATE (in_tmp_1)\n         CALL dbcsr_t_crop(tensor_in, in_tmp_1, bounds=bounds, move_data=move_prv)\n         new_in_1 = .TRUE.\n         move_prv = .TRUE.\n      ELSE\n         in_tmp_1 => tensor_in\n      END IF\n\n      IF (PRESENT(order)) THEN\n         CALL reorder_arrays(in_tmp_1%blk_sizes, blk_sizes_in, order=order)\n         block_compatible = check_equal(blk_sizes_in, tensor_out%blk_sizes)\n      ELSE\n         block_compatible = check_equal(in_tmp_1%blk_sizes, tensor_out%blk_sizes)\n      END IF\n\n      IF (.NOT. block_compatible) THEN\n         ALLOCATE (in_tmp_2, out_tmp_1)\n         CALL dbcsr_t_make_compatible_blocks(in_tmp_1, tensor_out, in_tmp_2, out_tmp_1, order=order, &\n                                             nodata2=.NOT. summation_prv, move_data=move_prv)\n         new_in_2 = .TRUE.; new_out_1 = .TRUE.\n         move_prv = .TRUE.\n      ELSE\n         in_tmp_2 => in_tmp_1\n         out_tmp_1 => tensor_out\n      END IF\n\n      IF (PRESENT(order)) THEN\n         ALLOCATE (in_tmp_3)\n         CALL dbcsr_t_permute_index(in_tmp_2, in_tmp_3, order)\n         new_in_3 = .TRUE.\n      ELSE\n         in_tmp_3 => in_tmp_2\n      END IF\n\n      ALLOCATE (map1_in_1(ndims_matrix_row(in_tmp_3)))\n      ALLOCATE (map1_in_2(ndims_matrix_column(in_tmp_3)))\n      CALL dbcsr_t_get_mapping_info(in_tmp_3%nd_index, map1_2d=map1_in_1, map2_2d=map1_in_2)\n\n      ALLOCATE (map2_in_1(ndims_matrix_row(out_tmp_1)))\n      ALLOCATE (map2_in_2(ndims_matrix_column(out_tmp_1)))\n      CALL dbcsr_t_get_mapping_info(out_tmp_1%nd_index, map1_2d=map2_in_1, map2_2d=map2_in_2)\n\n      IF (.NOT. PRESENT(order)) THEN\n         IF (array_eq_i(map1_in_1, map2_in_1) .AND. array_eq_i(map1_in_2, map2_in_2)) THEN\n            dist_compatible_tas = check_equal(in_tmp_3%nd_dist, out_tmp_1%nd_dist)\n         ELSEIF (array_eq_i([map1_in_1, map1_in_2], [map2_in_1, map2_in_2])) THEN\n            dist_compatible_tensor = check_equal(in_tmp_3%nd_dist, out_tmp_1%nd_dist)\n         END IF\n      END IF\n\n      IF (dist_compatible_tas) THEN\n         CALL dbcsr_tas_copy(out_tmp_1%matrix_rep, in_tmp_3%matrix_rep, summation)\n         IF (move_prv) CALL dbcsr_t_clear(in_tmp_3)\n      ELSEIF (dist_compatible_tensor) THEN\n         CALL dbcsr_t_copy_nocomm(in_tmp_3, out_tmp_1, summation)\n         IF (move_prv) CALL dbcsr_t_clear(in_tmp_3)\n      ELSE\n         CALL dbcsr_t_reshape(in_tmp_3, out_tmp_1, summation, move_data=move_prv)\n      END IF\n\n      IF (new_in_1) THEN\n         CALL dbcsr_t_destroy(in_tmp_1)\n         DEALLOCATE (in_tmp_1)\n      END IF\n\n      IF (new_in_2) THEN\n         CALL dbcsr_t_destroy(in_tmp_2)\n         DEALLOCATE (in_tmp_2)\n      END IF\n\n      IF (new_in_3) THEN\n         CALL dbcsr_t_destroy(in_tmp_3)\n         DEALLOCATE (in_tmp_3)\n      END IF\n\n      IF (new_out_1) THEN\n         IF (unit_nr_prv /= 0) THEN\n            CALL dbcsr_t_write_tensor_dist(out_tmp_1, unit_nr)\n         END IF\n         CALL dbcsr_t_split_copyback(out_tmp_1, tensor_out, summation)\n         CALL dbcsr_t_destroy(out_tmp_1)\n         DEALLOCATE (out_tmp_1)\n      END IF\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_copy_nocomm(tensor_in, tensor_out, summation)\n      !! copy without communication, requires that both tensors have same process grid and distribution\n\n      TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in\n      TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_out\n      LOGICAL, INTENT(IN), OPTIONAL                      :: summation\n         !! Whether to sum matrices b = a + b\n      TYPE(dbcsr_t_iterator_type) :: iter\n      INTEGER, DIMENSION(ndims_tensor(tensor_in))  :: ind_nd\n      INTEGER :: blk\n      TYPE(block_nd) :: blk_data\n      LOGICAL :: found\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_copy_nocomm'\n      INTEGER :: handle\n\n      CALL timeset(routineN, handle)\n      DBCSR_ASSERT(tensor_out%valid)\n\n      IF (PRESENT(summation)) THEN\n         IF (.NOT. summation) CALL dbcsr_t_clear(tensor_out)\n      ELSE\n         CALL dbcsr_t_clear(tensor_out)\n      END IF\n\n      CALL dbcsr_t_reserve_blocks(tensor_in, tensor_out)\n\n      CALL dbcsr_t_iterator_start(iter, tensor_in)\n      DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n         CALL dbcsr_t_iterator_next_block(iter, ind_nd, blk)\n         CALL dbcsr_t_get_block(tensor_in, ind_nd, blk_data, found)\n         DBCSR_ASSERT(found)\n         CALL dbcsr_t_put_block(tensor_out, ind_nd, blk_data, summation=summation)\n         CALL destroy_block(blk_data)\n      END DO\n      CALL dbcsr_t_iterator_stop(iter)\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_copy_matrix_to_tensor(matrix_in, tensor_out, summation)\n      !! copy matrix to tensor.\n\n      TYPE(dbcsr_type), TARGET, INTENT(IN)               :: matrix_in\n      TYPE(dbcsr_t_type), INTENT(INOUT)                  :: tensor_out\n      LOGICAL, INTENT(IN), OPTIONAL                      :: summation\n         !! tensor_out = tensor_out + matrix_in\n      TYPE(dbcsr_type), POINTER                          :: matrix_in_desym\n\n      INTEGER, DIMENSION(2)                              :: ind_2d\n      REAL(KIND=real_8), ALLOCATABLE, DIMENSION(:, :)    :: block_arr\n      REAL(KIND=real_8), DIMENSION(:, :), POINTER        :: block\n      TYPE(dbcsr_iterator_type)                          :: iter\n      LOGICAL                                            :: tr\n\n      INTEGER                                            :: handle\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_copy_matrix_to_tensor'\n\n      CALL timeset(routineN, handle)\n      DBCSR_ASSERT(tensor_out%valid)\n\n      NULLIFY (block)\n\n      IF (dbcsr_has_symmetry(matrix_in)) THEN\n         ALLOCATE (matrix_in_desym)\n         CALL dbcsr_desymmetrize(matrix_in, matrix_in_desym)\n      ELSE\n         matrix_in_desym => matrix_in\n      END IF\n\n      IF (PRESENT(summation)) THEN\n         IF (.NOT. summation) CALL dbcsr_t_clear(tensor_out)\n      ELSE\n         CALL dbcsr_t_clear(tensor_out)\n      END IF\n\n      CALL dbcsr_t_reserve_blocks(matrix_in_desym, tensor_out)\n\n      CALL dbcsr_iterator_start(iter, matrix_in_desym)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, ind_2d(1), ind_2d(2), block, tr)\n         CALL allocate_any(block_arr, source=block)\n         CALL dbcsr_t_put_block(tensor_out, ind_2d, SHAPE(block_arr), block_arr, summation=summation)\n         DEALLOCATE (block_arr)\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n\n      IF (dbcsr_has_symmetry(matrix_in)) THEN\n         CALL dbcsr_release(matrix_in_desym)\n         DEALLOCATE (matrix_in_desym)\n      END IF\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_copy_tensor_to_matrix(tensor_in, matrix_out, summation)\n      !! copy tensor to matrix\n\n      TYPE(dbcsr_t_type), INTENT(INOUT)      :: tensor_in\n      TYPE(dbcsr_type), INTENT(INOUT)        :: matrix_out\n      LOGICAL, INTENT(IN), OPTIONAL          :: summation\n         !! matrix_out = matrix_out + tensor_in\n      TYPE(dbcsr_t_iterator_type)            :: iter\n      INTEGER                                :: blk, handle\n      INTEGER, DIMENSION(2)                  :: ind_2d\n      REAL(KIND=real_8), DIMENSION(:, :), ALLOCATABLE :: block\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_copy_tensor_to_matrix'\n      LOGICAL :: found\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(summation)) THEN\n         IF (.NOT. summation) CALL dbcsr_clear(matrix_out)\n      ELSE\n         CALL dbcsr_clear(matrix_out)\n      END IF\n\n      CALL dbcsr_t_reserve_blocks(tensor_in, matrix_out)\n\n      CALL dbcsr_t_iterator_start(iter, tensor_in)\n      DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n         CALL dbcsr_t_iterator_next_block(iter, ind_2d, blk)\n         IF (dbcsr_has_symmetry(matrix_out) .AND. checker_tr(ind_2d(1), ind_2d(2))) CYCLE\n\n         CALL dbcsr_t_get_block(tensor_in, ind_2d, block, found)\n         DBCSR_ASSERT(found)\n\n         IF (dbcsr_has_symmetry(matrix_out) .AND. ind_2d(1) > ind_2d(2)) THEN\n            CALL dbcsr_put_block(matrix_out, ind_2d(2), ind_2d(1), TRANSPOSE(block), summation=summation)\n         ELSE\n            CALL dbcsr_put_block(matrix_out, ind_2d(1), ind_2d(2), block, summation=summation)\n         END IF\n         DEALLOCATE (block)\n      END DO\n      CALL dbcsr_t_iterator_stop(iter)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_contract(alpha, tensor_1, tensor_2, beta, tensor_3, &\n                               contract_1, notcontract_1, &\n                               contract_2, notcontract_2, &\n                               map_1, map_2, &\n                               bounds_1, bounds_2, bounds_3, &\n                               optimize_dist, pgrid_opt_1, pgrid_opt_2, pgrid_opt_3, &\n                               filter_eps, flop, move_data, retain_sparsity, unit_nr, log_verbose)\n      !! Contract tensors by multiplying matrix representations.\n      !! tensor_3(map_1, map_2) := alpha * tensor_1(notcontract_1, contract_1)\n      !! * tensor_2(contract_2, notcontract_2)\n      !! + beta * tensor_3(map_1, map_2)\n      !!\n      !! @note\n      !! note 1: block sizes of the corresponding indices need to be the same in all tensors.\n      !!\n      !! note 2: for best performance the tensors should have been created in matrix layouts\n      !! compatible with the contraction, e.g. tensor_1 should have been created with either\n      !! map1_2d == contract_1 and map2_2d == notcontract_1 or map1_2d == notcontract_1 and\n      !! map2_2d == contract_1 (the same with tensor_2 and contract_2 / notcontract_2 and with\n      !! tensor_3 and map_1 / map_2).\n      !! Furthermore the two largest tensors involved in the contraction should map both to either\n      !! tall or short matrices: the largest matrix dimension should be \"on the same side\"\n      !! and should have identical distribution (which is always the case if the distributions were\n      !! obtained with dbcsr_t_default_distvec).\n      !!\n      !! note 3: if the same tensor occurs in multiple contractions, a different tensor object should\n      !! be created for each contraction and the data should be copied between the tensors by use of\n      !! dbcsr_t_copy. If the same tensor object is used in multiple contractions, matrix layouts are\n      !! not compatible for all contractions (see note 2).\n      !!\n      !! note 4: automatic optimizations are enabled by using the feature of batched contraction, see\n      !! dbcsr_t_batched_contract_init, dbcsr_t_batched_contract_finalize. The arguments bounds_1,\n      !! bounds_2, bounds_3 give the index ranges of the batches.\n      !! @endnote\n\n      TYPE(dbcsr_scalar_type), INTENT(IN)            :: alpha\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_1\n         !! first tensor (in)\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_2\n         !! second tensor (in)\n      TYPE(dbcsr_scalar_type), INTENT(IN)            :: beta\n      INTEGER, DIMENSION(:), INTENT(IN)              :: contract_1\n         !! indices of tensor_1 to contract\n      INTEGER, DIMENSION(:), INTENT(IN)              :: contract_2\n         !! indices of tensor_2 to contract (1:1 with contract_1)\n      INTEGER, DIMENSION(:), INTENT(IN)              :: map_1\n         !! which indices of tensor_3 map to non-contracted indices of tensor_1 (1:1 with notcontract_1)\n      INTEGER, DIMENSION(:), INTENT(IN)              :: map_2\n         !! which indices of tensor_3 map to non-contracted indices of tensor_2 (1:1 with notcontract_2)\n      INTEGER, DIMENSION(:), INTENT(IN)              :: notcontract_1\n         !! indices of tensor_1 not to contract\n      INTEGER, DIMENSION(:), INTENT(IN)              :: notcontract_2\n         !! indices of tensor_2 not to contract\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_3\n         !! contracted tensor (out)\n      INTEGER, DIMENSION(2, SIZE(contract_1)), &\n         INTENT(IN), OPTIONAL                        :: bounds_1\n         !! bounds corresponding to contract_1 AKA contract_2: start and end index of an index range over\n         !! which to contract. For use in batched contraction.\n      INTEGER, DIMENSION(2, SIZE(notcontract_1)), &\n         INTENT(IN), OPTIONAL                        :: bounds_2\n         !! bounds corresponding to notcontract_1: start and end index of an index range.\n         !! For use in batched contraction.\n      INTEGER, DIMENSION(2, SIZE(notcontract_2)), &\n         INTENT(IN), OPTIONAL                        :: bounds_3\n         !! bounds corresponding to notcontract_2: start and end index of an index range.\n         !! For use in batched contraction.\n      LOGICAL, INTENT(IN), OPTIONAL                  :: optimize_dist\n         !! Whether distribution should be optimized internally. In the current implementation this guarantees optimal parameters\n         !! only for dense matrices.\n      TYPE(dbcsr_t_pgrid_type), INTENT(OUT), &\n         POINTER, OPTIONAL                           :: pgrid_opt_1\n         !! Optionally return optimal process grid for tensor_1. This can be used to choose optimal process grids for subsequent\n         !! tensor contractions with tensors of similar shape and sparsity. Under some conditions, pgrid_opt_1 can not be returned,\n         !! in this case the pointer is not associated.\n      TYPE(dbcsr_t_pgrid_type), INTENT(OUT), &\n         POINTER, OPTIONAL                           :: pgrid_opt_2\n         !! Optionally return optimal process grid for tensor_2.\n      TYPE(dbcsr_t_pgrid_type), INTENT(OUT), &\n         POINTER, OPTIONAL                           :: pgrid_opt_3\n         !! Optionally return optimal process grid for tensor_3.\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL        :: filter_eps\n         !! As in DBCSR mm\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL     :: flop\n         !! As in DBCSR mm\n      LOGICAL, INTENT(IN), OPTIONAL                  :: move_data\n         !! memory optimization: transfer data such that tensor_1 and tensor_2 are empty on return\n      LOGICAL, INTENT(IN), OPTIONAL                  :: retain_sparsity\n         !! enforce the sparsity pattern of the existing tensor_3; default is no\n      INTEGER, OPTIONAL, INTENT(IN)                  :: unit_nr\n         !! output unit for logging\n         !! set it to -1 on ranks that should not write (and any valid unit number on ranks that should write output)\n         !! if 0 on ALL ranks, no output is written\n      LOGICAL, INTENT(IN), OPTIONAL                  :: log_verbose\n         !! verbose logging (for testing only)\n\n      INTEGER                     :: handle\n\n      CALL mp_sync(tensor_1%pgrid%mp_comm_2d)\n      CALL timeset(\"dbcsr_t_total\", handle)\n      CALL dbcsr_t_contract_expert(alpha, tensor_1, tensor_2, beta, tensor_3, &\n                                   contract_1, notcontract_1, &\n                                   contract_2, notcontract_2, &\n                                   map_1, map_2, &\n                                   bounds_1=bounds_1, &\n                                   bounds_2=bounds_2, &\n                                   bounds_3=bounds_3, &\n                                   optimize_dist=optimize_dist, &\n                                   pgrid_opt_1=pgrid_opt_1, &\n                                   pgrid_opt_2=pgrid_opt_2, &\n                                   pgrid_opt_3=pgrid_opt_3, &\n                                   filter_eps=filter_eps, &\n                                   flop=flop, &\n                                   move_data=move_data, &\n                                   retain_sparsity=retain_sparsity, &\n                                   unit_nr=unit_nr, &\n                                   log_verbose=log_verbose)\n      CALL mp_sync(tensor_1%pgrid%mp_comm_2d)\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_contract_expert(alpha, tensor_1, tensor_2, beta, tensor_3, &\n                                      contract_1, notcontract_1, &\n                                      contract_2, notcontract_2, &\n                                      map_1, map_2, &\n                                      bounds_1, bounds_2, bounds_3, &\n                                      optimize_dist, pgrid_opt_1, pgrid_opt_2, pgrid_opt_3, &\n                                      filter_eps, flop, move_data, retain_sparsity, &\n                                      nblks_local, result_index, unit_nr, log_verbose)\n      !! expert routine for tensor contraction. For internal use only.\n      TYPE(dbcsr_scalar_type), INTENT(IN)            :: alpha\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_1\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_2\n      TYPE(dbcsr_scalar_type), INTENT(IN)            :: beta\n      INTEGER, DIMENSION(:), INTENT(IN)              :: contract_1\n      INTEGER, DIMENSION(:), INTENT(IN)              :: contract_2\n      INTEGER, DIMENSION(:), INTENT(IN)              :: map_1\n      INTEGER, DIMENSION(:), INTENT(IN)              :: map_2\n      INTEGER, DIMENSION(:), INTENT(IN)              :: notcontract_1\n      INTEGER, DIMENSION(:), INTENT(IN)              :: notcontract_2\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_3\n      INTEGER, DIMENSION(2, SIZE(contract_1)), &\n         INTENT(IN), OPTIONAL                        :: bounds_1\n      INTEGER, DIMENSION(2, SIZE(notcontract_1)), &\n         INTENT(IN), OPTIONAL                        :: bounds_2\n      INTEGER, DIMENSION(2, SIZE(notcontract_2)), &\n         INTENT(IN), OPTIONAL                        :: bounds_3\n      LOGICAL, INTENT(IN), OPTIONAL                  :: optimize_dist\n      TYPE(dbcsr_t_pgrid_type), INTENT(OUT), &\n         POINTER, OPTIONAL                           :: pgrid_opt_1\n      TYPE(dbcsr_t_pgrid_type), INTENT(OUT), &\n         POINTER, OPTIONAL                           :: pgrid_opt_2\n      TYPE(dbcsr_t_pgrid_type), INTENT(OUT), &\n         POINTER, OPTIONAL                           :: pgrid_opt_3\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL        :: filter_eps\n      INTEGER(KIND=int_8), INTENT(OUT), OPTIONAL     :: flop\n      LOGICAL, INTENT(IN), OPTIONAL                  :: move_data\n      LOGICAL, INTENT(IN), OPTIONAL                  :: retain_sparsity\n      INTEGER, INTENT(OUT), OPTIONAL                 :: nblks_local\n         !! number of local blocks on this MPI rank\n      INTEGER, DIMENSION(dbcsr_t_max_nblks_local(tensor_3), ndims_tensor(tensor_3)), &\n         OPTIONAL, INTENT(OUT)                       :: result_index\n         !! get indices of non-zero tensor blocks for tensor_3 without actually performing contraction\n         !! this is an estimate based on block norm multiplication\n      INTEGER, OPTIONAL, INTENT(IN)                  :: unit_nr\n      LOGICAL, INTENT(IN), OPTIONAL                  :: log_verbose\n\n      TYPE(dbcsr_t_type), POINTER                    :: tensor_contr_1, tensor_contr_2, tensor_contr_3\n      TYPE(dbcsr_t_type), TARGET                     :: tensor_algn_1, tensor_algn_2, tensor_algn_3\n      TYPE(dbcsr_t_type), POINTER                    :: tensor_crop_1, tensor_crop_2\n      TYPE(dbcsr_t_type), POINTER                    :: tensor_small, tensor_large\n\n      INTEGER(int_8), DIMENSION(:, :), ALLOCATABLE  :: result_index_2d\n      LOGICAL                                        :: assert_stmt, tensors_remapped\n      INTEGER                                        :: data_type, max_mm_dim, max_tensor, &\n                                                        iblk, nblk, unit_nr_prv, ref_tensor, &\n                                                        handle\n      INTEGER, DIMENSION(SIZE(contract_1))           :: contract_1_mod\n      INTEGER, DIMENSION(SIZE(notcontract_1))        :: notcontract_1_mod\n      INTEGER, DIMENSION(SIZE(contract_2))           :: contract_2_mod\n      INTEGER, DIMENSION(SIZE(notcontract_2))        :: notcontract_2_mod\n      INTEGER, DIMENSION(SIZE(map_1))                :: map_1_mod\n      INTEGER, DIMENSION(SIZE(map_2))                :: map_2_mod\n      CHARACTER(LEN=1)                               :: trans_1, trans_2, trans_3\n      LOGICAL                                        :: new_1, new_2, new_3, move_data_1, move_data_2\n      INTEGER                                        :: ndims1, ndims2, ndims3\n      INTEGER                                        :: occ_1, occ_2\n      INTEGER, DIMENSION(:), ALLOCATABLE             :: dims1, dims2, dims3\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_contract'\n      CHARACTER(LEN=1), DIMENSION(:), ALLOCATABLE    :: indchar1, indchar2, indchar3, indchar1_mod, &\n                                                        indchar2_mod, indchar3_mod\n      CHARACTER(LEN=1), DIMENSION(15) :: alph = &\n                                         ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o']\n      INTEGER, DIMENSION(2, ndims_tensor(tensor_1)) :: bounds_t1\n      INTEGER, DIMENSION(2, ndims_tensor(tensor_2)) :: bounds_t2\n      LOGICAL                                        :: do_crop_1, do_crop_2, do_write_3, nodata_3, do_batched, pgrid_changed, &\n                                                        pgrid_changed_any, do_change_pgrid(2)\n      TYPE(dbcsr_tas_split_info)                     :: split_opt, split, split_opt_avg\n      INTEGER, DIMENSION(2) :: pdims_2d_opt, pdims_2d, pcoord_2d, pdims_sub, pdims_sub_opt\n      LOGICAL, DIMENSION(2) :: periods_2d\n      REAL(real_8) :: pdim_ratio, pdim_ratio_opt\n      TYPE(mp_comm_type) :: mp_comm, mp_comm_opt\n\n      NULLIFY (tensor_contr_1, tensor_contr_2, tensor_contr_3, tensor_crop_1, tensor_crop_2, &\n               tensor_small)\n\n      CALL timeset(routineN, handle)\n\n      DBCSR_ASSERT(tensor_1%valid)\n      DBCSR_ASSERT(tensor_2%valid)\n      DBCSR_ASSERT(tensor_3%valid)\n\n      assert_stmt = SIZE(contract_1) .EQ. SIZE(contract_2)\n      DBCSR_ASSERT(assert_stmt)\n\n      assert_stmt = SIZE(map_1) .EQ. SIZE(notcontract_1)\n      DBCSR_ASSERT(assert_stmt)\n\n      assert_stmt = SIZE(map_2) .EQ. SIZE(notcontract_2)\n      DBCSR_ASSERT(assert_stmt)\n\n      assert_stmt = SIZE(notcontract_1) + SIZE(contract_1) .EQ. ndims_tensor(tensor_1)\n      DBCSR_ASSERT(assert_stmt)\n\n      assert_stmt = SIZE(notcontract_2) + SIZE(contract_2) .EQ. ndims_tensor(tensor_2)\n      DBCSR_ASSERT(assert_stmt)\n\n      assert_stmt = SIZE(map_1) + SIZE(map_2) .EQ. ndims_tensor(tensor_3)\n      DBCSR_ASSERT(assert_stmt)\n\n      assert_stmt = dbcsr_t_get_data_type(tensor_1) .EQ. dbcsr_t_get_data_type(tensor_2)\n      DBCSR_ASSERT(assert_stmt)\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n\n      IF (PRESENT(flop)) flop = 0\n      IF (PRESENT(result_index)) result_index = 0\n      IF (PRESENT(nblks_local)) nblks_local = 0\n\n      IF (PRESENT(move_data)) THEN\n         move_data_1 = move_data\n         move_data_2 = move_data\n      ELSE\n         move_data_1 = .FALSE.\n         move_data_2 = .FALSE.\n      END IF\n\n      nodata_3 = .TRUE.\n      IF (PRESENT(retain_sparsity)) THEN\n         IF (retain_sparsity) nodata_3 = .FALSE.\n      END IF\n\n      CALL dbcsr_t_map_bounds_to_tensors(tensor_1, tensor_2, &\n                                         contract_1, notcontract_1, &\n                                         contract_2, notcontract_2, &\n                                         bounds_t1, bounds_t2, &\n                                         bounds_1=bounds_1, bounds_2=bounds_2, bounds_3=bounds_3, &\n                                         do_crop_1=do_crop_1, do_crop_2=do_crop_2)\n\n      IF (do_crop_1) THEN\n         ALLOCATE (tensor_crop_1)\n         CALL dbcsr_t_crop(tensor_1, tensor_crop_1, bounds_t1, move_data=move_data_1)\n         move_data_1 = .TRUE.\n      ELSE\n         tensor_crop_1 => tensor_1\n      END IF\n\n      IF (do_crop_2) THEN\n         ALLOCATE (tensor_crop_2)\n         CALL dbcsr_t_crop(tensor_2, tensor_crop_2, bounds_t2, move_data=move_data_2)\n         move_data_2 = .TRUE.\n      ELSE\n         tensor_crop_2 => tensor_2\n      END IF\n\n      ! shortcut for empty tensors\n      ! this is needed to avoid unnecessary work in case user contracts different portions of a\n      ! tensor consecutively to save memory\n      mp_comm = tensor_crop_1%pgrid%mp_comm_2d\n      occ_1 = dbcsr_t_get_num_blocks(tensor_crop_1)\n      CALL mp_max(occ_1, mp_comm)\n      occ_2 = dbcsr_t_get_num_blocks(tensor_crop_2)\n      CALL mp_max(occ_2, mp_comm)\n\n      IF (occ_1 == 0 .OR. occ_2 == 0) THEN\n         CALL dbcsr_t_scale(tensor_3, beta)\n         IF (do_crop_1) THEN\n            CALL dbcsr_t_destroy(tensor_crop_1)\n            DEALLOCATE (tensor_crop_1)\n         END IF\n         IF (do_crop_2) THEN\n            CALL dbcsr_t_destroy(tensor_crop_2)\n            DEALLOCATE (tensor_crop_2)\n         END IF\n\n         CALL timestop(handle)\n         RETURN\n      END IF\n\n      IF (unit_nr_prv /= 0) THEN\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, '(A)') repeat(\"-\", 80)\n            WRITE (unit_nr_prv, '(A,1X,A,1X,A,1X,A,1X,A,1X,A)') \"DBCSR TENSOR CONTRACTION:\", &\n               TRIM(tensor_crop_1%name), 'x', TRIM(tensor_crop_2%name), '=', TRIM(tensor_3%name)\n            WRITE (unit_nr_prv, '(A)') repeat(\"-\", 80)\n         END IF\n         CALL dbcsr_t_write_tensor_info(tensor_crop_1, unit_nr_prv, full_info=log_verbose)\n         CALL dbcsr_t_write_tensor_dist(tensor_crop_1, unit_nr_prv)\n         CALL dbcsr_t_write_tensor_info(tensor_crop_2, unit_nr_prv, full_info=log_verbose)\n         CALL dbcsr_t_write_tensor_dist(tensor_crop_2, unit_nr_prv)\n      END IF\n\n      data_type = dbcsr_t_get_data_type(tensor_crop_1)\n\n      ! align tensor index with data, tensor data is not modified\n      ndims1 = ndims_tensor(tensor_crop_1)\n      ndims2 = ndims_tensor(tensor_crop_2)\n      ndims3 = ndims_tensor(tensor_3)\n      ALLOCATE (indchar1(ndims1), indchar1_mod(ndims1))\n      ALLOCATE (indchar2(ndims2), indchar2_mod(ndims2))\n      ALLOCATE (indchar3(ndims3), indchar3_mod(ndims3))\n\n      ! labeling tensor index with letters\n\n      indchar1([notcontract_1, contract_1]) = alph(1:ndims1) ! arb. choice\n      indchar2(notcontract_2) = alph(ndims1 + 1:ndims1 + SIZE(notcontract_2)) ! arb. choice\n      indchar2(contract_2) = indchar1(contract_1)\n      indchar3(map_1) = indchar1(notcontract_1)\n      indchar3(map_2) = indchar2(notcontract_2)\n\n      IF (unit_nr_prv /= 0) CALL dbcsr_t_print_contraction_index(tensor_crop_1, indchar1, &\n                                                                 tensor_crop_2, indchar2, &\n                                                                 tensor_3, indchar3, unit_nr_prv)\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, '(T2,A)') \"aligning tensor index with data\"\n      END IF\n\n      CALL align_tensor(tensor_crop_1, contract_1, notcontract_1, &\n                        tensor_algn_1, contract_1_mod, notcontract_1_mod, indchar1, indchar1_mod)\n\n      CALL align_tensor(tensor_crop_2, contract_2, notcontract_2, &\n                        tensor_algn_2, contract_2_mod, notcontract_2_mod, indchar2, indchar2_mod)\n\n      CALL align_tensor(tensor_3, map_1, map_2, &\n                        tensor_algn_3, map_1_mod, map_2_mod, indchar3, indchar3_mod)\n\n      IF (unit_nr_prv /= 0) CALL dbcsr_t_print_contraction_index(tensor_algn_1, indchar1_mod, &\n                                                                 tensor_algn_2, indchar2_mod, &\n                                                                 tensor_algn_3, indchar3_mod, unit_nr_prv)\n\n      ALLOCATE (dims1(ndims1))\n      ALLOCATE (dims2(ndims2))\n      ALLOCATE (dims3(ndims3))\n\n      ! ideally we should consider block sizes and occupancy to measure tensor sizes but current solution should work for most\n      ! cases and is more elegant. Note that we can not easily consider occupancy since it is unknown for result tensor\n      CALL blk_dims_tensor(tensor_crop_1, dims1)\n      CALL blk_dims_tensor(tensor_crop_2, dims2)\n      CALL blk_dims_tensor(tensor_3, dims3)\n\n      max_mm_dim = MAXLOC([PRODUCT(INT(dims1(notcontract_1), int_8)), &\n                           PRODUCT(INT(dims1(contract_1), int_8)), &\n                           PRODUCT(INT(dims2(notcontract_2), int_8))], DIM=1)\n      max_tensor = MAXLOC([PRODUCT(INT(dims1, int_8)), PRODUCT(INT(dims2, int_8)), PRODUCT(INT(dims3, int_8))], DIM=1)\n      SELECT CASE (max_mm_dim)\n      CASE (1)\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, '(T2,A)') \"large tensors: 1, 3; small tensor: 2\"\n            WRITE (unit_nr_prv, '(T2,A)') \"sorting contraction indices\"\n         END IF\n         CALL index_linked_sort(contract_1_mod, contract_2_mod)\n         CALL index_linked_sort(map_2_mod, notcontract_2_mod)\n         SELECT CASE (max_tensor)\n         CASE (1)\n            CALL index_linked_sort(notcontract_1_mod, map_1_mod)\n         CASE (3)\n            CALL index_linked_sort(map_1_mod, notcontract_1_mod)\n         CASE DEFAULT\n            DBCSR_ABORT(\"should not happen\")\n         END SELECT\n\n         CALL reshape_mm_compatible(tensor_algn_1, tensor_algn_3, tensor_contr_1, tensor_contr_3, &\n                                    contract_1_mod, notcontract_1_mod, map_2_mod, map_1_mod, &\n                                    trans_1, trans_3, new_1, new_3, ref_tensor, nodata2=nodata_3, optimize_dist=optimize_dist, &\n                                    move_data_1=move_data_1, unit_nr=unit_nr_prv)\n\n         CALL reshape_mm_small(tensor_algn_2, contract_2_mod, notcontract_2_mod, tensor_contr_2, trans_2, &\n                               new_2, move_data=move_data_2, unit_nr=unit_nr_prv)\n\n         SELECT CASE (ref_tensor)\n         CASE (1)\n            tensor_large => tensor_contr_1\n         CASE (2)\n            tensor_large => tensor_contr_3\n         END SELECT\n         tensor_small => tensor_contr_2\n\n      CASE (2)\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, '(T2,A)') \"large tensors: 1, 2; small tensor: 3\"\n            WRITE (unit_nr_prv, '(T2,A)') \"sorting contraction indices\"\n         END IF\n\n         CALL index_linked_sort(notcontract_1_mod, map_1_mod)\n         CALL index_linked_sort(notcontract_2_mod, map_2_mod)\n         SELECT CASE (max_tensor)\n         CASE (1)\n            CALL index_linked_sort(contract_1_mod, contract_2_mod)\n         CASE (2)\n            CALL index_linked_sort(contract_2_mod, contract_1_mod)\n         CASE DEFAULT\n            DBCSR_ABORT(\"should not happen\")\n         END SELECT\n\n         CALL reshape_mm_compatible(tensor_algn_1, tensor_algn_2, tensor_contr_1, tensor_contr_2, &\n                                    notcontract_1_mod, contract_1_mod, notcontract_2_mod, contract_2_mod, &\n                                    trans_1, trans_2, new_1, new_2, ref_tensor, optimize_dist=optimize_dist, &\n                                    move_data_1=move_data_1, move_data_2=move_data_2, unit_nr=unit_nr_prv)\n         CALL invert_transpose_flag(trans_1)\n\n         CALL reshape_mm_small(tensor_algn_3, map_1_mod, map_2_mod, tensor_contr_3, trans_3, &\n                               new_3, nodata=nodata_3, unit_nr=unit_nr_prv)\n\n         SELECT CASE (ref_tensor)\n         CASE (1)\n            tensor_large => tensor_contr_1\n         CASE (2)\n            tensor_large => tensor_contr_2\n         END SELECT\n         tensor_small => tensor_contr_3\n\n      CASE (3)\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, '(T2,A)') \"large tensors: 2, 3; small tensor: 1\"\n            WRITE (unit_nr_prv, '(T2,A)') \"sorting contraction indices\"\n         END IF\n         CALL index_linked_sort(map_1_mod, notcontract_1_mod)\n         CALL index_linked_sort(contract_2_mod, contract_1_mod)\n         SELECT CASE (max_tensor)\n         CASE (2)\n            CALL index_linked_sort(notcontract_2_mod, map_2_mod)\n         CASE (3)\n            CALL index_linked_sort(map_2_mod, notcontract_2_mod)\n         CASE DEFAULT\n            DBCSR_ABORT(\"should not happen\")\n         END SELECT\n\n         CALL reshape_mm_compatible(tensor_algn_2, tensor_algn_3, tensor_contr_2, tensor_contr_3, &\n                                    contract_2_mod, notcontract_2_mod, map_1_mod, map_2_mod, &\n                                    trans_2, trans_3, new_2, new_3, ref_tensor, nodata2=nodata_3, optimize_dist=optimize_dist, &\n                                    move_data_1=move_data_2, unit_nr=unit_nr_prv)\n\n         CALL invert_transpose_flag(trans_2)\n         CALL invert_transpose_flag(trans_3)\n\n         CALL reshape_mm_small(tensor_algn_1, notcontract_1_mod, contract_1_mod, tensor_contr_1, &\n                               trans_1, new_1, move_data=move_data_1, unit_nr=unit_nr_prv)\n\n         SELECT CASE (ref_tensor)\n         CASE (1)\n            tensor_large => tensor_contr_2\n         CASE (2)\n            tensor_large => tensor_contr_3\n         END SELECT\n         tensor_small => tensor_contr_1\n\n      END SELECT\n\n      IF (unit_nr_prv /= 0) CALL dbcsr_t_print_contraction_index(tensor_contr_1, indchar1_mod, &\n                                                                 tensor_contr_2, indchar2_mod, &\n                                                                 tensor_contr_3, indchar3_mod, unit_nr_prv)\n      IF (unit_nr_prv /= 0) THEN\n         IF (new_1) CALL dbcsr_t_write_tensor_info(tensor_contr_1, unit_nr_prv, full_info=log_verbose)\n         IF (new_1) CALL dbcsr_t_write_tensor_dist(tensor_contr_1, unit_nr_prv)\n         IF (new_2) CALL dbcsr_t_write_tensor_info(tensor_contr_2, unit_nr_prv, full_info=log_verbose)\n         IF (new_2) CALL dbcsr_t_write_tensor_dist(tensor_contr_2, unit_nr_prv)\n      END IF\n\n      IF (.NOT. PRESENT(result_index)) THEN\n         CALL dbcsr_tas_multiply(trans_1, trans_2, trans_3, alpha, &\n                                 tensor_contr_1%matrix_rep, tensor_contr_2%matrix_rep, &\n                                 beta, &\n                                 tensor_contr_3%matrix_rep, filter_eps=filter_eps, flop=flop, &\n                                 unit_nr=unit_nr_prv, log_verbose=log_verbose, &\n                                 split_opt=split_opt, &\n                                 move_data_a=move_data_1, move_data_b=move_data_2, retain_sparsity=retain_sparsity)\n      ELSE\n\n         CALL dbcsr_tas_result_index(trans_1, trans_2, trans_3, tensor_contr_1%matrix_rep, tensor_contr_2%matrix_rep, &\n                                     tensor_contr_3%matrix_rep, filter_eps=filter_eps, blk_ind=result_index_2d)\n\n         nblk = SIZE(result_index_2d, 1)\n         IF (PRESENT(nblks_local)) nblks_local = nblk\n         IF (SIZE(result_index, 1) < nblk) THEN\n            CALL dbcsr_abort(__LOCATION__, &\n        \"allocated size of `result_index` is too small. This error occurs due to a high load imbalance of distributed tensor data.\")\n         END IF\n\n         DO iblk = 1, nblk\n            result_index(iblk, :) = get_nd_indices_tensor(tensor_contr_3%nd_index_blk, result_index_2d(iblk, :))\n         END DO\n\n         IF (new_1) THEN\n            CALL dbcsr_t_destroy(tensor_contr_1)\n            DEALLOCATE (tensor_contr_1)\n         END IF\n         IF (new_2) THEN\n            CALL dbcsr_t_destroy(tensor_contr_2)\n            DEALLOCATE (tensor_contr_2)\n         END IF\n         IF (new_3) THEN\n            CALL dbcsr_t_destroy(tensor_contr_3)\n            DEALLOCATE (tensor_contr_3)\n         END IF\n         IF (do_crop_1) THEN\n            CALL dbcsr_t_destroy(tensor_crop_1)\n            DEALLOCATE (tensor_crop_1)\n         END IF\n         IF (do_crop_2) THEN\n            CALL dbcsr_t_destroy(tensor_crop_2)\n            DEALLOCATE (tensor_crop_2)\n         END IF\n\n         CALL dbcsr_t_destroy(tensor_algn_1)\n         CALL dbcsr_t_destroy(tensor_algn_2)\n         CALL dbcsr_t_destroy(tensor_algn_3)\n\n         CALL timestop(handle)\n         RETURN\n      END IF\n\n      IF (PRESENT(pgrid_opt_1)) THEN\n         IF (.NOT. new_1) THEN\n            ALLOCATE (pgrid_opt_1)\n            pgrid_opt_1 = opt_pgrid(tensor_1, split_opt)\n         END IF\n      END IF\n\n      IF (PRESENT(pgrid_opt_2)) THEN\n         IF (.NOT. new_2) THEN\n            ALLOCATE (pgrid_opt_2)\n            pgrid_opt_2 = opt_pgrid(tensor_2, split_opt)\n         END IF\n      END IF\n\n      IF (PRESENT(pgrid_opt_3)) THEN\n         IF (.NOT. new_3) THEN\n            ALLOCATE (pgrid_opt_3)\n            pgrid_opt_3 = opt_pgrid(tensor_3, split_opt)\n         END IF\n      END IF\n\n      do_batched = tensor_small%matrix_rep%do_batched > 0\n\n      tensors_remapped = .FALSE.\n      IF (new_1 .OR. new_2 .OR. new_3) tensors_remapped = .TRUE.\n\n      IF (tensors_remapped .AND. do_batched) THEN\n         CALL dbcsr_warn(__LOCATION__, &\n                         \"Internal process grid optimization disabled because tensors are not in contraction-compatible format\")\n      END IF\n\n      CALL mp_environ(tensor_large%pgrid%mp_comm_2d, 2, pdims_2d, pcoord_2d, periods_2d)\n\n      ! optimize process grid during batched contraction\n      do_change_pgrid(:) = .FALSE.\n      IF ((.NOT. tensors_remapped) .AND. do_batched) THEN\n         ASSOCIATE (storage => tensor_small%contraction_storage)\n            DBCSR_ASSERT(storage%static)\n            split = dbcsr_tas_info(tensor_large%matrix_rep)\n            do_change_pgrid(:) = &\n               update_contraction_storage(storage, split_opt, split)\n\n            IF (ANY(do_change_pgrid)) THEN\n               mp_comm_opt = dbcsr_tas_mp_comm(tensor_small%pgrid%mp_comm_2d, split_opt%split_rowcol, NINT(storage%nsplit_avg))\n               CALL dbcsr_tas_create_split(split_opt_avg, mp_comm_opt, split_opt%split_rowcol, &\n                                           NINT(storage%nsplit_avg), own_comm=.TRUE.)\n               CALL mp_environ(split_opt_avg%mp_comm, 2, pdims_2d_opt, pcoord_2d, periods_2d)\n            END IF\n\n         END ASSOCIATE\n\n         IF (do_change_pgrid(1) .AND. .NOT. do_change_pgrid(2)) THEN\n            ! check if new grid has better subgrid, if not there is no need to change process grid\n            CALL mp_environ(split_opt_avg%mp_comm_group, 2, pdims_sub_opt, pcoord_2d, periods_2d)\n            CALL mp_environ(split%mp_comm_group, 2, pdims_sub, pcoord_2d, periods_2d)\n\n            pdim_ratio = MAXVAL(REAL(pdims_sub, real_8))/MINVAL(pdims_sub)\n            pdim_ratio_opt = MAXVAL(REAL(pdims_sub_opt, real_8))/MINVAL(pdims_sub_opt)\n            IF (pdim_ratio/pdim_ratio_opt <= default_pdims_accept_ratio**2) THEN\n               do_change_pgrid(1) = .FALSE.\n               CALL dbcsr_tas_release_info(split_opt_avg)\n            END IF\n         END IF\n      END IF\n\n      IF (unit_nr_prv /= 0) THEN\n         do_write_3 = .TRUE.\n         IF (tensor_contr_3%matrix_rep%do_batched > 0) THEN\n            IF (tensor_contr_3%matrix_rep%mm_storage%batched_out) do_write_3 = .FALSE.\n         END IF\n         IF (do_write_3) THEN\n            CALL dbcsr_t_write_tensor_info(tensor_contr_3, unit_nr_prv, full_info=log_verbose)\n            CALL dbcsr_t_write_tensor_dist(tensor_contr_3, unit_nr_prv)\n         END IF\n      END IF\n\n      IF (new_3) THEN\n         ! need redistribute if we created new tensor for tensor 3\n         CALL dbcsr_t_scale(tensor_algn_3, beta)\n         CALL dbcsr_t_copy_expert(tensor_contr_3, tensor_algn_3, summation=.TRUE., move_data=.TRUE.)\n         IF (PRESENT(filter_eps)) CALL dbcsr_t_filter(tensor_algn_3, filter_eps)\n         ! tensor_3 automatically has correct data because tensor_algn_3 contains a matrix\n         ! pointer to data of tensor_3\n      END IF\n\n      ! transfer contraction storage\n      CALL dbcsr_t_copy_contraction_storage(tensor_contr_1, tensor_1)\n      CALL dbcsr_t_copy_contraction_storage(tensor_contr_2, tensor_2)\n      CALL dbcsr_t_copy_contraction_storage(tensor_contr_3, tensor_3)\n\n      IF (unit_nr_prv /= 0) THEN\n         IF (new_3 .AND. do_write_3) CALL dbcsr_t_write_tensor_info(tensor_3, unit_nr_prv, full_info=log_verbose)\n         IF (new_3 .AND. do_write_3) CALL dbcsr_t_write_tensor_dist(tensor_3, unit_nr_prv)\n      END IF\n\n      CALL dbcsr_t_destroy(tensor_algn_1)\n      CALL dbcsr_t_destroy(tensor_algn_2)\n      CALL dbcsr_t_destroy(tensor_algn_3)\n\n      IF (do_crop_1) THEN\n         CALL dbcsr_t_destroy(tensor_crop_1)\n         DEALLOCATE (tensor_crop_1)\n      END IF\n\n      IF (do_crop_2) THEN\n         CALL dbcsr_t_destroy(tensor_crop_2)\n         DEALLOCATE (tensor_crop_2)\n      END IF\n\n      IF (new_1) THEN\n         CALL dbcsr_t_destroy(tensor_contr_1)\n         DEALLOCATE (tensor_contr_1)\n      END IF\n      IF (new_2) THEN\n         CALL dbcsr_t_destroy(tensor_contr_2)\n         DEALLOCATE (tensor_contr_2)\n      END IF\n      IF (new_3) THEN\n         CALL dbcsr_t_destroy(tensor_contr_3)\n         DEALLOCATE (tensor_contr_3)\n      END IF\n\n      IF (PRESENT(move_data)) THEN\n         IF (move_data) THEN\n            CALL dbcsr_t_clear(tensor_1)\n            CALL dbcsr_t_clear(tensor_2)\n         END IF\n      END IF\n\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, '(A)') repeat(\"-\", 80)\n         WRITE (unit_nr_prv, '(A)') \"TENSOR CONTRACTION DONE\"\n         WRITE (unit_nr_prv, '(A)') repeat(\"-\", 80)\n      END IF\n\n      IF (ANY(do_change_pgrid)) THEN\n         pgrid_changed_any = .FALSE.\n         SELECT CASE (max_mm_dim)\n         CASE (1)\n            IF (ALLOCATED(tensor_1%contraction_storage) .AND. ALLOCATED(tensor_3%contraction_storage)) THEN\n               CALL dbcsr_t_change_pgrid_2d(tensor_1, tensor_1%pgrid%mp_comm_2d, pdims=pdims_2d_opt, &\n                                            nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, &\n                                            pgrid_changed=pgrid_changed, &\n                                            unit_nr=unit_nr_prv)\n               IF (pgrid_changed) pgrid_changed_any = .TRUE.\n               CALL dbcsr_t_change_pgrid_2d(tensor_3, tensor_3%pgrid%mp_comm_2d, pdims=pdims_2d_opt, &\n                                            nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, &\n                                            pgrid_changed=pgrid_changed, &\n                                            unit_nr=unit_nr_prv)\n               IF (pgrid_changed) pgrid_changed_any = .TRUE.\n            END IF\n            IF (pgrid_changed_any) THEN\n               IF (tensor_2%matrix_rep%do_batched == 3) THEN\n                  ! set flag that process grid has been optimized to make sure that no grid optimizations are done\n                  ! in TAS multiply algorithm\n                  CALL dbcsr_tas_batched_mm_complete(tensor_2%matrix_rep)\n               END IF\n            END IF\n         CASE (2)\n            IF (ALLOCATED(tensor_1%contraction_storage) .AND. ALLOCATED(tensor_2%contraction_storage)) THEN\n               CALL dbcsr_t_change_pgrid_2d(tensor_1, tensor_1%pgrid%mp_comm_2d, pdims=pdims_2d_opt, &\n                                            nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, &\n                                            pgrid_changed=pgrid_changed, &\n                                            unit_nr=unit_nr_prv)\n               IF (pgrid_changed) pgrid_changed_any = .TRUE.\n               CALL dbcsr_t_change_pgrid_2d(tensor_2, tensor_2%pgrid%mp_comm_2d, pdims=pdims_2d_opt, &\n                                            nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, &\n                                            pgrid_changed=pgrid_changed, &\n                                            unit_nr=unit_nr_prv)\n               IF (pgrid_changed) pgrid_changed_any = .TRUE.\n            END IF\n            IF (pgrid_changed_any) THEN\n               IF (tensor_3%matrix_rep%do_batched == 3) THEN\n                  CALL dbcsr_tas_batched_mm_complete(tensor_3%matrix_rep)\n               END IF\n            END IF\n         CASE (3)\n            IF (ALLOCATED(tensor_2%contraction_storage) .AND. ALLOCATED(tensor_3%contraction_storage)) THEN\n               CALL dbcsr_t_change_pgrid_2d(tensor_2, tensor_2%pgrid%mp_comm_2d, pdims=pdims_2d_opt, &\n                                            nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, &\n                                            pgrid_changed=pgrid_changed, &\n                                            unit_nr=unit_nr_prv)\n               IF (pgrid_changed) pgrid_changed_any = .TRUE.\n               CALL dbcsr_t_change_pgrid_2d(tensor_3, tensor_3%pgrid%mp_comm_2d, pdims=pdims_2d_opt, &\n                                            nsplit=split_opt_avg%ngroup, dimsplit=split_opt_avg%split_rowcol, &\n                                            pgrid_changed=pgrid_changed, &\n                                            unit_nr=unit_nr_prv)\n               IF (pgrid_changed) pgrid_changed_any = .TRUE.\n            END IF\n            IF (pgrid_changed_any) THEN\n               IF (tensor_1%matrix_rep%do_batched == 3) THEN\n                  CALL dbcsr_tas_batched_mm_complete(tensor_1%matrix_rep)\n               END IF\n            END IF\n         END SELECT\n         CALL dbcsr_tas_release_info(split_opt_avg)\n      END IF\n\n      IF ((.NOT. tensors_remapped) .AND. do_batched) THEN\n         ! freeze TAS process grids if tensor grids were optimized\n         CALL dbcsr_tas_set_batched_state(tensor_1%matrix_rep, opt_grid=.TRUE.)\n         CALL dbcsr_tas_set_batched_state(tensor_2%matrix_rep, opt_grid=.TRUE.)\n         CALL dbcsr_tas_set_batched_state(tensor_3%matrix_rep, opt_grid=.TRUE.)\n      END IF\n\n      CALL dbcsr_tas_release_info(split_opt)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE align_tensor(tensor_in, contract_in, notcontract_in, &\n      !! align tensor index with data\n                           tensor_out, contract_out, notcontract_out, indp_in, indp_out)\n      TYPE(dbcsr_t_type), INTENT(INOUT)               :: tensor_in\n      INTEGER, DIMENSION(:), INTENT(IN)            :: contract_in, notcontract_in\n      TYPE(dbcsr_t_type), INTENT(OUT)              :: tensor_out\n      INTEGER, DIMENSION(SIZE(contract_in)), &\n         INTENT(OUT)                               :: contract_out\n      INTEGER, DIMENSION(SIZE(notcontract_in)), &\n         INTENT(OUT)                               :: notcontract_out\n      CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_in)), INTENT(IN) :: indp_in\n      CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_in)), INTENT(OUT) :: indp_out\n      INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: align\n\n      CALL dbcsr_t_align_index(tensor_in, tensor_out, order=align)\n      contract_out = align(contract_in)\n      notcontract_out = align(notcontract_in)\n      indp_out(align) = indp_in\n\n   END SUBROUTINE\n\n   SUBROUTINE reshape_mm_compatible(tensor1, tensor2, tensor1_out, tensor2_out, ind1_free, ind1_linked, &\n                                    ind2_free, ind2_linked, trans1, trans2, new1, new2, ref_tensor, &\n                                    nodata1, nodata2, move_data_1, &\n                                    move_data_2, optimize_dist, unit_nr)\n      !! Prepare tensor for contraction: redistribute to a 2d format which can be contracted by\n      !! matrix multiplication. This routine reshapes the two largest of the three tensors. Redistribution\n      !! is avoided if tensors already in a consistent layout.\n\n      TYPE(dbcsr_t_type), TARGET, INTENT(INOUT)   :: tensor1\n         !! tensor 1 in\n      TYPE(dbcsr_t_type), TARGET, INTENT(INOUT)   :: tensor2\n         !! tensor 2 in\n      TYPE(dbcsr_t_type), POINTER, INTENT(OUT)    :: tensor1_out, tensor2_out\n         !! tensor 1 out\n         !! tensor 2 out\n      INTEGER, DIMENSION(:), INTENT(IN)           :: ind1_free, ind2_free\n         !! indices of tensor 1 that are \"free\" (not linked to any index of tensor 2)\n      INTEGER, DIMENSION(:), INTENT(IN)           :: ind1_linked, ind2_linked\n         !! indices of tensor 1 that are linked to indices of tensor 2\n         !! 1:1 correspondence with ind1_linked\n      CHARACTER(LEN=1), INTENT(OUT)               :: trans1, trans2\n         !! transpose flag of matrix rep. of tensor 1\n         !! transpose flag of matrix rep. tensor 2\n      LOGICAL, INTENT(OUT)                        :: new1, new2\n         !! whether a new tensor 1 was created\n         !! whether a new tensor 2 was created\n      INTEGER, INTENT(OUT) :: ref_tensor\n      LOGICAL, INTENT(IN), OPTIONAL               :: nodata1, nodata2\n         !! don't copy data of tensor 1\n         !! don't copy data of tensor 2\n      LOGICAL, INTENT(INOUT), OPTIONAL            :: move_data_1, move_data_2\n         !! memory optimization: transfer data s.t. tensor1 may be empty on return\n         !! memory optimization: transfer data s.t. tensor2 may be empty on return\n      LOGICAL, INTENT(IN), OPTIONAL               :: optimize_dist\n         !! experimental: optimize distribution\n      INTEGER, INTENT(IN), OPTIONAL               :: unit_nr\n         !! output unit\n      INTEGER                                     :: compat1, compat1_old, compat2, compat2_old, &\n                                                     unit_nr_prv\n      TYPE(array_list)                            :: dist_list\n      INTEGER, DIMENSION(:), ALLOCATABLE          :: mp_dims\n      TYPE(dbcsr_t_distribution_type)             :: dist_in\n      INTEGER(KIND=int_8)                         :: nblkrows, nblkcols\n      LOGICAL                                     :: optimize_dist_prv\n      INTEGER, DIMENSION(ndims_tensor(tensor1)) :: dims1\n      INTEGER, DIMENSION(ndims_tensor(tensor2)) :: dims2\n      TYPE(mp_comm_type) :: comm_2d\n\n      NULLIFY (tensor1_out, tensor2_out)\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n\n      CALL blk_dims_tensor(tensor1, dims1)\n      CALL blk_dims_tensor(tensor2, dims2)\n\n      IF (PRODUCT(int(dims1, int_8)) .GE. PRODUCT(int(dims2, int_8))) THEN\n         ref_tensor = 1\n      ELSE\n         ref_tensor = 2\n      END IF\n\n      IF (PRESENT(optimize_dist)) THEN\n         optimize_dist_prv = optimize_dist\n      ELSE\n         optimize_dist_prv = .FALSE.\n      END IF\n\n      compat1 = compat_map(tensor1%nd_index, ind1_linked)\n      compat2 = compat_map(tensor2%nd_index, ind2_linked)\n      compat1_old = compat1\n      compat2_old = compat2\n\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') \"compatibility of\", TRIM(tensor1%name), \":\"\n         SELECT CASE (compat1)\n         CASE (0)\n            WRITE (unit_nr_prv, '(A)') \"Not compatible\"\n         CASE (1)\n            WRITE (unit_nr_prv, '(A)') \"Normal\"\n         CASE (2)\n            WRITE (unit_nr_prv, '(A)') \"Transposed\"\n         END SELECT\n         WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') \"compatibility of\", TRIM(tensor2%name), \":\"\n         SELECT CASE (compat2)\n         CASE (0)\n            WRITE (unit_nr_prv, '(A)') \"Not compatible\"\n         CASE (1)\n            WRITE (unit_nr_prv, '(A)') \"Normal\"\n         CASE (2)\n            WRITE (unit_nr_prv, '(A)') \"Transposed\"\n         END SELECT\n      END IF\n\n      new1 = .FALSE.\n      new2 = .FALSE.\n\n      IF (compat1 == 0 .OR. optimize_dist_prv) THEN\n         new1 = .TRUE.\n      END IF\n\n      IF (compat2 == 0 .OR. optimize_dist_prv) THEN\n         new2 = .TRUE.\n      END IF\n\n      IF (ref_tensor == 1) THEN ! tensor 1 is reference and tensor 2 is reshaped compatible with tensor 1\n         IF (compat1 == 0 .OR. optimize_dist_prv) THEN ! tensor 1 is not contraction compatible --> reshape\n            IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') \"Redistribution of\", TRIM(tensor1%name)\n            nblkrows = PRODUCT(INT(dims1(ind1_linked), KIND=int_8))\n            nblkcols = PRODUCT(INT(dims1(ind1_free), KIND=int_8))\n            comm_2d = dbcsr_tas_mp_comm(tensor1%pgrid%mp_comm_2d, nblkrows, nblkcols)\n            ALLOCATE (tensor1_out)\n            CALL dbcsr_t_remap(tensor1, ind1_linked, ind1_free, tensor1_out, comm_2d=comm_2d, &\n                               nodata=nodata1, move_data=move_data_1)\n            CALL mp_comm_free(comm_2d)\n            compat1 = 1\n         ELSE\n            IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') \"No redistribution of\", TRIM(tensor1%name)\n            tensor1_out => tensor1\n         END IF\n         IF (compat2 == 0 .OR. optimize_dist_prv) THEN ! tensor 2 is not contraction compatible --> reshape\n            IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A,1X,A,1X,A)') \"Redistribution of\", &\n               TRIM(tensor2%name), \"compatible with\", TRIM(tensor1%name)\n            dist_in = dbcsr_t_distribution(tensor1_out)\n            dist_list = array_sublist(dist_in%nd_dist, ind1_linked)\n            IF (compat1 == 1) THEN ! linked index is first 2d dimension\n               ! get distribution of linked index, tensor 2 must adopt this distribution\n               ! get grid dimensions of linked index\n               ALLOCATE (mp_dims(ndims_mapping_row(dist_in%pgrid%nd_index_grid)))\n               CALL dbcsr_t_get_mapping_info(dist_in%pgrid%nd_index_grid, dims1_2d=mp_dims)\n               ALLOCATE (tensor2_out)\n               CALL dbcsr_t_remap(tensor2, ind2_linked, ind2_free, tensor2_out, comm_2d=dist_in%pgrid%mp_comm_2d, &\n                                  dist1=dist_list, mp_dims_1=mp_dims, nodata=nodata2, move_data=move_data_2)\n            ELSEIF (compat1 == 2) THEN ! linked index is second 2d dimension\n               ! get distribution of linked index, tensor 2 must adopt this distribution\n               ! get grid dimensions of linked index\n               ALLOCATE (mp_dims(ndims_mapping_column(dist_in%pgrid%nd_index_grid)))\n               CALL dbcsr_t_get_mapping_info(dist_in%pgrid%nd_index_grid, dims2_2d=mp_dims)\n               ALLOCATE (tensor2_out)\n               CALL dbcsr_t_remap(tensor2, ind2_free, ind2_linked, tensor2_out, comm_2d=dist_in%pgrid%mp_comm_2d, &\n                                  dist2=dist_list, mp_dims_2=mp_dims, nodata=nodata2, move_data=move_data_2)\n            ELSE\n               DBCSR_ABORT(\"should not happen\")\n            END IF\n            compat2 = compat1\n         ELSE\n            IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') \"No redistribution of\", TRIM(tensor2%name)\n            tensor2_out => tensor2\n         END IF\n      ELSE ! tensor 2 is reference and tensor 1 is reshaped compatible with tensor 2\n         IF (compat2 == 0 .OR. optimize_dist_prv) THEN ! tensor 2 is not contraction compatible --> reshape\n            IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') \"Redistribution of\", TRIM(tensor2%name)\n            nblkrows = PRODUCT(INT(dims2(ind2_linked), KIND=int_8))\n            nblkcols = PRODUCT(INT(dims2(ind2_free), KIND=int_8))\n            comm_2d = dbcsr_tas_mp_comm(tensor2%pgrid%mp_comm_2d, nblkrows, nblkcols)\n            ALLOCATE (tensor2_out)\n            CALL dbcsr_t_remap(tensor2, ind2_linked, ind2_free, tensor2_out, nodata=nodata2, move_data=move_data_2)\n            CALL mp_comm_free(comm_2d)\n            compat2 = 1\n         ELSE\n            IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') \"No redistribution of\", TRIM(tensor2%name)\n            tensor2_out => tensor2\n         END IF\n         IF (compat1 == 0 .OR. optimize_dist_prv) THEN ! tensor 1 is not contraction compatible --> reshape\n            IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A,1X,A,1X,A)') \"Redistribution of\", TRIM(tensor1%name), &\n               \"compatible with\", TRIM(tensor2%name)\n            dist_in = dbcsr_t_distribution(tensor2_out)\n            dist_list = array_sublist(dist_in%nd_dist, ind2_linked)\n            IF (compat2 == 1) THEN\n               ALLOCATE (mp_dims(ndims_mapping_row(dist_in%pgrid%nd_index_grid)))\n               CALL dbcsr_t_get_mapping_info(dist_in%pgrid%nd_index_grid, dims1_2d=mp_dims)\n               ALLOCATE (tensor1_out)\n               CALL dbcsr_t_remap(tensor1, ind1_linked, ind1_free, tensor1_out, comm_2d=dist_in%pgrid%mp_comm_2d, &\n                                  dist1=dist_list, mp_dims_1=mp_dims, nodata=nodata1, move_data=move_data_1)\n            ELSEIF (compat2 == 2) THEN\n               ALLOCATE (mp_dims(ndims_mapping_column(dist_in%pgrid%nd_index_grid)))\n               CALL dbcsr_t_get_mapping_info(dist_in%pgrid%nd_index_grid, dims2_2d=mp_dims)\n               ALLOCATE (tensor1_out)\n               CALL dbcsr_t_remap(tensor1, ind1_free, ind1_linked, tensor1_out, comm_2d=dist_in%pgrid%mp_comm_2d, &\n                                  dist2=dist_list, mp_dims_2=mp_dims, nodata=nodata1, move_data=move_data_1)\n            ELSE\n               DBCSR_ABORT(\"should not happen\")\n            END IF\n            compat1 = compat2\n         ELSE\n            IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') \"No redistribution of\", TRIM(tensor1%name)\n            tensor1_out => tensor1\n         END IF\n      END IF\n\n      SELECT CASE (compat1)\n      CASE (1)\n         trans1 = dbcsr_no_transpose\n      CASE (2)\n         trans1 = dbcsr_transpose\n      CASE DEFAULT\n         DBCSR_ABORT(\"should not happen\")\n      END SELECT\n\n      SELECT CASE (compat2)\n      CASE (1)\n         trans2 = dbcsr_no_transpose\n      CASE (2)\n         trans2 = dbcsr_transpose\n      CASE DEFAULT\n         DBCSR_ABORT(\"should not happen\")\n      END SELECT\n\n      IF (unit_nr_prv > 0) THEN\n         IF (compat1 .NE. compat1_old) THEN\n            WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') \"compatibility of\", TRIM(tensor1_out%name), \":\"\n            SELECT CASE (compat1)\n            CASE (0)\n               WRITE (unit_nr_prv, '(A)') \"Not compatible\"\n            CASE (1)\n               WRITE (unit_nr_prv, '(A)') \"Normal\"\n            CASE (2)\n               WRITE (unit_nr_prv, '(A)') \"Transposed\"\n            END SELECT\n         END IF\n         IF (compat2 .NE. compat2_old) THEN\n            WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') \"compatibility of\", TRIM(tensor2_out%name), \":\"\n            SELECT CASE (compat2)\n            CASE (0)\n               WRITE (unit_nr_prv, '(A)') \"Not compatible\"\n            CASE (1)\n               WRITE (unit_nr_prv, '(A)') \"Normal\"\n            CASE (2)\n               WRITE (unit_nr_prv, '(A)') \"Transposed\"\n            END SELECT\n         END IF\n      END IF\n\n      IF (new1 .AND. PRESENT(move_data_1)) move_data_1 = .TRUE.\n      IF (new2 .AND. PRESENT(move_data_2)) move_data_2 = .TRUE.\n\n   END SUBROUTINE\n\n   SUBROUTINE reshape_mm_small(tensor_in, ind1, ind2, tensor_out, trans, new, nodata, move_data, unit_nr)\n      !! Prepare tensor for contraction: redistribute to a 2d format which can be contracted by\n      !! matrix multiplication. This routine reshapes the smallest of the three tensors.\n\n      TYPE(dbcsr_t_type), TARGET, INTENT(INOUT)   :: tensor_in\n         !! tensor in\n      INTEGER, DIMENSION(:), INTENT(IN)           :: ind1, ind2\n         !! index that should be mapped to first matrix dimension\n         !! index that should be mapped to second matrix dimension\n      TYPE(dbcsr_t_type), POINTER, INTENT(OUT)    :: tensor_out\n         !! tensor out\n      CHARACTER(LEN=1), INTENT(OUT)               :: trans\n         !! transpose flag of matrix rep.\n      LOGICAL, INTENT(OUT)                        :: new\n         !! whether a new tensor was created for tensor_out\n      LOGICAL, INTENT(IN), OPTIONAL               :: nodata, move_data\n         !! don't copy tensor data\n         !! memory optimization: transfer data s.t. tensor_in may be empty on return\n      INTEGER, INTENT(IN), OPTIONAL               :: unit_nr\n         !! output unit\n      INTEGER                                     :: compat1, compat2, compat1_old, compat2_old, unit_nr_prv\n      LOGICAL                                     :: nodata_prv\n\n      NULLIFY (tensor_out)\n      IF (PRESENT(nodata)) THEN\n         nodata_prv = nodata\n      ELSE\n         nodata_prv = .FALSE.\n      END IF\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n\n      new = .FALSE.\n      compat1 = compat_map(tensor_in%nd_index, ind1)\n      compat2 = compat_map(tensor_in%nd_index, ind2)\n      compat1_old = compat1; compat2_old = compat2\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') \"compatibility of\", TRIM(tensor_in%name), \":\"\n         IF (compat1 == 1 .AND. compat2 == 2) THEN\n            WRITE (unit_nr_prv, '(A)') \"Normal\"\n         ELSEIF (compat1 == 2 .AND. compat2 == 1) THEN\n            WRITE (unit_nr_prv, '(A)') \"Transposed\"\n         ELSE\n            WRITE (unit_nr_prv, '(A)') \"Not compatible\"\n         END IF\n      END IF\n      IF (compat1 == 0 .or. compat2 == 0) THEN ! index mapping not compatible with contract index\n\n         IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') \"Redistribution of\", TRIM(tensor_in%name)\n\n         ALLOCATE (tensor_out)\n         CALL dbcsr_t_remap(tensor_in, ind1, ind2, tensor_out, nodata=nodata, move_data=move_data)\n         CALL dbcsr_t_copy_contraction_storage(tensor_in, tensor_out)\n         compat1 = 1\n         compat2 = 2\n         new = .TRUE.\n      ELSE\n         IF (unit_nr_prv > 0) WRITE (unit_nr_prv, '(T2,A,1X,A)') \"No redistribution of\", TRIM(tensor_in%name)\n         tensor_out => tensor_in\n      END IF\n\n      IF (compat1 == 1 .AND. compat2 == 2) THEN\n         trans = dbcsr_no_transpose\n      ELSEIF (compat1 == 2 .AND. compat2 == 1) THEN\n         trans = dbcsr_transpose\n      ELSE\n         DBCSR_ABORT(\"this should not happen\")\n      END IF\n\n      IF (unit_nr_prv > 0) THEN\n         IF (compat1_old .NE. compat1 .OR. compat2_old .NE. compat2) THEN\n            WRITE (unit_nr_prv, '(T2,A,1X,A,A,1X)', advance='no') \"compatibility of\", TRIM(tensor_out%name), \":\"\n            IF (compat1 == 1 .AND. compat2 == 2) THEN\n               WRITE (unit_nr_prv, '(A)') \"Normal\"\n            ELSEIF (compat1 == 2 .AND. compat2 == 1) THEN\n               WRITE (unit_nr_prv, '(A)') \"Transposed\"\n            ELSE\n               WRITE (unit_nr_prv, '(A)') \"Not compatible\"\n            END IF\n         END IF\n      END IF\n\n   END SUBROUTINE\n\n   FUNCTION update_contraction_storage(storage, split_opt, split) RESULT(do_change_pgrid)\n      !! update contraction storage that keeps track of process grids during a batched contraction\n      !! and decide if tensor process grid needs to be optimized\n      TYPE(dbcsr_t_contraction_storage), INTENT(INOUT) :: storage\n      TYPE(dbcsr_tas_split_info), INTENT(IN)           :: split_opt\n         !! optimized TAS process grid\n      TYPE(dbcsr_tas_split_info), INTENT(IN)           :: split\n         !! current TAS process grid\n      INTEGER, DIMENSION(2) :: pdims_opt, coor, pdims, pdims_sub\n      LOGICAL, DIMENSION(2) :: periods\n      LOGICAL, DIMENSION(2) :: do_change_pgrid\n      REAL(kind=real_8) :: change_criterion, pdims_ratio\n      INTEGER :: nsplit_opt, nsplit\n\n      DBCSR_ASSERT(ALLOCATED(split_opt%ngroup_opt))\n      nsplit_opt = split_opt%ngroup_opt\n      nsplit = split%ngroup\n\n      CALL mp_environ(split_opt%mp_comm, 2, pdims_opt, coor, periods)\n      CALL mp_environ(split%mp_comm, 2, pdims, coor, periods)\n\n      storage%ibatch = storage%ibatch + 1\n\n      storage%nsplit_avg = (storage%nsplit_avg*REAL(storage%ibatch - 1, real_8) + REAL(nsplit_opt, real_8)) &\n                           /REAL(storage%ibatch, real_8)\n\n      SELECT CASE (split_opt%split_rowcol)\n      CASE (rowsplit)\n         pdims_ratio = REAL(pdims(1), real_8)/pdims(2)\n      CASE (colsplit)\n         pdims_ratio = REAL(pdims(2), real_8)/pdims(1)\n      END SELECT\n\n      do_change_pgrid(:) = .FALSE.\n\n      ! check for process grid dimensions\n      CALL mp_environ(split%mp_comm_group, 2, pdims_sub, coor, periods)\n      change_criterion = MAXVAL(REAL(pdims_sub, real_8))/MINVAL(pdims_sub)\n      IF (change_criterion > default_pdims_accept_ratio**2) do_change_pgrid(1) = .TRUE.\n\n      ! check for split factor\n      change_criterion = MAX(REAL(nsplit, real_8)/storage%nsplit_avg, REAL(storage%nsplit_avg, real_8)/nsplit)\n      IF (change_criterion > default_nsplit_accept_ratio) do_change_pgrid(2) = .TRUE.\n\n   END FUNCTION\n\n   FUNCTION compat_map(nd_index, compat_ind)\n      !! Check if 2d index is compatible with tensor index\n      TYPE(nd_to_2d_mapping), INTENT(IN) :: nd_index\n      INTEGER, DIMENSION(:), INTENT(IN)  :: compat_ind\n      INTEGER, DIMENSION(ndims_mapping_row(nd_index)) :: map1\n      INTEGER, DIMENSION(ndims_mapping_column(nd_index)) :: map2\n      INTEGER                            :: compat_map\n\n      CALL dbcsr_t_get_mapping_info(nd_index, map1_2d=map1, map2_2d=map2)\n\n      compat_map = 0\n      IF (array_eq_i(map1, compat_ind)) THEN\n         compat_map = 1\n      ELSEIF (array_eq_i(map2, compat_ind)) THEN\n         compat_map = 2\n      END IF\n\n   END FUNCTION\n\n   SUBROUTINE invert_transpose_flag(trans_flag)\n      CHARACTER(LEN=1), INTENT(INOUT)                    :: trans_flag\n\n      IF (trans_flag == dbcsr_transpose) THEN\n         trans_flag = dbcsr_no_transpose\n      ELSEIF (trans_flag == dbcsr_no_transpose) THEN\n         trans_flag = dbcsr_transpose\n      END IF\n   END SUBROUTINE\n\n   SUBROUTINE index_linked_sort(ind_ref, ind_dep)\n      INTEGER, DIMENSION(:), INTENT(INOUT) :: ind_ref, ind_dep\n      INTEGER, DIMENSION(SIZE(ind_ref))    :: sort_indices\n\n      CALL sort(ind_ref, SIZE(ind_ref), sort_indices)\n      ind_dep(:) = ind_dep(sort_indices)\n\n   END SUBROUTINE\n\n   FUNCTION opt_pgrid(tensor, tas_split_info)\n      TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n      TYPE(dbcsr_tas_split_info), INTENT(IN) :: tas_split_info\n      INTEGER, DIMENSION(ndims_matrix_row(tensor)) :: map1\n      INTEGER, DIMENSION(ndims_matrix_column(tensor)) :: map2\n      TYPE(dbcsr_t_pgrid_type) :: opt_pgrid\n      INTEGER, DIMENSION(ndims_tensor(tensor)) :: dims\n\n      CALL dbcsr_t_get_mapping_info(tensor%pgrid%nd_index_grid, map1_2d=map1, map2_2d=map2)\n      CALL blk_dims_tensor(tensor, dims)\n      opt_pgrid = dbcsr_t_nd_mp_comm(tas_split_info%mp_comm, map1, map2, tdims=dims)\n\n      ALLOCATE (opt_pgrid%tas_split_info, SOURCE=tas_split_info)\n      CALL dbcsr_tas_info_hold(opt_pgrid%tas_split_info)\n   END FUNCTION\n\n   SUBROUTINE dbcsr_t_remap(tensor_in, map1_2d, map2_2d, tensor_out, comm_2d, dist1, dist2, &\n                            mp_dims_1, mp_dims_2, name, nodata, move_data)\n      !! Copy tensor to tensor with modified index mapping\n\n      TYPE(dbcsr_t_type), INTENT(INOUT)      :: tensor_in\n      INTEGER, DIMENSION(:), INTENT(IN)      :: map1_2d, map2_2d\n         !! new index mapping\n         !! new index mapping\n      TYPE(dbcsr_t_type), INTENT(OUT)        :: tensor_out\n      CHARACTER(len=*), INTENT(IN), OPTIONAL :: name\n      LOGICAL, INTENT(IN), OPTIONAL          :: nodata, move_data\n      TYPE(mp_comm_type), INTENT(IN), OPTIONAL          :: comm_2d\n      TYPE(array_list), INTENT(IN), OPTIONAL :: dist1, dist2\n      INTEGER, DIMENSION(SIZE(map1_2d)), OPTIONAL :: mp_dims_1\n      INTEGER, DIMENSION(SIZE(map2_2d)), OPTIONAL :: mp_dims_2\n      CHARACTER(len=default_string_length)   :: name_tmp\n      INTEGER, DIMENSION(:), ALLOCATABLE     :: ${varlist(\"blk_sizes\")}$, &\n                                                ${varlist(\"nd_dist\")}$\n      TYPE(dbcsr_t_distribution_type)        :: dist\n      INTEGER                                :: handle, i\n      INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: pdims, myploc\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_remap'\n      LOGICAL                               :: nodata_prv\n      TYPE(dbcsr_t_pgrid_type)              :: comm_nd\n      TYPE(mp_comm_type) :: comm_2d_prv\n\n      CALL timeset(routineN, handle)\n\n      IF (PRESENT(name)) THEN\n         name_tmp = name\n      ELSE\n         name_tmp = tensor_in%name\n      END IF\n      IF (PRESENT(dist1)) THEN\n         DBCSR_ASSERT(PRESENT(mp_dims_1))\n      END IF\n\n      IF (PRESENT(dist2)) THEN\n         DBCSR_ASSERT(PRESENT(mp_dims_2))\n      END IF\n\n      IF (PRESENT(comm_2d)) THEN\n         comm_2d_prv = comm_2d\n      ELSE\n         comm_2d_prv = tensor_in%pgrid%mp_comm_2d\n      END IF\n\n      comm_nd = dbcsr_t_nd_mp_comm(comm_2d_prv, map1_2d, map2_2d, dims1_nd=mp_dims_1, dims2_nd=mp_dims_2)\n      CALL mp_environ_pgrid(comm_nd, pdims, myploc)\n\n      #:for ndim in ndims\n         IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n            CALL get_arrays(tensor_in%blk_sizes, ${varlist(\"blk_sizes\", nmax=ndim)}$)\n         END IF\n      #:endfor\n\n      #:for ndim in ndims\n         IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n            #:for idim in range(1, ndim+1)\n               IF (PRESENT(dist1)) THEN\n                  IF (ANY(map1_2d == ${idim}$)) THEN\n                     i = MINLOC(map1_2d, dim=1, mask=map1_2d == ${idim}$) ! i is location of idim in map1_2d\n                     CALL get_ith_array(dist1, i, nd_dist_${idim}$)\n                  END IF\n               END IF\n\n               IF (PRESENT(dist2)) THEN\n                  IF (ANY(map2_2d == ${idim}$)) THEN\n                     i = MINLOC(map2_2d, dim=1, mask=map2_2d == ${idim}$) ! i is location of idim in map2_2d\n                     CALL get_ith_array(dist2, i, nd_dist_${idim}$)\n                  END IF\n               END IF\n\n               IF (.NOT. ALLOCATED(nd_dist_${idim}$)) THEN\n                  ALLOCATE (nd_dist_${idim}$ (SIZE(blk_sizes_${idim}$)))\n                  CALL dbcsr_t_default_distvec(SIZE(blk_sizes_${idim}$), pdims(${idim}$), blk_sizes_${idim}$, nd_dist_${idim}$)\n               END IF\n            #:endfor\n            CALL dbcsr_t_distribution_new_expert(dist, comm_nd, map1_2d, map2_2d, &\n                                                 ${varlist(\"nd_dist\", nmax=ndim)}$, own_comm=.TRUE.)\n         END IF\n      #:endfor\n\n      #:for ndim in ndims\n         IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n            CALL dbcsr_t_create(tensor_out, name_tmp, dist, &\n                                map1_2d, map2_2d, dbcsr_tas_get_data_type(tensor_in%matrix_rep), &\n                                ${varlist(\"blk_sizes\", nmax=ndim)}$)\n         END IF\n      #:endfor\n\n      IF (PRESENT(nodata)) THEN\n         nodata_prv = nodata\n      ELSE\n         nodata_prv = .FALSE.\n      END IF\n\n      IF (.NOT. nodata_prv) CALL dbcsr_t_copy_expert(tensor_in, tensor_out, move_data=move_data)\n      CALL dbcsr_t_distribution_destroy(dist)\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_align_index(tensor_in, tensor_out, order)\n      !! Align index with data\n\n      TYPE(dbcsr_t_type), INTENT(INOUT)               :: tensor_in\n      TYPE(dbcsr_t_type), INTENT(OUT)                 :: tensor_out\n      INTEGER, DIMENSION(ndims_matrix_row(tensor_in)) :: map1_2d\n      INTEGER, DIMENSION(ndims_matrix_column(tensor_in)) :: map2_2d\n      INTEGER, DIMENSION(ndims_tensor(tensor_in)), &\n         INTENT(OUT), OPTIONAL                        :: order\n         !! permutation resulting from alignment\n      INTEGER, DIMENSION(ndims_tensor(tensor_in))     :: order_prv\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_align_index'\n      INTEGER                                         :: handle\n\n      CALL timeset(routineN, handle)\n\n      CALL dbcsr_t_get_mapping_info(tensor_in%nd_index_blk, map1_2d=map1_2d, map2_2d=map2_2d)\n      order_prv = dbcsr_t_inverse_order([map1_2d, map2_2d])\n      CALL dbcsr_t_permute_index(tensor_in, tensor_out, order=order_prv)\n\n      IF (PRESENT(order)) order = order_prv\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_permute_index(tensor_in, tensor_out, order)\n      !! Create new tensor by reordering index, data is copied exactly (shallow copy)\n      TYPE(dbcsr_t_type), INTENT(INOUT)                  :: tensor_in\n      TYPE(dbcsr_t_type), INTENT(OUT)                 :: tensor_out\n      INTEGER, DIMENSION(ndims_tensor(tensor_in)), &\n         INTENT(IN)                                   :: order\n\n      TYPE(nd_to_2d_mapping)                          :: nd_index_blk_rs, nd_index_rs\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_permute_index'\n      INTEGER                                         :: handle\n      INTEGER                                         :: ndims\n\n      CALL timeset(routineN, handle)\n\n      ndims = ndims_tensor(tensor_in)\n\n      CALL permute_index(tensor_in%nd_index, nd_index_rs, order)\n      CALL permute_index(tensor_in%nd_index_blk, nd_index_blk_rs, order)\n      CALL permute_index(tensor_in%pgrid%nd_index_grid, tensor_out%pgrid%nd_index_grid, order)\n\n      tensor_out%matrix_rep => tensor_in%matrix_rep\n      tensor_out%owns_matrix = .FALSE.\n\n      tensor_out%nd_index = nd_index_rs\n      tensor_out%nd_index_blk = nd_index_blk_rs\n      tensor_out%pgrid%mp_comm_2d = tensor_in%pgrid%mp_comm_2d\n      IF (ALLOCATED(tensor_in%pgrid%tas_split_info)) THEN\n         ALLOCATE (tensor_out%pgrid%tas_split_info, SOURCE=tensor_in%pgrid%tas_split_info)\n      END IF\n      tensor_out%refcount => tensor_in%refcount\n      CALL dbcsr_t_hold(tensor_out)\n\n      CALL reorder_arrays(tensor_in%blk_sizes, tensor_out%blk_sizes, order)\n      CALL reorder_arrays(tensor_in%blk_offsets, tensor_out%blk_offsets, order)\n      CALL reorder_arrays(tensor_in%nd_dist, tensor_out%nd_dist, order)\n      CALL reorder_arrays(tensor_in%blks_local, tensor_out%blks_local, order)\n      ALLOCATE (tensor_out%nblks_local(ndims))\n      ALLOCATE (tensor_out%nfull_local(ndims))\n      tensor_out%nblks_local(order) = tensor_in%nblks_local(:)\n      tensor_out%nfull_local(order) = tensor_in%nfull_local(:)\n      tensor_out%name = tensor_in%name\n      tensor_out%valid = .TRUE.\n\n      IF (ALLOCATED(tensor_in%contraction_storage)) THEN\n         ALLOCATE (tensor_out%contraction_storage, SOURCE=tensor_in%contraction_storage)\n         CALL destroy_array_list(tensor_out%contraction_storage%batch_ranges)\n         CALL reorder_arrays(tensor_in%contraction_storage%batch_ranges, tensor_out%contraction_storage%batch_ranges, order)\n      END IF\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_contract_index(alpha, tensor_1, tensor_2, beta, tensor_3, &\n                                     contract_1, notcontract_1, &\n                                     contract_2, notcontract_2, &\n                                     map_1, map_2, &\n                                     bounds_1, bounds_2, bounds_3, &\n                                     filter_eps, &\n                                     nblks_local, result_index)\n      !! get indices of non-zero tensor blocks for contraction result without actually\n      !! performing contraction.\n      !! this is an estimate based on block norm multiplication.\n      !! See documentation of dbcsr_t_contract.\n      TYPE(dbcsr_scalar_type), INTENT(IN)            :: alpha\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_1\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_2\n      TYPE(dbcsr_scalar_type), INTENT(IN)            :: beta\n      INTEGER, DIMENSION(:), INTENT(IN)              :: contract_1\n      INTEGER, DIMENSION(:), INTENT(IN)              :: contract_2\n      INTEGER, DIMENSION(:), INTENT(IN)              :: map_1\n      INTEGER, DIMENSION(:), INTENT(IN)              :: map_2\n      INTEGER, DIMENSION(:), INTENT(IN)              :: notcontract_1\n      INTEGER, DIMENSION(:), INTENT(IN)              :: notcontract_2\n      TYPE(dbcsr_t_type), INTENT(INOUT), TARGET      :: tensor_3\n      INTEGER, DIMENSION(2, SIZE(contract_1)), &\n         INTENT(IN), OPTIONAL                        :: bounds_1\n      INTEGER, DIMENSION(2, SIZE(notcontract_1)), &\n         INTENT(IN), OPTIONAL                        :: bounds_2\n      INTEGER, DIMENSION(2, SIZE(notcontract_2)), &\n         INTENT(IN), OPTIONAL                        :: bounds_3\n      REAL(KIND=real_8), INTENT(IN), OPTIONAL        :: filter_eps\n      INTEGER, INTENT(OUT)                           :: nblks_local\n         !! number of local blocks on this MPI rank\n      INTEGER, DIMENSION(dbcsr_t_max_nblks_local(tensor_3), ndims_tensor(tensor_3)), &\n         INTENT(OUT)                                 :: result_index\n         !! indices of local non-zero tensor blocks for tensor_3\n         !! only the elements result_index(:nblks_local, :) are relevant (all others are set to 0)\n\n      CALL dbcsr_t_contract_expert(alpha, tensor_1, tensor_2, beta, tensor_3, &\n                                   contract_1, notcontract_1, &\n                                   contract_2, notcontract_2, &\n                                   map_1, map_2, &\n                                   bounds_1=bounds_1, &\n                                   bounds_2=bounds_2, &\n                                   bounds_3=bounds_3, &\n                                   filter_eps=filter_eps, &\n                                   nblks_local=nblks_local, &\n                                   result_index=result_index)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_map_bounds_to_tensors(tensor_1, tensor_2, &\n                                            contract_1, notcontract_1, &\n                                            contract_2, notcontract_2, &\n                                            bounds_t1, bounds_t2, &\n                                            bounds_1, bounds_2, bounds_3, &\n                                            do_crop_1, do_crop_2)\n      !! Map contraction bounds to bounds referring to tensor indices\n      !! see dbcsr_t_contract for docu of dummy arguments\n\n      TYPE(dbcsr_t_type), INTENT(IN)      :: tensor_1, tensor_2\n      INTEGER, DIMENSION(:), INTENT(IN)   :: contract_1, contract_2, &\n                                             notcontract_1, notcontract_2\n      INTEGER, DIMENSION(2, ndims_tensor(tensor_1)), &\n         INTENT(OUT)                                 :: bounds_t1\n         !! bounds mapped to tensor_1\n      INTEGER, DIMENSION(2, ndims_tensor(tensor_2)), &\n         INTENT(OUT)                                 :: bounds_t2\n         !! bounds mapped to tensor_2\n      INTEGER, DIMENSION(2, SIZE(contract_1)), &\n         INTENT(IN), OPTIONAL                        :: bounds_1\n      INTEGER, DIMENSION(2, SIZE(notcontract_1)), &\n         INTENT(IN), OPTIONAL                        :: bounds_2\n      INTEGER, DIMENSION(2, SIZE(notcontract_2)), &\n         INTENT(IN), OPTIONAL                        :: bounds_3\n      LOGICAL, INTENT(OUT), OPTIONAL                 :: do_crop_1, do_crop_2\n         !! whether tensor 1 should be cropped\n         !! whether tensor 2 should be cropped\n      LOGICAL, DIMENSION(2)                          :: do_crop\n\n      do_crop = .FALSE.\n\n      bounds_t1(1, :) = 1\n      CALL dbcsr_t_get_info(tensor_1, nfull_total=bounds_t1(2, :))\n\n      bounds_t2(1, :) = 1\n      CALL dbcsr_t_get_info(tensor_2, nfull_total=bounds_t2(2, :))\n\n      IF (PRESENT(bounds_1)) THEN\n         bounds_t1(:, contract_1) = bounds_1\n         do_crop(1) = .TRUE.\n         bounds_t2(:, contract_2) = bounds_1\n         do_crop(2) = .TRUE.\n      END IF\n\n      IF (PRESENT(bounds_2)) THEN\n         bounds_t1(:, notcontract_1) = bounds_2\n         do_crop(1) = .TRUE.\n      END IF\n\n      IF (PRESENT(bounds_3)) THEN\n         bounds_t2(:, notcontract_2) = bounds_3\n         do_crop(2) = .TRUE.\n      END IF\n\n      IF (PRESENT(do_crop_1)) do_crop_1 = do_crop(1)\n      IF (PRESENT(do_crop_2)) do_crop_2 = do_crop(2)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_print_contraction_index(tensor_1, indchar1, tensor_2, indchar2, tensor_3, indchar3, unit_nr)\n      !! print tensor contraction indices in a human readable way\n\n      TYPE(dbcsr_t_type), INTENT(IN) :: tensor_1, tensor_2, tensor_3\n      CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_1)), INTENT(IN) :: indchar1\n         !! characters printed for index of tensor 1\n      CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_2)), INTENT(IN) :: indchar2\n         !! characters printed for index of tensor 2\n      CHARACTER(LEN=1), DIMENSION(ndims_tensor(tensor_3)), INTENT(IN) :: indchar3\n         !! characters printed for index of tensor 3\n      INTEGER, INTENT(IN) :: unit_nr\n         !! output unit\n      INTEGER, DIMENSION(ndims_matrix_row(tensor_1)) :: map11\n      INTEGER, DIMENSION(ndims_matrix_column(tensor_1)) :: map12\n      INTEGER, DIMENSION(ndims_matrix_row(tensor_2)) :: map21\n      INTEGER, DIMENSION(ndims_matrix_column(tensor_2)) :: map22\n      INTEGER, DIMENSION(ndims_matrix_row(tensor_3)) :: map31\n      INTEGER, DIMENSION(ndims_matrix_column(tensor_3)) :: map32\n      INTEGER :: ichar1, ichar2, ichar3, unit_nr_prv\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n\n      IF (unit_nr_prv /= 0) THEN\n         CALL dbcsr_t_get_mapping_info(tensor_1%nd_index_blk, map1_2d=map11, map2_2d=map12)\n         CALL dbcsr_t_get_mapping_info(tensor_2%nd_index_blk, map1_2d=map21, map2_2d=map22)\n         CALL dbcsr_t_get_mapping_info(tensor_3%nd_index_blk, map1_2d=map31, map2_2d=map32)\n      END IF\n\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, '(T2,A)') \"INDEX INFO\"\n         WRITE (unit_nr_prv, '(T15,A)', advance='no') \"tensor index: (\"\n         DO ichar1 = 1, SIZE(indchar1)\n            WRITE (unit_nr_prv, '(A1)', advance='no') indchar1(ichar1)\n         END DO\n         WRITE (unit_nr_prv, '(A)', advance='no') \") x (\"\n         DO ichar2 = 1, SIZE(indchar2)\n            WRITE (unit_nr_prv, '(A1)', advance='no') indchar2(ichar2)\n         END DO\n         WRITE (unit_nr_prv, '(A)', advance='no') \") = (\"\n         DO ichar3 = 1, SIZE(indchar3)\n            WRITE (unit_nr_prv, '(A1)', advance='no') indchar3(ichar3)\n         END DO\n         WRITE (unit_nr_prv, '(A)') \")\"\n\n         WRITE (unit_nr_prv, '(T15,A)', advance='no') \"matrix index: (\"\n         DO ichar1 = 1, SIZE(map11)\n            WRITE (unit_nr_prv, '(A1)', advance='no') indchar1(map11(ichar1))\n         END DO\n         WRITE (unit_nr_prv, '(A1)', advance='no') \"|\"\n         DO ichar1 = 1, SIZE(map12)\n            WRITE (unit_nr_prv, '(A1)', advance='no') indchar1(map12(ichar1))\n         END DO\n         WRITE (unit_nr_prv, '(A)', advance='no') \") x (\"\n         DO ichar2 = 1, SIZE(map21)\n            WRITE (unit_nr_prv, '(A1)', advance='no') indchar2(map21(ichar2))\n         END DO\n         WRITE (unit_nr_prv, '(A1)', advance='no') \"|\"\n         DO ichar2 = 1, SIZE(map22)\n            WRITE (unit_nr_prv, '(A1)', advance='no') indchar2(map22(ichar2))\n         END DO\n         WRITE (unit_nr_prv, '(A)', advance='no') \") = (\"\n         DO ichar3 = 1, SIZE(map31)\n            WRITE (unit_nr_prv, '(A1)', advance='no') indchar3(map31(ichar3))\n         END DO\n         WRITE (unit_nr_prv, '(A1)', advance='no') \"|\"\n         DO ichar3 = 1, SIZE(map32)\n            WRITE (unit_nr_prv, '(A1)', advance='no') indchar3(map32(ichar3))\n         END DO\n         WRITE (unit_nr_prv, '(A)') \")\"\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_batched_contract_init(tensor, ${varlist(\"batch_range\")}$)\n      !! Initialize batched contraction for this tensor.\n      !!\n      !! Explanation: A batched contraction is a contraction performed in several consecutive steps by\n      !! specification of bounds in dbcsr_t_contract. This can be used to reduce memory by a large factor.\n      !! The routines dbcsr_t_batched_contract_init and dbcsr_t_batched_contract_finalize should be\n      !! called to define the scope of a batched contraction as this enables important optimizations\n      !! (adapting communication scheme to batches and adapting process grid to multiplication algorithm).\n      !! The routines dbcsr_t_batched_contract_init and dbcsr_t_batched_contract_finalize must be called\n      !! before the first and after the last contraction step on all 3 tensors.\n      !!\n      !! Requirements:\n      !! - the tensors are in a compatible matrix layout (see documentation of `dbcsr_t_contract`, note 2 & 3).\n      !!   If they are not, process grid optimizations are disabled and a warning is issued.\n      !! - within the scope of a batched contraction, it is not allowed to access or change tensor data\n      !!   except by calling the routines dbcsr_t_contract & dbcsr_t_copy.\n      !! - the bounds affecting indices of the smallest tensor must not change in the course of a batched\n      !!   contraction (todo: get rid of this requirement).\n      !!\n      !! Side effects:\n      !! - the parallel layout (process grid and distribution) of all tensors may change. In order to\n      !!   disable the process grid optimization including this side effect, call this routine only on the\n      !!   smallest of the 3 tensors.\n      !!\n      !! @note\n      !! Note 1: for an example of batched contraction see `examples/dbcsr_tensor_example.F`.\n      !! (todo: the example is outdated and should be updated).\n      !!\n      !! Note 2: it is meaningful to use this feature if the contraction consists of one batch only\n      !! but if multiple contractions involving the same 3 tensors are performed\n      !! (batched_contract_init and batched_contract_finalize must then be called before/after each\n      !! contraction call). The process grid is then optimized after the first contraction\n      !! and future contraction may profit from this optimization.\n      !! @endnote\n      TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor\n      INTEGER, DIMENSION(:), OPTIONAL, INTENT(IN)        :: ${varlist(\"batch_range\")}$\n         !! For internal load balancing optimizations, optionally specify the index ranges of\n         !! batched contraction.\n         !! batch_range_i refers to the ith tensor dimension and contains all block indices starting\n         !! a new range. The size should be the number of ranges plus one, the last element being the\n         !! block index plus one of the last block in the last range.\n      INTEGER, DIMENSION(ndims_tensor(tensor)) :: tdims\n      INTEGER, DIMENSION(:), ALLOCATABLE                 :: ${varlist(\"batch_range_prv\")}$\n      LOGICAL :: static_range\n\n      CALL dbcsr_t_get_info(tensor, nblks_total=tdims)\n\n      static_range = .TRUE.\n      #:for idim in range(1, maxdim+1)\n         IF (ndims_tensor(tensor) >= ${idim}$) THEN\n            IF (PRESENT(batch_range_${idim}$)) THEN\n               CALL allocate_any(batch_range_prv_${idim}$, source=batch_range_${idim}$)\n               static_range = .FALSE.\n            ELSE\n               ALLOCATE (batch_range_prv_${idim}$ (2))\n               batch_range_prv_${idim}$ (1) = 1\n               batch_range_prv_${idim}$ (2) = tdims(${idim}$) + 1\n            END IF\n         END IF\n      #:endfor\n\n      ALLOCATE (tensor%contraction_storage)\n      tensor%contraction_storage%static = static_range\n      IF (static_range) THEN\n         CALL dbcsr_tas_batched_mm_init(tensor%matrix_rep)\n      END IF\n      tensor%contraction_storage%nsplit_avg = 0.0_real_8\n      tensor%contraction_storage%ibatch = 0\n\n      #:for ndim in range(1, maxdim+1)\n         IF (ndims_tensor(tensor) == ${ndim}$) THEN\n            CALL create_array_list(tensor%contraction_storage%batch_ranges, ${ndim}$, &\n                                   ${varlist(\"batch_range_prv\", nmax=ndim)}$)\n         END IF\n      #:endfor\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_batched_contract_finalize(tensor, unit_nr)\n      !! finalize batched contraction. This performs all communication that has been postponed in the\n      !! contraction calls.\n      TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor\n      INTEGER, INTENT(IN), OPTIONAL :: unit_nr\n      LOGICAL :: do_write\n      INTEGER :: unit_nr_prv, handle\n\n      CALL mp_sync(tensor%pgrid%mp_comm_2d)\n      CALL timeset(\"dbcsr_t_total\", handle)\n      unit_nr_prv = prep_output_unit(unit_nr)\n\n      do_write = .FALSE.\n\n      IF (tensor%contraction_storage%static) THEN\n         IF (tensor%matrix_rep%do_batched > 0) THEN\n            IF (tensor%matrix_rep%mm_storage%batched_out) do_write = .TRUE.\n         END IF\n         CALL dbcsr_tas_batched_mm_finalize(tensor%matrix_rep)\n      END IF\n\n      IF (do_write .AND. unit_nr_prv /= 0) THEN\n         IF (unit_nr_prv > 0) THEN\n            WRITE (unit_nr_prv, \"(T2,A)\") &\n               \"FINALIZING BATCHED PROCESSING OF MATMUL\"\n         END IF\n         CALL dbcsr_t_write_tensor_info(tensor, unit_nr_prv)\n         CALL dbcsr_t_write_tensor_dist(tensor, unit_nr_prv)\n      END IF\n\n      CALL destroy_array_list(tensor%contraction_storage%batch_ranges)\n      DEALLOCATE (tensor%contraction_storage)\n      CALL mp_sync(tensor%pgrid%mp_comm_2d)\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_change_pgrid(tensor, pgrid, ${varlist(\"batch_range\")}$, &\n                                   nodata, pgrid_changed, unit_nr)\n      !! change the process grid of a tensor\n      TYPE(dbcsr_t_type), INTENT(INOUT)                  :: tensor\n      TYPE(dbcsr_t_pgrid_type), INTENT(IN)               :: pgrid\n      INTEGER, DIMENSION(:), OPTIONAL, INTENT(IN)        :: ${varlist(\"batch_range\")}$\n         !! For internal load balancing optimizations, optionally specify the index ranges of\n         !! batched contraction.\n         !! batch_range_i refers to the ith tensor dimension and contains all block indices starting\n         !! a new range. The size should be the number of ranges plus one, the last element being the\n         !! block index plus one of the last block in the last range.\n      LOGICAL, INTENT(IN), OPTIONAL                      :: nodata\n         !! optionally don't copy the tensor data (then tensor is empty on returned)\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: pgrid_changed\n      INTEGER, INTENT(IN), OPTIONAL                      :: unit_nr\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_change_pgrid'\n      CHARACTER(default_string_length)                   :: name\n      INTEGER                                            :: handle\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: ${varlist(\"bs\")}$, &\n                                                            ${varlist(\"dist\")}$\n      INTEGER, DIMENSION(ndims_tensor(tensor))           :: pcoord, pcoord_ref, pdims, pdims_ref, &\n                                                            tdims\n      TYPE(dbcsr_t_type)                                 :: t_tmp\n      TYPE(dbcsr_t_distribution_type)                    :: dist\n      INTEGER, DIMENSION(ndims_matrix_row(tensor)) :: map1\n      INTEGER, &\n         DIMENSION(ndims_matrix_column(tensor))    :: map2\n      LOGICAL, DIMENSION(ndims_tensor(tensor))             :: mem_aware\n      INTEGER, DIMENSION(ndims_tensor(tensor)) :: nbatch\n      INTEGER :: ind1, ind2, batch_size, ibatch\n\n      IF (PRESENT(pgrid_changed)) pgrid_changed = .FALSE.\n      CALL mp_environ_pgrid(pgrid, pdims, pcoord)\n      CALL mp_environ_pgrid(tensor%pgrid, pdims_ref, pcoord_ref)\n\n      IF (ALL(pdims == pdims_ref)) THEN\n         IF (ALLOCATED(pgrid%tas_split_info) .AND. ALLOCATED(tensor%pgrid%tas_split_info)) THEN\n            IF (pgrid%tas_split_info%ngroup == tensor%pgrid%tas_split_info%ngroup) THEN\n               RETURN\n            END IF\n         END IF\n      END IF\n\n      CALL timeset(routineN, handle)\n\n      #:for idim in range(1, maxdim+1)\n         IF (ndims_tensor(tensor) >= ${idim}$) THEN\n            mem_aware(${idim}$) = PRESENT(batch_range_${idim}$)\n            IF (mem_aware(${idim}$)) nbatch(${idim}$) = SIZE(batch_range_${idim}$) - 1\n         END IF\n      #:endfor\n\n      CALL dbcsr_t_get_info(tensor, nblks_total=tdims, name=name)\n\n      #:for idim in range(1, maxdim+1)\n         IF (ndims_tensor(tensor) >= ${idim}$) THEN\n            ALLOCATE (bs_${idim}$ (dbcsr_t_nblks_total(tensor, ${idim}$)))\n            CALL get_ith_array(tensor%blk_sizes, ${idim}$, bs_${idim}$)\n            ALLOCATE (dist_${idim}$ (tdims(${idim}$)))\n            dist_${idim}$ = 0\n            IF (mem_aware(${idim}$)) THEN\n               DO ibatch = 1, nbatch(${idim}$)\n                  ind1 = batch_range_${idim}$ (ibatch)\n                  ind2 = batch_range_${idim}$ (ibatch + 1) - 1\n                  batch_size = ind2 - ind1 + 1\n                  CALL dbcsr_t_default_distvec(batch_size, pdims(${idim}$), &\n                                               bs_${idim}$ (ind1:ind2), dist_${idim}$ (ind1:ind2))\n               END DO\n            ELSE\n               CALL dbcsr_t_default_distvec(tdims(${idim}$), pdims(${idim}$), bs_${idim}$, dist_${idim}$)\n            END IF\n         END IF\n      #:endfor\n\n      CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, map1_2d=map1, map2_2d=map2)\n      #:for ndim in ndims\n         IF (ndims_tensor(tensor) == ${ndim}$) THEN\n            CALL dbcsr_t_distribution_new(dist, pgrid, ${varlist(\"dist\", nmax=ndim)}$)\n            CALL dbcsr_t_create(t_tmp, name, dist, map1, map2, dbcsr_type_real_8, ${varlist(\"bs\", nmax=ndim)}$)\n         END IF\n      #:endfor\n      CALL dbcsr_t_distribution_destroy(dist)\n\n      IF (PRESENT(nodata)) THEN\n         IF (.NOT. nodata) CALL dbcsr_t_copy_expert(tensor, t_tmp, move_data=.TRUE.)\n      ELSE\n         CALL dbcsr_t_copy_expert(tensor, t_tmp, move_data=.TRUE.)\n      END IF\n\n      CALL dbcsr_t_copy_contraction_storage(tensor, t_tmp)\n\n      CALL dbcsr_t_destroy(tensor)\n      tensor = t_tmp\n\n      IF (PRESENT(unit_nr)) THEN\n         IF (unit_nr > 0) THEN\n            WRITE (unit_nr, \"(T2,A,1X,A)\") \"OPTIMIZED PGRID INFO FOR\", TRIM(tensor%name)\n            WRITE (unit_nr, \"(T4,A,1X,3I6)\") \"process grid dimensions:\", pdims\n            CALL dbcsr_t_write_split_info(pgrid, unit_nr)\n         END IF\n      END IF\n\n      IF (PRESENT(pgrid_changed)) pgrid_changed = .TRUE.\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_change_pgrid_2d(tensor, mp_comm, pdims, nodata, nsplit, dimsplit, pgrid_changed, unit_nr)\n      !! map tensor to a new 2d process grid for the matrix representation.\n      TYPE(dbcsr_t_type), INTENT(INOUT)                  :: tensor\n      TYPE(mp_comm_type), INTENT(IN)               :: mp_comm\n      INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: pdims\n      LOGICAL, INTENT(IN), OPTIONAL                      :: nodata\n      INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit\n      LOGICAL, INTENT(OUT), OPTIONAL :: pgrid_changed\n      INTEGER, INTENT(IN), OPTIONAL                      :: unit_nr\n      INTEGER, DIMENSION(ndims_matrix_row(tensor)) :: map1\n      INTEGER, DIMENSION(ndims_matrix_column(tensor)) :: map2\n      INTEGER, DIMENSION(ndims_tensor(tensor)) :: dims, nbatches\n      TYPE(dbcsr_t_pgrid_type) :: pgrid\n      INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist(\"batch_range\")}$\n      INTEGER, DIMENSION(:), ALLOCATABLE :: array\n      INTEGER :: idim\n\n      CALL dbcsr_t_get_mapping_info(tensor%pgrid%nd_index_grid, map1_2d=map1, map2_2d=map2)\n      CALL blk_dims_tensor(tensor, dims)\n\n      IF (ALLOCATED(tensor%contraction_storage)) THEN\n         ASSOCIATE (batch_ranges => tensor%contraction_storage%batch_ranges)\n            nbatches = sizes_of_arrays(tensor%contraction_storage%batch_ranges) - 1\n            ! for good load balancing the process grid dimensions should be chosen adapted to the\n            ! tensor dimenions. For batched contraction the tensor dimensions should be divided by\n            ! the number of batches (number of index ranges).\n            DO idim = 1, ndims_tensor(tensor)\n               CALL get_ith_array(tensor%contraction_storage%batch_ranges, idim, array)\n               dims(idim) = array(nbatches(idim) + 1) - array(1)\n               DEALLOCATE (array)\n               dims(idim) = dims(idim)/nbatches(idim)\n               IF (dims(idim) <= 0) dims(idim) = 1\n            END DO\n         END ASSOCIATE\n      END IF\n\n      pgrid = dbcsr_t_nd_mp_comm(mp_comm, map1, map2, pdims_2d=pdims, tdims=dims, nsplit=nsplit, dimsplit=dimsplit)\n      IF (ALLOCATED(tensor%contraction_storage)) THEN\n         #:for ndim in range(1, maxdim+1)\n            IF (ndims_tensor(tensor) == ${ndim}$) THEN\n               CALL get_arrays(tensor%contraction_storage%batch_ranges, ${varlist(\"batch_range\", nmax=ndim)}$)\n               CALL dbcsr_t_change_pgrid(tensor, pgrid, ${varlist(\"batch_range\", nmax=ndim)}$, &\n                                         nodata=nodata, pgrid_changed=pgrid_changed, unit_nr=unit_nr)\n            END IF\n         #:endfor\n      ELSE\n         CALL dbcsr_t_change_pgrid(tensor, pgrid, nodata=nodata, pgrid_changed=pgrid_changed, unit_nr=unit_nr)\n      END IF\n      CALL dbcsr_t_pgrid_destroy(pgrid)\n\n   END SUBROUTINE\n\nEND MODULE\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor.fypp",
    "content": "#!--------------------------------------------------------------------------------------------------!\n#! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n#! This file is part of the DBCSR library.                                                          !\n#!                                                                                                  !\n#! For information on the license, see the LICENSE file.                                            !\n#! For further information please visit https://dbcsr.cp2k.org                                      !\n#! SPDX-License-Identifier: GPL-2.0+                                                                !\n#!--------------------------------------------------------------------------------------------------!\n\n#:mute\n\n#! maximum number of dimensions of fortran arrays\n#:set fortran_max_ndim = 7\n\n#! maximum tensor rank\n#:set maxrank = 4\n\n#! datatypes\n#:set dtype_float_prec = ['real_8', 'real_4', 'real_8', 'real_4']\n#:set dtype_float_type = ['REAL(kind=real_8)', 'REAL(kind=real_4)', 'COMPLEX(kind=real_8)', 'COMPLEX(kind=real_4)']\n#:set dtype_float_suffix = ['r_dp', 'r_sp', 'c_dp', 'c_sp']\n#:set dtype_float_param = ['dbcsr_type_real_8', 'dbcsr_type_real_4', 'dbcsr_type_complex_8', 'dbcsr_type_complex_4']\n\n#:set dtype_int4_type = ['INTEGER']\n#:set dtype_int4_suffix = ['i']\n#:set dtype_int4_param = ['dbcsr_type_int_4']\n\n#:set dtype_int8_type = ['INTEGER(KIND=int_8)']\n#:set dtype_int8_suffix = ['i8']\n#:set dtype_int8_param = ['dbcsr_type_int_8']\n\n#:set dtype_all_type = dtype_float_type + dtype_int4_type\n#:set dtype_all_suffix = dtype_float_suffix + dtype_int4_suffix\n#:set dtype_all_param = dtype_float_param + dtype_int4_param\n\n#:set dtype_int_type = dtype_int4_type + dtype_int8_type\n#:set dtype_int_suffix = dtype_int4_suffix + dtype_int8_suffix\n#:set dtype_int_param = dtype_int4_param + dtype_int8_param\n\n#:set dtype_float_list = list(zip(dtype_float_param, dtype_float_type, dtype_float_suffix))\n#:set dtype_float_list_prec = list(zip(dtype_float_prec, dtype_float_param, dtype_float_type, dtype_float_suffix))\n#:set dtype_int_list = list(zip(dtype_int_param, dtype_int_type, dtype_int_suffix))\n#:set dtype_all_list = list(zip(dtype_all_param, dtype_all_type, dtype_all_suffix))\n\n#:def arrlist(name, nmin=1, nmax=maxrank, ndim_pre=0, ndim_post=0)\n#!    expand array into list of elements \"name(1), name(2), ..., name(n)\n$:    \", \".join([name + \"(\" + \":,\" * ndim_pre + str(i) + \",:\"*ndim_post + \")\" for i in range(nmin, nmax+1)])\n#:enddef\n\n#:def varlist(name, nmin=1, nmax=maxrank, suffix=\"\")\n#!    create variable list \"name_1, name_2, ..., name_n\n$:    \", \".join([name + \"_\" + str(i) + suffix for i in range(nmin, nmax+1)])\n#:enddef\n\n#:def shape_colon(n=maxrank)\n#!    repeated colon ':' for e.g. assumed shape array notation\n$:    ','.join([':']*n)\n#:enddef\n\n#:def shape_explicit(name, n=maxrank)\n#!    explicit shape for pointer bounds remapping\n$:    \", \".join(['LBOUND('+name+', '+ str(i) + '):UBOUND('+name+', '+str(i)+')' for i in range(1,n+1)])\n#:enddef\n\n#:def uselist(list_in)\n#!    comma-separated list of unique entries of list_in\n$:    \", \".join(list(set(list_in)))\n#:enddef\n\n#! added\n\n#! c datatypes\n\n#: set base_dtype_float_type = ['REAL', 'REAL', 'COMPLEX', 'COMPLEX']\n#: set cf_dtype_float_type = ['c_double', 'c_float', 'c_double_complex', 'c_float_complex']\n\n#: set c_dtype_float_type = ['double', 'float', 'double _Complex', 'float _Complex']\n\n#:set cf_dtype_float_list = list(zip(dtype_float_param, dtype_float_type, dtype_float_suffix, base_dtype_float_type, cf_dtype_float_type))\n#: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))\n#:set c_dtype_float_list = list(zip(dtype_float_suffix, c_dtype_float_type))\n\n#:def varlist_equal(name, nmin=1, nmax=maxrank, suffix=\"\", namesuffix=\"\")\n#!    create variable list \"name_1=name_1, name_2=name_2, ..., name_n=name_n\n$:    \", \".join([name + \"_\" + str(i) + suffix + \" = \" + namesuffix + name + \"_\" + str(i) + suffix for i in range(nmin, nmax+1)])\n#:enddef\n\n#:def pointer_list(name, nmin=1, nmax=maxrank, suffix=\"\")\n#!    create pointer list \"name_1(:), name_2(:), ..., name_n(:)\"\n$:    \", \".join([name + \"_\" + str(i) + suffix + \"(\" + \":\" + \")\" for i in range(nmin, nmax+1)])\n#:enddef\n\n#:def c_varlist_and_size(name, nmin=1, nmax=maxrank, suffix=\"\")\n#!    create variable list \"name_1, name_2, ..., name_n\n$:    \", \".join([name + \"_\" + str(i) + \", \" + name + \"_\" + str(i) + \"_\" + \"size\" + suffix for i in range(nmin, nmax+1)])\n#:enddef\n\n#:def c_size(name, nmin=1, nmax=maxrank, suffix=\"\")\n#!    create variable list \"name_1_size, name_2_size, ..., name_n_size\n$:    \", \".join([name + \"_\" + str(i) + \"_\" + \"size\" + suffix for i in range(nmin, nmax+1)])\n#:enddef\n\n#:def c_arrlist_and_size(name, nmin=1, nmax=maxrank)\n#!    expand array into list of elements \"name_1(name_1_size), name_2(name_2_size), ..., name_n(name_n_size)\n$:    \", \".join([name + \"_\" + str(i) + \"(\" +  name + \"_\" + str(i) + \"_\" + \"size\" + \")\" for i in range(nmin, nmax+1)])\n#:enddef\n\n#:def c_bind_pointer(name, nmin=1, nmax=maxrank, suffix=\"\")\n#! bind c pointers: \"name_1 => c_name_1 \\n name_2 => c_name_2 ...\"\n$:   \"\\n \".join([name + \"_\" + str(i) + suffix + \" => \" + \"c_\" +  name + \"_\" + str(i) + suffix for i in range(nmin, nmax+1)])\n#:enddef\n\n#:def extern_varlist_and_size(name, type, nmin=1, nmax=maxrank, suffix=\"\")\n#!    create variable list \"type* name_1, type name_1_size, type* name_2, type name_2_size ...\n$:    \", \".join([type + \"* \" + name + \"_\" + str(i) + \", \" + type + \" \" + name + \"_\" + str(i) + \"_\" + \"size\" + suffix for i in range(nmin, nmax+1)])\n#:enddef\n\n#:def extern_alloc_varlist_and_size(name, nmin=1, nmax=maxrank, suffix=\"\")\n#!    create variable list \"int* name_1, int name_1_size, int* name_2, int name_2_size ...\n$:    \", \".join([\"int** \" + name + \"_\" + str(i) + \", \" + \"int* \" + name + \"_\" + str(i) + \"_\" + \"size\" + suffix for i in range(nmin, nmax+1)])\n#:enddef\n\n#! Handling optional arguments for non-interoperable types\n\n#:def add_num(num,numout)\n#! binary number counter e.g. [1,0,0,0] -> [0,1,0,0]\n#:set carry = 1\n#:for i in range(0,len(num))\n#:set outi = 0\n#:if carry == 1\n #:if num[i] == 0\n  #:set outi = 1\n  #:set carry = 0\n #:else\n  #:set outi = 0\n  #:set carry = 1\n #:endif\n#:else\n #:set outi = num[i]\n#:endif\n#:mute\n$: numout.append(outi)\n#:endmute\n#:endfor\n#:enddef\n\n#:def init(list,n)\n#:mute\n #! fill a list with n zeros\n #:for i in range(n)\n  $: list.append(0)\n #:endfor\n#:endmute\n#:enddef\n\n#:def gen_permlist(permlist,n)\n#:mute\n #! generates a list of permutations from n entries\n #! example n = 2 -> [[0,0],[0,1],[1,0],[1,1]] where 0/1 means present/not present\n #:set idx = []\n #:set newidx = []\n ${init(idx,n)}$\n\n #:set imax = pow(2,n)\n #:for i in range(0,imax)\n        $: permlist.append(idx)\n        ${add_num(idx,newidx)}$\n        #:set idx = newidx\n        #:set newidx = []\n #:endfor\n#:endmute\n#:enddef\n\n#:def gen_vargroups(varlist,vargroups)\n#:mute\n #! generates permuted groups of variables from a variable list\n #! optional variables that appear together may be grouped\n #! example: varlist = [[var1], [var2,var3]]\n #! this gives: vargroups = [ [[var1],[var2,var3]], [[var1]], [[var2,var3]], []]\n #:set permlist = []\n ${gen_permlist(permlist,len(varlist))}$\n #:for p in permlist\n    #:set group = []\n    #:for i in range(len(varlist))\n        #:if p[i] == 0\n            $: group.append(varlist[i])\n        #:endif\n   #:endfor\n   $: vargroups.append(group)\n #:endfor\n#:endmute\n#:enddef\n\n#:def flatten(group,flatgroup)\n#:mute\n#! flattens an array by one level:\n#! [[var1],[var2,var3]] -> [var1,var2,var3]\n#:for sub in group\n #:for x in sub\n $: flatgroup.append(x)\n #:endfor\n#:endfor\n#:endmute\n#:enddef\n\n#:def print_group(group, prefix=\", \")\n#! for a group [[var1],[var2,var3]]\n#! prints \"var1 = var1, var2 = var2, var3 = var3\"\n#:set flatgroup = [item for sublist in group for item in sublist]\n$: prefix * (bool(len(group))) + \", \".join([str(i) + ' = ' + str(i) for i in flatgroup])\n#:enddef\n\n#:def print_groupif(vargroups,varlist,i,check='PRESENT',prefix='')\n#! for a group [[var1]] and a varlist [[var1]],[var2,var3]]\n#! prints \"(ELSE) IF (PRESENT(var1) .AND. .NOT. PRESENT(var2) .AND. .NOT. PRESENT(var3)) THEN\"\n#! to be used in a loop\n#:set group = vargroups[i]\n#:set diff = [item for item in varlist if item not in group]\n#:set stat = \"ELSE IF\"\n#:if i == 0\n#:set stat = \"IF\"\n#:elif i == len(vargroups) - 1\n#:set stat = \"ELSE\"\n#:endif\n#:if stat != \"ELSE\"\n#:set flatgroup = []\n#:set flatdiff = []\n#:mute\n${flatten(group,flatgroup)}$\n${flatten(diff,flatdiff)}$\n#:endmute\n$: stat + \"(\" +  \" .AND. \".join([check + \"(\" +  prefix + str(i) + \")\" for i in flatgroup]) &\n         + \" .AND. \" * (bool(len(diff)) * bool(len(diff) - len(varlist))) &\n         + \" .AND. \".join([\".NOT. \" + check + \"(\" +  prefix + str(i) + \")\" for i in flatdiff]) + \") THEN \"\n#:else\nELSE\n#:endif\n#:enddef\n\n#:endmute\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor.h",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#ifndef DBCSR_TENSOR_H\n#define DBCSR_TENSOR_H\n\n#include <mpi.h>\n#include <stdbool.h> /* we need bool from C99 */\n\n#:include \"dbcsr_tensor.fypp\"\n#:set ndims = range(2, maxrank + 1)\n#:set ddims = range(1, maxrank + 1)\n\ntypedef void* dbcsr_matrix;\ntypedef void* dbcsr_t_tensor;\ntypedef void* dbcsr_t_distribution;\ntypedef void* dbcsr_t_pgrid;\ntypedef void* dbcsr_t_iterator;\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nvoid c_dbcsr_t_finalize(const dbcsr_t_tensor tensor);\n\nvoid c_dbcsr_t_pgrid_create(\n  const MPI_Fint* fcomm, int* c_dims, const int dims_size, dbcsr_t_pgrid* c_pgrid, const int* c_tensor_dims);\n\nvoid c_dbcsr_t_pgrid_create_expert(const MPI_Fint* fcomm, int* c_dims, const int dims_size, dbcsr_t_pgrid* c_pgrid,\n  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,\n  const int* nsplit, const int* dimsplit);\n\nvoid c_dbcsr_t_pgrid_destroy(dbcsr_t_pgrid* c_pgrid, const bool* c_keep_comm);\n\nvoid c_dbcsr_t_distribution_new(\n  dbcsr_t_distribution* c_dist, const dbcsr_t_pgrid c_pgrid, ${extern_varlist_and_size(\"c_nd_dist\", \"const int\")}$);\n\nvoid c_dbcsr_t_distribution_destroy(dbcsr_t_distribution* c_dist);\n\nvoid 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,\n  const int c_map1_2d_size, const int* c_map2_2d, const int c_map2_2d_size, const int* data_type,\n  ${extern_varlist_and_size(\"c_blk_size\", \"const int\")}$);\n\nvoid 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,\n  const int* c_map1_2d, const int map1_2d_size, const int* c_map2_2d, const int map2_2d_size, const int* data_type);\n\nvoid c_dbcsr_t_create_matrix(const dbcsr_matrix c_matrix_in, dbcsr_t_tensor* c_tensor, const int* c_order, const char* c_name);\n\nvoid c_dbcsr_t_destroy(dbcsr_t_tensor* c_tensor);\n\n#:for dsuffix, ctype in c_dtype_float_list\n#:for ndim in ndims\n\nvoid c_dbcsr_t_get_${ndim}$d_block_${dsuffix}$(\n  const dbcsr_t_tensor c_tensor, const int tensor_dim, const int* c_ind, const int* c_sizes, ${ctype}$* c_block, bool* c_found);\n\nvoid c_dbcsr_t_put_${ndim}$d_block_${dsuffix}$(const dbcsr_t_tensor c_tensor, const int tensor_dim, const int* c_ind,\n  const int* c_sizes, const ${ctype}$* c_block, const bool* c_summation, const ${ctype}$* c_scale);\n\nvoid c_dbcsr_t_get_${ndim}$d_block_p_${dsuffix}$(\n  const dbcsr_t_tensor c_tensor, const int* c_ind, ${ctype}$** c_block, bool* c_found);\n\n#:endfor\n\nvoid c_dbcsr_t_get_data_${dsuffix}$(const dbcsr_t_tensor c_tensor, ${ctype}$** c_data, long long int* c_data_size,\n  ${ctype}$ c_select_data_type, int* c_lb, int* c_ub);\n\nvoid c_dbcsr_t_contract_${dsuffix}$(const ${ctype}$ c_alpha, dbcsr_t_tensor c_tensor_1, dbcsr_t_tensor c_tensor_2,\n  const ${ctype}$ c_beta, dbcsr_t_tensor c_tensor_3, const int* c_contract_1, const int c_contract_1_size,\n  const int* c_notcontract_1, const int c_notcontract_1_size, const int* c_contract_2, const int c_contract_2_size,\n  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,\n  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,\n  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,\n  long long int* flop, const bool* move_data, const bool* retain_sparsity, const int* unit_nr, const bool* log_verbose);\n\nvoid c_dbcsr_t_contract_index_${dsuffix}$(const ${ctype}$ c_alpha, dbcsr_t_tensor c_tensor_1, dbcsr_t_tensor c_tensor_2,\n  const ${ctype}$ c_beta, dbcsr_t_tensor c_tensor_3, const int* c_contract_1, const int contract_1_size,\n  const int* c_notcontract_1, const int notcontract_1_size, const int* c_contract_2, const int contract_2_size,\n  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,\n  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,\n  int* c_nblks_local, int* c_result_index, long long int result_index_size, int tensor3_dim);\n\nvoid c_dbcsr_t_filter_${dsuffix}$(\n  const dbcsr_t_tensor c_tensor, const ${ctype}$ c_eps, const int* c_method, const bool* c_use_absolute);\n\nvoid c_dbcsr_t_set_${dsuffix}$(const dbcsr_t_tensor c_tensor, const ${ctype}$ c_alpha);\n\nvoid c_dbcsr_t_scale_${dsuffix}$(const dbcsr_t_tensor c_tensor, const ${ctype}$ c_alpha);\n\n#:endfor\n\nvoid c_dbcsr_t_get_stored_coordinates(const dbcsr_t_tensor c_tensor, const int tensor_dim, const int* c_ind_nd, int* c_processor);\n\nvoid c_dbcsr_t_reserve_blocks_index(const dbcsr_t_tensor c_tensor, const int nblocks, ${varlist(\"const int* c_blk_ind\")}$);\n\nvoid c_dbcsr_t_reserve_blocks_template(const dbcsr_t_tensor c_tensor_in, const dbcsr_t_tensor tensor_out);\n\nint c_ndims_iterator(const dbcsr_t_iterator c_iterator);\n\nvoid c_dbcsr_t_iterator_start(dbcsr_t_iterator* c_iterator, const dbcsr_t_tensor c_tensor);\n\nvoid c_dbcsr_t_iterator_stop(dbcsr_t_iterator* c_iterator);\n\nvoid c_dbcsr_t_iterator_next_block(const dbcsr_t_iterator c_iterator, const int iterator_size, int* c_ind_nd, int* c_blk,\n  int* c_blk_p, int* c_blk_size, int* c_blk_offset);\n\nbool c_dbcsr_t_iterator_blocks_left(const dbcsr_t_iterator c_iterator);\n\nvoid c_dbcsr_t_split_blocks(const dbcsr_t_tensor c_tensor_in, const int tensor_dim, dbcsr_t_tensor* c_tensor_out,\n  const int* c_block_sizes, const bool* c_nodata);\n\nvoid c_dbcsr_t_copy_matrix_to_tensor(const dbcsr_matrix c_matrix_in, dbcsr_t_tensor c_tensor_out, const bool* c_summation);\n\nvoid c_dbcsr_t_copy_tensor_to_matrix(const dbcsr_t_tensor c_tensor_in, dbcsr_matrix c_matrix_out, const bool* c_summation);\n\nvoid 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,\n  const bool* c_summation, const int* c_bounds, const bool* c_move_data, const int* c_unit_nr);\n\nvoid c_dbcsr_t_clear(dbcsr_t_tensor c_tensor);\n\nvoid c_dbcsr_t_get_info(const dbcsr_t_tensor c_tensor, const int tensor_dim, int* c_nblks_total, int* c_nfull_total,\n  int* c_nblks_local, int* c_nfull_local, int* c_pdims, int* my_ploc, ${varlist(\"int nblks_local\")}$,\n  ${varlist(\"int nblks_total\")}$, ${varlist(\"int* c_blks_local\")}$, ${varlist(\"int* c_proc_dist\")}$,\n  ${varlist(\"int* c_blk_size\")}$, ${varlist(\"int* c_blk_offset\")}$, dbcsr_t_distribution* c_distribution, char** name,\n  int* data_type);\n\nvoid c_dbcsr_t_get_nd_index_blk(const dbcsr_t_tensor c_tensor, void** c_nd_index_blk);\n\nvoid c_dbcsr_t_get_nd_index(const dbcsr_t_tensor c_tensor, void** c_nd_index);\n\nvoid 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,\n  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,\n  int* c_dims2_2d, int* c_map1_2d, int* c_map2_2d, int* c_map_nd, int* base, bool* c_col_major);\n\nint c_dbcsr_t_get_num_blocks(const dbcsr_t_tensor c_tensor);\n\nlong long int c_dbcsr_t_get_num_blocks_total(const dbcsr_t_tensor c_tensor);\n\nvoid c_dbcsr_t_dims(const dbcsr_t_tensor c_tensor, const int tensor_dim, const int* c_dims);\n\nint c_dbcsr_t_ndims(const dbcsr_t_tensor c_tensor);\n\nint c_dbcsr_t_nblks_local(const dbcsr_t_tensor c_tensor, const int idim);\n\nint c_dbcsr_t_nblks_total(const dbcsr_t_tensor c_tensor, const int idim);\n\nint c_dbcsr_t_ndims_matrix_row(const dbcsr_t_tensor c_tensor);\n\nint c_dbcsr_t_ndims_matrix_column(const dbcsr_t_tensor c_tensor);\n\nint c_dbcsr_t_get_nze(const dbcsr_t_tensor c_tensor);\n\nlong long int c_dbcsr_t_get_nze_total(const dbcsr_t_tensor c_tensor);\n\nint c_dbcsr_t_ndims_matrix_column(const dbcsr_t_tensor c_tensor);\n\nint c_dbcsr_t_get_nze(const dbcsr_t_tensor c_tensor);\n\nlong long int c_dbcsr_t_get_nze_total(const dbcsr_t_tensor c_tensor);\n\nlong long int c_dbcsr_t_max_nblks_local(const dbcsr_t_tensor c_tensor);\n\nvoid c_dbcsr_t_batched_contract_init(dbcsr_t_tensor c_tensor);\n\nvoid c_dbcsr_t_batched_contract_finalize(dbcsr_t_tensor c_tensor, int* c_unit_nr);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#if defined(__cplusplus)\n// --------------------------------------------------- //\n//         overloaded functions (cpp only)             //\n// --------------------------------------------------- //\n#:for dsuffix, ctype in c_dtype_float_list\ninline void c_dbcsr_t_get_block(\n  const dbcsr_t_tensor c_tensor, const int* c_ind, const int* c_sizes, ${ctype}$* c_block, bool* c_found) {\n  int tensor_dim = c_dbcsr_t_ndims(c_tensor);\n\n  switch (tensor_dim) {\n#:for ndim in ndims\n    case ${ndim}$: c_dbcsr_t_get_${ndim}$d_block_${dsuffix}$(c_tensor, tensor_dim, c_ind, c_sizes, c_block, c_found); break;\n#:endfor\n  }\n}\n\ninline void c_dbcsr_t_get_block_p(const dbcsr_t_tensor c_tensor, const int* c_ind, ${ctype}$** c_block, bool* c_found) {\n  int tensor_dim = c_dbcsr_t_ndims(c_tensor);\n\n  switch (tensor_dim) {\n#:for ndim in ndims\n    case ${ndim}$: c_dbcsr_t_get_${ndim}$d_block_p_${dsuffix}$(c_tensor, c_ind, c_block, c_found); break;\n#:endfor\n  }\n}\n\n#:endfor\n\n#:for dsuffix, ctype in c_dtype_float_list\ninline void c_dbcsr_t_put_block(const dbcsr_t_tensor c_tensor, const int* c_ind, const int* c_sizes, const ${ctype}$* c_block,\n  const bool* c_summation, const ${ctype}$* c_scale) {\n  int tensor_dim = c_dbcsr_t_ndims(c_tensor);\n\n  switch (tensor_dim) {\n#:for ndim in ndims\n    case ${ndim}$:\n      c_dbcsr_t_put_${ndim}$d_block_${dsuffix}$(c_tensor, tensor_dim, c_ind, c_sizes, c_block, c_summation, c_scale);\n      break;\n#:endfor\n  }\n}\n#:endfor\n\ninline void c_dbcsr_t_get_stored_coordinates(const dbcsr_t_tensor c_tensor, const int* c_ind_nd, int* c_processor) {\n  int tensor_dim = c_dbcsr_t_ndims(c_tensor);\n  c_dbcsr_t_get_stored_coordinates(c_tensor, tensor_dim, c_ind_nd, c_processor);\n}\n\ninline void c_dbcsr_t_iterator_next_block(\n  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) {\n  int iterator_size = c_ndims_iterator(c_iterator);\n\n  c_dbcsr_t_iterator_next_block(c_iterator, iterator_size, c_ind_nd, c_blk, c_blk_p, c_blk_size, c_blk_offset);\n}\n\n#:for dsuffix, ctype in c_dtype_float_list\ninline void c_dbcsr_t_filter(\n  const dbcsr_t_tensor c_tensor, const ${ctype}$ c_eps, const int* c_method, const bool* c_use_absolute) {\n  c_dbcsr_t_filter_${dsuffix}$(c_tensor, c_eps, c_method, c_use_absolute);\n}\n\ninline void c_dbcsr_t_set(const dbcsr_t_tensor c_tensor, const ${ctype}$ c_alpha) {\n  c_dbcsr_t_set_${dsuffix}$(c_tensor, c_alpha);\n}\n\ninline void c_dbcsr_t_scale(const dbcsr_t_tensor c_tensor, const ${ctype}$ c_alpha) {\n  c_dbcsr_t_scale_${dsuffix}$(c_tensor, c_alpha);\n}\n\ninline void c_dbcsr_t_get_data_p(const dbcsr_t_tensor c_tensor, ${ctype}$** c_data, long long int* c_data_size,\n  ${ctype}$ c_select_data_type, int* c_lb, int* c_ub) {\n  c_dbcsr_t_get_data_${dsuffix}$(c_tensor, c_data, c_data_size, c_select_data_type, c_lb, c_ub);\n}\n#:endfor\n#endif\n\n#endif /*DBCSR_H*/\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor_api.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tensor_api\n   !! This is the start of a dbcsr_tensor_api, all publically needed functions\n   !! are exported here. The others remain private to the library.\n   !! Currently, this is the CP2K used set.\n   !! Ultimately, a reduced subset and well defined api will remain,\n   !! possibly grouped in to standard and expert api.\n   !! Currently, this is work in progress.\n\n   USE dbcsr_tensor, ONLY: &\n      dbcsr_t_contract, dbcsr_t_get_block, dbcsr_t_get_stored_coordinates, dbcsr_t_put_block, &\n      dbcsr_t_reserve_blocks, dbcsr_t_copy_matrix_to_tensor, dbcsr_t_copy, &\n      dbcsr_t_copy_tensor_to_matrix, dbcsr_t_batched_contract_init, &\n      dbcsr_t_batched_contract_finalize, dbcsr_t_contract_index\n   USE dbcsr_tensor_block, ONLY: &\n      dbcsr_t_iterator_blocks_left, dbcsr_t_iterator_next_block, dbcsr_t_iterator_start, &\n      dbcsr_t_iterator_stop, dbcsr_t_iterator_type, dbcsr_t_reserved_block_indices\n   USE dbcsr_tensor_types, ONLY: &\n      dbcsr_t_create, dbcsr_t_destroy, dbcsr_t_distribution_destroy, dbcsr_t_distribution_new, &\n      dbcsr_t_distribution_type, dbcsr_t_nd_mp_comm_prv => dbcsr_t_nd_mp_comm, dbcsr_t_nd_mp_free, dbcsr_t_type, &\n      dbcsr_t_pgrid_type, dbcsr_t_pgrid_create_prv => dbcsr_t_pgrid_create, &\n      dbcsr_t_pgrid_create_expert_prv => dbcsr_t_pgrid_create_expert, dbcsr_t_pgrid_destroy, &\n      dbcsr_t_set, dbcsr_t_filter, &\n      dbcsr_t_mp_environ_pgrid => mp_environ_pgrid, dbcsr_t_blk_sizes, dbcsr_t_get_info, &\n      dbcsr_t_finalize, dbcsr_t_scale, dbcsr_t_get_nze, dbcsr_t_get_nze_total, &\n      dbcsr_t_get_num_blocks, dbcsr_t_get_num_blocks_total, dbcsr_t_clear, &\n      dbcsr_t_mp_dims_create, dbcsr_t_pgrid_change_dims, dbcsr_t_ndims => ndims_tensor, &\n      dbcsr_t_dims => dims_tensor, dbcsr_t_ndims_matrix_row => ndims_matrix_row, &\n      dbcsr_t_ndims_matrix_column => ndims_matrix_column, dbcsr_t_blk_size, dbcsr_t_nblks_local, &\n      dbcsr_t_nblks_total, dbcsr_t_max_nblks_local, dbcsr_t_default_distvec\n   USE dbcsr_tensor_test, ONLY: &\n      dbcsr_t_contract_test, dbcsr_t_checksum\n   USE dbcsr_tensor_split, ONLY: &\n      dbcsr_t_split_blocks\n   USE dbcsr_tensor_index, ONLY: &\n      dbcsr_t_get_mapping_info\n   USE dbcsr_tensor_io, ONLY: &\n      dbcsr_t_write_tensor_info, dbcsr_t_write_split_info, dbcsr_t_write_blocks, dbcsr_t_write_tensor_dist\n   USE dbcsr_mpiwrap, ONLY: mp_comm_type\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_api'\n\n   PUBLIC :: dbcsr_t_contract, dbcsr_t_contract_test\n   PUBLIC :: dbcsr_t_get_block\n   PUBLIC :: dbcsr_t_get_stored_coordinates\n   PUBLIC :: dbcsr_t_put_block\n   PUBLIC :: dbcsr_t_reserve_blocks\n   PUBLIC :: dbcsr_t_create\n   PUBLIC :: dbcsr_t_destroy\n   PUBLIC :: dbcsr_t_distribution_destroy\n   PUBLIC :: dbcsr_t_distribution_new\n   PUBLIC :: dbcsr_t_distribution_type\n   PUBLIC :: dbcsr_t_nd_mp_comm\n   PUBLIC :: dbcsr_t_nd_mp_free\n   PUBLIC :: dbcsr_t_type\n   PUBLIC :: dbcsr_t_iterator_next_block\n   PUBLIC :: dbcsr_t_iterator_blocks_left\n   PUBLIC :: dbcsr_t_iterator_stop\n   PUBLIC :: dbcsr_t_iterator_start\n   PUBLIC :: dbcsr_t_iterator_type\n   PUBLIC :: dbcsr_t_split_blocks\n   PUBLIC :: dbcsr_t_pgrid_type\n   PUBLIC :: dbcsr_t_pgrid_create\n   PUBLIC :: dbcsr_t_pgrid_create_expert\n   PUBLIC :: dbcsr_t_pgrid_destroy\n   PUBLIC :: dbcsr_t_set\n   PUBLIC :: dbcsr_t_filter\n   PUBLIC :: dbcsr_t_mp_environ_pgrid\n   PUBLIC :: dbcsr_t_copy_matrix_to_tensor\n   PUBLIC :: dbcsr_t_blk_sizes\n   PUBLIC :: dbcsr_t_copy\n   PUBLIC :: dbcsr_t_copy_tensor_to_matrix\n   PUBLIC :: dbcsr_t_get_info\n   PUBLIC :: dbcsr_t_checksum\n   PUBLIC :: dbcsr_t_finalize\n   PUBLIC :: dbcsr_t_scale\n   PUBLIC :: dbcsr_t_get_num_blocks, dbcsr_t_get_num_blocks_total\n   PUBLIC :: dbcsr_t_get_nze, dbcsr_t_get_nze_total\n   PUBLIC :: dbcsr_t_clear\n   PUBLIC :: dbcsr_t_get_mapping_info\n   PUBLIC :: dbcsr_t_write_split_info\n   PUBLIC :: dbcsr_t_write_blocks\n   PUBLIC :: dbcsr_t_write_tensor_dist\n   PUBLIC :: dbcsr_t_write_tensor_info\n   PUBLIC :: dbcsr_t_mp_dims_create\n   PUBLIC :: dbcsr_t_batched_contract_init\n   PUBLIC :: dbcsr_t_batched_contract_finalize\n   PUBLIC :: dbcsr_t_ndims\n   PUBLIC :: dbcsr_t_dims\n   PUBLIC :: dbcsr_t_pgrid_change_dims\n   PUBLIC :: dbcsr_t_reserved_block_indices\n   PUBLIC :: dbcsr_t_contract_index\n   PUBLIC :: dbcsr_t_ndims_matrix_row\n   PUBLIC :: dbcsr_t_ndims_matrix_column\n   PUBLIC :: dbcsr_t_nblks_local\n   PUBLIC :: dbcsr_t_nblks_total\n   PUBLIC :: dbcsr_t_blk_size\n   PUBLIC :: dbcsr_t_max_nblks_local\n   PUBLIC :: dbcsr_t_default_distvec\n\nCONTAINS\n\n   FUNCTION dbcsr_t_nd_mp_comm(comm_2d, map1_2d, map2_2d, dims_nd, dims1_nd, dims2_nd, pdims_2d, tdims, &\n                               nsplit, dimsplit)\n      INTEGER, INTENT(IN)                               :: comm_2d\n      INTEGER, DIMENSION(:), INTENT(IN)                 :: map1_2d, map2_2d\n      INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)), &\n         INTENT(IN), OPTIONAL                           :: dims_nd\n      INTEGER, DIMENSION(SIZE(map1_2d)), INTENT(IN), OPTIONAL :: dims1_nd\n      INTEGER, DIMENSION(SIZE(map2_2d)), INTENT(IN), OPTIONAL :: dims2_nd\n      INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL           :: pdims_2d\n      INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)), &\n         INTENT(IN), OPTIONAL                           :: tdims\n      INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit\n      TYPE(dbcsr_t_pgrid_type)                          :: dbcsr_t_nd_mp_comm\n\n      TYPE(mp_comm_type)                                :: my_comm_2d\n\n      CALL my_comm_2d%set_handle(comm_2d)\n\n      dbcsr_t_nd_mp_comm = dbcsr_t_nd_mp_comm_prv(my_comm_2d, map1_2d, map2_2d, &\n                                                  dims_nd, dims1_nd, dims2_nd, pdims_2d, tdims, &\n                                                  nsplit, dimsplit)\n\n   END FUNCTION dbcsr_t_nd_mp_comm\n\n   SUBROUTINE dbcsr_t_pgrid_create_expert(mp_comm, dims, pgrid, map1_2d, map2_2d, tensor_dims, nsplit, dimsplit)\n      INTEGER, INTENT(IN) :: mp_comm\n      INTEGER, DIMENSION(:), INTENT(INOUT) :: dims\n      TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid\n      INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: tensor_dims\n      INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit\n\n      TYPE(mp_comm_type)                                :: my_mp_comm\n\n      CALL my_mp_comm%set_handle(mp_comm)\n\n      CALL dbcsr_t_pgrid_create_expert_prv(my_mp_comm, dims, pgrid, map1_2d, map2_2d, tensor_dims, nsplit, dimsplit)\n\n   END SUBROUTINE dbcsr_t_pgrid_create_expert\n\n   SUBROUTINE dbcsr_t_pgrid_create(mp_comm, dims, pgrid, tensor_dims)\n      INTEGER, INTENT(IN) :: mp_comm\n      INTEGER, DIMENSION(:), INTENT(INOUT) :: dims\n      TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: tensor_dims\n\n      TYPE(mp_comm_type)                                :: my_mp_comm\n\n      CALL my_mp_comm%set_handle(mp_comm)\n\n      CALL dbcsr_t_pgrid_create_prv(my_mp_comm, dims, pgrid, tensor_dims)\n\n   END SUBROUTINE dbcsr_t_pgrid_create\n\nEND MODULE dbcsr_tensor_api\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor_api_c.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n#:include \"dbcsr_tensor.fypp\"\n#:set ndims = range(2,maxrank+1)\n#:set ddims = range(1,maxrank+1)\n\nMODULE dbcsr_tensor_api_c\n\n   USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_loc, c_ptr, c_double, c_sizeof, C_NULL_CHAR, &\n                                                                             c_float, c_f_pointer, c_int, c_long_long, &\n                                                                             c_char, c_null_ptr, c_bool, c_associated, &\n                                                                             c_float_complex, c_double_complex\n   USE dbcsr_api, ONLY: dbcsr_type, dbcsr_scale\n   USE dbcsr_allocate_wrap, ONLY: allocate_any\n   USE dbcsr_tensor_api\n   USE dbcsr_kinds, ONLY: &\n      ${uselist(dtype_float_prec)}$, default_string_length, int_8\n   USE dbcsr_data_types, ONLY: dbcsr_scalar_type\n   USE dbcsr_data_methods, ONLY: dbcsr_scalar\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_tensor_index, ONLY: &\n      dbcsr_t_get_mapping_info, ndims_mapping, nd_to_2d_mapping\n   USE dbcsr_tensor_types, ONLY: dbcsr_t_create, dbcsr_t_type\n   USE dbcsr_tas_types, ONLY: dbcsr_tas_type\n   USE dbcsr_tas_base, ONLY: dbcsr_tas_get_block_p\n   USE dbcsr_tensor_index, ONLY: get_2d_indices_tensor\n   USE dbcsr_data_methods, ONLY: dbcsr_get_data_p\n\n   IMPLICIT NONE\n   PRIVATE\n\nCONTAINS\n\n   SUBROUTINE c_f_string(c_str, str)\n      USE, INTRINSIC :: iso_c_binding, ONLY: c_ptr, c_f_pointer, c_char\n      TYPE(c_ptr), INTENT(in) :: c_str\n      CHARACTER(kind=c_char), POINTER :: arr(:)\n      CHARACTER(:, kind=c_char), ALLOCATABLE, INTENT(out) :: str\n      INTEGER(8) :: n, i\n      INTERFACE\n         ! steal std c library function rather than writing our own.\n         FUNCTION strlen(s) bind(c, name='strlen')\n            USE, INTRINSIC :: iso_c_binding, ONLY: c_ptr, c_size_t\n            IMPLICIT NONE\n            !----\n            TYPE(c_ptr), INTENT(in), value :: s\n            INTEGER(c_size_t) :: strlen\n         END FUNCTION strlen\n      END INTERFACE\n      n = strlen(c_str)\n      !****\n      CALL c_f_pointer(c_str, arr, [n])\n      ALLOCATE (CHARACTER(len=n) :: str)\n      DO i = 1, n\n         str(i:i) = arr(i)\n      END DO\n   END SUBROUTINE c_f_string\n\n   SUBROUTINE c_dbcsr_t_finalize(c_tensor) BIND(C, name=\"c_dbcsr_t_finalize\")\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      CALL dbcsr_t_finalize(tensor)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_pgrid_create_expert(fcomm, c_dims, dims_size, c_pgrid, &\n                                            c_map1_2d, map1_2d_size, c_map2_2d, &\n                                            map2_2d_size, c_tensor_dims, nsplit, dimsplit) &\n      bind(C, name=\"c_dbcsr_t_pgrid_create_expert\")\n\n      INTEGER(kind=c_int), INTENT(in)                    :: fcomm\n      INTEGER(kind=c_int), INTENT(in), value             :: dims_size\n      TYPE(c_ptr), INTENT(out)                           :: c_pgrid\n      INTEGER(kind=c_int), INTENT(out)                   :: c_dims(dims_size)\n      INTEGER(kind=c_int), INTENT(out), OPTIONAL, &\n         DIMENSION(dims_size)                           :: c_tensor_dims\n      INTEGER(kind=c_int), INTENT(in), VALUE             :: map1_2d_size\n      INTEGER(kind=c_int), INTENT(in)                    :: c_map1_2d(map1_2d_size)\n      INTEGER(kind=c_int), INTENT(in), VALUE             :: map2_2d_size\n      INTEGER(kind=c_int), INTENT(in)                    :: c_map2_2d(map2_2d_size)\n      INTEGER(kind=c_int), INTENT(in), OPTIONAL          :: nsplit, dimsplit\n\n      TYPE(dbcsr_t_pgrid_type), POINTER                  :: pgrid\n\n      ALLOCATE (pgrid)\n\n      CALL dbcsr_t_pgrid_create_expert(fcomm, c_dims, pgrid, c_map1_2d + 1, c_map2_2d + 1, c_tensor_dims, &\n                                       nsplit, dimsplit)\n\n      c_pgrid = c_loc(pgrid)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_pgrid_create(fcomm, c_dims, dims_size, c_pgrid, c_tensor_dims) &\n      bind(C, name=\"c_dbcsr_t_pgrid_create\")\n\n      INTEGER(kind=c_int), INTENT(in)                    :: fcomm\n      INTEGER(kind=c_int), INTENT(in), value             :: dims_size\n      TYPE(c_ptr), INTENT(out)                           :: c_pgrid\n      INTEGER(kind=c_int), INTENT(out)                   :: c_dims(dims_size)\n      INTEGER(kind=c_int), INTENT(in), OPTIONAL          :: c_tensor_dims(dims_size)\n\n      TYPE(dbcsr_t_pgrid_type), POINTER                  :: pgrid\n\n      ALLOCATE (pgrid)\n\n      IF (PRESENT(c_tensor_dims)) THEN\n         CALL dbcsr_t_pgrid_create(fcomm, c_dims, pgrid, c_tensor_dims)\n      ELSE\n         CALL dbcsr_t_pgrid_create(fcomm, c_dims, pgrid)\n      END IF\n\n      c_pgrid = c_loc(pgrid)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_pgrid_destroy(c_pgrid, c_keep_comm) &\n      BIND(C, name=\"c_dbcsr_t_pgrid_destroy\")\n\n      TYPE(c_ptr), INTENT(INOUT)                         :: c_pgrid\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_keep_comm\n      TYPE(dbcsr_t_pgrid_type), POINTER                  :: pgrid\n      LOGICAL                                            :: keep_comm\n\n      CALL c_f_pointer(c_pgrid, pgrid)\n\n      IF (PRESENT(c_keep_comm)) THEN\n         keep_comm = c_keep_comm\n         CALL dbcsr_t_pgrid_destroy(pgrid, keep_comm)\n      ELSE\n         CALL dbcsr_t_pgrid_destroy(pgrid)\n      END IF\n\n      IF (ASSOCIATED(pgrid)) DEALLOCATE (pgrid)\n      c_pgrid = c_null_ptr\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_distribution_new(c_dist, c_pgrid, ${c_varlist_and_size(\"c_nd_dist\")}$) &\n      bind(C, name=\"c_dbcsr_t_distribution_new\")\n\n      TYPE(c_ptr), INTENT(OUT)                           :: c_dist\n      TYPE(c_ptr), INTENT(IN), value                     :: c_pgrid\n\n      INTEGER(kind=c_int), INTENT(in), value :: ${varlist(\"c_nd_dist\", suffix=\"_size\")}$\n      INTEGER(kind=c_int), INTENT(IN), TARGET, OPTIONAL :: ${c_arrlist_and_size(\"c_nd_dist\")}$\n\n      TYPE(dbcsr_t_pgrid_type), POINTER                  :: pgrid\n      TYPE(dbcsr_t_distribution_type), POINTER           :: dist\n\n      INTEGER, DIMENSION(:), POINTER                     ::  ${varlist(\"nd_dist\")}$\n\n      ALLOCATE (dist)\n\n      CALL c_f_pointer(c_pgrid, pgrid)\n\n      #:for i in range(1, maxrank+1)\n         NULLIFY (nd_dist_${i}$)\n         IF (PRESENT(c_nd_dist_${i}$)) THEN\n            nd_dist_${i}$ => c_nd_dist_${i}$\n         END IF\n      #:endfor\n\n      CALL dbcsr_t_distribution_new(dist, pgrid, ${varlist(\"nd_dist\")}$)\n\n      c_dist = c_loc(dist)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_distribution_destroy(c_dist) BIND(C, name=\"c_dbcsr_t_distribution_destroy\")\n      TYPE(c_ptr), INTENT(INOUT)                         :: c_dist\n\n      TYPE(dbcsr_t_distribution_type), POINTER           :: dist\n\n      CALL c_f_pointer(c_dist, dist)\n      CALL dbcsr_t_distribution_destroy(dist)\n\n      IF (ASSOCIATED(dist)) DEALLOCATE (dist)\n      c_dist = c_null_ptr\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_create_new(c_tensor, c_name, c_dist, c_map1_2d, map1_2d_size, &\n                                   c_map2_2d, map2_2d_size, c_data_type, ${c_varlist_and_size(\"c_blk_size\")}$) &\n      bind(C, name=\"c_dbcsr_t_create_new\")\n\n      TYPE(c_ptr), INTENT(OUT)                           :: c_tensor\n      TYPE(c_ptr), INTENT(IN), value                     :: c_dist, c_name\n\n      INTEGER(kind=c_int), INTENT(in), value             :: map1_2d_size\n      INTEGER(kind=c_int), INTENT(in), TARGET            :: c_map1_2d(map1_2d_size)\n      INTEGER(kind=c_int), INTENT(in), value             :: map2_2d_size\n      INTEGER(kind=c_int), INTENT(in), TARGET            :: c_map2_2d(map2_2d_size)\n\n      INTEGER(kind=c_int), INTENT(IN), OPTIONAL          :: c_data_type\n\n      INTEGER(kind=c_int), INTENT(in), value             :: ${varlist(\"c_blk_size\", suffix=\"_size\")}$\n      INTEGER(kind=c_int), INTENT(IN), TARGET, OPTIONAL  :: ${c_arrlist_and_size(\"c_blk_size\")}$\n\n      CHARACTER(:, kind=c_char), ALLOCATABLE             :: fname\n\n      TYPE(dbcsr_t_type), POINTER                        :: tensor\n      TYPE(dbcsr_t_distribution_type), POINTER           :: dist\n\n      INTEGER, DIMENSION(:), POINTER                     :: ${varlist(\"blk_size\")}$\n\n      ALLOCATE (tensor)\n\n      CALL c_f_pointer(c_dist, dist)\n      CALL c_f_string(c_name, fname)\n\n      #:for i in range(1, maxrank+1)\n         NULLIFY (blk_size_${i}$)\n         IF (PRESENT(c_blk_size_${i}$)) THEN\n            blk_size_${i}$ => c_blk_size_${i}$\n         END IF\n      #:endfor\n\n      CALL dbcsr_t_create(tensor, fname, dist, c_map1_2d + 1, c_map2_2d + 1, c_data_type, &\n                          ${varlist(\"blk_size\")}$)\n\n      c_tensor = c_loc(tensor)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_create_template(c_tensor_in, c_tensor, c_name, c_dist, &\n                                        c_map1_2d, map1_2d_size, c_map2_2d, map2_2d_size, data_type) &\n      BIND(C, name=\"c_dbcsr_t_create_template\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_in\n      TYPE(c_ptr), INTENT(OUT)                           :: c_tensor\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_name\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_dist\n\n      INTEGER(kind=c_int), INTENT(in), value             :: map1_2d_size\n      INTEGER(kind=c_int), INTENT(in), TARGET, OPTIONAL  :: c_map1_2d(map1_2d_size)\n      INTEGER(kind=c_int), INTENT(in), value             :: map2_2d_size\n      INTEGER(kind=c_int), INTENT(in), TARGET, OPTIONAL  :: c_map2_2d(map2_2d_size)\n\n      INTEGER(kind=c_int), INTENT(IN), OPTIONAL          :: data_type\n\n      TYPE(dbcsr_t_type), POINTER                        :: tensor_in\n      TYPE(dbcsr_t_type), POINTER                        :: tensor\n      CHARACTER(:, kind=c_char), ALLOCATABLE             :: fname\n      TYPE(dbcsr_t_distribution_type), POINTER           :: dist\n      INTEGER, DIMENSION(:), POINTER                     :: map1_2d, map2_2d\n\n      CALL c_f_pointer(c_tensor_in, tensor_in)\n\n      IF (c_associated(c_name)) CALL c_f_string(c_name, fname)\n\n      ALLOCATE (tensor)\n\n      NULLIFY (dist)\n      IF (C_ASSOCIATED(c_dist)) CALL c_f_pointer(c_dist, dist)\n      NULLIFY (map1_2d, map2_2d)\n      IF (PRESENT(c_map1_2d) .AND. PRESENT(c_map2_2d)) THEN\n         ALLOCATE (map1_2d(SIZE(c_map1_2d)))\n         ALLOCATE (map2_2d(SIZE(c_map2_2d)))\n         map1_2d = c_map1_2d + 1\n         map2_2d = c_map2_2d + 1\n      END IF\n\n      CALL dbcsr_t_create(tensor_in, tensor, fname, dist, &\n                          map1_2d, map2_2d, data_type)\n\n      c_tensor = c_loc(tensor)\n\n      IF (ASSOCIATED(map1_2d)) DEALLOCATE (map1_2d)\n      IF (ASSOCIATED(map2_2d)) DEALLOCATE (map2_2d)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_create_matrix(c_matrix_in, c_tensor, c_order, c_name) &\n      BIND(C, name=\"c_dbcsr_t_create_matrix\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_matrix_in\n      TYPE(c_ptr), INTENT(OUT)                           :: c_tensor\n      INTEGER(kind=c_int), INTENT(IN), DIMENSION(2), &\n         OPTIONAL                                         :: c_order\n      TYPE(c_ptr), INTENT(IN), OPTIONAL                  :: c_name\n\n      TYPE(dbcsr_type), POINTER                :: matrix_in\n      TYPE(dbcsr_t_type), POINTER              :: tensor\n      INTEGER, DIMENSION(2) :: order\n      CHARACTER(:, kind=c_char), ALLOCATABLE   :: fname\n\n      CALL c_f_pointer(c_matrix_in, matrix_in)\n      IF (PRESENT(c_name)) CALL c_f_string(c_name, fname)\n\n      IF (PRESENT(c_order)) THEN\n         order = c_order + 1\n      ELSE\n         order = [1, 2]\n      END IF\n\n      ALLOCATE (tensor)\n\n      CALL dbcsr_t_create(matrix_in, tensor, order, fname)\n\n      c_tensor = c_loc(tensor)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_destroy(c_tensor) BIND(C, name=\"c_dbcsr_t_destroy\")\n      TYPE(c_ptr), INTENT(INOUT)                         :: c_tensor\n      TYPE(dbcsr_t_type), POINTER                        :: tensor\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      CALL dbcsr_t_destroy(tensor)\n\n      IF (ASSOCIATED(tensor)) DEALLOCATE (tensor)\n      c_tensor = c_null_ptr\n\n   END SUBROUTINE\n\n   #:for dparam, dtype, dsuffix, dbase, dctype in cf_dtype_float_list\n\n      SUBROUTINE c_dbcsr_t_contract_${dsuffix}$ (c_alpha, c_tensor_1, c_tensor_2, c_beta, c_tensor_3, &\n                                                 c_contract_1, contract_1_size, &\n                                                 c_notcontract_1, notcontract_1_size, &\n                                                 c_contract_2, contract_2_size, &\n                                                 c_notcontract_2, notcontract_2_size, &\n                                                 c_map_1, map_1_size, c_map_2, map_2_size, &\n                                                 c_bounds_1, c_bounds_2, c_bounds_3, &\n                                                 c_optimize_dist, c_pgrid_opt_1, c_pgrid_opt_2, c_pgrid_opt_3, &\n                                                 c_filter_eps, c_flop, c_move_data, c_retain_sparsity, &\n                                                 c_unit_nr, c_log_verbose) &\n         BIND(C, name=\"c_dbcsr_t_contract_${dsuffix}$\")\n\n         ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE     ::  c_alpha\n         TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_1, c_tensor_2\n         ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE     :: c_beta\n         TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_3\n\n         INTEGER(kind=c_int), INTENT(IN), VALUE             :: contract_1_size, contract_2_size\n         INTEGER(kind=c_int), INTENT(IN), VALUE             :: notcontract_1_size, notcontract_2_size\n         INTEGER(kind=c_int), INTENT(IN), VALUE             :: map_1_size, map_2_size\n\n         INTEGER(kind=c_int), INTENT(IN), TARGET            :: c_contract_1(contract_1_size), c_contract_2(contract_2_size)\n         INTEGER(kind=c_int), INTENT(IN), TARGET            :: c_map_1(map_1_size), c_map_2(map_2_size)\n      INTEGER(kind=c_int), INTENT(IN), TARGET            :: c_notcontract_1(notcontract_1_size), c_notcontract_2(notcontract_2_size)\n\n         INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, contract_1_size), &\n            OPTIONAL                                         :: c_bounds_1\n         INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, notcontract_1_size), &\n            OPTIONAL                                         :: c_bounds_2\n         INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, notcontract_2_size), &\n            OPTIONAL                                         :: c_bounds_3\n\n         LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_optimize_dist\n         TYPE(c_ptr), INTENT(OUT), OPTIONAL                 :: c_pgrid_opt_1, c_pgrid_opt_2, c_pgrid_opt_3\n\n         REAL(kind=c_double), INTENT(IN), OPTIONAL          :: c_filter_eps\n         INTEGER(kind=c_long_long), INTENT(INOUT), OPTIONAL :: c_flop\n         LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_move_data\n         LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_retain_sparsity\n         INTEGER(kind=c_int), INTENT(IN), OPTIONAL          :: c_unit_nr\n         LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_log_verbose\n\n         TYPE(dbcsr_t_type), POINTER                        :: tensor_1\n         TYPE(dbcsr_t_type), POINTER                        :: tensor_2\n         TYPE(dbcsr_t_type), POINTER                        :: tensor_3\n         LOGICAL, POINTER                                   :: optimize_dist\n         TYPE(dbcsr_t_pgrid_type), POINTER                  :: pgrid_opt_1, pgrid_opt_2, pgrid_opt_3\n\n         INTEGER, DIMENSION(:, :), ALLOCATABLE              :: bounds_1, bounds_2, bounds_3\n\n         LOGICAL, POINTER                                   :: move_data\n         LOGICAL, POINTER                                   :: retain_sparsity\n         LOGICAL, POINTER                                   :: log_verbose\n\n         CALL c_f_pointer(c_tensor_1, tensor_1)\n         CALL c_f_pointer(c_tensor_2, tensor_2)\n         CALL c_f_pointer(c_tensor_3, tensor_3)\n\n         #:for dim in range(1,4)\n            IF (PRESENT(c_bounds_${dim}$)) THEN\n               ALLOCATE (bounds_${dim}$ (2, SIZE(c_bounds_${dim}$, 2)))\n               bounds_${dim}$ (:, :) = c_bounds_${dim}$ (:, :) + 1\n            END IF\n         #:endfor\n\n         #:set list = ['optimize_dist', 'move_data', 'retain_sparsity', 'log_verbose']\n         #:for var in list\n            NULLIFY (${var}$)\n            IF (PRESENT(c_${var}$)) THEN\n               ALLOCATE (${var}$)\n               ${var}$ = c_${var}$\n            END IF\n         #:endfor\n\n         #:set optvars = [['pgrid_opt_1'],['pgrid_opt_2'],['pgrid_opt_3']]\n         #:set optgroups = []\n         ${gen_vargroups(optvars,optgroups)}$\n\n         #:for var in optvars\n            NULLIFY (${var[0]}$)\n         #:endfor\n\n         #:for i in range(len(optgroups))\n            ${print_groupif(optgroups,optvars,i,'PRESENT','c_')}$\n\n            CALL dbcsr_t_contract(alpha=dbcsr_scalar(c_alpha), tensor_1=tensor_1, &\n                                  tensor_2=tensor_2, beta=dbcsr_scalar(c_beta), &\n                                  tensor_3=tensor_3, contract_1=c_contract_1 + 1, &\n                                  notcontract_1=c_notcontract_1 + 1, &\n                                  contract_2=c_contract_2 + 1, notcontract_2=c_notcontract_2 + 1, &\n                                  map_1=c_map_1 + 1, map_2=c_map_2 + 1, &\n                                  bounds_1=bounds_1, bounds_2=bounds_2, bounds_3=bounds_3, &\n                                  optimize_dist=optimize_dist &\n                                  ${print_group(optgroups[i])}$, &\n                                  filter_eps=c_filter_eps, flop=c_flop, move_data=move_data, &\n                                  retain_sparsity=retain_sparsity, unit_nr=c_unit_nr, &\n                                  log_verbose=log_verbose)\n         #:endfor\n         $:\"ENDIF\"\n\n         #:for dim in range(1,4)\n            IF (PRESENT(c_pgrid_opt_${dim}$)) c_pgrid_opt_${dim}$ = c_loc(pgrid_opt_${dim}$)\n         #:endfor\n\n         #:set list = ['optimize_dist', 'move_data', 'retain_sparsity', 'log_verbose']\n         #:for var in list\n            IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$)\n         #:endfor\n\n         #:for dim in range(1,4)\n            IF (ALLOCATED(bounds_${dim}$)) DEALLOCATE (bounds_${dim}$)\n         #:endfor\n\n         IF (PRESENT(c_unit_nr)) THEN\n            IF (c_unit_nr .GE. 0) THEN\n               flush (c_unit_nr)\n            END IF\n         END IF\n\n      END SUBROUTINE\n\n      SUBROUTINE c_dbcsr_t_contract_index_${dsuffix}$ (c_alpha, c_tensor_1, &\n                                                       c_tensor_2, c_beta, c_tensor_3, &\n                                                       c_contract_1, contract_1_size, &\n                                                       c_notcontract_1, notcontract_1_size, &\n                                                       c_contract_2, contract_2_size, &\n                                                       c_notcontract_2, notcontract_2_size, &\n                                                       c_map_1, map_1_size, c_map_2, map_2_size, &\n                                                       c_bounds_1, c_bounds_2, c_bounds_3, &\n                                                       c_filter_eps, c_nblks_local, c_result_index, &\n                                                       result_index_size, tensor3_dim) &\n         BIND(C, name=\"c_dbcsr_t_contract_index_${dsuffix}$\")\n\n         ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE     :: c_alpha\n         TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_1, c_tensor_2\n         ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE     :: c_beta\n         TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_3\n\n         INTEGER(kind=c_int), INTENT(IN), VALUE             :: contract_1_size, contract_2_size\n         INTEGER(kind=c_int), INTENT(IN), VALUE             :: notcontract_1_size, notcontract_2_size\n         INTEGER(kind=c_int), INTENT(IN), VALUE             :: map_1_size, map_2_size\n\n         INTEGER(kind=c_int), INTENT(IN) :: c_contract_1(contract_1_size), c_contract_2(contract_2_size)\n         INTEGER(kind=c_int), INTENT(IN) :: c_map_1(map_1_size), c_map_2(map_2_size)\n         INTEGER(kind=c_int), INTENT(IN) :: c_notcontract_1(notcontract_1_size), c_notcontract_2(notcontract_2_size)\n\n         INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, contract_1_size), &\n            OPTIONAL                                 :: c_bounds_1\n         INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, notcontract_1_size), &\n            OPTIONAL                                 :: c_bounds_2\n         INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, notcontract_2_size), &\n            OPTIONAL                                  :: c_bounds_3\n\n         REAL(kind=c_double), INTENT(IN), OPTIONAL          :: c_filter_eps\n         INTEGER(kind=c_int), INTENT(OUT)                   :: c_nblks_local\n         INTEGER(kind=c_long_long), INTENT(IN), VALUE       :: result_index_size\n         INTEGER(kind=c_int), INTENT(IN), VALUE             :: tensor3_dim\n         INTEGER(kind=c_int), DIMENSION(result_index_size, tensor3_dim), &\n            INTENT(OUT)                            :: c_result_index\n\n         TYPE(dbcsr_t_type), POINTER                        :: tensor_1\n         TYPE(dbcsr_t_type), POINTER                        :: tensor_2\n         TYPE(dbcsr_t_type), POINTER                        :: tensor_3\n         INTEGER, DIMENSION(:, :), POINTER                  :: bounds_1, bounds_2, bounds_3\n         INTEGER, DIMENSION(result_index_size, tensor3_dim) :: result_index\n\n         CALL c_f_pointer(c_tensor_1, tensor_1)\n         CALL c_f_pointer(c_tensor_2, tensor_2)\n         CALL c_f_pointer(c_tensor_3, tensor_3)\n\n         #:for dim in range(1,4)\n            NULLIFY (bounds_${dim}$)\n            IF (PRESENT(c_bounds_${dim}$)) THEN\n               ALLOCATE (bounds_${dim}$ (2, SIZE(c_bounds_${dim}$, 2)))\n               bounds_${dim}$ = c_bounds_${dim}$+1\n            END IF\n         #:endfor\n\n         CALL dbcsr_t_contract_index(dbcsr_scalar(c_alpha), tensor_1, &\n                                     tensor_2, dbcsr_scalar(c_beta), tensor_3, &\n                                     c_contract_1 + 1, c_notcontract_1 + 1, &\n                                     c_contract_2 + 1, c_notcontract_2 + 1, &\n                                     c_map_1 + 1, c_map_2 + 1, &\n                                     bounds_1, bounds_2, bounds_3, &\n                                     c_filter_eps, c_nblks_local, result_index)\n\n         c_result_index = result_index - 1\n\n         #:for dim in range(1,4)\n            IF (ASSOCIATED(bounds_${dim}$)) DEALLOCATE (bounds_${dim}$)\n         #:endfor\n\n      END SUBROUTINE\n\n   #:endfor\n\n   #:for dparam, dtype, dsuffix, basetype, cftype in cf_dtype_float_list\n      #:for ndim in ndims\n\n         SUBROUTINE c_dbcsr_t_get_${ndim}$d_block_${dsuffix}$ (c_tensor, tensor_dim, c_ind, c_sizes, c_block, c_found) &\n            BIND(C, name=\"c_dbcsr_t_get_${ndim}$d_block_${dsuffix}$\")\n\n            TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n            INTEGER(kind=c_int), INTENT(IN), VALUE             :: tensor_dim\n            INTEGER(kind=c_int), DIMENSION(tensor_dim), &\n               INTENT(IN)                                      :: c_ind\n            INTEGER(kind=c_int), DIMENSION(tensor_dim), &\n               INTENT(IN)                                      :: c_sizes\n            ${basetype}$ (kind=${cftype}$), &\n               DIMENSION(${arrlist(\"c_sizes\", nmax=ndim)}$), &\n               INTENT(OUT)                             :: c_block\n            LOGICAL(kind=c_bool), INTENT(OUT)                  :: c_found\n\n            TYPE(dbcsr_t_type), POINTER                        :: tensor\n            LOGICAL                                            :: found\n\n            CALL c_f_pointer(c_tensor, tensor)\n\n            CALL dbcsr_t_get_block(tensor, c_ind + 1, c_sizes, c_block, found)\n            c_found = LOGICAL(found, kind=c_bool)\n\n         END SUBROUTINE\n      #:endfor\n   #:endfor\n\n   #:for dparam, dtype, dsuffix, basetype, cftype in cf_dtype_float_list\n      #:for ndim in ndims\n\n         SUBROUTINE c_dbcsr_t_put_${ndim}$d_block_${dsuffix}$ (c_tensor, tensor_dim, c_ind, c_sizes, &\n                                                               c_block, c_summation, c_scale) &\n            BIND(C, name=\"c_dbcsr_t_put_${ndim}$d_block_${dsuffix}$\")\n\n            TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n            INTEGER(kind=c_int), INTENT(IN), VALUE             :: tensor_dim\n            INTEGER(kind=c_int), DIMENSION(tensor_dim), &\n               INTENT(IN)                               :: c_ind\n            INTEGER(kind=c_int), DIMENSION(tensor_dim), &\n               INTENT(IN)                                :: c_sizes\n            ${basetype}$ (kind=${cftype}$), INTENT(IN), &\n               DIMENSION(${arrlist(\"c_sizes\", nmax=ndim)}$) :: c_block\n            LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_summation\n            ${basetype}$ (kind=${cftype}$), INTENT(IN), &\n               OPTIONAL                                          :: c_scale\n\n            TYPE(dbcsr_t_type), POINTER                        :: tensor\n            LOGICAL                                            :: summation\n\n            CALL c_f_pointer(c_tensor, tensor)\n\n            IF (PRESENT(c_summation)) THEN\n               summation = c_summation\n               CALL dbcsr_t_put_block(tensor, c_ind + 1, c_sizes, &\n                                      c_block, summation, c_scale)\n            ELSE\n               CALL dbcsr_t_put_block(tensor, c_ind + 1, c_sizes, &\n                                      c_block, scale=c_scale)\n            END IF\n\n         END SUBROUTINE\n      #:endfor\n   #:endfor\n\n   #:for dparam, dtype, dsuffix, basetype, cftype in cf_dtype_float_list\n      #:for ndim in ndims\n         SUBROUTINE c_dbcsr_t_get_${ndim}$d_block_p_${dsuffix}$ (c_tensor, c_ind, c_block, c_found) &\n            BIND(C, name=\"c_dbcsr_t_get_${ndim}$d_block_p_${dsuffix}$\")\n\n            TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n            INTEGER(kind=c_int), INTENT(IN) :: c_ind(${ndim}$)\n            TYPE(c_ptr), INTENT(INOUT) :: c_block\n            LOGICAL(kind=c_bool), INTENT(INOUT) :: c_found\n\n            TYPE(dbcsr_t_type), POINTER :: tensor\n            INTEGER, DIMENSION(${ndim}$) :: ind\n            LOGICAL :: found, tr\n\n            INTEGER(KIND=int_8), DIMENSION(2) :: ind_2d\n            ${dtype}$, DIMENSION(:, :), POINTER, CONTIGUOUS :: block_2d_ptr\n\n            CALL c_f_pointer(c_tensor, tensor)\n            ind = c_ind + 1\n\n            NULLIFY (block_2d_ptr)\n\n            ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind)\n\n            CALL dbcsr_tas_get_block_p(tensor%matrix_rep, ind_2d(1), ind_2d(2), block_2d_ptr, tr, found)\n\n            c_found = found\n            c_block = c_loc(block_2d_ptr)\n\n         END SUBROUTINE\n      #:endfor\n   #:endfor\n\n   SUBROUTINE c_dbcsr_t_get_stored_coordinates(c_tensor, tensor_dim, c_ind_nd, c_processor) &\n      BIND(C, name=\"c_dbcsr_t_get_stored_coordinates\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n      INTEGER(kind=c_int), INTENT(IN), VALUE             :: tensor_dim\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), &\n         INTENT(IN)                                :: c_ind_nd\n      INTEGER(kind=c_int), INTENT(OUT)                   :: c_processor\n\n      TYPE(dbcsr_t_type), POINTER                        :: tensor\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      CALL dbcsr_t_get_stored_coordinates(tensor, c_ind_nd + 1, c_processor)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_reserve_blocks_index(c_tensor, nblocks, ${varlist(\"c_blk_ind\")}$) &\n      BIND(C, name=\"c_dbcsr_t_reserve_blocks_index\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n      INTEGER(kind=c_int), INTENT(in), value             :: nblocks\n      INTEGER(kind=c_int), INTENT(IN), OPTIONAL          :: ${varlist(\"c_blk_ind\", suffix =\"(nblocks)\")}$\n      INTEGER, DIMENSION(:), POINTER                     :: ${varlist(\"blk_ind\")}$\n\n      TYPE(dbcsr_t_type), POINTER                        :: tensor\n\n      #:for ddim in ddims\n         NULLIFY (blk_ind_${ddim}$)\n         IF (PRESENT(c_blk_ind_${ddim}$)) THEN\n            ALLOCATE (blk_ind_${ddim}$ (nblocks))\n            blk_ind_${ddim}$ = c_blk_ind_${ddim}$+1\n         END IF\n      #:endfor\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      CALL dbcsr_t_reserve_blocks(tensor, ${varlist(\"blk_ind\")}$)\n\n      #:for ddim in ddims\n         IF (ASSOCIATED(blk_ind_${ddim}$)) DEALLOCATE (blk_ind_${ddim}$)\n      #:endfor\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_reserve_blocks_template(c_tensor_in, c_tensor_out) &\n      BIND(C, name=\"c_dbcsr_t_reserve_blocks_template\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE              :: c_tensor_in\n      TYPE(c_ptr), INTENT(IN), VALUE              :: c_tensor_out\n\n      TYPE(dbcsr_t_type), POINTER :: tensor_in\n      TYPE(dbcsr_t_type), POINTER :: tensor_out\n\n      CALL c_f_pointer(c_tensor_in, tensor_in)\n      CALL c_f_pointer(c_tensor_out, tensor_out)\n\n      CALL dbcsr_t_reserve_blocks(tensor_in, tensor_out)\n\n   END SUBROUTINE\n\n   FUNCTION c_ndims_iterator(c_iterator) BIND(C, name=\"c_ndims_iterator\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_iterator\n      TYPE(dbcsr_t_iterator_type), POINTER               :: iterator\n      INTEGER(kind=c_int)                                :: c_ndims_iterator\n\n      CALL c_f_pointer(c_iterator, iterator)\n\n      c_ndims_iterator = iterator%nd_index%ndim_nd\n\n   END FUNCTION\n\n   SUBROUTINE c_dbcsr_t_iterator_start(c_iterator, c_tensor) BIND(C, name=\"c_dbcsr_t_iterator_start\")\n\n      TYPE(c_ptr), INTENT(OUT)                           :: c_iterator\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n\n      TYPE(dbcsr_t_iterator_type), POINTER               :: iterator\n      TYPE(dbcsr_t_type), POINTER                        :: tensor\n\n      ALLOCATE (iterator)\n      CALL c_f_pointer(c_tensor, tensor)\n\n      CALL dbcsr_t_iterator_start(iterator, tensor)\n\n      c_iterator = c_loc(iterator)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_iterator_stop(c_iterator) BIND(C, name=\"c_dbcsr_t_iterator_stop\")\n      TYPE(c_ptr), INTENT(INOUT)                         :: c_iterator\n\n      TYPE(dbcsr_t_iterator_type), POINTER               :: iterator\n\n      CALL c_f_pointer(c_iterator, iterator)\n\n      CALL dbcsr_t_iterator_stop(iterator)\n\n      IF (ASSOCIATED(iterator)) DEALLOCATE (iterator)\n      c_iterator = c_null_ptr\n\n   END SUBROUTINE\n\n   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) &\n      BIND(C, name=\"c_dbcsr_t_iterator_next_block\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_iterator\n      INTEGER(kind=c_int), INTENT(IN), VALUE             :: iterator_size\n      INTEGER(kind=c_int), DIMENSION(iterator_size), TARGET, &\n         INTENT(OUT)                                   :: c_ind_nd\n      INTEGER(kind=c_int), INTENT(OUT)                 :: c_blk\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL       :: c_blk_p\n      INTEGER(kind=c_int), DIMENSION(iterator_size), INTENT(OUT), &\n         OPTIONAL                                        :: c_blk_size, c_blk_offset\n\n      TYPE(dbcsr_t_iterator_type), POINTER               :: iterator\n      INTEGER, DIMENSION(iterator_size)                  :: ind_nd\n      INTEGER, DIMENSION(:), POINTER                     :: blk_offset\n\n      CALL c_f_pointer(c_iterator, iterator)\n\n      NULLIFY (blk_offset)\n      IF (PRESENT(c_blk_offset)) ALLOCATE (blk_offset(iterator_size))\n\n      CALL dbcsr_t_iterator_next_block(iterator, ind_nd, c_blk, c_blk_p, c_blk_size, blk_offset)\n\n      c_ind_nd = ind_nd - 1\n      IF (PRESENT(c_blk_offset)) THEN\n         c_blk_offset = blk_offset - 1\n         DEALLOCATE (blk_offset)\n      END IF\n\n   END SUBROUTINE\n\n   FUNCTION c_dbcsr_t_iterator_blocks_left(c_iterator) &\n      BIND(C, name=\"c_dbcsr_t_iterator_blocks_left\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_iterator\n      TYPE(dbcsr_t_iterator_type), POINTER               :: iterator\n      LOGICAL(kind=c_bool)                               :: c_dbcsr_t_iterator_blocks_left\n\n      CALL c_f_pointer(c_iterator, iterator)\n      c_dbcsr_t_iterator_blocks_left = LOGICAL(dbcsr_t_iterator_blocks_left(iterator), kind=c_bool)\n\n   END FUNCTION\n\n   SUBROUTINE c_dbcsr_t_split_blocks(c_tensor_in, tensor_dim, c_tensor_out, c_block_sizes, c_nodata) &\n      BIND(C, name=\"c_dbcsr_t_split_blocks\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_in\n      TYPE(c_ptr), INTENT(OUT)                           :: c_tensor_out\n      INTEGER(kind=c_int), INTENT(IN), VALUE             :: tensor_dim\n      INTEGER(kind=c_int), INTENT(IN), DIMENSION(tensor_dim) &\n         :: c_block_sizes\n      LOGICAL(kind=c_bool), OPTIONAL                     :: c_nodata\n\n      TYPE(dbcsr_t_type), POINTER                        :: tensor_in\n      TYPE(dbcsr_t_type), POINTER                        :: tensor_out\n      LOGICAL                                            :: nodata\n\n      CALL c_f_pointer(c_tensor_in, tensor_in)\n      ALLOCATE (tensor_out)\n\n      IF (PRESENT(c_nodata)) THEN\n         nodata = c_nodata\n         CALL dbcsr_t_split_blocks(tensor_in, tensor_out, c_block_sizes, nodata)\n      ELSE\n         CALL dbcsr_t_split_blocks(tensor_in, tensor_out, c_block_sizes)\n      END IF\n\n      c_tensor_out = c_loc(tensor_out)\n\n   END SUBROUTINE\n\n   #:for dparam, dtype, dsuffix, dbase, dctype in cf_dtype_float_list\n\n      SUBROUTINE c_dbcsr_t_filter_${dsuffix}$ (c_tensor, c_eps, c_method, c_use_absolute) &\n         BIND(C, name=\"c_dbcsr_t_filter_${dsuffix}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n         ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE     :: c_eps\n         INTEGER(kind=c_int), INTENT(IN), OPTIONAL          :: c_method\n         LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_use_absolute\n\n         TYPE(dbcsr_t_type), POINTER                        :: tensor\n         LOGICAL                                            :: use_absolute\n\n         CALL c_f_pointer(c_tensor, tensor)\n\n         IF (PRESENT(c_use_absolute)) THEN\n            use_absolute = c_use_absolute\n            CALL dbcsr_t_filter(tensor, c_eps, c_method, use_absolute)\n         ELSE\n            CALL dbcsr_t_filter(tensor, c_eps, c_method)\n         END IF\n\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix, dbase, dctype in cf_dtype_float_list\n\n      SUBROUTINE c_dbcsr_t_set_${dsuffix}$ (c_tensor, c_alpha) &\n         BIND(C, name=\"c_dbcsr_t_set_${dsuffix}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n         ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE     :: c_alpha\n\n         TYPE(dbcsr_t_type), POINTER                        :: tensor\n\n         CALL c_f_pointer(c_tensor, tensor)\n\n         CALL dbcsr_t_set(tensor, c_alpha)\n\n      END SUBROUTINE\n   #:endfor\n\n   SUBROUTINE c_dbcsr_t_copy_matrix_to_tensor(c_matrix_in, c_tensor_out, c_summation) &\n      BIND(C, name=\"c_dbcsr_t_copy_matrix_to_tensor\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_matrix_in\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_out\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_summation\n\n      TYPE(dbcsr_type), POINTER                          :: matrix_in\n      TYPE(dbcsr_t_type), POINTER                        :: tensor_out\n      LOGICAL                                            :: summation\n\n      CALL c_f_pointer(c_matrix_in, matrix_in)\n      CALL c_f_pointer(c_tensor_out, tensor_out)\n\n      IF (PRESENT(c_summation)) THEN\n         summation = c_summation\n         CALL dbcsr_t_copy_matrix_to_tensor(matrix_in, tensor_out, summation)\n      ELSE\n         CALL dbcsr_t_copy_matrix_to_tensor(matrix_in, tensor_out)\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_copy_tensor_to_matrix(c_tensor_in, c_matrix_out, c_summation) &\n      BIND(C, name=\"c_dbcsr_t_copy_tensor_to_matrix\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_in\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_matrix_out\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_summation\n\n      TYPE(dbcsr_t_type), POINTER                        :: tensor_in\n      TYPE(dbcsr_type), POINTER                          :: matrix_out\n      LOGICAL                                            :: summation\n\n      CALL c_f_pointer(c_tensor_in, tensor_in)\n      CALL c_f_pointer(c_matrix_out, matrix_out)\n\n      IF (PRESENT(c_summation)) THEN\n         summation = c_summation\n         CALL dbcsr_t_copy_tensor_to_matrix(tensor_in, matrix_out, summation)\n      ELSE\n         CALL dbcsr_t_copy_tensor_to_matrix(tensor_in, matrix_out)\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_blk_sizes(c_tensor, tensor_dim, c_ind, c_blk_size) &\n      BIND(C, name=\"c_dbcsr_t_blk_sizes\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n      INTEGER(kind=c_int), INTENT(IN), VALUE             :: tensor_dim\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(IN) :: c_ind\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT) :: c_blk_size\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      CALL dbcsr_t_blk_sizes(tensor, c_ind + 1, c_blk_size)\n\n   END SUBROUTINE\n\n   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) &\n      BIND(C, name=\"c_dbcsr_t_copy\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_in\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor_out\n      INTEGER(kind=c_int), INTENT(IN), VALUE             :: tensor_dim\n      INTEGER(kind=c_int), INTENT(IN), DIMENSION(tensor_dim), &\n         OPTIONAL                                     :: c_order\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         :: c_summation\n      INTEGER(kind=c_int), INTENT(IN), DIMENSION(2, tensor_dim), &\n         OPTIONAL                                         :: c_bounds\n      LOGICAL(kind=c_bool), INTENT(IN), OPTIONAL         ::c_move_data\n      INTEGER(kind=c_int), INTENT(IN), OPTIONAL          :: c_unit_nr\n\n      TYPE(dbcsr_t_type), POINTER                        :: tensor_in, tensor_out\n      INTEGER, DIMENSION(:), POINTER                     :: order\n      INTEGER, DIMENSION(:, :), POINTER                  :: bounds\n      LOGICAL, POINTER                                   :: summation, move_data\n\n      CALL c_f_pointer(c_tensor_in, tensor_in)\n      CALL c_f_pointer(c_tensor_out, tensor_out)\n\n      NULLIFY (order)\n      IF (PRESENT(c_order)) THEN\n         ALLOCATE (order(tensor_dim))\n         order = c_order + 1\n      END IF\n\n      NULLIFY (bounds)\n      IF (PRESENT(c_bounds)) THEN\n         ALLOCATE (bounds(2, tensor_dim))\n         bounds = c_bounds + 1\n      END IF\n\n      NULLIFY (summation)\n      IF (PRESENT(c_summation)) THEN\n         ALLOCATE (summation)\n         summation = c_summation\n      END IF\n\n      NULLIFY (move_data)\n      IF (PRESENT(c_move_data)) THEN\n         ALLOCATE (move_data)\n         move_data = c_move_data\n      END IF\n\n      CALL dbcsr_t_copy(tensor_in, tensor_out, order, summation, bounds, move_data, c_unit_nr)\n\n      #:set list = ['order', 'bounds', 'summation', 'move_data']\n      #:for var in list\n         IF (ASSOCIATED(${var}$)) DEALLOCATE (${var}$)\n      #:endfor\n\n   END SUBROUTINE\n\n   #:for dparam, dtype, dsuffix, dbase, dctype in cf_dtype_float_list\n\n      SUBROUTINE c_dbcsr_t_scale_${dsuffix}$ (c_tensor, c_alpha) &\n         BIND(C, name=\"c_dbcsr_t_scale_${dsuffix}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n         ${dbase}$ (kind=${dctype}$), INTENT(IN), VALUE     :: c_alpha\n\n         TYPE(dbcsr_t_type), POINTER                        :: tensor\n\n         CALL c_f_pointer(c_tensor, tensor)\n\n         CALL dbcsr_t_scale(tensor, dbcsr_scalar(c_alpha))\n\n      END SUBROUTINE\n\n   #:endfor\n\n   SUBROUTINE c_dbcsr_t_clear(c_tensor) BIND(C, name=\"c_dbcsr_t_clear\")\n      TYPE(c_ptr), INTENT(IN), VALUE                     :: c_tensor\n\n      TYPE(dbcsr_t_type), POINTER                        :: tensor\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      CALL dbcsr_t_clear(tensor)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_get_info(c_tensor, tensor_dim, c_nblks_total, &\n                                 c_nfull_total, &\n                                 c_nblks_local, &\n                                 c_nfull_local, &\n                                 c_pdims, &\n                                 c_my_ploc, &\n                                 ${varlist(\"nblks_local\")}$, &\n                                 ${varlist(\"nblks_total\")}$, &\n                                 ${varlist(\"c_blks_local\")}$, &\n                                 ${varlist(\"c_proc_dist\")}$, &\n                                 ${varlist(\"c_blk_size\")}$, &\n                                 ${varlist(\"c_blk_offset\")}$, &\n                                 c_distribution, &\n                                 c_name, &\n                                 c_data_type) &\n      BIND(C, name=\"c_dbcsr_t_get_info\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), &\n         OPTIONAL :: c_nblks_total\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), &\n         OPTIONAL :: c_nfull_total\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), &\n         OPTIONAL :: c_nblks_local\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), &\n         OPTIONAL :: c_nfull_local\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), &\n         OPTIONAL :: c_my_ploc\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), INTENT(OUT), &\n         OPTIONAL :: c_pdims\n\n      #:for idim in range(1, maxrank+1)\n         INTEGER(kind=c_int), INTENT(IN), VALUE :: nblks_local_${idim}$\n         INTEGER(kind=c_int), INTENT(IN), VALUE :: nblks_total_${idim}$\n         INTEGER(kind=c_int), INTENT(OUT), OPTIONAL, &\n            DIMENSION(nblks_local_${idim}$) :: c_blks_local_${idim}$\n         INTEGER(kind=c_int), INTENT(OUT), OPTIONAL, &\n            DIMENSION(nblks_total_${idim}$) :: c_proc_dist_${idim}$\n         INTEGER(kind=c_int), INTENT(OUT), OPTIONAL, &\n            DIMENSION(nblks_total_${idim}$) :: c_blk_size_${idim}$\n         INTEGER(kind=c_int), INTENT(OUT), OPTIONAL, &\n            DIMENSION(nblks_total_${idim}$) :: c_blk_offset_${idim}$\n      #:endfor\n\n      TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_distribution\n      TYPE(c_ptr), INTENT(OUT), OPTIONAL :: c_name\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: c_data_type\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n\n      TYPE(dbcsr_t_distribution_type), POINTER :: distribution\n      CHARACTER(kind=c_char, len=:), POINTER :: name\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      NULLIFY (distribution)\n      IF (PRESENT(c_distribution)) ALLOCATE (distribution)\n      NULLIFY (name)\n      IF (PRESENT(c_name)) ALLOCATE (CHARACTER(len=default_string_length) :: name)\n\n      CALL dbcsr_t_get_info(tensor, c_nblks_total, c_nfull_total, c_nblks_local, &\n                            c_nfull_local, c_pdims, c_my_ploc, &\n                            ${varlist(\"c_blks_local\")}$, &\n                            ${varlist(\"c_proc_dist\")}$, &\n                            ${varlist(\"c_blk_size\")}$, &\n                            ${varlist(\"c_blk_offset\")}$, &\n                            distribution, name, &\n                            c_data_type)\n\n      #:set list = ['blks_local', 'blk_offset']\n      #:for idim in range(1, maxrank+1)\n         #:for var in list\n            IF (PRESENT(c_${var}$_${idim}$)) c_${var}$_${idim}$ = c_${var}$_${idim}$-1\n         #:endfor\n      #:endfor\n\n      IF (PRESENT(c_name)) THEN\n         name = TRIM(name)//char(0)\n         c_name = c_loc(name)\n      END IF\n\n      IF (PRESENT(c_distribution)) c_distribution = c_loc(distribution)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_get_mapping_info(c_tensor, nd_size, nd_row_size, &\n                                         nd_col_size, ndim_nd, ndim1_2d, ndim2_2d, &\n                                         c_dims_2d_i8, c_dims_2d, c_dims_nd, &\n                                         c_dims1_2d, c_dims2_2d, &\n                                         c_map1_2d, c_map2_2d, &\n                                         c_map_nd, base, c_col_major) &\n      BIND(C, name=\"c_dbcsr_t_get_mapping_info\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      !! nd_size = ndims_mapping(map),\n      !! nd_row_size = ndims_mapping_row(map),\n      !! nd_col_size = ndims_mapping_column(map)\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: nd_size, nd_row_size, nd_col_size\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: ndim_nd, ndim1_2d, ndim2_2d\n      INTEGER(kind=c_long_long), INTENT(OUT), DIMENSION(2), &\n         OPTIONAL :: c_dims_2d_i8\n      INTEGER(kind=c_int), INTENT(OUT), DIMENSION(2), &\n         OPTIONAL :: c_dims_2d\n\n      INTEGER(kind=c_int), INTENT(OUT), DIMENSION(nd_size), &\n         OPTIONAL :: c_dims_nd\n      INTEGER(kind=c_int), INTENT(OUT), DIMENSION(nd_row_size), &\n         OPTIONAL :: c_dims1_2d, c_map1_2d\n      INTEGER(kind=c_int), INTENT(OUT), DIMENSION(nd_col_size), &\n         OPTIONAL :: c_dims2_2d, c_map2_2d\n      INTEGER(kind=c_int), INTENT(OUT), DIMENSION(nd_size), &\n         OPTIONAL :: c_map_nd\n\n      INTEGER(kind=c_int), INTENT(OUT), OPTIONAL :: base\n      LOGICAL(kind=c_bool), INTENT(OUT), OPTIONAL :: c_col_major\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n\n      LOGICAL                     :: col_major\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      IF (PRESENT(c_col_major)) THEN\n         CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, ndim_nd, ndim1_2d, &\n                                       ndim2_2d, c_dims_2d_i8, c_dims_2d, c_dims_nd, &\n                                       c_dims1_2d, c_dims2_2d, &\n                                       c_map1_2d, c_map2_2d, c_map_nd, &\n                                       base, col_major)\n         c_col_major = LOGICAL(col_major, kind=c_bool)\n      ELSE\n         CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, ndim_nd, ndim1_2d, &\n                                       ndim2_2d, c_dims_2d_i8, c_dims_2d, c_dims_nd, &\n                                       c_dims1_2d, c_dims2_2d, &\n                                       c_map1_2d, c_map2_2d, c_map_nd, &\n                                       base)\n      END IF\n\n      #:set list = ['dims_nd', 'dims1_2d', 'dims2_2d', 'map1_2d', 'map2_2d', 'map_nd']\n      #:for var in list\n         IF (PRESENT(c_${var}$)) c_${var}$ = c_${var}$-1\n      #:endfor\n\n   END SUBROUTINE\n\n   FUNCTION c_dbcsr_t_get_num_blocks(c_tensor) RESULT(c_num_blocks) &\n      BIND(C, name=\"c_dbcsr_t_get_num_blocks\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n      INTEGER(kind=c_int) :: c_num_blocks\n\n      CALL c_f_pointer(c_tensor, tensor)\n      c_num_blocks = dbcsr_t_get_num_blocks(tensor)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_t_get_num_blocks_total(c_tensor) RESULT(c_num_blocks_total) &\n      BIND(C, name=\"c_dbcsr_t_get_num_blocks_total\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n      INTEGER(kind=c_long_long) :: c_num_blocks_total\n\n      CALL c_f_pointer(c_tensor, tensor)\n      c_num_blocks_total = dbcsr_t_get_num_blocks_total(tensor)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_t_nblks_local(c_tensor, idim) &\n      BIND(C, name=\"c_dbcsr_t_nblks_local\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: idim\n      INTEGER(kind=c_int) :: c_dbcsr_t_nblks_local\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n      CALL c_f_pointer(c_tensor, tensor)\n\n      c_dbcsr_t_nblks_local = dbcsr_t_nblks_local(tensor, idim + 1)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_t_nblks_total(c_tensor, idim) &\n      BIND(C, name=\"c_dbcsr_t_nblks_total\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: idim\n      INTEGER(kind=c_int) :: c_dbcsr_t_nblks_total\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n      CALL c_f_pointer(c_tensor, tensor)\n\n      c_dbcsr_t_nblks_total = dbcsr_t_nblks_total(tensor, idim + 1)\n\n   END FUNCTION\n\n   SUBROUTINE c_dbcsr_t_dims(c_tensor, tensor_dim, c_dims) &\n      BIND(C, name=\"c_dbcsr_t_dims\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      INTEGER(kind=c_int), INTENT(IN), VALUE :: tensor_dim\n      INTEGER(kind=c_int), DIMENSION(tensor_dim), &\n         INTENT(OUT) :: c_dims\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      CALL dbcsr_t_dims(tensor, c_dims)\n\n   END SUBROUTINE\n\n   FUNCTION c_dbcsr_t_ndims(c_tensor) BIND(C, name=\"c_dbcsr_t_ndims\")\n      TYPE(c_ptr), INTENT(IN), VALUE                  :: c_tensor\n      TYPE(dbcsr_t_type), POINTER                     :: tensor\n      INTEGER(kind=c_int)                             :: c_dbcsr_t_ndims\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      c_dbcsr_t_ndims = dbcsr_t_ndims(tensor)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_t_ndims_matrix_row(c_tensor) &\n      BIND(C, name=\"c_dbcsr_t_ndims_matrix_row\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      TYPE(dbcsr_t_type), POINTER :: tensor\n      INTEGER(kind=c_long_long) :: c_dbcsr_t_ndims_matrix_row\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      c_dbcsr_t_ndims_matrix_row = &\n         dbcsr_t_ndims_matrix_row(tensor)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_t_ndims_matrix_column(c_tensor) &\n      BIND(C, name=\"c_dbcsr_t_ndims_matrix_column\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      TYPE(dbcsr_t_type), POINTER :: tensor\n      INTEGER(kind=c_long_long) :: c_dbcsr_t_ndims_matrix_column\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      c_dbcsr_t_ndims_matrix_column = &\n         dbcsr_t_ndims_matrix_column(tensor)\n\n   END FUNCTION\n\n   FUNCTION c_dbcsr_t_get_nze(c_tensor) &\n      BIND(C, name=\"c_dbcsr_t_get_nze\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      TYPE(dbcsr_t_type), POINTER :: tensor\n      INTEGER(kind=c_int) :: c_dbcsr_t_get_nze\n\n      CALL c_f_pointer(c_tensor, tensor)\n      c_dbcsr_t_get_nze = dbcsr_t_get_nze(tensor)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_t_get_nze_total(c_tensor) &\n      BIND(C, name=\"c_dbcsr_t_get_nze_total\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      TYPE(dbcsr_t_type), POINTER :: tensor\n      INTEGER(kind=c_long_long) :: c_dbcsr_t_get_nze_total\n\n      CALL c_f_pointer(c_tensor, tensor)\n      c_dbcsr_t_get_nze_total = dbcsr_t_get_nze_total(tensor)\n   END FUNCTION\n\n   FUNCTION c_dbcsr_t_max_nblks_local(c_tensor) RESULT(max_blks) &\n      BIND(C, name=\"c_dbcsr_t_max_nblks_local\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      INTEGER(kind=c_long_long) :: max_blks\n      TYPE(dbcsr_t_type), POINTER :: tensor\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      max_blks = dbcsr_t_max_nblks_local(tensor)\n   END FUNCTION\n\n   #:for dparam, dtype, dsuffix, basetype, cftype in cf_dtype_float_list\n      SUBROUTINE c_dbcsr_t_get_data_${dsuffix}$ (c_tensor, c_data, c_data_size, &\n                                                 c_select_data_type, c_lb, c_ub) BIND(C, name=\"c_dbcsr_t_get_data_${dsuffix}$\")\n\n         TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n         TYPE(c_ptr), INTENT(INOUT) :: c_data\n         INTEGER(kind=c_long_long), INTENT(INOUT) :: c_data_size\n         ${basetype}$ (kind=${cftype}$), INTENT(IN), VALUE :: c_select_data_type\n         INTEGER(kind=c_int), INTENT(IN), OPTIONAL :: c_lb, c_ub\n\n         TYPE(dbcsr_t_type), POINTER :: tensor\n         ${basetype}$ (kind=${cftype}$), DIMENSION(:), POINTER :: DATA\n         INTEGER, POINTER :: lb, ub\n\n         CALL c_f_pointer(c_tensor, tensor)\n\n         NULLIFY (lb)\n         IF (PRESENT(c_lb)) THEN\n            ALLOCATE (lb)\n            lb = c_lb + 1\n         END IF\n\n         NULLIFY (ub)\n         IF (PRESENT(c_ub)) THEN\n            ALLOCATE (ub)\n            ub = ub + 1\n         END IF\n\n         DATA => dbcsr_get_data_p(tensor%matrix_rep%matrix%data_area, &\n                                  c_select_data_type, lb, ub)\n\n         c_data = c_loc(DATA)\n         c_data_size = SIZE(DATA)\n\n         IF (ASSOCIATED(lb)) DEALLOCATE (lb)\n         IF (ASSOCIATED(ub)) DEALLOCATE (ub)\n\n      END SUBROUTINE\n   #:endfor\n\n   SUBROUTINE c_dbcsr_t_batched_contract_init(c_tensor) &\n      BIND(C, name=\"c_dbcsr_t_batched_contract_init\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      TYPE(dbcsr_t_type), POINTER :: tensor\n\n      CALL c_f_pointer(c_tensor, tensor)\n\n      CALL dbcsr_t_batched_contract_init(tensor)\n\n   END SUBROUTINE\n\n   SUBROUTINE c_dbcsr_t_batched_contract_finalize(c_tensor, c_unit_nr) &\n      BIND(C, name=\"c_dbcsr_t_batched_contract_finalize\")\n\n      TYPE(c_ptr), INTENT(IN), VALUE :: c_tensor\n      INTEGER(kind=c_int), OPTIONAL :: c_unit_nr\n\n      TYPE(dbcsr_t_type), POINTER :: tensor\n\n      CALL c_f_pointer(c_tensor, tensor)\n      IF (PRESENT(c_unit_nr)) THEN\n         CALL dbcsr_t_batched_contract_finalize(tensor, c_unit_nr)\n      ELSE\n         CALL dbcsr_t_batched_contract_finalize(tensor)\n      END IF\n\n   END SUBROUTINE\n\nEND MODULE\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor_block.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tensor_block\n   !! Methods to operate on n-dimensional tensor blocks.\n\n   #:include \"dbcsr_tensor.fypp\"\n   #:set maxdim = maxrank\n   #:set ndims = range(2,maxdim+1)\n\n   USE dbcsr_allocate_wrap, ONLY: &\n      allocate_any\n   USE dbcsr_api, ONLY: &\n      ${uselist(dtype_float_param)}$, dbcsr_iterator_type, &\n      dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop, dbcsr_type, &\n      dbcsr_reserve_blocks, dbcsr_scalar_type, dbcsr_finalize, dbcsr_get_num_blocks, &\n      dbcsr_type_no_symmetry, dbcsr_desymmetrize, dbcsr_release, dbcsr_has_symmetry\n   USE dbcsr_tas_types, ONLY: &\n      dbcsr_tas_iterator\n   USE dbcsr_tas_base, ONLY: &\n      dbcsr_tas_iterator_next_block, dbcsr_tas_iterator_blocks_left, dbcsr_tas_iterator_start, &\n      dbcsr_tas_iterator_stop, dbcsr_tas_get_block_p, dbcsr_tas_put_block, dbcsr_tas_reserve_blocks\n   USE dbcsr_kinds, ONLY: &\n      ${uselist(dtype_float_prec)}$, int_8\n   USE dbcsr_tensor_index, ONLY: &\n      nd_to_2d_mapping, ndims_mapping, get_nd_indices_tensor, destroy_nd_to_2d_mapping, get_2d_indices_tensor\n   USE dbcsr_array_list_methods, ONLY: &\n      array_list, get_array_elements, destroy_array_list, sizes_of_arrays, create_array_list, &\n      get_arrays\n   USE dbcsr_tensor_types, ONLY: &\n      dbcsr_t_type, ndims_tensor, dbcsr_t_get_data_type, dbcsr_t_blk_sizes, dbcsr_t_get_num_blocks, &\n      dbcsr_t_finalize, ndims_matrix_row, ndims_matrix_column\n   USE dbcsr_dist_operations, ONLY: &\n      checker_tr\n   USE dbcsr_toollib, ONLY: &\n      swap\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_block'\n\n   PUBLIC :: &\n      block_nd, &\n      create_block, &\n      dbcsr_t_get_block, &\n      dbcsr_t_iterator_blocks_left, &\n      dbcsr_t_iterator_next_block, &\n      dbcsr_t_iterator_start, &\n      dbcsr_t_iterator_stop, &\n      dbcsr_t_iterator_type, &\n      dbcsr_t_put_block, &\n      dbcsr_t_reserve_blocks, &\n      dbcsr_t_reserved_block_indices, &\n      destroy_block, &\n      ndims_iterator\n\n   TYPE dbcsr_t_iterator_type\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(dbcsr_tas_iterator)    :: iter\n      TYPE(nd_to_2d_mapping)      :: nd_index_blk\n      TYPE(nd_to_2d_mapping)      :: nd_index\n      TYPE(array_list)            :: blk_sizes, blk_offsets\n#else\n      TYPE(dbcsr_tas_iterator)    :: iter = dbcsr_tas_iterator()\n      TYPE(nd_to_2d_mapping)      :: nd_index_blk = nd_to_2d_mapping()\n      TYPE(nd_to_2d_mapping)      :: nd_index = nd_to_2d_mapping()\n      TYPE(array_list)            :: blk_sizes = array_list(), blk_offsets = array_list()\n#endif\n   END TYPE dbcsr_t_iterator_type\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      PUBLIC :: block_nd_${dsuffix}$\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      TYPE block_nd_${dsuffix}$\n         INTEGER, DIMENSION(:), ALLOCATABLE   :: sizes\n         ${dtype}$, DIMENSION(:), ALLOCATABLE :: blk\n      END TYPE\n\n   #:endfor\n\n   TYPE block_nd\n      #:for dparam, dtype, dsuffix in dtype_float_list\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n         TYPE(block_nd_${dsuffix}$) :: ${dsuffix}$\n#else\n         TYPE(block_nd_${dsuffix}$) :: ${dsuffix}$ = block_nd_${dsuffix}$ ()\n#endif\n      #:endfor\n      INTEGER          :: data_type = -1\n   END TYPE\n\n   INTERFACE create_block\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE create_block_data_${dsuffix}$\n      #:endfor\n      MODULE PROCEDURE create_block_nodata\n   END INTERFACE\n\n   INTERFACE dbcsr_t_put_block\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         #:for ndim in ndims\n            MODULE PROCEDURE dbcsr_t_put_${ndim}$d_block_${dsuffix}$\n         #:endfor\n      #:endfor\n      MODULE PROCEDURE dbcsr_t_put_anyd_block\n   END INTERFACE\n\n   INTERFACE dbcsr_t_get_block\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         #:for ndim in ndims\n            MODULE PROCEDURE dbcsr_t_get_${ndim}$d_block_${dsuffix}$\n            MODULE PROCEDURE dbcsr_t_allocate_and_get_${ndim}$d_block_${dsuffix}$\n         #:endfor\n      #:endfor\n      MODULE PROCEDURE dbcsr_t_get_anyd_block\n   END INTERFACE\n\n   INTERFACE dbcsr_t_reserve_blocks\n      MODULE PROCEDURE dbcsr_t_reserve_blocks_index\n      MODULE PROCEDURE dbcsr_t_reserve_blocks_index_array\n      MODULE PROCEDURE dbcsr_t_reserve_blocks_template\n      MODULE PROCEDURE dbcsr_t_reserve_blocks_tensor_to_matrix\n      MODULE PROCEDURE dbcsr_t_reserve_blocks_matrix_to_tensor\n   END INTERFACE\n\nCONTAINS\n\n   SUBROUTINE create_block_nodata(block, sizes, data_type)\n      !! Create block without data\n      TYPE(block_nd), INTENT(OUT)       :: block\n      INTEGER, DIMENSION(:), INTENT(IN) :: sizes\n      INTEGER, INTENT(IN)               :: data_type\n\n      block%data_type = data_type\n      SELECT CASE (data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            CALL create_block_nodata_${dsuffix}$ (block%${dsuffix}$, sizes)\n         #:endfor\n      END SELECT\n   END SUBROUTINE\n\n   SUBROUTINE destroy_block(block)\n      !! Destroy block\n      TYPE(block_nd), INTENT(INOUT) :: block\n\n      SELECT CASE (block%data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            CALL destroy_block_${dsuffix}$ (block%${dsuffix}$)\n         #:endfor\n      END SELECT\n\n   END SUBROUTINE\n\n   FUNCTION block_size(block)\n      !! block size\n      TYPE(block_nd), INTENT(IN)         :: block\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: block_size\n\n      block_size = 0 ! invalid\n      SELECT CASE (block%data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            CALL allocate_any(block_size, source=block%${dsuffix}$%sizes)\n         #:endfor\n      END SELECT\n   END FUNCTION\n\n   SUBROUTINE dbcsr_t_iterator_start(iterator, tensor)\n      !! Generalization of dbcsr_iterator_start for tensors.\n      TYPE(dbcsr_t_iterator_type), INTENT(OUT)           :: iterator\n      TYPE(dbcsr_t_type), INTENT(IN)                     :: tensor\n\n      DBCSR_ASSERT(tensor%valid)\n\n      CALL dbcsr_tas_iterator_start(iterator%iter, tensor%matrix_rep)\n      iterator%nd_index_blk = tensor%nd_index_blk\n      iterator%nd_index = tensor%nd_index\n      iterator%blk_sizes = tensor%blk_sizes\n      iterator%blk_offsets = tensor%blk_offsets\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_iterator_stop(iterator)\n      !! Generalization of dbcsr_iterator_stop for tensors.\n      TYPE(dbcsr_t_iterator_type), INTENT(INOUT) :: iterator\n\n      CALL dbcsr_tas_iterator_stop(iterator%iter)\n      CALL destroy_nd_to_2d_mapping(iterator%nd_index)\n      CALL destroy_nd_to_2d_mapping(iterator%nd_index_blk)\n      CALL destroy_array_list(iterator%blk_sizes)\n      CALL destroy_array_list(iterator%blk_offsets)\n\n   END SUBROUTINE\n\n   PURE FUNCTION ndims_iterator(iterator)\n      !! Number of dimensions.\n      !!\n      !! Note: specification function below must be defined before it is used in\n      !! the source due to a bug in the IBM XL Fortran compiler (compilation fails)\n\n      TYPE(dbcsr_t_iterator_type), INTENT(IN) :: iterator\n      INTEGER                                 :: ndims_iterator\n\n      ndims_iterator = iterator%nd_index%ndim_nd\n   END FUNCTION\n\n   SUBROUTINE dbcsr_t_iterator_next_block(iterator, ind_nd, blk, blk_p, blk_size, blk_offset)\n      !! iterate over nd blocks of an nd rank tensor, index only (blocks must be retrieved by calling\n      !! dbcsr_t_get_block on tensor).\n\n      TYPE(dbcsr_t_iterator_type), INTENT(INOUT)     :: iterator\n      INTEGER, DIMENSION(ndims_iterator(iterator)), &\n         INTENT(OUT)                                 :: ind_nd\n         !! nd index of block\n      INTEGER, INTENT(OUT)                           :: blk\n         !! is this needed?\n      INTEGER, INTENT(OUT), OPTIONAL                 :: blk_p\n         !! is this needed?\n      INTEGER, DIMENSION(ndims_iterator(iterator)), &\n         INTENT(OUT), OPTIONAL                       :: blk_size, blk_offset\n         !! blk size in each dimension\n         !! blk offset in each dimension\n\n      INTEGER(KIND=int_8), DIMENSION(2)              :: ind_2d\n\n      CALL dbcsr_tas_iterator_next_block(iterator%iter, ind_2d(1), ind_2d(2), blk, blk_p=blk_p)\n\n      ind_nd(:) = get_nd_indices_tensor(iterator%nd_index_blk, ind_2d)\n      IF (PRESENT(blk_size)) blk_size(:) = get_array_elements(iterator%blk_sizes, ind_nd)\n      ! note: blk_offset needs to be determined by tensor metadata, can not be derived from 2d row/col\n      ! offset since block index mapping is not consistent with element index mapping\n      IF (PRESENT(blk_offset)) blk_offset(:) = get_array_elements(iterator%blk_offsets, ind_nd)\n\n   END SUBROUTINE\n\n   FUNCTION dbcsr_t_iterator_blocks_left(iterator)\n      !! Generalization of dbcsr_iterator_blocks_left for tensors.\n      TYPE(dbcsr_t_iterator_type), INTENT(IN) :: iterator\n      LOGICAL                                 :: dbcsr_t_iterator_blocks_left\n\n      dbcsr_t_iterator_blocks_left = dbcsr_tas_iterator_blocks_left(iterator%iter)\n\n   END FUNCTION\n\n   SUBROUTINE dbcsr_t_reserve_blocks_index_array(tensor, blk_ind)\n      !! reserve blocks from indices as array object\n      TYPE(dbcsr_t_type), INTENT(INOUT)   :: tensor\n      INTEGER, DIMENSION(:, :), INTENT(IN) :: blk_ind\n      INTEGER                             :: handle\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_index_array'\n\n      CALL timeset(routineN, handle)\n      #:for ndim in ndims\n         IF (ndims_tensor(tensor) == ${ndim}$) THEN\n            CALL dbcsr_t_reserve_blocks(tensor, ${arrlist(\"blk_ind\", nmax=ndim, ndim_pre=1)}$)\n         END IF\n      #:endfor\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_reserve_blocks_index(tensor, ${varlist(\"blk_ind\")}$)\n      !! reserve tensor blocks using block indices\n      TYPE(dbcsr_t_type), INTENT(INOUT)           :: tensor\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist(\"blk_ind\")}$\n         !! index of blocks to reserve in each dimension\n      INTEGER                                     :: iblk, nblk, handle\n      INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:)          :: cols, rows\n      INTEGER(KIND=int_8), DIMENSION(2)                       :: ind_2d\n      TYPE(array_list)                            :: blks\n      INTEGER, DIMENSION(ndims_tensor(tensor))   :: iblk_nd, ind_nd, nblk_tmp\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_index'\n\n      CALL timeset(routineN, handle)\n      DBCSR_ASSERT(tensor%valid)\n\n      CALL create_array_list(blks, ndims_tensor(tensor), &\n                             ${varlist(\"blk_ind\")}$)\n\n      nblk_tmp(:) = sizes_of_arrays(blks)\n      nblk = nblk_tmp(1)\n      ALLOCATE (cols(nblk), rows(nblk))\n      DO iblk = 1, nblk\n         iblk_nd(:) = iblk\n         ind_nd(:) = get_array_elements(blks, iblk_nd)\n         ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind_nd)\n         rows(iblk) = ind_2d(1); cols(iblk) = ind_2d(2)\n      END DO\n\n      CALL dbcsr_tas_reserve_blocks(tensor%matrix_rep, rows=rows, columns=cols)\n      CALL dbcsr_t_finalize(tensor)\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_reserve_blocks_template(tensor_in, tensor_out)\n      !! reserve tensor blocks using template\n\n      TYPE(dbcsr_t_type), INTENT(IN)    :: tensor_in\n         !! template tensor\n      TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_out\n      INTEGER                           :: handle\n\n      INTEGER, DIMENSION(dbcsr_t_get_num_blocks(tensor_in), ndims_tensor(tensor_in)) :: blk_ind\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_template'\n\n      CALL timeset(routineN, handle)\n\n      CALL dbcsr_t_reserved_block_indices(tensor_in, blk_ind)\n      CALL dbcsr_t_reserve_blocks(tensor_out, blk_ind)\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_reserve_blocks_matrix_to_tensor(matrix_in, tensor_out)\n      !! reserve tensor blocks using matrix template\n      TYPE(dbcsr_type), TARGET, INTENT(IN) :: matrix_in\n      TYPE(dbcsr_t_type), INTENT(INOUT)  :: tensor_out\n      TYPE(dbcsr_type), POINTER          :: matrix_in_desym\n\n      INTEGER                            :: blk, iblk, nblk\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: blk_ind_1, blk_ind_2\n      INTEGER, DIMENSION(2)              :: ind_2d\n      TYPE(dbcsr_iterator_type)          :: iter\n      INTEGER                            :: handle\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_matrix_to_tensor'\n\n      CALL timeset(routineN, handle)\n\n      IF (dbcsr_has_symmetry(matrix_in)) THEN\n         ALLOCATE (matrix_in_desym)\n         CALL dbcsr_desymmetrize(matrix_in, matrix_in_desym)\n      ELSE\n         matrix_in_desym => matrix_in\n      END IF\n\n      nblk = dbcsr_get_num_blocks(matrix_in_desym)\n      ALLOCATE (blk_ind_1(nblk), blk_ind_2(nblk))\n      CALL dbcsr_iterator_start(iter, matrix_in_desym)\n      DO iblk = 1, nblk\n         CALL dbcsr_iterator_next_block(iter, ind_2d(1), ind_2d(2), blk)\n         blk_ind_1(iblk) = ind_2d(1); blk_ind_2(iblk) = ind_2d(2)\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n\n      CALL dbcsr_t_reserve_blocks(tensor_out, blk_ind_1, blk_ind_2)\n\n      IF (dbcsr_has_symmetry(matrix_in)) THEN\n         CALL dbcsr_release(matrix_in_desym)\n         DEALLOCATE (matrix_in_desym)\n      END IF\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_reserve_blocks_tensor_to_matrix(tensor_in, matrix_out)\n      !! reserve matrix blocks using tensor template\n\n      TYPE(dbcsr_t_type), INTENT(IN)        :: tensor_in\n      TYPE(dbcsr_type), INTENT(INOUT)       :: matrix_out\n      TYPE(dbcsr_t_iterator_type)           :: iter\n      INTEGER, ALLOCATABLE, DIMENSION(:) :: blk_ind_1, blk_ind_2\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_reserve_blocks_tensor_to_matrix'\n      INTEGER :: handle, blk, iblk, nblk\n      INTEGER, DIMENSION(2)              :: ind_2d\n\n      CALL timeset(routineN, handle)\n\n      nblk = dbcsr_t_get_num_blocks(tensor_in)\n      ALLOCATE (blk_ind_1(nblk), blk_ind_2(nblk))\n      CALL dbcsr_t_iterator_start(iter, tensor_in)\n\n      iblk = 0\n      DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n         CALL dbcsr_t_iterator_next_block(iter, ind_2d, blk)\n         IF (dbcsr_has_symmetry(matrix_out)) THEN\n            IF (checker_tr(ind_2d(1), ind_2d(2))) CYCLE\n            IF (ind_2d(1) > ind_2d(2)) CALL swap(ind_2d(1), ind_2d(2))\n         END IF\n\n         iblk = iblk + 1\n         blk_ind_1(iblk) = ind_2d(1); blk_ind_2(iblk) = ind_2d(2)\n      END DO\n      CALL dbcsr_t_iterator_stop(iter)\n\n      CALL dbcsr_reserve_blocks(matrix_out, blk_ind_1(:iblk), blk_ind_2(:iblk))\n      CALL dbcsr_finalize(matrix_out)\n\n      CALL timestop(handle)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_reserved_block_indices(tensor, blk_ind)\n      !! indices of non-zero blocks\n      TYPE(dbcsr_t_type), INTENT(IN)            :: tensor\n      INTEGER                                   :: blk, iblk, nblk\n      TYPE(dbcsr_t_iterator_type)               :: iterator\n      INTEGER, DIMENSION(ndims_tensor(tensor))  :: ind_nd\n      INTEGER, DIMENSION(dbcsr_t_get_num_blocks(tensor), ndims_tensor(tensor)), INTENT(OUT) :: blk_ind\n\n      DBCSR_ASSERT(tensor%valid)\n\n      nblk = dbcsr_t_get_num_blocks(tensor)\n\n      CALL dbcsr_t_iterator_start(iterator, tensor)\n      DO iblk = 1, nblk\n         CALL dbcsr_t_iterator_next_block(iterator, ind_nd, blk)\n         blk_ind(iblk, :) = ind_nd(:)\n      END DO\n      CALL dbcsr_t_iterator_stop(iterator)\n\n   END SUBROUTINE\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE create_block_data_${dsuffix}$ (block, sizes, array)\n      !! Create block from array, array can be n-dimensional.\n         TYPE(block_nd), INTENT(OUT)                       :: block\n         INTEGER, DIMENSION(:), INTENT(IN)                 :: sizes\n         ${dtype}$, DIMENSION(PRODUCT(sizes)), INTENT(IN) :: array\n\n         ASSOCIATE (blk => block%${dsuffix}$)\n            block%data_type = ${dparam}$\n            CALL allocate_any(blk%sizes, source=sizes)\n            CALL allocate_any(blk%blk, source=array)\n         END ASSOCIATE\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE create_block_nodata_${dsuffix}$ (block, sizes)\n      !! Create and allocate block, but no data.\n         INTEGER, INTENT(IN), DIMENSION(:)       :: sizes\n         TYPE(block_nd_${dsuffix}$), INTENT(OUT) :: block\n         CALL allocate_any(block%sizes, source=sizes)\n         ALLOCATE (block%blk(PRODUCT(sizes)))\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE destroy_block_${dsuffix}$ (block)\n         TYPE(block_nd_${dsuffix}$), INTENT(INOUT) :: block\n         DEALLOCATE (block%blk)\n         DEALLOCATE (block%sizes)\n      END SUBROUTINE\n   #:endfor\n\n   SUBROUTINE dbcsr_t_get_anyd_block(tensor, ind, block, found)\n      !! Generic implementation of dbcsr_t_get_block (arbitrary tensor rank and arbitrary datatype)\n\n      TYPE(dbcsr_t_type), INTENT(INOUT)            :: tensor\n      INTEGER, DIMENSION(ndims_tensor(tensor)), &\n         INTENT(IN)                                :: ind\n         !! block index\n      TYPE(block_nd), INTENT(OUT)                  :: block\n         !! block to get\n      LOGICAL, INTENT(OUT)                         :: found\n         !! whether block was found\n\n      SELECT CASE (dbcsr_t_get_data_type(tensor))\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            CALL dbcsr_t_get_anyd_block_${dsuffix}$ (tensor, ind, block, found)\n         #:endfor\n      END SELECT\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_put_anyd_block(tensor, ind, block, summation, scale)\n      !! Generic implementation of dbcsr_t_put_block (arbitrary tensor rank and arbitrary datatype)\n\n      TYPE(dbcsr_t_type), INTENT(INOUT)            :: tensor\n      INTEGER, DIMENSION(ndims_tensor(tensor)), &\n         INTENT(IN)                                :: ind\n         !! block index\n      TYPE(block_nd), INTENT(IN)                   :: block\n         !! block to put\n      LOGICAL, INTENT(IN), OPTIONAL                :: summation\n         !! whether block should be summed to existing block\n      TYPE(dbcsr_scalar_type), INTENT(IN), OPTIONAL :: scale\n         !! scaling factor\n\n      SELECT CASE (block%data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            IF (.NOT. PRESENT(scale)) THEN\n               CALL dbcsr_t_put_anyd_block_${dsuffix}$ (tensor, ind, block%${dsuffix}$, summation)\n            ELSE\n               CALL dbcsr_t_put_anyd_block_${dsuffix}$ (tensor, ind, block%${dsuffix}$, summation, scale=scale%${dsuffix}$)\n            END IF\n         #:endfor\n      END SELECT\n\n   END SUBROUTINE\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE dbcsr_t_put_anyd_block_${dsuffix}$ (tensor, ind, block, summation, scale)\n      !! Generic implementation of dbcsr_t_put_block, template for datatype\n\n         TYPE(block_nd_${dsuffix}$), INTENT(IN)       :: block\n         !! block to put\n         TYPE(dbcsr_t_type), INTENT(INOUT)            :: tensor\n         LOGICAL, INTENT(IN), OPTIONAL                :: summation\n         !! whether block should be summed to existing block\n         ${dtype}$, INTENT(IN), OPTIONAL :: scale\n         !! scaling factor\n         INTEGER, DIMENSION(ndims_tensor(tensor)), &\n            INTENT(IN)                                :: ind\n         !! block index\n\n         SELECT CASE (ndims_tensor(tensor))\n            #:for ndim in ndims\n               CASE (${ndim}$)\n               CALL dbcsr_t_put_${ndim}$d_block_${dsuffix}$ (tensor, ind, block%sizes, block%blk, summation=summation, scale=scale)\n            #:endfor\n         END SELECT\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE dbcsr_t_get_anyd_block_${dsuffix}$ (tensor, ind, block, found)\n      !! Generic implementation of dbcsr_t_get_block (arbitrary tensor rank)\n\n         TYPE(block_nd), INTENT(OUT)                  :: block\n         !! block to get\n         LOGICAL, INTENT(OUT)                         :: found\n         !! whether block was found\n         TYPE(dbcsr_t_type), INTENT(INOUT)            :: tensor\n         INTEGER, DIMENSION(ndims_tensor(tensor)), &\n            INTENT(IN)                                :: ind\n         !! block index\n         INTEGER, DIMENSION(ndims_tensor(tensor))    :: blk_size\n         ${dtype}$, DIMENSION(:), ALLOCATABLE         :: block_arr\n\n         CALL dbcsr_t_blk_sizes(tensor, ind, blk_size)\n         ALLOCATE (block_arr(PRODUCT(blk_size)))\n\n         SELECT CASE (ndims_tensor(tensor))\n            #:for ndim in ndims\n               CASE (${ndim}$)\n               CALL dbcsr_t_get_${ndim}$d_block_${dsuffix}$ (tensor, ind, blk_size, block_arr, found)\n            #:endfor\n         END SELECT\n         CALL create_block(block, blk_size, block_arr)\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      #:for ndim in ndims\n         SUBROUTINE dbcsr_t_put_${ndim}$d_block_${dsuffix}$ (tensor, ind, sizes, block, summation, scale)\n      !! Template for dbcsr_t_put_block.\n\n            TYPE(dbcsr_t_type), INTENT(INOUT)                     :: tensor\n            INTEGER, DIMENSION(${ndim}$), INTENT(IN) :: ind\n         !! block index\n            INTEGER, DIMENSION(${ndim}$), INTENT(IN) :: sizes\n         !! block size\n            ${dtype}$, DIMENSION(${arrlist(\"sizes\", nmax=ndim)}$), &\n               INTENT(IN), TARGET                                 :: block\n         !! block to put\n            LOGICAL, INTENT(IN), OPTIONAL                         :: summation\n         !! whether block should be summed to existing block\n            ${dtype}$, INTENT(IN), OPTIONAL                       :: scale\n         !! scaling factor\n            INTEGER(KIND=int_8), DIMENSION(2)                     :: ind_2d\n            INTEGER, DIMENSION(2)                                 :: shape_2d\n            ${dtype}$, POINTER, DIMENSION(:, :)                   :: block_2d\n            INTEGER, DIMENSION(${ndim}$)                          :: shape_nd\n            LOGICAL :: found, new_block\n            ${dtype}$, DIMENSION(${arrlist(\"sizes\", nmax=ndim)}$) :: block_check\n\n            LOGICAL, PARAMETER :: debug = .FALSE.\n            INTEGER :: i\n\n            new_block = .FALSE.\n\n            IF (debug) THEN\n               CALL dbcsr_t_get_block(tensor, ind, sizes, block_check, found=found)\n               DBCSR_ASSERT(found)\n            END IF\n\n            ASSOCIATE (map_nd => tensor%nd_index_blk%map_nd, &\n                       map1_2d => tensor%nd_index_blk%map1_2d, &\n                       map2_2d => tensor%nd_index_blk%map2_2d)\n\n               shape_2d = [PRODUCT(sizes(map1_2d)), PRODUCT(sizes(map2_2d))]\n\n               IF (ALL([map1_2d, map2_2d] == (/(i, i=1, ${ndim}$)/))) THEN\n                  ! to avoid costly reshape can do pointer bounds remapping as long as arrays are equivalent in memory\n                  block_2d(1:shape_2d(1), 1:shape_2d(2)) => block(${shape_colon(ndim)}$)\n               ELSE\n                  ! need reshape due to rank reordering\n                  ALLOCATE (block_2d(shape_2d(1), shape_2d(2)))\n                  new_block = .TRUE.\n                  shape_nd(map_nd) = sizes\n                  block_2d(:, :) = RESHAPE(RESHAPE(block, SHAPE=shape_nd, order=map_nd), SHAPE=shape_2d)\n               END IF\n\n               ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind)\n\n            END ASSOCIATE\n\n            CALL dbcsr_tas_put_block(tensor%matrix_rep, ind_2d(1), ind_2d(2), block_2d, summation=summation, &\n                                     scale=scale)\n\n            IF (new_block) DEALLOCATE (block_2d)\n\n         END SUBROUTINE\n      #:endfor\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      #:for ndim in ndims\n         SUBROUTINE dbcsr_t_allocate_and_get_${ndim}$d_block_${dsuffix}$ (tensor, ind, block, found)\n      !! allocate and get block\n\n            TYPE(dbcsr_t_type), INTENT(INOUT)                     :: tensor\n            INTEGER, DIMENSION(${ndim}$), INTENT(IN)  :: ind\n         !! block index\n            ${dtype}$, DIMENSION(${shape_colon(ndim)}$), &\n               ALLOCATABLE, INTENT(OUT)                           :: block\n         !! block to get\n            LOGICAL, INTENT(OUT)                                  :: found\n         !! whether block was found\n            INTEGER, DIMENSION(${ndim}$)                          :: blk_size\n\n            CALL dbcsr_t_blk_sizes(tensor, ind, blk_size)\n            CALL allocate_any(block, shape_spec=blk_size)\n            CALL dbcsr_t_get_${ndim}$d_block_${dsuffix}$ (tensor, ind, blk_size, block, found)\n\n         END SUBROUTINE\n      #:endfor\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      #:for ndim in ndims\n         SUBROUTINE dbcsr_t_get_${ndim}$d_block_${dsuffix}$ (tensor, ind, sizes, block, found)\n      !! Template for dbcsr_t_get_block.\n\n            TYPE(dbcsr_t_type), INTENT(INOUT)                     :: tensor\n            INTEGER, DIMENSION(${ndim}$), INTENT(IN) :: ind\n         !! block index\n            INTEGER, DIMENSION(${ndim}$), INTENT(IN) :: sizes\n         !! block size\n            ${dtype}$, DIMENSION(${arrlist(\"sizes\", nmax=ndim)}$), &\n               INTENT(OUT)                                        :: block\n         !! block to get\n            LOGICAL, INTENT(OUT)                                  :: found\n         !! whether block was found\n\n            INTEGER(KIND=int_8), DIMENSION(2)                     :: ind_2d\n            ${dtype}$, DIMENSION(:, :), POINTER, CONTIGUOUS       :: block_2d_ptr\n            LOGICAL                                               :: tr\n            INTEGER                                               :: i\n            ${dtype}$, DIMENSION(${shape_colon(ndim)}$), POINTER  :: block_ptr\n\n            NULLIFY (block_2d_ptr)\n\n            ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind)\n\n            ASSOCIATE (map1_2d => tensor%nd_index_blk%map1_2d, &\n                       map2_2d => tensor%nd_index_blk%map2_2d)\n\n               CALL dbcsr_tas_get_block_p(tensor%matrix_rep, ind_2d(1), ind_2d(2), block_2d_ptr, tr, found)\n               DBCSR_ASSERT(.NOT. tr)\n\n               IF (found) THEN\n                  IF (ALL([map1_2d, map2_2d] == (/(i, i=1, ${ndim}$)/))) THEN\n                     ! to avoid costly reshape can do pointer bounds remapping as long as arrays are equivalent in memory\n                     block_ptr(${shape_explicit('block', ndim)}$) => block_2d_ptr(:, :)\n                     block(${shape_colon(ndim)}$) = block_ptr(${shape_colon(ndim)}$)\n                  ELSE\n                     ! need reshape due to rank reordering\n                     block(${shape_colon(ndim)}$) = RESHAPE(block_2d_ptr, SHAPE=SHAPE(block), ORDER=[map1_2d, map2_2d])\n                  END IF\n               END IF\n\n            END ASSOCIATE\n\n         END SUBROUTINE\n      #:endfor\n   #:endfor\n\nEND MODULE\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor_index.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tensor_index\n   !! tensor index and mapping to DBCSR index\n   USE dbcsr_allocate_wrap, ONLY: allocate_any\n   USE dbcsr_kinds, ONLY: int_8\n#include \"base/dbcsr_base_uses.f90\"\n   #:include \"dbcsr_tensor.fypp\"\n\n   IMPLICIT NONE\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_index'\n\n   PUBLIC :: &\n      combine_tensor_index, &\n      combine_pgrid_index, &\n      create_nd_to_2d_mapping, &\n      destroy_nd_to_2d_mapping, &\n      get_2d_indices_tensor, &\n      get_2d_indices_pgrid, &\n      dbcsr_t_get_mapping_info, &\n      get_nd_indices_tensor, &\n      get_nd_indices_pgrid, &\n      nd_to_2d_mapping, &\n      ndims_mapping, &\n      split_tensor_index, &\n      split_pgrid_index, &\n      ndims_mapping_row, &\n      ndims_mapping_column, &\n      dbcsr_t_inverse_order, &\n      permute_index\n\n   TYPE nd_to_2d_mapping\n      INTEGER                                      :: ndim_nd = -1\n      INTEGER                                      :: ndim1_2d = -1\n      INTEGER                                      :: ndim2_2d = -1\n\n      INTEGER, DIMENSION(:), ALLOCATABLE           :: dims_nd\n      INTEGER(KIND=int_8), DIMENSION(2)            :: dims_2d = -1_int_8\n      INTEGER, DIMENSION(:), ALLOCATABLE           :: dims1_2d\n      INTEGER, DIMENSION(:), ALLOCATABLE           :: dims2_2d\n\n      INTEGER, DIMENSION(:), ALLOCATABLE           :: map1_2d\n      INTEGER, DIMENSION(:), ALLOCATABLE           :: map2_2d\n      INTEGER, DIMENSION(:), ALLOCATABLE           :: map_nd\n\n      INTEGER                                      :: base = -1\n      LOGICAL                                      :: col_major = .FALSE.\n   END TYPE nd_to_2d_mapping\n\nCONTAINS\n\n   SUBROUTINE create_nd_to_2d_mapping(map, dims, map1_2d, map2_2d, base, col_major)\n      !! Create all data needed to quickly map between nd index and 2d index.\n\n      TYPE(nd_to_2d_mapping), INTENT(OUT)                :: map\n         !! index mapping data\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: dims, map1_2d, map2_2d\n         !! nd sizes\n         !! which nd-indices map to first matrix index and in which order\n         !! which nd-indices map to second matrix index and in which order\n      INTEGER, INTENT(IN), OPTIONAL                      :: base\n         !! base index (1 for Fortran-style, 0 for C-style, default is 1)\n      LOGICAL, INTENT(IN), OPTIONAL                      :: col_major\n         !! whether index should be column major order (.TRUE. for Fortran-style, .FALSE. for C-style, default is .TRUE.).\n\n      INTEGER                                            :: i\n\n      IF (PRESENT(col_major)) THEN\n         map%col_major = col_major\n      ELSE\n         map%col_major = .TRUE.\n      END IF\n\n      IF (PRESENT(base)) THEN\n         map%base = base\n      ELSE\n         map%base = 1\n      END IF\n\n      map%ndim1_2d = SIZE(map1_2d)\n      map%ndim2_2d = SIZE(map2_2d)\n      map%ndim_nd = SIZE(dims)\n\n      CALL allocate_any(map%map1_2d, source=map1_2d)\n      CALL allocate_any(map%map2_2d, source=map2_2d)\n      CALL allocate_any(map%dims_nd, source=dims)\n      CALL allocate_any(map%dims1_2d, source=dims(map1_2d))\n      CALL allocate_any(map%dims2_2d, source=dims(map2_2d))\n\n      ALLOCATE (map%map_nd(map%ndim_nd))\n      map%map_nd(map1_2d) = (/(i, i=1, SIZE(map1_2d))/)\n      map%map_nd(map2_2d) = (/(i + SIZE(map1_2d), i=1, SIZE(map2_2d))/)\n\n      map%dims_2d = [PRODUCT(INT(map%dims1_2d, KIND=int_8)), PRODUCT(INT(map%dims2_2d, KIND=int_8))]\n\n   END SUBROUTINE create_nd_to_2d_mapping\n\n   SUBROUTINE destroy_nd_to_2d_mapping(map)\n      TYPE(nd_to_2d_mapping), INTENT(INOUT)              :: map\n\n      DEALLOCATE (map%dims1_2d)\n      DEALLOCATE (map%dims2_2d)\n      DEALLOCATE (map%map1_2d)\n      DEALLOCATE (map%map2_2d)\n      DEALLOCATE (map%map_nd)\n      DEALLOCATE (map%dims_nd)\n   END SUBROUTINE destroy_nd_to_2d_mapping\n\n   PURE FUNCTION ndims_mapping(map)\n      TYPE(nd_to_2d_mapping), INTENT(IN)                 :: map\n      INTEGER                                            :: ndims_mapping\n\n      ndims_mapping = map%ndim_nd\n   END FUNCTION\n\n   PURE FUNCTION ndims_mapping_row(map)\n      !! how many tensor dimensions are mapped to matrix row\n      TYPE(nd_to_2d_mapping), INTENT(IN) :: map\n      INTEGER :: ndims_mapping_row\n      ndims_mapping_row = map%ndim1_2d\n   END FUNCTION\n\n   PURE FUNCTION ndims_mapping_column(map)\n      !! how many tensor dimensions are mapped to matrix column\n      TYPE(nd_to_2d_mapping), INTENT(IN) :: map\n      INTEGER :: ndims_mapping_column\n      ndims_mapping_column = map%ndim2_2d\n   END FUNCTION\n\n   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, &\n                                            map1_2d, map2_2d, map_nd, base, col_major)\n      !! get mapping info\n\n      TYPE(nd_to_2d_mapping), INTENT(IN)                 :: map\n         !! index mapping data.\n      INTEGER, INTENT(OUT), OPTIONAL                     :: ndim_nd, ndim1_2d, ndim2_2d\n         !! number of dimensions\n         !! number of dimensions that map to first 2d index\n         !! number of dimensions that map to first 2d index\n      INTEGER(KIND=int_8), DIMENSION(2), INTENT(OUT), OPTIONAL       :: dims_2d_i8\n      INTEGER, DIMENSION(2), INTENT(OUT), OPTIONAL :: dims_2d\n         !! 2d dimensions\n      INTEGER, DIMENSION(ndims_mapping(map)), &\n         INTENT(OUT), OPTIONAL                           :: dims_nd\n         !! nd dimensions\n      INTEGER, DIMENSION(ndims_mapping_row(map)), INTENT(OUT), &\n         OPTIONAL                                        :: dims1_2d\n         !! dimensions that map to first 2d index\n      INTEGER, DIMENSION(ndims_mapping_column(map)), INTENT(OUT), &\n         OPTIONAL                                        :: dims2_2d\n         !! dimensions that map to second 2d index\n      INTEGER, DIMENSION(ndims_mapping_row(map)), INTENT(OUT), &\n         OPTIONAL                                        :: map1_2d\n         !! indices that map to first 2d index\n      INTEGER, DIMENSION(ndims_mapping_column(map)), INTENT(OUT), &\n         OPTIONAL                                        :: map2_2d\n         !! indices that map to second 2d index\n      INTEGER, DIMENSION(ndims_mapping(map)), &\n         INTENT(OUT), OPTIONAL                           :: map_nd\n         !! inverse of [map1_2d, map2_2d]\n      INTEGER, INTENT(OUT), OPTIONAL                     :: base\n         !! base index\n      LOGICAL, INTENT(OUT), OPTIONAL                     :: col_major\n         !! is index in column major order\n\n      IF (PRESENT(ndim_nd)) ndim_nd = map%ndim_nd\n      IF (PRESENT(ndim1_2d)) ndim1_2d = map%ndim1_2d\n      IF (PRESENT(ndim2_2d)) ndim2_2d = map%ndim2_2d\n      IF (PRESENT(dims_2d_i8)) dims_2d_i8(:) = map%dims_2d(:)\n      IF (PRESENT(dims_2d)) dims_2d(:) = INT(map%dims_2d(:))\n      IF (PRESENT(dims_nd)) THEN\n         dims_nd(:) = map%dims_nd(:)\n      END IF\n      IF (PRESENT(dims1_2d)) THEN\n         dims1_2d(:) = map%dims1_2d\n      END IF\n      IF (PRESENT(dims2_2d)) THEN\n         dims2_2d(:) = map%dims2_2d\n      END IF\n      IF (PRESENT(map1_2d)) THEN\n         map1_2d(:) = map%map1_2d\n      END IF\n      IF (PRESENT(map2_2d)) THEN\n         map2_2d(:) = map%map2_2d\n      END IF\n      IF (PRESENT(map_nd)) THEN\n         map_nd(:) = map%map_nd(:)\n      END IF\n      IF (PRESENT(base)) THEN\n         base = map%base\n      END IF\n      IF (PRESENT(col_major)) THEN\n         col_major = map%col_major\n      END IF\n\n   END SUBROUTINE dbcsr_t_get_mapping_info\n\n   PURE FUNCTION combine_tensor_index(ind_in, dims) RESULT(ind_out)\n      !! transform nd index to flat index\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: ind_in, dims\n         !! nd index\n         !! nd dimensions\n      INTEGER(KIND=int_8)                                :: ind_out\n         !! flat index\n      INTEGER                                            :: i_dim\n\n      ind_out = ind_in(SIZE(dims))\n      DO i_dim = SIZE(dims) - 1, 1, -1\n         ind_out = (ind_out - 1)*dims(i_dim) + ind_in(i_dim)\n      END DO\n\n   END FUNCTION\n\n   PURE FUNCTION combine_pgrid_index(ind_in, dims) RESULT(ind_out)\n      !! transform nd index to flat index\n\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: ind_in, dims\n         !! nd index\n         !! nd dimensions\n      INTEGER                                            :: ind_out\n         !! flat index\n\n      INTEGER                                            :: i_dim\n\n      ind_out = ind_in(1)\n      DO i_dim = 2, SIZE(dims)\n         ind_out = ind_out*dims(i_dim) + ind_in(i_dim)\n      END DO\n   END FUNCTION\n\n   PURE FUNCTION split_tensor_index(ind_in, dims) RESULT(ind_out)\n      !! transform flat index to nd index\n\n      INTEGER(KIND=int_8), INTENT(IN)                    :: ind_in\n         !! flat index\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: dims\n         !! nd dimensions\n      INTEGER, DIMENSION(SIZE(dims))                     :: ind_out\n         !! nd index\n\n      INTEGER(KIND=int_8)                                :: tmp\n      INTEGER                                            :: i_dim\n\n      tmp = ind_in\n      DO i_dim = 1, SIZE(dims)\n         ind_out(i_dim) = INT(MOD(tmp - 1, INT(dims(i_dim), int_8)) + 1)\n         tmp = (tmp - 1)/dims(i_dim) + 1\n      END DO\n\n   END FUNCTION\n\n   PURE FUNCTION split_pgrid_index(ind_in, dims) RESULT(ind_out)\n      !! transform flat index to nd index\n\n      INTEGER, INTENT(IN)                                :: ind_in\n         !! flat index\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: dims\n         !! nd dimensions\n      INTEGER, DIMENSION(SIZE(dims))                     :: ind_out\n         !! nd index\n\n      INTEGER                                            :: tmp\n      INTEGER                                            :: i_dim\n\n      tmp = ind_in\n      DO i_dim = SIZE(dims), 1, -1\n         ind_out(i_dim) = MOD(tmp, dims(i_dim))\n         tmp = tmp/dims(i_dim)\n      END DO\n   END FUNCTION\n\n   PURE FUNCTION get_2d_indices_tensor(map, ind_in) RESULT(ind_out)\n      !! transform nd index to 2d index, using info from index mapping.\n\n      TYPE(nd_to_2d_mapping), INTENT(IN)                 :: map\n         !! index mapping\n      INTEGER, DIMENSION(map%ndim_nd), INTENT(IN) :: ind_in\n         !! nd index\n      INTEGER(KIND=int_8), DIMENSION(2)                  :: ind_out\n         !! 2d index\n      INTEGER :: i\n      INTEGER, DIMENSION(${maxrank}$)                    :: ind_tmp\n\n      DO i = 1, map%ndim1_2d\n         ind_tmp(i) = ind_in(map%map1_2d(i))\n      END DO\n      ind_out(1) = combine_tensor_index(ind_tmp(:map%ndim1_2d), map%dims1_2d)\n\n      DO i = 1, map%ndim2_2d\n         ind_tmp(i) = ind_in(map%map2_2d(i))\n      END DO\n      ind_out(2) = combine_tensor_index(ind_tmp(:map%ndim2_2d), map%dims2_2d)\n   END FUNCTION\n\n   PURE FUNCTION get_2d_indices_pgrid(map, ind_in) RESULT(ind_out)\n      !! transform nd index to 2d index, using info from index mapping.\n\n      TYPE(nd_to_2d_mapping), INTENT(IN)                 :: map\n         !! index mapping\n      INTEGER, DIMENSION(map%ndim_nd), INTENT(IN) :: ind_in\n         !! nd index\n      INTEGER, DIMENSION(2)                              :: ind_out\n         !! 2d index\n      INTEGER :: i\n      INTEGER, DIMENSION(${maxrank}$)                    :: ind_tmp\n\n      DO i = 1, map%ndim1_2d\n         ind_tmp(i) = ind_in(map%map1_2d(i))\n      END DO\n      ind_out(1) = combine_pgrid_index(ind_tmp(:map%ndim1_2d), map%dims1_2d)\n\n      DO i = 1, map%ndim2_2d\n         ind_tmp(i) = ind_in(map%map2_2d(i))\n      END DO\n      ind_out(2) = combine_pgrid_index(ind_tmp(:map%ndim2_2d), map%dims2_2d)\n   END FUNCTION\n\n   PURE FUNCTION get_nd_indices_tensor(map, ind_in) RESULT(ind_out)\n      !! transform 2d index to nd index, using info from index mapping.\n\n      TYPE(nd_to_2d_mapping), INTENT(IN)                 :: map\n         !! index mapping\n      INTEGER(KIND=int_8), DIMENSION(2), INTENT(IN)      :: ind_in\n         !! 2d index\n      INTEGER, DIMENSION(map%ndim_nd)                    :: ind_out\n         !! nd index\n      INTEGER, DIMENSION(${maxrank}$)                    :: ind_tmp\n      INTEGER                                            :: i\n\n      ind_tmp(:map%ndim1_2d) = split_tensor_index(ind_in(1), map%dims1_2d)\n\n      DO i = 1, map%ndim1_2d\n         ind_out(map%map1_2d(i)) = ind_tmp(i)\n      END DO\n\n      ind_tmp(:map%ndim2_2d) = split_tensor_index(ind_in(2), map%dims2_2d)\n\n      DO i = 1, map%ndim2_2d\n         ind_out(map%map2_2d(i)) = ind_tmp(i)\n      END DO\n\n   END FUNCTION\n\n   PURE FUNCTION get_nd_indices_pgrid(map, ind_in) RESULT(ind_out)\n      !! transform 2d index to nd index, using info from index mapping.\n\n      TYPE(nd_to_2d_mapping), INTENT(IN)                 :: map\n         !! index mapping\n      INTEGER, DIMENSION(2), INTENT(IN)                  :: ind_in\n         !! 2d index\n      INTEGER, DIMENSION(map%ndim_nd)                    :: ind_out\n         !! nd index\n\n      ind_out(map%map1_2d) = split_pgrid_index(ind_in(1), map%dims1_2d)\n      ind_out(map%map2_2d) = split_pgrid_index(ind_in(2), map%dims2_2d)\n\n   END FUNCTION\n\n   PURE FUNCTION dbcsr_t_inverse_order(order)\n      !! Invert order\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: order\n      INTEGER, DIMENSION(SIZE(order))                    :: dbcsr_t_inverse_order\n\n      INTEGER                                            :: i\n\n      dbcsr_t_inverse_order(order) = (/(i, i=1, SIZE(order))/)\n   END FUNCTION\n\n   SUBROUTINE permute_index(map_in, map_out, order)\n      !! reorder tensor index (no data)\n      TYPE(nd_to_2d_mapping), INTENT(IN)                 :: map_in\n      TYPE(nd_to_2d_mapping), INTENT(OUT)                :: map_out\n      INTEGER, DIMENSION(ndims_mapping(map_in)), &\n         INTENT(IN)                                      :: order\n\n      INTEGER                                            :: ndim_nd\n      INTEGER, DIMENSION(ndims_mapping_row(map_in))       :: map1_2d, map1_2d_reorder\n      INTEGER, DIMENSION(ndims_mapping_column(map_in))    :: map2_2d, map2_2d_reorder\n      INTEGER, DIMENSION(ndims_mapping(map_in))          :: dims_nd, dims_reorder\n\n      CALL dbcsr_t_get_mapping_info(map_in, ndim_nd, dims_nd=dims_nd, map1_2d=map1_2d, map2_2d=map2_2d)\n\n      dims_reorder(order) = dims_nd\n\n      map1_2d_reorder(:) = order(map1_2d)\n      map2_2d_reorder(:) = order(map2_2d)\n\n      CALL create_nd_to_2d_mapping(map_out, dims_reorder, map1_2d_reorder, map2_2d_reorder)\n   END SUBROUTINE\nEND MODULE dbcsr_tensor_index\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor_io.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tensor_io\n   !! DBCSR tensor Input / Output\n\n   #:include \"dbcsr_tensor.fypp\"\n   #:set maxdim = maxrank\n   #:set ndims = range(2,maxdim+1)\n\n   USE dbcsr_tensor_types, ONLY: &\n      dbcsr_t_get_info, dbcsr_t_type, ndims_tensor, dbcsr_t_get_num_blocks, dbcsr_t_get_num_blocks_total, &\n      blk_dims_tensor, dbcsr_t_get_stored_coordinates, dbcsr_t_get_nze, dbcsr_t_get_nze_total, &\n      dbcsr_t_pgrid_type, dbcsr_t_nblks_total\n   USE dbcsr_kinds, ONLY: default_string_length, int_8, real_8\n   USE dbcsr_mpiwrap, ONLY: mp_environ, mp_max, mp_comm_type\n   USE dbcsr_tensor_block, ONLY: &\n      dbcsr_t_iterator_type, dbcsr_t_iterator_next_block, dbcsr_t_iterator_start, &\n      dbcsr_t_iterator_blocks_left, dbcsr_t_iterator_stop, dbcsr_t_get_block\n   USE dbcsr_tas_io, ONLY: dbcsr_tas_write_split_info\n\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_types'\n\n   PUBLIC :: &\n      dbcsr_t_write_tensor_info, &\n      dbcsr_t_write_tensor_dist, &\n      dbcsr_t_write_blocks, &\n      dbcsr_t_write_block, &\n      dbcsr_t_write_block_indices, &\n      dbcsr_t_write_split_info, &\n      prep_output_unit\n\nCONTAINS\n\n   SUBROUTINE dbcsr_t_write_tensor_info(tensor, unit_nr, full_info)\n      !! Write tensor global info: block dimensions, full dimensions and process grid dimensions\n\n      TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n      INTEGER, INTENT(IN)            :: unit_nr\n      LOGICAL, OPTIONAL, INTENT(IN)  :: full_info\n         !! Whether to print distribution and block size vectors\n      INTEGER, DIMENSION(ndims_tensor(tensor)) :: nblks_total, nfull_total, pdims, my_ploc, nblks_local, nfull_local\n\n      #:for idim in range(1, maxdim+1)\n         INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)) :: proc_dist_${idim}$\n         INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)) :: blk_size_${idim}$\n         INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)) :: blks_local_${idim}$\n      #:endfor\n      CHARACTER(len=default_string_length)                     :: name\n      INTEGER                                                  :: idim\n      INTEGER                                                  :: iblk\n      INTEGER                                                  :: unit_nr_prv\n\n      unit_nr_prv = prep_output_unit(unit_nr)\n      IF (unit_nr_prv == 0) RETURN\n\n      CALL dbcsr_t_get_info(tensor, nblks_total, nfull_total, nblks_local, nfull_local, pdims, my_ploc, &\n                            ${varlist(\"blks_local\")}$, ${varlist(\"proc_dist\")}$, ${varlist(\"blk_size\")}$, &\n                            name=name)\n\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, \"(T2,A)\") &\n            \"GLOBAL INFO OF \"//TRIM(name)\n         WRITE (unit_nr_prv, \"(T4,A,1X)\", advance=\"no\") \"block dimensions:\"\n         DO idim = 1, ndims_tensor(tensor)\n            WRITE (unit_nr_prv, \"(I6)\", advance=\"no\") nblks_total(idim)\n         END DO\n         WRITE (unit_nr_prv, \"(/T4,A,1X)\", advance=\"no\") \"full dimensions:\"\n         DO idim = 1, ndims_tensor(tensor)\n            WRITE (unit_nr_prv, \"(I8)\", advance=\"no\") nfull_total(idim)\n         END DO\n         WRITE (unit_nr_prv, \"(/T4,A,1X)\", advance=\"no\") \"process grid dimensions:\"\n         DO idim = 1, ndims_tensor(tensor)\n            WRITE (unit_nr_prv, \"(I6)\", advance=\"no\") pdims(idim)\n         END DO\n         WRITE (unit_nr_prv, *)\n\n         IF (PRESENT(full_info)) THEN\n            IF (full_info) THEN\n               WRITE (unit_nr_prv, '(T4,A)', advance='no') \"Block sizes:\"\n               #:for dim in range(1, maxdim+1)\n                  IF (ndims_tensor(tensor) >= ${dim}$) THEN\n                     WRITE (unit_nr_prv, '(/T8,A,1X,I1,A,1X)', advance='no') 'Dim', ${dim}$, ':'\n                     DO iblk = 1, SIZE(blk_size_${dim}$)\n                        WRITE (unit_nr_prv, '(I2,1X)', advance='no') blk_size_${dim}$ (iblk)\n                     END DO\n                  END IF\n               #:endfor\n               WRITE (unit_nr_prv, '(/T4,A)', advance='no') \"Block distribution:\"\n               #:for dim in range(1, maxdim+1)\n                  IF (ndims_tensor(tensor) >= ${dim}$) THEN\n                     WRITE (unit_nr_prv, '(/T8,A,1X,I1,A,1X)', advance='no') 'Dim', ${dim}$, ':'\n                     DO iblk = 1, SIZE(proc_dist_${dim}$)\n                        WRITE (unit_nr_prv, '(I3,1X)', advance='no') proc_dist_${dim}$ (iblk)\n                     END DO\n                  END IF\n               #:endfor\n            END IF\n            WRITE (unit_nr_prv, *)\n         END IF\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_write_tensor_dist(tensor, unit_nr)\n      !! Write info on tensor distribution & load balance\n      TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n      INTEGER, INTENT(IN)            :: unit_nr\n      INTEGER                        :: nproc, myproc, nblock_max, nelement_max\n      INTEGER(KIND=int_8)            :: nblock_sum, nelement_sum, nblock_tot\n      INTEGER                        :: nblock, nelement, unit_nr_prv\n      TYPE(mp_comm_type)             :: mp_comm\n      INTEGER, DIMENSION(2)          :: tmp\n      INTEGER, DIMENSION(ndims_tensor(tensor)) :: bdims\n      REAL(KIND=real_8)              :: occupation\n\n      mp_comm = tensor%pgrid%mp_comm_2d\n      unit_nr_prv = prep_output_unit(unit_nr)\n      IF (unit_nr_prv == 0) RETURN\n\n      CALL mp_environ(nproc, myproc, mp_comm)\n\n      nblock = dbcsr_t_get_num_blocks(tensor)\n      nelement = dbcsr_t_get_nze(tensor)\n\n      nblock_sum = dbcsr_t_get_num_blocks_total(tensor)\n      nelement_sum = dbcsr_t_get_nze_total(tensor)\n\n      tmp = (/nblock, nelement/)\n      CALL mp_max(tmp, mp_comm)\n      nblock_max = tmp(1); nelement_max = tmp(2)\n\n      CALL blk_dims_tensor(tensor, bdims)\n      nblock_tot = PRODUCT(INT(bdims, KIND=int_8))\n\n      occupation = -1.0_real_8\n      IF (nblock_tot .NE. 0) occupation = 100.0_real_8*REAL(nblock_sum, real_8)/REAL(nblock_tot, real_8)\n\n      IF (unit_nr_prv > 0) THEN\n         WRITE (unit_nr_prv, \"(T2,A)\") &\n            \"DISTRIBUTION OF \"//TRIM(tensor%name)\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Number of non-zero blocks:\", nblock_sum\n         WRITE (unit_nr_prv, \"(T15,A,T75,F6.2)\") \"Percentage of non-zero blocks:\", occupation\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Average number of blocks per CPU:\", (nblock_sum + nproc - 1)/nproc\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Maximum number of blocks per CPU:\", nblock_max\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Average number of matrix elements per CPU:\", (nelement_sum + nproc - 1)/nproc\n         WRITE (unit_nr_prv, \"(T15,A,T68,I13)\") \"Maximum number of matrix elements per CPU:\", nelement_max\n      END IF\n\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_write_blocks(tensor, io_unit_master, io_unit_all, write_int)\n      !! Write all tensor blocks\n\n      TYPE(dbcsr_t_type), INTENT(INOUT)                  :: tensor\n      INTEGER, INTENT(IN)                                :: io_unit_master, io_unit_all\n         !! for global output\n         !! for local output\n      LOGICAL, INTENT(IN), OPTIONAL                      :: write_int\n         !! convert to integers (useful for testing with integer tensors)\n      INTEGER                                            :: blk\n      INTEGER, DIMENSION(ndims_tensor(tensor))          :: blk_index, blk_size\n      #:for ndim in ndims\n         REAL(KIND=real_8), ALLOCATABLE, &\n            DIMENSION(${shape_colon(ndim)}$)                :: blk_values_${ndim}$\n      #:endfor\n      TYPE(dbcsr_t_iterator_type)                        :: iterator\n      INTEGER                                            :: proc, mynode, numnodes\n      LOGICAL                                            :: found\n\n      IF (io_unit_master > 0) THEN\n         WRITE (io_unit_master, '(T7,A)') \"(block index) @ process: (array index) value\"\n      END IF\n      CALL dbcsr_t_iterator_start(iterator, tensor)\n      DO WHILE (dbcsr_t_iterator_blocks_left(iterator))\n         CALL dbcsr_t_iterator_next_block(iterator, blk_index, blk, blk_size=blk_size)\n         CALL dbcsr_t_get_stored_coordinates(tensor, blk_index, proc)\n         CALL mp_environ(numnodes, mynode, tensor%pgrid%mp_comm_2d)\n         DBCSR_ASSERT(proc .EQ. mynode)\n         #:for ndim in ndims\n            IF (ndims_tensor(tensor) == ${ndim}$) THEN\n               CALL dbcsr_t_get_block(tensor, blk_index, blk_values_${ndim}$, found)\n               DBCSR_ASSERT(found)\n               CALL dbcsr_t_write_block(tensor%name, blk_size, blk_index, proc, io_unit_all, &\n                                        blk_values_${ndim}$=blk_values_${ndim}$, write_int=write_int)\n               DEALLOCATE (blk_values_${ndim}$)\n            END IF\n         #:endfor\n      END DO\n      CALL dbcsr_t_iterator_stop(iterator)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_write_block(name, blk_size, blk_index, proc, unit_nr, &\n                                  ${varlist(\"blk_values\",nmin=2)}$, write_int)\n      !! Write a tensor block\n      CHARACTER(LEN=*), INTENT(IN)                       :: name\n         !! tensor name\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: blk_size\n         !! block size\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: blk_index\n         !! block index\n      #:for ndim in ndims\n         REAL(KIND=real_8), &\n            DIMENSION(${arrlist(\"blk_size\", nmax=ndim)}$), &\n            INTENT(IN), OPTIONAL                            :: blk_values_${ndim}$\n         !! block values for 2 dimensions\n      #:endfor\n      LOGICAL, INTENT(IN), OPTIONAL                      :: write_int\n         !! write_int convert values to integers\n      LOGICAL                                            :: write_int_prv\n      INTEGER, INTENT(IN)                                :: unit_nr\n         !! unit number\n      INTEGER, INTENT(IN)                                :: proc\n         !! which process am I\n      INTEGER                                            :: ${varlist(\"i\")}$\n      INTEGER                                            :: ndim\n\n      IF (PRESENT(write_int)) THEN\n         write_int_prv = write_int\n      ELSE\n         write_int_prv = .FALSE.\n      END IF\n\n      ndim = SIZE(blk_size)\n\n      IF (unit_nr > 0) THEN\n         #:for ndim in ndims\n            IF (ndim == ${ndim}$) THEN\n               #:for idim in range(ndim,0,-1)\n                  DO i_${idim}$ = 1, blk_size(${idim}$)\n                     #:endfor\n                     IF (write_int_prv) THEN\n                        WRITE (unit_nr, '(T7,A,T16,A,${ndim}$I3,1X,A,1X,I3,A,1X,A,${ndim}$I3,1X,A,1X,I20)') &\n                           TRIM(name), \"(\", blk_index, \") @\", proc, ':', &\n                           \"(\", ${varlist(\"i\", nmax=ndim)}$, \")\", &\n                           INT(blk_values_${ndim}$ (${varlist(\"i\", nmax=ndim)}$), KIND=int_8)\n                     ELSE\n                        WRITE (unit_nr, '(T7,A,T16,A,${ndim}$I3,1X,A,1X,I3,A,1X,A,${ndim}$I3,1X,A,1X,F10.5)') &\n                           TRIM(name), \"(\", blk_index, \") @\", proc, ':', &\n                           \"(\", ${varlist(\"i\", nmax=ndim)}$, \")\", &\n                           blk_values_${ndim}$ (${varlist(\"i\", nmax=ndim)}$)\n                     END IF\n                     #:for idim in range(ndim,0,-1)\n                        END DO\n                     #:endfor\n                  END IF\n               #:endfor\n            END IF\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_write_block_indices(tensor, io_unit_master, io_unit_all)\n            TYPE(dbcsr_t_type), INTENT(INOUT)                  :: tensor\n            INTEGER, INTENT(IN)                                :: io_unit_master, io_unit_all\n            TYPE(dbcsr_t_iterator_type)                        :: iterator\n            INTEGER, DIMENSION(ndims_tensor(tensor))          :: blk_index, blk_size\n            INTEGER                                            :: blk, mynode, numnodes, proc\n\n            IF (io_unit_master > 0) THEN\n               WRITE (io_unit_master, '(T7,A)') \"(block index) @ process: size\"\n            END IF\n\n            CALL dbcsr_t_iterator_start(iterator, tensor)\n            DO WHILE (dbcsr_t_iterator_blocks_left(iterator))\n               CALL dbcsr_t_iterator_next_block(iterator, blk_index, blk, blk_size=blk_size)\n               CALL dbcsr_t_get_stored_coordinates(tensor, blk_index, proc)\n               CALL mp_environ(numnodes, mynode, tensor%pgrid%mp_comm_2d)\n               DBCSR_ASSERT(proc .EQ. mynode)\n               #:for ndim in ndims\n                  IF (ndims_tensor(tensor) == ${ndim}$) THEN\n                     WRITE (io_unit_all, '(T7,A,T16,A,${ndim}$I3,1X,A,1X,I3,A2,${ndim}$I3)') &\n                        TRIM(tensor%name), \"blk index (\", blk_index, \") @\", proc, \":\", blk_size\n                  END IF\n               #:endfor\n            END DO\n            CALL dbcsr_t_iterator_stop(iterator)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_write_split_info(pgrid, unit_nr)\n            TYPE(dbcsr_t_pgrid_type), INTENT(IN) :: pgrid\n            INTEGER, INTENT(IN) :: unit_nr\n\n            IF (ALLOCATED(pgrid%tas_split_info)) THEN\n               CALL dbcsr_tas_write_split_info(pgrid%tas_split_info, unit_nr)\n            END IF\n         END SUBROUTINE\n\n         FUNCTION prep_output_unit(unit_nr) RESULT(unit_nr_out)\n            INTEGER, INTENT(IN), OPTIONAL :: unit_nr\n            INTEGER                       :: unit_nr_out\n\n            IF (PRESENT(unit_nr)) THEN\n               unit_nr_out = unit_nr\n            ELSE\n               unit_nr_out = 0\n            END IF\n\n         END FUNCTION\n      END MODULE\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor_reshape.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tensor_reshape\n   !! Routines to reshape / redistribute tensors\n\n   #:include \"dbcsr_tensor.fypp\"\n   #:set maxdim = maxrank\n   #:set ndims = range(2,maxdim+1)\n\n   USE dbcsr_allocate_wrap, ONLY: allocate_any\n   USE dbcsr_tas_base, ONLY: dbcsr_tas_copy, dbcsr_tas_get_info, dbcsr_tas_info\n   USE dbcsr_tensor_block, ONLY: &\n      block_nd, create_block, destroy_block, dbcsr_t_iterator_type, dbcsr_t_iterator_next_block, &\n      dbcsr_t_iterator_blocks_left, dbcsr_t_iterator_start, dbcsr_t_iterator_stop, dbcsr_t_get_block, &\n      dbcsr_t_reserve_blocks, dbcsr_t_put_block\n   USE dbcsr_tensor_types, ONLY: dbcsr_t_blk_sizes, &\n                                 dbcsr_t_create, &\n                                 dbcsr_t_get_data_type, &\n                                 dbcsr_t_type, &\n                                 ndims_tensor, &\n                                 dbcsr_t_get_stored_coordinates, &\n                                 dbcsr_t_clear\n   USE dbcsr_kinds, ONLY: default_string_length\n   USE dbcsr_kinds, ONLY: ${uselist(dtype_float_prec)}$\n   USE dbcsr_api, ONLY: ${uselist(dtype_float_param)}$\n   USE dbcsr_mpiwrap, ONLY: mp_alltoall, &\n                            mp_environ, &\n                            mp_irecv, &\n                            mp_isend, &\n                            mp_waitall, mp_comm_type, mp_request_type\n\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_reshape'\n\n   PUBLIC :: &\n      dbcsr_t_reshape\n\n   TYPE block_buffer_type\n      INTEGER                                    :: ndim = -1\n      INTEGER                                    :: nblock = -1\n      INTEGER, DIMENSION(:, :), ALLOCATABLE      :: indx\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         ${dtype}$, DIMENSION(:), ALLOCATABLE       :: msg_${dsuffix}$\n      #:endfor\n      INTEGER                                    :: data_type = -1\n      INTEGER                                    :: endpos = -1\n   END TYPE\n\n   INTERFACE block_buffer_add_block\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE block_buffer_add_block_${dsuffix}$\n      #:endfor\n   END INTERFACE\n\nCONTAINS\n\n   SUBROUTINE dbcsr_t_reshape(tensor_in, tensor_out, summation, move_data)\n      !! copy data (involves reshape)\n\n      TYPE(dbcsr_t_type), INTENT(INOUT)               :: tensor_in, tensor_out\n      LOGICAL, INTENT(IN), OPTIONAL                    :: summation\n         !! tensor_out = tensor_out + tensor_in move_data memory optimization: transfer data from tensor_in to tensor_out s.t.\n         !! tensor_in is empty on return\n      LOGICAL, INTENT(IN), OPTIONAL                    :: move_data\n\n      INTEGER                                            :: blk, iproc, mynode, ndata, &\n                                                            numnodes, bcount, nblk\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: num_blocks_recv, num_blocks_send, &\n                                                            num_entries_recv, num_entries_send, &\n                                                            num_rec, num_send\n      INTEGER, ALLOCATABLE, DIMENSION(:, :)              :: index_recv, blks_to_allocate\n      TYPE(dbcsr_t_iterator_type)                        :: iter\n      TYPE(block_nd)                                     :: blk_data\n      TYPE(block_buffer_type), ALLOCATABLE, DIMENSION(:) :: buffer_recv, buffer_send\n      INTEGER, DIMENSION(ndims_tensor(tensor_in))       :: blk_size, ind_nd, index\n      LOGICAL :: found, summation_prv, move_prv\n      TYPE(mp_comm_type) :: mp_comm\n      TYPE(mp_request_type), ALLOCATABLE, DIMENSION(:, :) :: req_array\n\n      IF (PRESENT(summation)) THEN\n         summation_prv = summation\n      ELSE\n         summation_prv = .FALSE.\n      END IF\n\n      IF (PRESENT(move_data)) THEN\n         move_prv = move_data\n      ELSE\n         move_prv = .FALSE.\n      END IF\n\n      DBCSR_ASSERT(tensor_out%valid)\n\n      IF (.NOT. summation_prv) CALL dbcsr_t_clear(tensor_out)\n\n      mp_comm = tensor_in%pgrid%mp_comm_2d\n      CALL mp_environ(numnodes, mynode, mp_comm)\n      ALLOCATE (buffer_send(0:numnodes - 1))\n      ALLOCATE (buffer_recv(0:numnodes - 1))\n      ALLOCATE (num_blocks_recv(0:numnodes - 1))\n      ALLOCATE (num_blocks_send(0:numnodes - 1))\n      ALLOCATE (num_entries_recv(0:numnodes - 1))\n      ALLOCATE (num_entries_send(0:numnodes - 1))\n      ALLOCATE (num_rec(0:2*numnodes - 1))\n      ALLOCATE (num_send(0:2*numnodes - 1))\n      num_send(:) = 0\n      ALLOCATE (req_array(1:numnodes, 4))\n      CALL dbcsr_t_iterator_start(iter, tensor_in)\n      DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n         CALL dbcsr_t_iterator_next_block(iter, ind_nd, blk, blk_size=blk_size)\n         CALL dbcsr_t_get_stored_coordinates(tensor_out, ind_nd, iproc)\n         num_send(2*iproc) = num_send(2*iproc) + PRODUCT(blk_size)\n         num_send(2*iproc + 1) = num_send(2*iproc + 1) + 1\n      END DO\n      CALL dbcsr_t_iterator_stop(iter)\n      CALL mp_alltoall(num_send, num_rec, 2, mp_comm)\n      DO iproc = 0, numnodes - 1\n         num_entries_recv(iproc) = num_rec(2*iproc)\n         num_blocks_recv(iproc) = num_rec(2*iproc + 1)\n         num_entries_send(iproc) = num_send(2*iproc)\n         num_blocks_send(iproc) = num_send(2*iproc + 1)\n\n         CALL block_buffer_create(buffer_send(iproc), num_blocks_send(iproc), num_entries_send(iproc), &\n                                  dbcsr_t_get_data_type(tensor_in), ndims_tensor(tensor_in))\n         CALL block_buffer_create(buffer_recv(iproc), num_blocks_recv(iproc), num_entries_recv(iproc), &\n                                  dbcsr_t_get_data_type(tensor_in), ndims_tensor(tensor_in))\n      END DO\n      CALL dbcsr_t_iterator_start(iter, tensor_in)\n      DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n         CALL dbcsr_t_iterator_next_block(iter, ind_nd, blk, blk_size=blk_size)\n         CALL dbcsr_t_get_block(tensor_in, ind_nd, blk_data, found)\n         DBCSR_ASSERT(found)\n         CALL dbcsr_t_get_stored_coordinates(tensor_out, ind_nd, iproc)\n         CALL block_buffer_add_anyd_block(buffer_send(iproc), ind_nd, blk_data)\n         CALL destroy_block(blk_data)\n      END DO\n      CALL dbcsr_t_iterator_stop(iter)\n\n      IF (move_prv) CALL dbcsr_t_clear(tensor_in)\n\n      CALL dbcsr_t_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array)\n      DO iproc = 0, numnodes - 1\n         CALL block_buffer_destroy(buffer_send(iproc))\n      END DO\n\n      nblk = SUM(num_blocks_recv)\n      ALLOCATE (blks_to_allocate(nblk, ndims_tensor(tensor_in)))\n\n      bcount = 0\n      DO iproc = 0, numnodes - 1\n         CALL block_buffer_get_index(buffer_recv(iproc), index_recv)\n         blks_to_allocate(bcount + 1:bcount + SIZE(index_recv, 1), :) = index_recv(:, :)\n         bcount = bcount + SIZE(index_recv, 1)\n         DEALLOCATE (index_recv)\n      END DO\n\n      CALL dbcsr_t_reserve_blocks(tensor_out, blks_to_allocate)\n      DEALLOCATE (blks_to_allocate)\n\n      DO iproc = 0, numnodes - 1\n         DO WHILE (block_buffer_blocks_left(buffer_recv(iproc)))\n            CALL block_buffer_get_next_anyd_block(buffer_recv(iproc), ndata, index)\n            CALL dbcsr_t_blk_sizes(tensor_in, index, blk_size)\n            ! create block\n            CALL create_block(blk_data, blk_size, dbcsr_t_get_data_type(tensor_in))\n            ! get actual block data\n            CALL block_buffer_get_next_anyd_block(buffer_recv(iproc), ndata, index, blk_data)\n            CALL dbcsr_t_put_block(tensor_out, index, blk_data, summation=summation)\n            CALL destroy_block(blk_data)\n         END DO\n         CALL block_buffer_destroy(buffer_recv(iproc))\n      END DO\n   END SUBROUTINE\n\n   SUBROUTINE block_buffer_create(buffer, nblock, ndata, data_type, ndim)\n      !! Create block buffer for MPI communication.\n\n      TYPE(block_buffer_type), INTENT(OUT) :: buffer\n         !! block buffer\n      INTEGER, INTENT(IN)                  :: nblock, ndata, data_type, ndim\n         !! number of blocks\n         !! total number of block entries\n         !! number of dimensions\n\n      buffer%nblock = nblock\n      buffer%data_type = data_type\n      buffer%endpos = 0\n      buffer%ndim = ndim\n      SELECT CASE (data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            ALLOCATE (buffer%msg_${dsuffix}$ (ndata))\n         #:endfor\n      END SELECT\n      ALLOCATE (buffer%indx(nblock, ndim + 1))\n   END SUBROUTINE block_buffer_create\n\n   SUBROUTINE block_buffer_destroy(buffer)\n      TYPE(block_buffer_type), INTENT(INOUT) :: buffer\n\n      SELECT CASE (buffer%data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            DEALLOCATE (buffer%msg_${dsuffix}$)\n         #:endfor\n      END SELECT\n      DEALLOCATE (buffer%indx)\n      buffer%nblock = -1\n      buffer%data_type = -1\n      buffer%ndim = -1\n      buffer%endpos = -1\n   END SUBROUTINE block_buffer_destroy\n\n   PURE FUNCTION ndims_buffer(buffer)\n      TYPE(block_buffer_type), INTENT(IN) :: buffer\n      INTEGER                             :: ndims_buffer\n\n      ndims_buffer = buffer%ndim\n   END FUNCTION\n\n   SUBROUTINE block_buffer_add_anyd_block(buffer, index, block)\n      !! insert a block into block buffer (at current iterator position)\n\n      TYPE(block_buffer_type), INTENT(INOUT)      :: buffer\n      INTEGER, DIMENSION(ndims_buffer(buffer)), &\n         INTENT(IN)                               :: index\n         !! index of block\n      TYPE(block_nd), INTENT(IN)                  :: block\n         !! block\n\n      SELECT CASE (block%data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            CALL block_buffer_add_block_${dsuffix}$ (buffer, SIZE(block%${dsuffix}$%blk), index, block%${dsuffix}$%blk)\n         #:endfor\n      END SELECT\n   END SUBROUTINE\n\n   SUBROUTINE block_buffer_get_next_anyd_block(buffer, ndata, index, block, advance_iter)\n      !! get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter.\n      TYPE(block_buffer_type), INTENT(INOUT)      :: buffer\n      INTEGER, INTENT(OUT)                        :: ndata\n      INTEGER, DIMENSION(ndims_buffer(buffer)), &\n         INTENT(OUT)                              :: index\n      TYPE(block_nd), INTENT(INOUT), OPTIONAL     :: block\n      LOGICAL, INTENT(IN), OPTIONAL               :: advance_iter\n\n      SELECT CASE (buffer%data_type)\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            CASE (${dparam}$)\n            IF (PRESENT(block)) THEN\n               CALL block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, block%${dsuffix}$%blk, advance_iter=advance_iter)\n            ELSE\n               CALL block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, advance_iter=advance_iter)\n            END IF\n         #:endfor\n      END SELECT\n   END SUBROUTINE\n\n   SUBROUTINE block_buffer_get_index(buffer, index)\n      !! Get all indices from buffer\n      TYPE(block_buffer_type), INTENT(IN)               :: buffer\n      INTEGER, INTENT(OUT), DIMENSION(:, :), ALLOCATABLE :: index\n      INTEGER, DIMENSION(2)                             :: indx_shape\n\n      indx_shape = SHAPE(buffer%indx) - [0, 1]\n      CALL allocate_any(index, source=buffer%indx(1:indx_shape(1), 1:indx_shape(2)))\n   END SUBROUTINE\n\n   PURE FUNCTION block_buffer_blocks_left(buffer)\n      !! how many blocks left in iterator\n      TYPE(block_buffer_type), INTENT(IN) :: buffer\n      LOGICAL                             :: block_buffer_blocks_left\n\n      block_buffer_blocks_left = buffer%endpos .LT. buffer%nblock\n   END FUNCTION\n\n   SUBROUTINE dbcsr_t_communicate_buffer(mp_comm, buffer_recv, buffer_send, req_array)\n      !! communicate buffer\n      TYPE(mp_comm_type), INTENT(IN)                    :: mp_comm\n      TYPE(block_buffer_type), DIMENSION(0:), INTENT(INOUT) :: buffer_recv, buffer_send\n      TYPE(mp_request_type), DIMENSION(:, :), INTENT(OUT)               :: req_array\n\n      INTEGER                                :: iproc, mynode, numnodes, rec_counter, &\n                                                send_counter\n      INTEGER                                   :: handle\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_communicate_buffer'\n\n      CALL timeset(routineN, handle)\n      CALL mp_environ(numnodes, mynode, mp_comm)\n\n      IF (numnodes > 1) THEN\n\n         send_counter = 0\n         rec_counter = 0\n\n         DO iproc = 0, numnodes - 1\n            IF (buffer_recv(iproc)%nblock > 0) THEN\n               rec_counter = rec_counter + 1\n               CALL mp_irecv(buffer_recv(iproc)%indx, iproc, mp_comm, req_array(rec_counter, 3), tag=4)\n               SELECT CASE (buffer_recv(iproc)%data_type)\n                  #:for dparam, dtype, dsuffix in dtype_float_list\n                     CASE (${dparam}$)\n                     CALL mp_irecv(buffer_recv(iproc)%msg_${dsuffix}$, iproc, mp_comm, req_array(rec_counter, 4), tag=7)\n                  #:endfor\n               END SELECT\n            END IF\n         END DO\n\n         DO iproc = 0, numnodes - 1\n            IF (buffer_send(iproc)%nblock > 0) THEN\n               send_counter = send_counter + 1\n               CALL mp_isend(buffer_send(iproc)%indx, iproc, mp_comm, req_array(send_counter, 1), tag=4)\n               SELECT CASE (buffer_recv(iproc)%data_type)\n                  #:for dparam, dtype, dsuffix in dtype_float_list\n                     CASE (${dparam}$)\n                     CALL mp_isend(buffer_send(iproc)%msg_${dsuffix}$, iproc, mp_comm, req_array(send_counter, 2), tag=7)\n                  #:endfor\n               END SELECT\n            END IF\n         END DO\n\n         IF (send_counter > 0) THEN\n            CALL mp_waitall(req_array(1:send_counter, 1:2))\n         END IF\n         IF (rec_counter > 0) THEN\n            CALL mp_waitall(req_array(1:rec_counter, 3:4))\n         END IF\n\n      ELSE\n         IF (buffer_recv(0)%nblock > 0) THEN\n            buffer_recv(0)%indx(:, :) = buffer_send(0)%indx(:, :)\n            SELECT CASE (buffer_recv(0)%data_type)\n               #:for dparam, dtype, dsuffix in dtype_float_list\n                  CASE (${dparam}$)\n                  buffer_recv(0)%msg_${dsuffix}$ (:) = buffer_send(0)%msg_${dsuffix}$ (:)\n               #:endfor\n            END SELECT\n         END IF\n      END IF\n      CALL timestop(handle)\n\n   END SUBROUTINE\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE block_buffer_add_block_${dsuffix}$ (buffer, ndata, index, block)\n      !! add block to buffer.\n         TYPE(block_buffer_type), INTENT(INOUT)               :: buffer\n         INTEGER, INTENT(IN)                                  :: ndata\n         ${dtype}$, DIMENSION(ndata), INTENT(IN)              :: block\n         INTEGER, DIMENSION(ndims_buffer(buffer)), INTENT(IN) :: index\n         INTEGER                                              :: p, ndims, p_data\n         DBCSR_ASSERT(buffer%data_type .EQ. ${dparam}$)\n         ndims = ndims_buffer(buffer)\n         p = buffer%endpos\n         IF (p .EQ. 0) THEN\n            p_data = 0\n         ELSE\n            p_data = buffer%indx(p, ndims + 1)\n         END IF\n\n         buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata) = block(:)\n         buffer%indx(p + 1, 1:ndims) = index(:)\n         IF (p > 0) THEN\n            buffer%indx(p + 1, ndims + 1) = buffer%indx(p, ndims + 1) + ndata\n         ELSE\n            buffer%indx(p + 1, ndims + 1) = ndata\n         END IF\n         buffer%endpos = buffer%endpos + 1\n      END SUBROUTINE\n   #:endfor\n\n   #:for dparam, dtype, dsuffix in dtype_float_list\n      SUBROUTINE block_buffer_get_next_block_${dsuffix}$ (buffer, ndata, index, block, advance_iter)\n      !! get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter.\n\n         TYPE(block_buffer_type), INTENT(INOUT)                      :: buffer\n         INTEGER, INTENT(OUT)                                        :: ndata\n         ${dtype}$, DIMENSION(:), ALLOCATABLE, OPTIONAL, INTENT(OUT) :: block\n         INTEGER, DIMENSION(ndims_buffer(buffer)), INTENT(OUT)       :: index\n         INTEGER                                                     :: p, ndims, p_data\n         LOGICAL, INTENT(IN), OPTIONAL                               :: advance_iter\n         LOGICAL                                                     :: do_advance\n\n         do_advance = .FALSE.\n         IF (PRESENT(advance_iter)) THEN\n            do_advance = advance_iter\n         ELSE IF (PRESENT(block)) THEN\n            do_advance = .TRUE.\n         END IF\n\n         DBCSR_ASSERT(buffer%data_type .EQ. ${dparam}$)\n         ndims = ndims_buffer(buffer)\n         p = buffer%endpos\n         IF (p .EQ. 0) THEN\n            p_data = 0\n         ELSE\n            p_data = buffer%indx(p, ndims + 1)\n         END IF\n         IF (p > 0) THEN\n            ndata = buffer%indx(p + 1, ndims + 1) - buffer%indx(p, ndims + 1)\n         ELSE\n            ndata = buffer%indx(p + 1, ndims + 1)\n         END IF\n         index(:) = buffer%indx(p + 1, 1:ndims)\n         IF (PRESENT(block)) THEN\n            CALL allocate_any(block, source=buffer%msg_${dsuffix}$ (p_data + 1:p_data + ndata))\n         END IF\n\n         IF (do_advance) buffer%endpos = buffer%endpos + 1\n      END SUBROUTINE\n   #:endfor\n\nEND MODULE dbcsr_tensor_reshape\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor_split.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tensor_split\n\n   !! Routines to split blocks and to convert between tensors with different block sizes.\n   #:include \"dbcsr_tensor.fypp\"\n   #:set maxdim = maxrank\n   #:set ndims = range(2,maxdim+1)\n\n   USE dbcsr_allocate_wrap, ONLY: allocate_any\n   USE dbcsr_array_list_methods, ONLY: get_ith_array\n   USE dbcsr_tensor_block, ONLY: dbcsr_t_iterator_type, &\n                                 dbcsr_t_get_block, &\n                                 dbcsr_t_put_block, &\n                                 dbcsr_t_iterator_start, &\n                                 dbcsr_t_iterator_blocks_left, &\n                                 dbcsr_t_iterator_stop, &\n                                 dbcsr_t_iterator_next_block, &\n                                 dbcsr_t_reserve_blocks, &\n                                 dbcsr_t_reserved_block_indices\n   USE dbcsr_tensor_index, ONLY: dbcsr_t_get_mapping_info, &\n                                 dbcsr_t_inverse_order\n   USE dbcsr_tensor_types, ONLY: dbcsr_t_create, &\n                                 dbcsr_t_get_data_type, &\n                                 dbcsr_t_type, &\n                                 ndims_tensor, &\n                                 dbcsr_t_distribution_type, &\n                                 dbcsr_t_distribution, &\n                                 dbcsr_t_distribution_destroy, &\n                                 dbcsr_t_distribution_new_expert, &\n                                 dbcsr_t_clear, &\n                                 dbcsr_t_finalize, &\n                                 dbcsr_t_get_num_blocks, &\n                                 dbcsr_t_blk_offsets, &\n                                 dbcsr_t_blk_sizes, &\n                                 ndims_matrix_row, &\n                                 ndims_matrix_column, &\n                                 dbcsr_t_filter, &\n                                 dbcsr_t_copy_contraction_storage\n   USE dbcsr_api, ONLY: ${uselist(dtype_float_param)}$\n   USE dbcsr_kinds, ONLY: ${uselist(dtype_float_prec)}$, dp\n\n#include \"base/dbcsr_base_uses.f90\"\n   IMPLICIT NONE\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_split'\n   PUBLIC :: &\n      dbcsr_t_make_compatible_blocks, &\n      dbcsr_t_split_blocks, &\n      dbcsr_t_split_blocks_generic, &\n      dbcsr_t_split_copyback, &\n      dbcsr_t_crop\n\nCONTAINS\n\n   SUBROUTINE dbcsr_t_split_blocks_generic(tensor_in, tensor_out, ${varlist(\"blk_size\")}$, nodata)\n      !! Split tensor blocks into smaller blocks\n      TYPE(dbcsr_t_type), INTENT(INOUT)               :: tensor_in\n         !! Input tensor\n      TYPE(dbcsr_t_type), INTENT(OUT)                 :: tensor_out\n         !! Output tensor (splitted blocks)\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL     :: ${varlist(\"blk_size\")}$\n         !! block sizes for each of the tensor dimensions\n      LOGICAL, INTENT(IN), OPTIONAL                   :: nodata\n         !! don't copy data from tensor_in to tensor_out\n\n      TYPE(dbcsr_t_distribution_type)                 :: dist_old, dist_split\n      TYPE(dbcsr_t_iterator_type)                     :: iter\n      INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"nd_dist_split\")}$\n      INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"nd_blk_size_split\")}$\n      INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"index_split_offset\")}$\n      INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"inblock_offset\")}$\n      INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"blk_nsplit\")}$\n      INTEGER                                         :: ${varlist(\"split_blk\")}$\n      INTEGER :: idim, i, isplit_sum, blk, nsplit, handle, splitsum, bcount\n      INTEGER, DIMENSION(:, :), ALLOCATABLE           :: blks_to_allocate\n      INTEGER, DIMENSION(:), ALLOCATABLE :: dist_d, blk_size_d, blk_size_split_d, dist_split_d\n      INTEGER, DIMENSION(ndims_matrix_row(tensor_in)) :: map1_2d\n      INTEGER, DIMENSION(ndims_matrix_column(tensor_in)) :: map2_2d\n      INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: blk_index, blk_size, blk_offset, &\n                                                     blk_shape\n      INTEGER, DIMENSION(${maxdim}$) :: bi_split, inblock_offset\n      LOGICAL :: found\n\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         #:for ndim in ndims\n            ${dtype}$, DIMENSION(${shape_colon(n=ndim)}$), ALLOCATABLE :: block_${dsuffix}$_${ndim}$d\n         #:endfor\n      #:endfor\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_split_blocks_generic'\n\n      CALL timeset(routineN, handle)\n\n      dist_old = dbcsr_t_distribution(tensor_in)\n\n      DO idim = 1, ndims_tensor(tensor_in)\n         CALL get_ith_array(dist_old%nd_dist, idim, dist_d)\n         CALL get_ith_array(tensor_in%blk_sizes, idim, blk_size_d)\n\n         #:for idim in range(1, maxdim+1)\n            IF (idim == ${idim}$) THEN\n               ! split block index offset for each normal block index\n               ALLOCATE (index_split_offset_${idim}$ (SIZE(dist_d)))\n               ! how many split blocks for each normal block index\n               ALLOCATE (blk_nsplit_${idim}$ (SIZE(dist_d)))\n               ! data offset of split blocks w.r.t. corresponding normal block\n               ALLOCATE (inblock_offset_${idim}$ (SIZE(blk_size_${idim}$)))\n               CALL allocate_any(blk_size_split_d, source=blk_size_${idim}$)\n            END IF\n         #:endfor\n\n         ! distribution vector for split blocks\n         ALLOCATE (dist_split_d(SIZE(blk_size_split_d)))\n\n         isplit_sum = 0 ! counting splits\n         DO i = 1, SIZE(blk_size_d)\n            nsplit = 0 ! number of splits for current normal block\n            splitsum = 0 ! summing split block sizes for current normal block\n            DO WHILE (splitsum < blk_size_d(i))\n               nsplit = nsplit + 1\n               isplit_sum = isplit_sum + 1\n               #:for idim in range(1, maxdim+1)\n                  IF (idim == ${idim}$) inblock_offset_${idim}$ (isplit_sum) = splitsum\n               #:endfor\n               dist_split_d(isplit_sum) = dist_d(i)\n               splitsum = splitsum + blk_size_split_d(isplit_sum)\n            END DO\n            DBCSR_ASSERT(splitsum == blk_size_d(i))\n            #:for idim in range(1, maxdim+1)\n               IF (idim == ${idim}$) THEN\n                  blk_nsplit_${idim}$ (i) = nsplit\n                  index_split_offset_${idim}$ (i) = isplit_sum - nsplit\n               END IF\n            #:endfor\n         END DO\n\n         #:for idim in range(1, maxdim+1)\n            IF (idim == ${idim}$) THEN\n               CALL allocate_any(nd_dist_split_${idim}$, source=dist_split_d)\n               CALL allocate_any(nd_blk_size_split_${idim}$, source=blk_size_split_d)\n            END IF\n         #:endfor\n         DEALLOCATE (dist_split_d)\n         DEALLOCATE (blk_size_split_d)\n\n      END DO\n\n      CALL dbcsr_t_get_mapping_info(tensor_in%nd_index_blk, map1_2d=map1_2d, map2_2d=map2_2d)\n\n      #:for ndim in ndims\n         IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n            CALL dbcsr_t_distribution_new_expert(dist_split, tensor_in%pgrid, map1_2d, map2_2d, &\n                                                 ${varlist(\"nd_dist_split\", nmax=ndim)}$)\n            CALL dbcsr_t_create(tensor_out, tensor_in%name, dist_split, map1_2d, map2_2d, &\n                                dbcsr_t_get_data_type(tensor_in), ${varlist(\"nd_blk_size_split\", nmax=ndim)}$)\n         END IF\n      #:endfor\n\n      CALL dbcsr_t_distribution_destroy(dist_split)\n\n      IF (PRESENT(nodata)) THEN\n         IF (nodata) THEN\n            CALL timestop(handle)\n            RETURN\n         END IF\n      END IF\n\n      CALL dbcsr_t_iterator_start(iter, tensor_in)\n\n      bcount = 0\n      DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n         CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size)\n         #:for ndim in ndims\n            IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n               #:for idim in range(1,ndim+1)\n                  DO split_blk_${idim}$ = 1, blk_nsplit_${idim}$ (blk_index(${idim}$))\n                     #:endfor\n                     bcount = bcount + 1\n                     #:for idim in range(1,ndim+1)\n                        END DO\n                     #:endfor\n                  END IF\n               #:endfor\n            END DO\n            CALL dbcsr_t_iterator_stop(iter)\n\n            ALLOCATE (blks_to_allocate(bcount, ndims_tensor(tensor_in)))\n\n            CALL dbcsr_t_iterator_start(iter, tensor_in)\n\n            bcount = 0\n            DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n               CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset)\n\n               #:for ndim in ndims\n                  IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n                     #:for idim in range(1,ndim+1)\n                        DO split_blk_${idim}$ = 1, blk_nsplit_${idim}$ (blk_index(${idim}$))\n                           bi_split(${idim}$) = index_split_offset_${idim}$ (blk_index(${idim}$)) + split_blk_${idim}$\n                           #:endfor\n                           bcount = bcount + 1\n                           blks_to_allocate(bcount, :) = bi_split(1:ndims_tensor(tensor_in))\n                           #:for idim in range(1,ndim+1)\n                              END DO\n                           #:endfor\n                        END IF\n                     #:endfor\n                  END DO\n\n                  CALL dbcsr_t_iterator_stop(iter)\n\n                  CALL dbcsr_t_reserve_blocks(tensor_out, blks_to_allocate)\n\n                  CALL dbcsr_t_iterator_start(iter, tensor_in)\n\n                  DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n                     CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset)\n                     #:for dparam, dtype, dsuffix in dtype_float_list\n                        IF (dbcsr_t_get_data_type(tensor_in) == ${dparam}$) THEN\n                           #:for ndim in ndims\n                              IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n                                 CALL dbcsr_t_get_block(tensor_in, blk_index, block_${dsuffix}$_${ndim}$d, found)\n                                 DBCSR_ASSERT(found)\n                              END IF\n                           #:endfor\n                        END IF\n                     #:endfor\n                     #:for ndim in ndims\n                        IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n                           #:for idim in range(1,ndim+1)\n                              DO split_blk_${idim}$ = 1, blk_nsplit_${idim}$ (blk_index(${idim}$))\n                                 ! split block index\n                                 bi_split(${idim}$) = index_split_offset_${idim}$ (blk_index(${idim}$)) + split_blk_${idim}$\n                                 blk_shape(${idim}$) = blk_size_${idim}$ (bi_split(${idim}$))\n                                 #:endfor\n\n                                 #:for dparam, dtype, dsuffix in dtype_float_list\n\n                                    IF (dbcsr_t_get_data_type(tensor_in) == ${dparam}$) THEN\n\n                                       #:for idim in range(1,ndim+1)\n                                          inblock_offset(${idim}$) = inblock_offset_${idim}$ (bi_split(${idim}$))\n                                       #:endfor\n                                       CALL dbcsr_t_put_block(tensor_out, bi_split(1:${ndim}$), &\n                                                              blk_shape, &\n                                                              block_${dsuffix}$_${ndim}$d( &\n                                         ${\", \".join([\"inblock_offset(\"+str(idim)+\") + 1:inblock_offset(\"+str(idim)+\") + blk_shape(\"+str(idim)+\")\" for idim in range(1, ndim+1)])}$))\n\n                                    END IF\n                                 #:endfor\n\n                                 #:for idim in range(1,ndim+1)\n                                    END DO\n                                 #:endfor\n\n                                 #:for dparam, dtype, dsuffix in dtype_float_list\n                                    IF (dbcsr_t_get_data_type(tensor_in) == ${dparam}$) THEN\n                                       DEALLOCATE (block_${dsuffix}$_${ndim}$d)\n                                    END IF\n                                 #:endfor\n                              END IF\n                           #:endfor\n                        END DO\n                        CALL dbcsr_t_iterator_stop(iter)\n\n                        CALL dbcsr_t_finalize(tensor_out)\n\n                        ! remove blocks that are exactly 0, these can occur if a cropping operation was performed before splitting\n                        CALL dbcsr_t_filter(tensor_out, TINY(0.0_dp))\n\n                        CALL timestop(handle)\n\n                     END SUBROUTINE\n\n                     SUBROUTINE dbcsr_t_split_blocks(tensor_in, tensor_out, block_sizes, nodata)\n      !! Split tensor blocks into smaller blocks of maximum size PRODUCT(block_sizes).\n\n                        TYPE(dbcsr_t_type), INTENT(INOUT)               :: tensor_in\n         !! Input tensor\n                        TYPE(dbcsr_t_type), INTENT(OUT)                 :: tensor_out\n         !! Output tensor (split blocks)\n                        INTEGER, DIMENSION(ndims_tensor(tensor_in)), &\n                           INTENT(IN)                                   :: block_sizes\n         !! block sizes for each of the tensor dimensions\n                        LOGICAL, INTENT(IN), OPTIONAL                   :: nodata\n         !! don't copy data from tensor_in to tensor_out\n\n                        INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"nd_blk_size_split\")}$\n                        INTEGER :: idim, i, isplit_sum, blk_remainder, nsplit, isplit\n                        INTEGER, DIMENSION(:), ALLOCATABLE :: blk_size_d, blk_size_split_d\n\n                        DO idim = 1, ndims_tensor(tensor_in)\n                           CALL get_ith_array(tensor_in%blk_sizes, idim, blk_size_d)\n\n                           isplit_sum = 0\n                           DO i = 1, SIZE(blk_size_d)\n                              nsplit = (blk_size_d(i) + block_sizes(idim) - 1)/block_sizes(idim)\n                              isplit_sum = isplit_sum + nsplit\n                           END DO\n\n                           ALLOCATE (blk_size_split_d(isplit_sum))\n\n                           isplit_sum = 0\n                           DO i = 1, SIZE(blk_size_d)\n                              nsplit = (blk_size_d(i) + block_sizes(idim) - 1)/block_sizes(idim)\n                              blk_remainder = blk_size_d(i)\n                              DO isplit = 1, nsplit\n                                 isplit_sum = isplit_sum + 1\n                                 blk_size_split_d(isplit_sum) = MIN(block_sizes(idim), blk_remainder)\n                                 blk_remainder = blk_remainder - block_sizes(idim)\n                              END DO\n\n                           END DO\n\n                           #:for idim in range(1, maxdim+1)\n                              IF (idim == ${idim}$) THEN\n                                 CALL allocate_any(nd_blk_size_split_${idim}$, source=blk_size_split_d)\n                              END IF\n                           #:endfor\n                           DEALLOCATE (blk_size_split_d)\n                        END DO\n\n                        #:for ndim in ndims\n                           IF (ndims_tensor(tensor_in) == ${ndim}$) CALL dbcsr_t_split_blocks_generic(tensor_in, tensor_out, &\n                                                                                      ${varlist(\"nd_blk_size_split\", nmax=ndim)}$, &\n                                                                                                      nodata=nodata)\n                        #:endfor\n\n                     END SUBROUTINE\n\n                     SUBROUTINE dbcsr_t_split_copyback(tensor_split_in, tensor_out, summation)\n      !! Copy tensor with split blocks to tensor with original block sizes.\n\n                        TYPE(dbcsr_t_type), INTENT(INOUT)               :: tensor_split_in\n         !! tensor with smaller blocks\n                        TYPE(dbcsr_t_type), INTENT(INOUT)               :: tensor_out\n         !! original tensor\n                        LOGICAL, INTENT(IN), OPTIONAL                   :: summation\n                        INTEGER, DIMENSION(:), ALLOCATABLE              :: first_split_d, last_split_d\n                        INTEGER, DIMENSION(:), ALLOCATABLE              :: blk_size_split_d, blk_size_d\n                        INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"last_split\")}$, &\n                                                                           ${varlist(\"first_split\")}$, &\n                                                                           ${varlist(\"split\")}$\n                     INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"inblock_offset\")}$, ${varlist(\"blk_size_split\")}$\n                        INTEGER, DIMENSION(:, :), ALLOCATABLE            :: blks_to_allocate\n                        INTEGER                                         :: idim, iblk, blk, bcount\n                        INTEGER                                         :: ${varlist(\"iblk\")}$, isplit_sum, splitsum, nblk\n                        TYPE(dbcsr_t_iterator_type)                     :: iter\n                        INTEGER, DIMENSION(ndims_tensor(tensor_out)) :: blk_index, blk_size, blk_offset, blk_shape, blk_index_n\n                        LOGICAL                                         :: found\n\n                        INTEGER, DIMENSION(${maxdim}$)                  :: inblock_offset\n                        INTEGER                                            :: handle\n                        CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_split_copyback'\n                        #:for dparam, dtype, dsuffix in dtype_float_list\n                           #:for ndim in ndims\n                              ${dtype}$, DIMENSION(${shape_colon(n=ndim)}$), ALLOCATABLE :: block_${dsuffix}$_${ndim}$d\n                              ${dtype}$, DIMENSION(${shape_colon(n=ndim)}$), ALLOCATABLE :: block_split_${dsuffix}$_${ndim}$d\n                           #:endfor\n                        #:endfor\n\n                        CALL timeset(routineN, handle)\n                        DBCSR_ASSERT(tensor_out%valid)\n                        IF (PRESENT(summation)) THEN\n                           IF (.NOT. summation) CALL dbcsr_t_clear(tensor_out)\n                        ELSE\n                           CALL dbcsr_t_clear(tensor_out)\n                        END IF\n\n                        DO idim = 1, ndims_tensor(tensor_split_in)\n                           CALL get_ith_array(tensor_split_in%blk_sizes, idim, blk_size_split_d)\n                           CALL get_ith_array(tensor_out%blk_sizes, idim, blk_size_d)\n\n                           #:for idim in range(1, maxdim+1)\n                              IF (idim == ${idim}$) THEN\n                                 ! data offset of split blocks w.r.t. corresponding normal block\n                                 ALLOCATE (inblock_offset_${idim}$ (SIZE(blk_size_split_d)))\n                                 ! normal block index for each split block\n                                 ALLOCATE (split_${idim}$ (SIZE(blk_size_split_d)))\n                              END IF\n                           #:endfor\n\n                           ALLOCATE (last_split_d(SIZE(blk_size_d)))\n                           ALLOCATE (first_split_d(SIZE(blk_size_d)))\n                           first_split_d(1) = 1\n                           isplit_sum = 0\n                           DO iblk = 1, SIZE(blk_size_d)\n                              splitsum = 0\n                              IF (iblk .GT. 1) first_split_d(iblk) = last_split_d(iblk - 1) + 1\n                              DO WHILE (splitsum < blk_size_d(iblk))\n                                 isplit_sum = isplit_sum + 1\n                                 #:for idim in range(1, maxdim+1)\n                                    IF (idim == ${idim}$) THEN\n                                       inblock_offset_${idim}$ (isplit_sum) = splitsum\n                                       split_${idim}$ (isplit_sum) = iblk\n                                    END IF\n                                 #:endfor\n                                 splitsum = splitsum + blk_size_split_d(isplit_sum)\n                              END DO\n                              DBCSR_ASSERT(splitsum == blk_size_d(iblk))\n                              last_split_d(iblk) = isplit_sum\n                           END DO\n                           #:for idim in range(1, maxdim+1)\n                              IF (idim == ${idim}$) THEN\n                                 CALL allocate_any(first_split_${idim}$, source=first_split_d)\n                                 CALL allocate_any(last_split_${idim}$, source=last_split_d)\n                                 CALL allocate_any(blk_size_split_${idim}$, source=blk_size_split_d)\n                              END IF\n                           #:endfor\n                           DEALLOCATE (first_split_d, last_split_d)\n                           DEALLOCATE (blk_size_split_d, blk_size_d)\n                        END DO\n\n                        nblk = dbcsr_t_get_num_blocks(tensor_split_in)\n                        ALLOCATE (blks_to_allocate(nblk, ndims_tensor(tensor_split_in)))\n                        CALL dbcsr_t_iterator_start(iter, tensor_split_in)\n                        bcount = 0\n                        DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n                           CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size)\n                           #:for ndim in ndims\n                              IF (ndims_tensor(tensor_out) == ${ndim}$) THEN\n                                 #:for idim in range(1,ndim+1)\n                                    blk_index_n(${idim}$) = split_${idim}$ (blk_index(${idim}$))\n                                 #:endfor\n                              END IF\n                           #:endfor\n                           blks_to_allocate(bcount + 1, :) = blk_index_n\n                           bcount = bcount + 1\n                        END DO\n                        CALL dbcsr_t_iterator_stop(iter)\n                        CALL dbcsr_t_reserve_blocks(tensor_out, blks_to_allocate)\n\n                        CALL dbcsr_t_iterator_start(iter, tensor_out)\n                        DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n                           CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset)\n                           #:for dprec, dparam, dtype, dsuffix in dtype_float_list_prec\n                              IF (dbcsr_t_get_data_type(tensor_out) == ${dparam}$) THEN\n\n                                 #:for ndim in ndims\n                                    IF (ndims_tensor(tensor_out) == ${ndim}$) THEN\n                                       CALL allocate_any(block_${dsuffix}$_${ndim}$d, blk_size)\n                                       block_${dsuffix}$_${ndim}$d = 0.0_${dprec}$\n                                       #:for idim in range(1,ndim+1)\n                            DO iblk_${idim}$ = first_split_${idim}$ (blk_index(${idim}$)), last_split_${idim}$ (blk_index(${idim}$))\n                                             #:endfor\n                                             #:for idim in range(1,ndim+1)\n                                                inblock_offset(${idim}$) = inblock_offset_${idim}$ (iblk_${idim}$)\n                                             #:endfor\n\n                        CALL dbcsr_t_get_block(tensor_split_in, [${\", \".join([\"iblk_\"+str(idim) for idim in range(1, ndim+1)])}$], &\n                                                                    block_split_${dsuffix}$_${ndim}$d, found)\n                                             IF (found) THEN\n                                                blk_shape(1:${ndim}$) = SHAPE(block_split_${dsuffix}$_${ndim}$d)\n                                                block_${dsuffix}$_${ndim}$d( &\n                        ${\", \".join([\"inblock_offset(\"+str(idim)+\") + 1:inblock_offset(\"+str(idim)+\") + blk_shape(\"+str(idim)+\")\" for idim in range(1, ndim+1)])}$) = &\n                                                   block_split_${dsuffix}$_${ndim}$d\n                                             END IF\n\n                                             #:for idim in range(1,ndim+1)\n                                                END DO\n                                             #:endfor\n                           CALL dbcsr_t_put_block(tensor_out, blk_index, blk_size, block_${dsuffix}$_${ndim}$d, summation=summation)\n                                             DEALLOCATE (block_${dsuffix}$_${ndim}$d)\n                                          END IF\n                                       #:endfor\n                                    END IF\n                                 #:endfor\n                              END DO\n                              CALL dbcsr_t_iterator_stop(iter)\n\n                              CALL timestop(handle)\n\n                           END SUBROUTINE\n\n       SUBROUTINE dbcsr_t_make_compatible_blocks(tensor1, tensor2, tensor1_split, tensor2_split, order, nodata1, nodata2, move_data)\n      !! split two tensors with same total sizes but different block sizes such that they have equal\n      !! block sizes\n      !! \\move_data memory optimization: transfer data s.t. tensor1 and tensor2 may be empty on return\n\n                              TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor1, tensor2\n         !! tensor 1 in\n         !! tensor 2 in\n                              TYPE(dbcsr_t_type), INTENT(OUT)   :: tensor1_split, tensor2_split\n         !! tensor 1 with split blocks\n         !! tensor 2 with split blocks\n                              INTEGER, DIMENSION(ndims_tensor(tensor1)), &\n                                 INTENT(IN), OPTIONAL                        :: order\n\n                              LOGICAL, INTENT(IN), OPTIONAL     :: nodata1, nodata2, move_data\n         !! don't copy data of tensor 1\n         !! don't copy data of tensor 2\n                          INTEGER, DIMENSION(:), ALLOCATABLE  :: ${varlist(\"blk_size_split_1\")}$, ${varlist(\"blk_size_split_2\")}$, &\n                                                                     blk_size_d_1, blk_size_d_2, blk_size_d_split\n                              INTEGER :: size_sum_1, size_sum_2, size_sum, bind_1, bind_2, isplit, bs, idim, i\n                              LOGICAL :: move_prv, nodata1_prv, nodata2_prv\n                              INTEGER, DIMENSION(ndims_tensor(tensor1)) :: order_prv\n\n                              IF (PRESENT(move_data)) THEN\n                                 move_prv = move_data\n                              ELSE\n                                 move_prv = .FALSE.\n                              END IF\n\n                              IF (PRESENT(nodata1)) THEN\n                                 nodata1_prv = nodata1\n                              ELSE\n                                 nodata1_prv = .FALSE.\n                              END IF\n                              IF (PRESENT(nodata2)) THEN\n                                 nodata2_prv = nodata2\n                              ELSE\n                                 nodata2_prv = .FALSE.\n                              END IF\n\n                              IF (PRESENT(order)) THEN\n                                 order_prv(:) = dbcsr_t_inverse_order(order)\n                              ELSE\n                                 order_prv(:) = (/(i, i=1, ndims_tensor(tensor1))/)\n                              END IF\n\n                              DO idim = 1, ndims_tensor(tensor2)\n                                 CALL get_ith_array(tensor1%blk_sizes, order_prv(idim), blk_size_d_1)\n                                 CALL get_ith_array(tensor2%blk_sizes, idim, blk_size_d_2)\n                                 ALLOCATE (blk_size_d_split(SIZE(blk_size_d_1) + SIZE(blk_size_d_2)))\n                                 size_sum_1 = 0\n                                 size_sum_2 = 0\n                                 size_sum = 0\n                                 bind_1 = 0\n                                 bind_2 = 0\n                                 isplit = 0\n\n                                 DO WHILE (bind_1 < SIZE(blk_size_d_1) .AND. bind_2 < SIZE(blk_size_d_2))\n                                    IF (blk_size_d_1(bind_1 + 1) < blk_size_d_2(bind_2 + 1)) THEN\n                                       bind_1 = bind_1 + 1\n                                       bs = blk_size_d_1(bind_1)\n                                       blk_size_d_2(bind_2 + 1) = blk_size_d_2(bind_2 + 1) - bs\n                                       size_sum = size_sum + bs\n                                       isplit = isplit + 1\n                                       blk_size_d_split(isplit) = bs\n                                    ELSEIF (blk_size_d_1(bind_1 + 1) > blk_size_d_2(bind_2 + 1)) THEN\n                                       bind_2 = bind_2 + 1\n                                       bs = blk_size_d_2(bind_2)\n                                       blk_size_d_1(bind_1 + 1) = blk_size_d_1(bind_1 + 1) - bs\n                                       size_sum = size_sum + bs\n                                       isplit = isplit + 1\n                                       blk_size_d_split(isplit) = bs\n                                    ELSE\n                                       bind_1 = bind_1 + 1\n                                       bind_2 = bind_2 + 1\n                                       bs = blk_size_d_1(bind_1)\n                                       size_sum = size_sum + bs\n                                       isplit = isplit + 1\n                                       blk_size_d_split(isplit) = bs\n                                    END IF\n                                 END DO\n\n                                 IF (bind_1 < SIZE(blk_size_d_1)) THEN\n                                    bind_1 = bind_1 + 1\n                                    bs = blk_size_d_1(bind_1)\n                                    size_sum = size_sum + bs\n                                    isplit = isplit + 1\n                                    blk_size_d_split(isplit) = bs\n                                 END IF\n\n                                 IF (bind_2 < SIZE(blk_size_d_2)) THEN\n                                    bind_2 = bind_2 + 1\n                                    bs = blk_size_d_2(bind_2)\n                                    size_sum = size_sum + bs\n                                    isplit = isplit + 1\n                                    blk_size_d_split(isplit) = bs\n                                 END IF\n\n                                 #:for idim in range(1, maxdim+1)\n                                    IF (order_prv(idim) == ${idim}$) THEN\n                                       CALL allocate_any(blk_size_split_1_${idim}$, source=blk_size_d_split(:isplit))\n                                    END IF\n                                 #:endfor\n\n                                 #:for idim in range(1, maxdim+1)\n                                    IF (idim == ${idim}$) THEN\n                                       CALL allocate_any(blk_size_split_2_${idim}$, source=blk_size_d_split(:isplit))\n                                    END IF\n                                 #:endfor\n\n                                 DEALLOCATE (blk_size_d_split, blk_size_d_1, blk_size_d_2)\n                              END DO\n\n                              #:for ndim in ndims\n                                 IF (ndims_tensor(tensor1) == ${ndim}$) THEN\n               CALL dbcsr_t_split_blocks_generic(tensor1, tensor1_split, ${varlist(\"blk_size_split_1\", nmax=ndim)}$, nodata=nodata1)\n                                    IF (move_prv .AND. .NOT. nodata1_prv) CALL dbcsr_t_clear(tensor1)\n               CALL dbcsr_t_split_blocks_generic(tensor2, tensor2_split, ${varlist(\"blk_size_split_2\", nmax=ndim)}$, nodata=nodata2)\n                                    IF (move_prv .AND. .NOT. nodata2_prv) CALL dbcsr_t_clear(tensor2)\n                                 END IF\n                              #:endfor\n\n                           END SUBROUTINE\n\n                           SUBROUTINE dbcsr_t_crop(tensor_in, tensor_out, bounds, move_data)\n                              TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_in\n                              TYPE(dbcsr_t_type), INTENT(OUT) :: tensor_out\n                              INTEGER, DIMENSION(2, ndims_tensor(tensor_in)), INTENT(IN) :: bounds\n                              LOGICAL, INTENT(IN), OPTIONAL :: move_data\n                              INTEGER, DIMENSION(2, ndims_tensor(tensor_in)) :: blk_bounds\n                              TYPE(dbcsr_t_iterator_type)                     :: iter\n                              INTEGER, DIMENSION(ndims_tensor(tensor_in)) :: blk_index, blk_size, blk_offset\n                              LOGICAL :: found, move_data_prv\n                              INTEGER :: idim, blk, iblk, iblk_all, nblk\n                              INTEGER, DIMENSION(:, :), ALLOCATABLE :: blk_ind, blk_ind_tmp\n                              #:for dparam, dtype, dsuffix in dtype_float_list\n                                 #:for ndim in ndims\n          ${dtype}$, DIMENSION(${shape_colon(n=ndim)}$), ALLOCATABLE :: block_${dsuffix}$_${ndim}$d, block_put_${dsuffix}$_${ndim}$d\n                                 #:endfor\n                              #:endfor\n\n                              IF (PRESENT(move_data)) THEN\n                                 move_data_prv = move_data\n                              ELSE\n                                 move_data_prv = .FALSE.\n                              END IF\n\n                              CALL dbcsr_t_create(tensor_in, tensor_out)\n\n                              ! reserve blocks inside bounds\n                              ALLOCATE (blk_ind(dbcsr_t_get_num_blocks(tensor_in), ndims_tensor(tensor_in)))\n                              CALL dbcsr_t_reserved_block_indices(tensor_in, blk_ind)\n                              nblk = dbcsr_t_get_num_blocks(tensor_in)\n                              ALLOCATE (blk_ind_tmp(dbcsr_t_get_num_blocks(tensor_in), ndims_tensor(tensor_in)))\n                              blk_ind_tmp(:, :) = 0\n                              iblk = 0\n                              blk_loop: DO iblk_all = 1, nblk\n                                 CALL dbcsr_t_blk_offsets(tensor_in, blk_ind(iblk_all, :), blk_offset)\n                                 CALL dbcsr_t_blk_sizes(tensor_in, blk_ind(iblk_all, :), blk_size)\n                                 DO idim = 1, ndims_tensor(tensor_in)\n                                    IF (bounds(1, idim) > blk_offset(idim) - 1 + blk_size(idim)) CYCLE blk_loop\n                                    IF (bounds(2, idim) < blk_offset(idim)) CYCLE blk_loop\n                                 END DO\n                                 iblk = iblk + 1\n                                 blk_ind_tmp(iblk, :) = blk_ind(iblk_all, :)\n                              END DO blk_loop\n\n                              DEALLOCATE (blk_ind)\n                              ALLOCATE (blk_ind(iblk, ndims_tensor(tensor_in)))\n                              blk_ind(:, :) = blk_ind_tmp(:iblk, :)\n\n                              CALL dbcsr_t_reserve_blocks(tensor_out, blk_ind)\n\n                              ! copy blocks\n                              CALL dbcsr_t_iterator_start(iter, tensor_out)\n                              iter_loop: DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n                                 CALL dbcsr_t_iterator_next_block(iter, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset)\n\n                                 DO idim = 1, ndims_tensor(tensor_in)\n                                    blk_bounds(1, idim) = MAX(bounds(1, idim) - blk_offset(idim) + 1, 1)\n                                    blk_bounds(2, idim) = MIN(bounds(2, idim) - blk_offset(idim) + 1, blk_size(idim))\n                                 END DO\n\n                                 #:for dprec, dparam, dtype, dsuffix in dtype_float_list_prec\n                                    IF (dbcsr_t_get_data_type(tensor_in) == ${dparam}$) THEN\n                                       #:for ndim in ndims\n                                          IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n                                             CALL dbcsr_t_get_block(tensor_in, blk_index, block_${dsuffix}$_${ndim}$d, found)\n\n                                             CALL allocate_any(block_put_${dsuffix}$_${ndim}$d, blk_size)\n                                             block_put_${dsuffix}$_${ndim}$d = 0.0_${dprec}$\n               block_put_${dsuffix}$_${ndim}$d(${\", \".join([\"blk_bounds(1, \"+str(idim)+\"):blk_bounds(2,\"+str(idim)+\")\" for idim in range(1, ndim+1)])}$) = &\n                  block_${dsuffix}$_${ndim}$d(${\", \".join([\"blk_bounds(1, \"+str(idim)+\"):blk_bounds(2,\"+str(idim)+\")\" for idim in range(1, ndim+1)])}$)\n                                            CALL dbcsr_t_put_block(tensor_out, blk_index, blk_size, block_put_${dsuffix}$_${ndim}$d)\n                                             DEALLOCATE (block_${dsuffix}$_${ndim}$d)\n                                             DEALLOCATE (block_put_${dsuffix}$_${ndim}$d)\n                                          END IF\n                                       #:endfor\n                                    END IF\n                                 #:endfor\n                              END DO iter_loop\n                              CALL dbcsr_t_iterator_stop(iter)\n                              CALL dbcsr_t_finalize(tensor_out)\n\n                              IF (move_data_prv) CALL dbcsr_t_clear(tensor_in)\n\n                              ! transfer data for batched contraction\n                              CALL dbcsr_t_copy_contraction_storage(tensor_in, tensor_out)\n\n                           END SUBROUTINE\n\n                        END MODULE\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor_test.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tensor_test\n   !! General methods for testing DBCSR tensors.\n\n   #:include \"dbcsr_tensor.fypp\"\n   #:set maxdim = maxrank\n   #:set ndims = range(2,maxdim+1)\n\n   USE dbcsr_api, ONLY: ${uselist(dtype_float_param)}$\n   USE dbcsr_tensor, ONLY: &\n      dbcsr_t_copy, dbcsr_t_get_block, dbcsr_t_iterator_type, dbcsr_t_iterator_blocks_left, &\n      dbcsr_t_iterator_next_block, dbcsr_t_iterator_start, dbcsr_t_iterator_stop, &\n      dbcsr_t_reserve_blocks, dbcsr_t_get_stored_coordinates, dbcsr_t_put_block, &\n      dbcsr_t_contract, dbcsr_t_inverse_order\n   USE dbcsr_tensor_block, ONLY: block_nd\n   USE dbcsr_tensor_types, ONLY: &\n      dbcsr_t_create, dbcsr_t_destroy, dbcsr_t_type, dbcsr_t_distribution_type, dbcsr_t_distribution_destroy, &\n      dims_tensor, ndims_tensor, dbcsr_t_distribution_new, dbcsr_t_get_data_type, &\n      mp_environ_pgrid, dbcsr_t_pgrid_type, dbcsr_t_pgrid_create, dbcsr_t_pgrid_destroy, dbcsr_t_get_info, &\n      dbcsr_t_default_distvec\n   USE dbcsr_tensor_io, ONLY: &\n      dbcsr_t_write_blocks, dbcsr_t_write_block_indices\n   USE dbcsr_kinds, ONLY: ${uselist(dtype_float_prec)}$, &\n                          default_string_length, &\n                          int_8\n   USE dbcsr_mpiwrap, ONLY: mp_environ, &\n                            mp_comm_free, &\n                            mp_sum, &\n                            mp_comm_type\n   USE dbcsr_allocate_wrap, ONLY: allocate_any\n   USE dbcsr_tensor_index, ONLY: &\n      combine_tensor_index, get_2d_indices_tensor, dbcsr_t_get_mapping_info\n   USE dbcsr_tas_test, ONLY: dbcsr_tas_checksum\n   USE dbcsr_data_types, ONLY: dbcsr_scalar_type\n   USE dbcsr_blas_operations, ONLY: &\n      set_larnv_seed\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_test'\n\n   PUBLIC :: &\n      dbcsr_t_setup_test_tensor, &\n      dbcsr_t_contract_test, &\n      dbcsr_t_test_formats, &\n      dbcsr_t_checksum, &\n      dbcsr_t_reset_randmat_seed\n\n   INTERFACE dist_sparse_tensor_to_repl_dense_array\n      #:for dparam, dtype, dsuffix in [dtype_float_list[0]]\n         #:for ndim in ndims\n            MODULE PROCEDURE dist_sparse_tensor_to_repl_dense_${ndim}$d_array_${dsuffix}$\n         #:endfor\n      #:endfor\n   END INTERFACE\n\n   INTEGER, SAVE :: randmat_counter = 0\n   INTEGER, PARAMETER, PRIVATE :: rand_seed_init = 12341313\n\nCONTAINS\n\n   FUNCTION dbcsr_t_equal(tensor1, tensor2)\n      !! check if two (arbitrarily mapped and distributed) tensors are equal.\n      TYPE(dbcsr_t_type), INTENT(INOUT)          :: tensor1, tensor2\n      LOGICAL                                    :: dbcsr_t_equal\n\n      INTEGER                                    :: blk\n      TYPE(dbcsr_t_type)                         :: tensor2_tmp\n      TYPE(dbcsr_t_iterator_type)                :: iter\n      TYPE(block_nd)                             :: blk_data1, blk_data2\n      INTEGER, DIMENSION(ndims_tensor(tensor1)) :: blk_size, ind_nd\n      LOGICAL :: found\n\n      ! create a copy of tensor2 that has exact same data format as tensor1\n      CALL dbcsr_t_create(tensor1, tensor2_tmp)\n\n      CALL dbcsr_t_reserve_blocks(tensor1, tensor2_tmp)\n      CALL dbcsr_t_copy(tensor2, tensor2_tmp)\n\n      dbcsr_t_equal = .TRUE.\n\n      CALL dbcsr_t_iterator_start(iter, tensor1)\n\n      DO WHILE (dbcsr_t_iterator_blocks_left(iter))\n         CALL dbcsr_t_iterator_next_block(iter, ind_nd, blk, blk_size=blk_size)\n         CALL dbcsr_t_get_block(tensor1, ind_nd, blk_data1, found)\n         DBCSR_ASSERT(found)\n         CALL dbcsr_t_get_block(tensor2_tmp, ind_nd, blk_data2, found)\n         DBCSR_ASSERT(found)\n\n         IF (.NOT. blocks_equal(blk_data1, blk_data2)) THEN\n            dbcsr_t_equal = .FALSE.\n         END IF\n      END DO\n\n      CALL dbcsr_t_iterator_stop(iter)\n\n      CALL dbcsr_t_destroy(tensor2_tmp)\n   END FUNCTION\n\n   PURE FUNCTION blocks_equal(block1, block2)\n      !! check if two blocks are equal\n      TYPE(block_nd), INTENT(IN) :: block1, block2\n      LOGICAL                    :: blocks_equal\n\n      SELECT CASE (block1%data_type)\n         #:for dprec, dparam, dtype, dsuffix in dtype_float_list_prec\n            CASE (${dparam}$)\n            blocks_equal = MAXVAL(ABS(block1%${dsuffix}$%blk - block2%${dsuffix}$%blk)) .LT. 1.0E-12_${dprec}$\n         #:endfor\n      END SELECT\n\n   END FUNCTION\n\n   PURE FUNCTION factorial(n)\n      !! Compute factorial\n      INTEGER, INTENT(IN) :: n\n      INTEGER             :: k\n      INTEGER             :: factorial\n      factorial = PRODUCT((/(k, k=1, n)/))\n   END FUNCTION\n\n   SUBROUTINE permute(n, p)\n      !! Compute all permutations p of (1, 2, ..., n)\n      INTEGER, INTENT(IN)                              :: n\n      INTEGER                                          :: i, c\n      INTEGER, DIMENSION(n)                            :: pp\n      INTEGER, DIMENSION(n, factorial(n)), INTENT(OUT) :: p\n\n      pp = [(i, i=1, n)]\n      c = 1\n      CALL perm(1)\n   CONTAINS\n      RECURSIVE SUBROUTINE perm(i)\n         INTEGER, INTENT(IN) :: i\n         INTEGER :: j, t\n         IF (i == n) THEN\n            p(:, c) = pp(:)\n            c = c + 1\n         ELSE\n            DO j = i, n\n               t = pp(i)\n               pp(i) = pp(j)\n               pp(j) = t\n               call perm(i + 1)\n               t = pp(i)\n               pp(i) = pp(j)\n               pp(j) = t\n            END DO\n         END IF\n      END SUBROUTINE\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_test_formats(ndims, mp_comm, unit_nr, verbose, &\n                                   ${varlist(\"blk_size\")}$, &\n                                   ${varlist(\"blk_ind\")}$)\n      !! Test equivalence of all tensor formats, using a random distribution.\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist(\"blk_size\")}$\n         !! block sizes along respective dimension\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: ${varlist(\"blk_ind\")}$\n         !! index along respective dimension of non-zero blocks\n      INTEGER, INTENT(IN)                         :: ndims\n         !! tensor rank\n      INTEGER, INTENT(IN)                         :: unit_nr\n         !! output unit, needs to be a valid unit number on all mpi ranks\n      LOGICAL, INTENT(IN)                         :: verbose\n         !! if .TRUE., print all tensor blocks\n      TYPE(mp_comm_type), INTENT(IN)              :: mp_comm\n      TYPE(dbcsr_t_distribution_type)             :: dist1, dist2\n      TYPE(dbcsr_t_type)                          :: tensor1, tensor2\n      INTEGER                                     :: isep, iblk\n      INTEGER, DIMENSION(:), ALLOCATABLE          :: ${varlist(\"dist1\")}$, &\n                                                     ${varlist(\"dist2\")}$\n      INTEGER                                     :: nblks, imap\n      INTEGER, DIMENSION(ndims)                   :: pdims, myploc\n      LOGICAL                                     :: eql\n      INTEGER                                     :: iperm, idist, icount\n      INTEGER, DIMENSION(:), ALLOCATABLE          :: map1, map2, map1_ref, map2_ref\n      INTEGER, DIMENSION(ndims, factorial(ndims)) :: perm\n      INTEGER                                     :: io_unit\n      INTEGER                                     :: mynode, numnodes\n      TYPE(dbcsr_t_pgrid_type)                    :: comm_nd\n      CHARACTER(LEN=default_string_length)        :: tensor_name\n\n      ! Process grid\n      pdims(:) = 0\n      CALL dbcsr_t_pgrid_create(mp_comm, pdims, comm_nd)\n      CALL mp_environ(numnodes, mynode, mp_comm)\n\n      io_unit = 0\n      IF (mynode .EQ. 0) io_unit = unit_nr\n\n      CALL permute(ndims, perm)\n      CALL allocate_any(map1_ref, source=perm(1:ndims/2, 1))\n      CALL allocate_any(map2_ref, source=perm(ndims/2 + 1:ndims, 1))\n\n      IF (io_unit > 0) THEN\n         WRITE (io_unit, *)\n         WRITE (io_unit, '(A)') repeat(\"-\", 80)\n         WRITE (io_unit, '(A,1X,I1)') \"Testing matrix representations of tensor rank\", ndims\n         WRITE (io_unit, '(A)') repeat(\"-\", 80)\n         WRITE (io_unit, '(A)') \"Block sizes:\"\n\n         #:for dim in range(1, maxdim+1)\n            IF (ndims >= ${dim}$) THEN\n               WRITE (io_unit, '(T4,A,1X,I1,A,1X)', advance='no') 'Dim', ${dim}$, ':'\n               DO iblk = 1, SIZE(blk_size_${dim}$)\n                  WRITE (io_unit, '(I2,1X)', advance='no') blk_size_${dim}$ (iblk)\n               END DO\n               WRITE (io_unit, *)\n            END IF\n         #:endfor\n\n         WRITE (io_unit, '(A)') \"Non-zero blocks:\"\n         DO iblk = 1, SIZE(blk_ind_1)\n            #:for ndim in ndims\n               IF (ndims == ${ndim}$) THEN\n                  WRITE (io_unit, '(T4,A, I3, A, ${ndim}$I3, 1X, A)') &\n                     'Block', iblk, ': (', ${varlist(\"blk_ind\", nmax=ndim, suffix='(iblk)')}$, ')'\n               END IF\n            #:endfor\n         END DO\n\n         WRITE (io_unit, *)\n         WRITE (io_unit, '(A,1X)', advance='no') \"Reference map:\"\n         WRITE (io_unit, '(A1,1X)', advance='no') \"(\"\n         DO imap = 1, SIZE(map1_ref)\n            WRITE (io_unit, '(I1,1X)', advance='no') map1_ref(imap)\n         END DO\n         WRITE (io_unit, '(A1,1X)', advance='no') \"|\"\n         DO imap = 1, SIZE(map2_ref)\n            WRITE (io_unit, '(I1,1X)', advance='no') map2_ref(imap)\n         END DO\n         WRITE (io_unit, '(A1)') \")\"\n\n      END IF\n\n      icount = 0\n      DO iperm = 1, factorial(ndims)\n         DO isep = 1, ndims - 1\n            icount = icount + 1\n\n            CALL allocate_any(map1, source=perm(1:isep, iperm))\n            CALL allocate_any(map2, source=perm(isep + 1:ndims, iperm))\n\n            CALL mp_environ(numnodes, mynode, mp_comm)\n            CALL mp_environ_pgrid(comm_nd, pdims, myploc)\n\n            #:for dim in range(1, maxdim+1)\n               IF (${dim}$ <= ndims) THEN\n                  nblks = SIZE(blk_size_${dim}$)\n                  ALLOCATE (dist1_${dim}$ (nblks))\n                  ALLOCATE (dist2_${dim}$ (nblks))\n                  CALL dbcsr_t_default_distvec(nblks, pdims(${dim}$), blk_size_${dim}$, dist1_${dim}$)\n                  CALL dbcsr_t_default_distvec(nblks, pdims(${dim}$), blk_size_${dim}$, dist2_${dim}$)\n               END IF\n            #:endfor\n\n            WRITE (tensor_name, '(A,1X,I3,1X)') \"Test\", icount\n\n            IF (io_unit > 0) THEN\n               WRITE (io_unit, *)\n               WRITE (io_unit, '(A,A,1X)', advance='no') TRIM(tensor_name), ':'\n               WRITE (io_unit, '(A1,1X)', advance='no') \"(\"\n               DO imap = 1, SIZE(map1)\n                  WRITE (io_unit, '(I1,1X)', advance='no') map1(imap)\n               END DO\n               WRITE (io_unit, '(A1,1X)', advance='no') \"|\"\n               DO imap = 1, SIZE(map2)\n                  WRITE (io_unit, '(I1,1X)', advance='no') map2(imap)\n               END DO\n               WRITE (io_unit, '(A1)') \")\"\n\n               WRITE (io_unit, '(T4,A)') \"Reference distribution:\"\n               #:for dim in range(1, maxdim+1)\n                  IF (${dim}$ <= ndims) THEN\n                     WRITE (io_unit, '(T7,A,1X)', advance='no') \"Dist vec ${dim}$:\"\n                     DO idist = 1, SIZE(dist2_${dim}$)\n                        WRITE (io_unit, '(I2,1X)', advance='no') dist2_${dim}$ (idist)\n                     END DO\n                     WRITE (io_unit, *)\n                  END IF\n               #:endfor\n\n               WRITE (io_unit, '(T4,A)') \"Test distribution:\"\n               #:for dim in range(1, maxdim+1)\n                  IF (${dim}$ <= ndims) THEN\n                     WRITE (io_unit, '(T7,A,1X)', advance='no') \"Dist vec ${dim}$:\"\n                     DO idist = 1, SIZE(dist2_${dim}$)\n                        WRITE (io_unit, '(I2,1X)', advance='no') dist1_${dim}$ (idist)\n                     END DO\n                     WRITE (io_unit, *)\n                  END IF\n               #:endfor\n            END IF\n\n            #:for ndim in ndims\n               IF (ndims == ${ndim}$) THEN\n                  CALL dbcsr_t_distribution_new(dist2, comm_nd, ${varlist(\"dist2\", nmax=ndim)}$)\n                  CALL dbcsr_t_create(tensor2, \"Ref\", dist2, map1_ref, map2_ref, &\n                                      dbcsr_type_real_8, ${varlist(\"blk_size\", nmax=ndim)}$)\n                  CALL dbcsr_t_setup_test_tensor(tensor2, comm_nd%mp_comm_2d, .TRUE., ${varlist(\"blk_ind\", nmax=ndim)}$)\n               END IF\n            #:endfor\n\n            IF (verbose) CALL dbcsr_t_write_blocks(tensor2, io_unit, unit_nr)\n\n            #:for ndim in ndims\n               IF (ndims == ${ndim}$) THEN\n                  CALL dbcsr_t_distribution_new(dist1, comm_nd, ${varlist(\"dist1\", nmax=ndim)}$)\n                  CALL dbcsr_t_create(tensor1, tensor_name, dist1, map1, map2, &\n                                      dbcsr_type_real_8, ${varlist(\"blk_size\", nmax=ndim)}$)\n                  CALL dbcsr_t_setup_test_tensor(tensor1, comm_nd%mp_comm_2d, .TRUE., ${varlist(\"blk_ind\", nmax=ndim)}$)\n               END IF\n            #:endfor\n\n            IF (verbose) CALL dbcsr_t_write_blocks(tensor1, io_unit, unit_nr)\n\n            eql = dbcsr_t_equal(tensor1, tensor2)\n\n            IF (.NOT. eql) THEN\n               IF (io_unit > 0) WRITE (io_unit, '(A,1X,A)') TRIM(tensor_name), 'Test failed!'\n               DBCSR_ABORT('')\n            ELSE\n               IF (io_unit > 0) WRITE (io_unit, '(A,1X,A)') TRIM(tensor_name), 'Test passed!'\n            END IF\n            DEALLOCATE (map1, map2)\n\n            CALL dbcsr_t_destroy(tensor1)\n            CALL dbcsr_t_distribution_destroy(dist1)\n\n            CALL dbcsr_t_destroy(tensor2)\n            CALL dbcsr_t_distribution_destroy(dist2)\n\n            #:for dim in range(1, maxdim+1)\n               IF (${dim}$ <= ndims) THEN\n                  DEALLOCATE (dist1_${dim}$, dist2_${dim}$)\n               END IF\n            #:endfor\n\n         END DO\n      END DO\n      CALL dbcsr_t_pgrid_destroy(comm_nd)\n   END SUBROUTINE\n\n   SUBROUTINE dbcsr_t_setup_test_tensor(tensor, mp_comm, enumerate, ${varlist(\"blk_ind\")}$)\n      !! Allocate and fill test tensor - entries are enumerated by their index s.t. they only depend\n      !! on global properties of the tensor but not on distribution, matrix representation, etc.\n      TYPE(dbcsr_t_type), INTENT(INOUT)                  :: tensor\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_comm\n         !! communicator\n      LOGICAL, INTENT(IN)                                :: enumerate\n      INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL        :: ${varlist(\"blk_ind\")}$\n         !! index along respective dimension of non-zero blocks\n      INTEGER                                            :: blk, numnodes, mynode\n\n      INTEGER                                            :: i, ib, my_nblks_alloc, nblks_alloc, proc, nze\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: ${varlist(\"my_blk_ind\")}$\n      INTEGER, DIMENSION(ndims_tensor(tensor))          :: blk_index, blk_offset, blk_size, &\n                                                           tensor_dims\n      INTEGER, DIMENSION(:, :), ALLOCATABLE               :: ind_nd\n      #:for ndim in ndims\n         REAL(KIND=real_8), ALLOCATABLE, &\n            DIMENSION(${shape_colon(ndim)}$)                :: blk_values_${ndim}$\n      #:endfor\n      TYPE(dbcsr_t_iterator_type)                        :: iterator\n      INTEGER, DIMENSION(4)                              :: iseed\n      INTEGER, DIMENSION(2)                              :: blk_index_2d, nblks_2d\n\n      nblks_alloc = SIZE(blk_ind_1)\n      CALL mp_environ(numnodes, mynode, mp_comm)\n\n      IF (.NOT. enumerate) THEN\n         DBCSR_ASSERT(randmat_counter .NE. 0)\n\n         randmat_counter = randmat_counter + 1\n      END IF\n\n      ALLOCATE (ind_nd(nblks_alloc, ndims_tensor(tensor)))\n      my_nblks_alloc = 0\n      DO ib = 1, nblks_alloc\n         #:for ndim in ndims\n            IF (ndims_tensor(tensor) == ${ndim}$) THEN\n               ind_nd(ib, :) = [${varlist(\"blk_ind\", nmax=ndim, suffix=\"(ib)\")}$]\n            END IF\n         #:endfor\n         CALL dbcsr_t_get_stored_coordinates(tensor, ind_nd(ib, :), proc)\n         IF (proc == mynode) THEN\n            my_nblks_alloc = my_nblks_alloc + 1\n         END IF\n      END DO\n\n      #:for dim in range(1, maxdim+1)\n         IF (ndims_tensor(tensor) >= ${dim}$) THEN\n            ALLOCATE (my_blk_ind_${dim}$ (my_nblks_alloc))\n         END IF\n      #:endfor\n\n      i = 0\n      DO ib = 1, nblks_alloc\n         CALL dbcsr_t_get_stored_coordinates(tensor, ind_nd(ib, :), proc)\n         IF (proc == mynode) THEN\n            i = i + 1\n            #:for dim in range(1, maxdim+1)\n               IF (ndims_tensor(tensor) >= ${dim}$) THEN\n                  my_blk_ind_${dim}$ (i) = blk_ind_${dim}$ (ib)\n               END IF\n            #:endfor\n         END IF\n      END DO\n\n      #:for ndim in ndims\n         IF (ndims_tensor(tensor) == ${ndim}$) THEN\n            CALL dbcsr_t_reserve_blocks(tensor, ${varlist(\"my_blk_ind\", nmax=ndim)}$)\n         END IF\n      #:endfor\n\n      CALL dbcsr_t_iterator_start(iterator, tensor)\n      DO WHILE (dbcsr_t_iterator_blocks_left(iterator))\n         CALL dbcsr_t_iterator_next_block(iterator, blk_index, blk, blk_size=blk_size, blk_offset=blk_offset)\n\n         IF (.NOT. enumerate) THEN\n            blk_index_2d = INT(get_2d_indices_tensor(tensor%nd_index_blk, blk_index))\n            CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, dims_2d=nblks_2d)\n            CALL set_larnv_seed(blk_index_2d(1), nblks_2d(1), blk_index_2d(2), nblks_2d(2), randmat_counter, iseed)\n            nze = PRODUCT(blk_size)\n         END IF\n\n         #:for ndim in ndims\n            IF (ndims_tensor(tensor) == ${ndim}$) THEN\n               CALL allocate_any(blk_values_${ndim}$, shape_spec=blk_size)\n               CALL dims_tensor(tensor, tensor_dims)\n               IF (enumerate) THEN\n                  CALL enumerate_block_elements(blk_size, blk_offset, tensor_dims, blk_${ndim}$=blk_values_${ndim}$)\n               ELSE\n                  CALL dlarnv(1, iseed, nze, blk_values_${ndim}$)\n               END IF\n               CALL dbcsr_t_put_block(tensor, blk_index, blk_size, blk_values_${ndim}$)\n               DEALLOCATE (blk_values_${ndim}$)\n            END IF\n         #:endfor\n      END DO\n      CALL dbcsr_t_iterator_stop(iterator)\n\n   END SUBROUTINE\n\n   SUBROUTINE enumerate_block_elements(blk_size, blk_offset, tensor_size, ${varlist(\"blk\", nmin=2)}$)\n      !! Enumerate tensor entries in block\n      !! \\blk_2 block values for 2 dimensions\n      !! \\blk_3 block values for 3 dimensions\n\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: blk_size, blk_offset, tensor_size\n         !! size of block\n         !! block offset (indices of first element)\n         !! global tensor sizes\n      #:for ndim in ndims\n         REAL(KIND=real_8), DIMENSION(${shape_colon(ndim)}$), &\n            OPTIONAL, INTENT(OUT)                           :: blk_${ndim}$\n      #:endfor\n      INTEGER                                            :: ndim\n      INTEGER, DIMENSION(SIZE(blk_size))                 :: arr_ind, tens_ind\n      INTEGER                                            :: ${varlist(\"i\")}$\n\n      ndim = SIZE(tensor_size)\n\n      #:for ndim in ndims\n         IF (ndim == ${ndim}$) THEN\n            #:for idim in range(ndim,0,-1)\n               DO i_${idim}$ = 1, blk_size(${idim}$)\n                  #:endfor\n                  arr_ind(:) = [${varlist(\"i\", nmax=ndim)}$]\n                  tens_ind(:) = arr_ind(:) + blk_offset(:) - 1\n                  blk_${ndim}$ (${arrlist(\"arr_ind\", nmax=ndim)}$) = combine_tensor_index(tens_ind, tensor_size)\n                  #:for idim in range(ndim,0,-1)\n                     END DO\n                  #:endfor\n               END IF\n            #:endfor\n\n         END SUBROUTINE\n\n         #:for dprec, dparam, dtype, dsuffix in [dtype_float_list_prec[0]]\n            #:for ndim in ndims\n               SUBROUTINE dist_sparse_tensor_to_repl_dense_${ndim}$d_array_${dsuffix}$ (tensor, array)\n      !! Transform a distributed sparse tensor to a replicated dense array. This is only useful for\n      !! testing tensor contraction by matrix multiplication of dense arrays.\n\n                  TYPE(dbcsr_t_type), INTENT(INOUT)                          :: tensor\n                  ${dtype}$, ALLOCATABLE, DIMENSION(${shape_colon(ndim)}$), &\n                     INTENT(OUT)                                             :: array\n                  ${dtype}$, ALLOCATABLE, DIMENSION(${shape_colon(ndim)}$)   :: block\n                  INTEGER, DIMENSION(ndims_tensor(tensor))                  :: dims_nd, ind_nd, blk_size, blk_offset\n                  TYPE(dbcsr_t_iterator_type)                                     :: iterator\n                  INTEGER                                                    :: blk, idim\n                  INTEGER, DIMENSION(ndims_tensor(tensor))                  :: blk_start, blk_end\n                  LOGICAL                                                    :: found\n\n                  DBCSR_ASSERT(ndims_tensor(tensor) .EQ. ${ndim}$)\n                  CALL dbcsr_t_get_info(tensor, nfull_total=dims_nd)\n                  CALL allocate_any(array, shape_spec=dims_nd)\n                  array(${shape_colon(ndim)}$) = 0.0_${dprec}$\n\n                  CALL dbcsr_t_iterator_start(iterator, tensor)\n                  DO WHILE (dbcsr_t_iterator_blocks_left(iterator))\n                     CALL dbcsr_t_iterator_next_block(iterator, ind_nd, blk, blk_size=blk_size, blk_offset=blk_offset)\n                     CALL dbcsr_t_get_block(tensor, ind_nd, block, found)\n                     DBCSR_ASSERT(found)\n\n                     DO idim = 1, ndims_tensor(tensor)\n                        blk_start(idim) = blk_offset(idim)\n                        blk_end(idim) = blk_offset(idim) + blk_size(idim) - 1\n                     END DO\n                     array(${\", \".join([\"blk_start(\"+str(idim)+\"):blk_end(\"+str(idim)+\")\" for idim in range(1, ndim + 1)])}$) = &\n                        block(${shape_colon(ndim)}$)\n\n                     DEALLOCATE (block)\n                  END DO\n                  CALL dbcsr_t_iterator_stop(iterator)\n                  CALL mp_sum(array, tensor%pgrid%mp_comm_2d)\n\n               END SUBROUTINE\n            #:endfor\n         #:endfor\n\n         SUBROUTINE dbcsr_t_contract_test(alpha, tensor_1, tensor_2, beta, tensor_3, &\n                                          contract_1, notcontract_1, &\n                                          contract_2, notcontract_2, &\n                                          map_1, map_2, &\n                                          unit_nr, &\n                                          bounds_1, bounds_2, bounds_3, &\n                                          log_verbose, write_int)\n      !! test tensor contraction\n      !! @note\n      !! for testing/debugging, simply replace a call to dbcsr_t_contract with a call to this routine\n      !! @endnote\n\n            TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha\n            TYPE(dbcsr_t_type), INTENT(INOUT)    :: tensor_1, tensor_2, tensor_3\n            TYPE(dbcsr_scalar_type), INTENT(IN) :: beta\n            INTEGER, DIMENSION(:), INTENT(IN)    :: contract_1, contract_2, &\n                                                    notcontract_1, notcontract_2, &\n                                                    map_1, map_2\n            INTEGER, INTENT(IN)                  :: unit_nr\n            INTEGER, DIMENSION(2, SIZE(contract_1)), &\n               OPTIONAL                          :: bounds_1\n            INTEGER, DIMENSION(2, SIZE(notcontract_1)), &\n               OPTIONAL                          :: bounds_2\n            INTEGER, DIMENSION(2, SIZE(notcontract_2)), &\n               OPTIONAL                          :: bounds_3\n            LOGICAL, INTENT(IN), OPTIONAL        :: log_verbose\n            LOGICAL, INTENT(IN), OPTIONAL        :: write_int\n            INTEGER                              :: io_unit, mynode, numnodes\n            INTEGER, DIMENSION(:), ALLOCATABLE   :: size_1, size_2, size_3, &\n                                                    order_t1, order_t2, order_t3\n            INTEGER, DIMENSION(2, ndims_tensor(tensor_1)) :: bounds_t1\n            INTEGER, DIMENSION(2, ndims_tensor(tensor_2)) :: bounds_t2\n            TYPE(mp_comm_type)                   :: mp_comm\n\n            #:for ndim in ndims\n               REAL(KIND=real_8), ALLOCATABLE, &\n                  DIMENSION(${shape_colon(ndim)}$) :: array_1_${ndim}$d, &\n                                                      array_2_${ndim}$d, &\n                                                      array_3_${ndim}$d, &\n                                                      array_1_${ndim}$d_full, &\n                                                      array_2_${ndim}$d_full, &\n                                                      array_3_0_${ndim}$d, &\n                                                      array_1_rs${ndim}$d, &\n                                                      array_2_rs${ndim}$d, &\n                                                      array_3_rs${ndim}$d, &\n                                                      array_3_0_rs${ndim}$d\n            #:endfor\n            REAL(KIND=real_8), ALLOCATABLE, &\n               DIMENSION(:, :)                   :: array_1_mm, &\n                                                    array_2_mm, &\n                                                    array_3_mm, &\n                                                    array_3_test_mm\n            LOGICAL                             :: eql, notzero\n            LOGICAL, PARAMETER                  :: debug = .FALSE.\n            REAL(KIND=real_8)                   :: cs_1, cs_2, cs_3, eql_diff\n            LOGICAL                             :: do_crop_1, do_crop_2\n\n            mp_comm = tensor_1%pgrid%mp_comm_2d\n            CALL mp_environ(numnodes, mynode, mp_comm)\n            io_unit = -1\n            IF (mynode .EQ. 0) io_unit = unit_nr\n\n            cs_1 = dbcsr_t_checksum(tensor_1)\n            cs_2 = dbcsr_t_checksum(tensor_2)\n            cs_3 = dbcsr_t_checksum(tensor_3)\n\n            IF (io_unit > 0) THEN\n               WRITE (io_unit, *)\n               WRITE (io_unit, '(A)') repeat(\"-\", 80)\n               WRITE (io_unit, '(A,1X,A,1X,A,1X,A,1X,A,1X,A)') \"Testing tensor contraction\", &\n                  TRIM(tensor_1%name), \"x\", TRIM(tensor_2%name), \"=\", TRIM(tensor_3%name)\n               WRITE (io_unit, '(A)') repeat(\"-\", 80)\n            END IF\n\n            IF (debug) THEN\n               IF (io_unit > 0) THEN\n                  WRITE (io_unit, \"(A, E9.2)\") \"checksum \", TRIM(tensor_1%name), cs_1\n                  WRITE (io_unit, \"(A, E9.2)\") \"checksum \", TRIM(tensor_2%name), cs_2\n                  WRITE (io_unit, \"(A, E9.2)\") \"checksum \", TRIM(tensor_3%name), cs_3\n               END IF\n            END IF\n\n            IF (debug) THEN\n               CALL dbcsr_t_write_block_indices(tensor_1, io_unit, unit_nr)\n               CALL dbcsr_t_write_blocks(tensor_1, io_unit, unit_nr, write_int)\n            END IF\n\n            SELECT CASE (ndims_tensor(tensor_3))\n               #:for ndim in ndims\n                  CASE (${ndim}$)\n                  CALL dist_sparse_tensor_to_repl_dense_array(tensor_3, array_3_0_${ndim}$d)\n               #:endfor\n            END SELECT\n\n            CALL dbcsr_t_contract(alpha, tensor_1, tensor_2, beta, tensor_3, &\n                                  contract_1, notcontract_1, &\n                                  contract_2, notcontract_2, &\n                                  map_1, map_2, &\n                                  bounds_1=bounds_1, bounds_2=bounds_2, bounds_3=bounds_3, &\n                                  filter_eps=1.0E-12_real_8, &\n                                  unit_nr=io_unit, log_verbose=log_verbose)\n\n            cs_3 = dbcsr_t_checksum(tensor_3)\n\n            IF (debug) THEN\n               IF (io_unit > 0) THEN\n                  WRITE (io_unit, \"(A, E9.2)\") \"checksum \", TRIM(tensor_3%name), cs_3\n               END IF\n            END IF\n\n            do_crop_1 = .FALSE.; do_crop_2 = .FALSE.!; do_crop_3 = .FALSE.\n\n            ! crop tensor as first step\n            bounds_t1(1, :) = 1\n            CALL dbcsr_t_get_info(tensor_1, nfull_total=bounds_t1(2, :))\n\n            bounds_t2(1, :) = 1\n            CALL dbcsr_t_get_info(tensor_2, nfull_total=bounds_t2(2, :))\n\n            IF (PRESENT(bounds_1)) THEN\n               bounds_t1(:, contract_1) = bounds_1\n               do_crop_1 = .TRUE.\n               bounds_t2(:, contract_2) = bounds_1\n               do_crop_2 = .TRUE.\n            END IF\n\n            IF (PRESENT(bounds_2)) THEN\n               bounds_t1(:, notcontract_1) = bounds_2\n               do_crop_1 = .TRUE.\n            END IF\n\n            IF (PRESENT(bounds_3)) THEN\n               bounds_t2(:, notcontract_2) = bounds_3\n               do_crop_2 = .TRUE.\n            END IF\n\n            ! Convert tensors to simple multidimensional arrays\n            #:for i in range(1,4)\n               SELECT CASE (ndims_tensor(tensor_${i}$))\n                  #:for ndim in ndims\n                     CASE (${ndim}$)\n                     #:if i < 3\n                        CALL dist_sparse_tensor_to_repl_dense_array(tensor_${i}$, array_${i}$_${ndim}$d_full)\n                        CALL allocate_any(array_${i}$_${ndim}$d, shape_spec=SHAPE(array_${i}$_${ndim}$d_full))\n                        array_${i}$_${ndim}$d = 0.0_real_8\n         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)])}$) = &\n         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)])}$)\n                     #:else\n                        CALL dist_sparse_tensor_to_repl_dense_array(tensor_${i}$, array_${i}$_${ndim}$d)\n                     #:endif\n\n                  #:endfor\n               END SELECT\n            #:endfor\n\n            ! Get array sizes\n\n            #:for i in range(1,4)\n               SELECT CASE (ndims_tensor(tensor_${i}$))\n                  #:for ndim in ndims\n                     CASE (${ndim}$)\n                     CALL allocate_any(size_${i}$, source=SHAPE(array_${i}$_${ndim}$d))\n\n                  #:endfor\n               END SELECT\n            #:endfor\n\n            #:for i in range(1,4)\n               ALLOCATE (order_t${i}$ (ndims_tensor(tensor_${i}$)))\n            #:endfor\n\n            ASSOCIATE (map_t1_1 => notcontract_1, map_t1_2 => contract_1, &\n                       map_t2_1 => notcontract_2, map_t2_2 => contract_2, &\n                       map_t3_1 => map_1, map_t3_2 => map_2)\n\n               #:for i in range(1,4)\n                  order_t${i}$ (:) = dbcsr_t_inverse_order([map_t${i}$_1, map_t${i}$_2])\n\n                  SELECT CASE (ndims_tensor(tensor_${i}$))\n                     #:for ndim in ndims\n                        CASE (${ndim}$)\n                        CALL allocate_any(array_${i}$_rs${ndim}$d, source=array_${i}$_${ndim}$d, order=order_t${i}$)\n                        CALL allocate_any(array_${i}$_mm, sizes_2d(size_${i}$, map_t${i}$_1, map_t${i}$_2))\n                        array_${i}$_mm(:, :) = RESHAPE(array_${i}$_rs${ndim}$d, SHAPE(array_${i}$_mm))\n                     #:endfor\n                  END SELECT\n               #:endfor\n\n               SELECT CASE (ndims_tensor(tensor_3))\n                  #:for ndim in ndims\n                     CASE (${ndim}$)\n                     CALL allocate_any(array_3_0_rs${ndim}$d, source=array_3_0_${ndim}$d, order=order_t3)\n                     CALL allocate_any(array_3_test_mm, sizes_2d(size_3, map_t3_1, map_t3_2))\n                     array_3_test_mm(:, :) = RESHAPE(array_3_0_rs${ndim}$d, SHAPE(array_3_mm))\n                  #:endfor\n               END SELECT\n\n               array_3_test_mm(:, :) = beta%r_dp*array_3_test_mm(:, :) + alpha%r_dp*MATMUL(array_1_mm, transpose(array_2_mm))\n\n            END ASSOCIATE\n\n            eql_diff = MAXVAL(ABS(array_3_test_mm(:, :) - array_3_mm(:, :)))\n            notzero = MAXVAL(ABS(array_3_test_mm(:, :))) .GT. 1.0E-12_${dprec}$\n\n            eql = eql_diff .LT. 1.0E-11_${dprec}$\n\n            IF (.NOT. eql .OR. .NOT. notzero) THEN\n               IF (io_unit > 0) WRITE (io_unit, *) 'Test failed!', eql_diff\n               DBCSR_ABORT('')\n            ELSE\n               IF (io_unit > 0) WRITE (io_unit, *) 'Test passed!', eql_diff\n            END IF\n\n         END SUBROUTINE\n\n         FUNCTION sizes_2d(nd_sizes, map1, map2)\n      !! mapped sizes in 2d\n            INTEGER, DIMENSION(:), INTENT(IN) :: nd_sizes, map1, map2\n            INTEGER, DIMENSION(2)             :: sizes_2d\n            sizes_2d(1) = PRODUCT(nd_sizes(map1))\n            sizes_2d(2) = PRODUCT(nd_sizes(map2))\n         END FUNCTION\n\n         FUNCTION dbcsr_t_checksum(tensor, local, pos)\n      !! checksum of a tensor consistent with dbcsr_checksum\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            REAL(KIND=real_8) :: dbcsr_t_checksum\n            LOGICAL, INTENT(IN), OPTIONAL     :: local, pos\n            dbcsr_t_checksum = dbcsr_tas_checksum(tensor%matrix_rep, local, pos)\n         END FUNCTION\n\n         SUBROUTINE dbcsr_t_reset_randmat_seed()\n      !! Reset the seed used for generating random matrices to default value\n            randmat_counter = rand_seed_init\n         END SUBROUTINE\n\n      END MODULE\n"
  },
  {
    "path": "src/tensors/dbcsr_tensor_types.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_tensor_types\n   !! DBCSR tensor framework for block-sparse tensor contraction: Types and create/destroy\n   !! routines.\n\n   #:include \"dbcsr_tensor.fypp\"\n   #:set maxdim = maxrank\n   #:set ndims = range(2,maxdim+1)\n\n   USE dbcsr_array_list_methods, ONLY: &\n      array_list, array_offsets, create_array_list, destroy_array_list, get_array_elements, &\n      sizes_of_arrays, sum_of_arrays, array_sublist, get_arrays, get_ith_array, array_eq_i\n   USE dbcsr_api, ONLY: &\n      dbcsr_distribution_get, dbcsr_distribution_type, dbcsr_get_info, dbcsr_type, &\n      ${uselist(dtype_float_param)}$\n   USE dbcsr_kinds, ONLY: &\n      ${uselist(dtype_float_prec)}$, &\n      default_string_length\n   USE dbcsr_tas_base, ONLY: &\n      dbcsr_tas_create, dbcsr_tas_distribution_new, &\n      dbcsr_tas_distribution_destroy, dbcsr_tas_finalize, dbcsr_tas_get_info, &\n      dbcsr_tas_destroy, dbcsr_tas_get_stored_coordinates, dbcsr_tas_set, dbcsr_tas_filter, &\n      dbcsr_tas_get_num_blocks, dbcsr_tas_get_num_blocks_total, dbcsr_tas_get_data_size, dbcsr_tas_get_nze, &\n      dbcsr_tas_get_nze_total, dbcsr_tas_clear, dbcsr_tas_get_data_type\n   USE dbcsr_tas_types, ONLY: &\n      dbcsr_tas_type, dbcsr_tas_distribution_type, dbcsr_tas_split_info, dbcsr_tas_mm_storage\n   USE dbcsr_tas_mm, ONLY: dbcsr_tas_set_batched_state\n   USE dbcsr_tensor_index, ONLY: &\n      get_2d_indices_tensor, get_nd_indices_pgrid, create_nd_to_2d_mapping, destroy_nd_to_2d_mapping, &\n      dbcsr_t_get_mapping_info, nd_to_2d_mapping, split_tensor_index, combine_tensor_index, combine_pgrid_index, &\n      split_pgrid_index, ndims_mapping, ndims_mapping_row, ndims_mapping_column\n   USE dbcsr_tas_split, ONLY: &\n      dbcsr_tas_release_info, dbcsr_tas_info_hold, &\n      dbcsr_tas_create_split, dbcsr_tas_get_split_info, dbcsr_tas_set_strict_split\n   USE dbcsr_kinds, ONLY: default_string_length, int_8, dp\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_cart_create, mp_environ, mp_dims_create, mp_comm_free, mp_comm_type\n   USE dbcsr_tas_global, ONLY: dbcsr_tas_distribution, dbcsr_tas_rowcol_data, dbcsr_tas_default_distvec\n   USE dbcsr_allocate_wrap, ONLY: allocate_any\n   USE dbcsr_data_types, ONLY: dbcsr_scalar_type\n   USE dbcsr_operations, ONLY: dbcsr_scale\n   USE dbcsr_toollib, ONLY: sort\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_tensor_types'\n\n   PUBLIC  :: &\n      blk_dims_tensor, &\n      dbcsr_t_blk_offsets, &\n      dbcsr_t_blk_sizes, &\n      dbcsr_t_clear, &\n      dbcsr_t_create, &\n      dbcsr_t_destroy, &\n      dbcsr_t_distribution, &\n      dbcsr_t_distribution_destroy, &\n      dbcsr_t_distribution_new, &\n      dbcsr_t_distribution_new_expert, &\n      dbcsr_t_distribution_type, &\n      dbcsr_t_filter, &\n      dbcsr_t_finalize, &\n      dbcsr_t_get_data_size, &\n      dbcsr_t_get_data_type, &\n      dbcsr_t_get_info, &\n      dbcsr_t_get_num_blocks, &\n      dbcsr_t_get_num_blocks_total, &\n      dbcsr_t_get_nze, &\n      dbcsr_t_get_nze_total, &\n      dbcsr_t_get_stored_coordinates, &\n      dbcsr_t_hold, &\n      dbcsr_t_mp_dims_create, &\n      dbcsr_t_nd_mp_comm, &\n      dbcsr_t_nd_mp_free, &\n      dbcsr_t_pgrid_change_dims, &\n      dbcsr_t_pgrid_create, &\n      dbcsr_t_pgrid_create_expert, &\n      dbcsr_t_pgrid_destroy, &\n      dbcsr_t_pgrid_type, &\n      dbcsr_t_pgrid_set_strict_split, &\n      dbcsr_t_scale, &\n      dbcsr_t_set, &\n      dbcsr_t_type, &\n      dims_tensor, &\n      mp_environ_pgrid, &\n      ndims_tensor, &\n      ndims_matrix_row, &\n      ndims_matrix_column, &\n      dbcsr_t_nblks_local, &\n      dbcsr_t_nblks_total, &\n      dbcsr_t_blk_size, &\n      dbcsr_t_max_nblks_local, &\n      dbcsr_t_default_distvec, &\n      dbcsr_t_contraction_storage, &\n      dbcsr_t_copy_contraction_storage\n\n   TYPE dbcsr_t_pgrid_type\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(nd_to_2d_mapping)                  :: nd_index_grid\n#else\n      TYPE(nd_to_2d_mapping)                  :: nd_index_grid = nd_to_2d_mapping()\n#endif\n      TYPE(mp_comm_type)                      :: mp_comm_2d = mp_comm_type()\n      TYPE(dbcsr_tas_split_info), ALLOCATABLE :: tas_split_info\n      INTEGER                                 :: nproc = -1\n   END TYPE\n\n   TYPE dbcsr_t_contraction_storage\n      REAL(real_8) :: nsplit_avg = -1.0_real_8\n      INTEGER :: ibatch = -1\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(array_list) :: batch_ranges\n#else\n      TYPE(array_list) :: batch_ranges = array_list()\n#endif\n      LOGICAL :: static = .FALSE.\n   END TYPE\n\n   TYPE dbcsr_t_type\n      TYPE(dbcsr_tas_type), POINTER        :: matrix_rep => NULL()\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(nd_to_2d_mapping)               :: nd_index_blk\n      TYPE(nd_to_2d_mapping)               :: nd_index\n      TYPE(array_list)                     :: blk_sizes\n      TYPE(array_list)                     :: blk_offsets\n      TYPE(array_list)                     :: nd_dist\n      TYPE(dbcsr_t_pgrid_type)             :: pgrid\n      TYPE(array_list)                     :: blks_local\n#else\n      TYPE(nd_to_2d_mapping)               :: nd_index_blk = nd_to_2d_mapping()\n      TYPE(nd_to_2d_mapping)               :: nd_index = nd_to_2d_mapping()\n      TYPE(array_list)                     :: blk_sizes = array_list()\n      TYPE(array_list)                     :: blk_offsets = array_list()\n      TYPE(array_list)                     :: nd_dist = array_list()\n      TYPE(dbcsr_t_pgrid_type)             :: pgrid = dbcsr_t_pgrid_type()\n      TYPE(array_list)                     :: blks_local = array_list()\n#endif\n      INTEGER, DIMENSION(:), ALLOCATABLE   :: nblks_local\n      INTEGER, DIMENSION(:), ALLOCATABLE   :: nfull_local\n      LOGICAL                              :: valid = .FALSE.\n      LOGICAL                              :: owns_matrix = .FALSE.\n      CHARACTER(LEN=default_string_length) :: name = \"\"\n      ! lightweight reference counting for communicators:\n      INTEGER, POINTER                     :: refcount => NULL()\n      TYPE(dbcsr_t_contraction_storage), ALLOCATABLE :: contraction_storage\n   END TYPE dbcsr_t_type\n\n   TYPE dbcsr_t_distribution_type\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(dbcsr_tas_distribution_type) :: dist\n      TYPE(dbcsr_t_pgrid_type)      :: pgrid\n      TYPE(array_list)              :: nd_dist\n#else\n      TYPE(dbcsr_tas_distribution_type) :: dist = dbcsr_tas_distribution_type()\n      TYPE(dbcsr_t_pgrid_type)      :: pgrid = dbcsr_t_pgrid_type()\n      TYPE(array_list)              :: nd_dist = array_list()\n#endif\n      ! lightweight reference counting for communicators:\n      INTEGER, POINTER :: refcount => NULL()\n   END TYPE\n\n   ! tas matrix distribution function object for one matrix index\n   TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_t\n      ! tensor dimensions only for this matrix dimension:\n      INTEGER, DIMENSION(:), ALLOCATABLE :: dims\n      ! grid dimensions only for this matrix dimension:\n      INTEGER, DIMENSION(:), ALLOCATABLE :: dims_grid\n      ! dist only for tensor dimensions belonging to this matrix dimension:\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(array_list)       :: nd_dist\n#else\n      TYPE(array_list)       :: nd_dist = array_list()\n#endif\n   CONTAINS\n      ! map matrix index to process grid:\n      PROCEDURE :: dist => tas_dist_t\n      ! map process grid to matrix index:\n      PROCEDURE :: rowcols => tas_rowcols_t\n   END TYPE\n\n   ! block size object for one matrix index\n   TYPE, EXTENDS(dbcsr_tas_rowcol_data) :: dbcsr_tas_blk_size_t\n      ! tensor dimensions only for this matrix dimension:\n      INTEGER, DIMENSION(:), ALLOCATABLE :: dims\n      ! block size only for this matrix dimension:\n#if defined(__GNUC__) && defined(__GNUC_MINOR__) && (TO_VERSION(9, 5) > TO_VERSION(__GNUC__, __GNUC_MINOR__))\n      TYPE(array_list)       :: blk_size\n#else\n      TYPE(array_list)       :: blk_size = array_list()\n#endif\n   CONTAINS\n      PROCEDURE :: data => tas_blk_size_t\n   END TYPE\n\n   INTERFACE dbcsr_t_create\n      MODULE PROCEDURE dbcsr_t_create_new\n      MODULE PROCEDURE dbcsr_t_create_template\n      MODULE PROCEDURE dbcsr_t_create_matrix\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_dist_t\n      MODULE PROCEDURE new_dbcsr_tas_dist_t\n   END INTERFACE\n\n   INTERFACE dbcsr_tas_blk_size_t\n      MODULE PROCEDURE new_dbcsr_tas_blk_size_t\n   END INTERFACE\n\n   INTERFACE dbcsr_t_set\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE dbcsr_t_set_${dsuffix}$\n      #:endfor\n   END INTERFACE\n\n   INTERFACE dbcsr_t_filter\n      #:for dparam, dtype, dsuffix in dtype_float_list\n         MODULE PROCEDURE dbcsr_t_filter_${dsuffix}$\n      #:endfor\n   END INTERFACE\n\nCONTAINS\n\n   FUNCTION new_dbcsr_tas_dist_t(nd_dist, map_blks, map_grid, which_dim)\n      !! Create distribution object for one matrix dimension\n      !! \\return distribution object\n\n      TYPE(array_list), INTENT(IN)       :: nd_dist\n         !! arrays for distribution vectors along all dimensions\n      TYPE(nd_to_2d_mapping), INTENT(IN) :: map_blks, map_grid\n         !! tensor to matrix mapping object for blocks\n         !! tensor to matrix mapping object for process grid\n      INTEGER, INTENT(IN)                :: which_dim\n         !! for which dimension (1 or 2) distribution should be created\n\n      TYPE(dbcsr_tas_dist_t)               :: new_dbcsr_tas_dist_t\n      INTEGER, DIMENSION(2)              :: grid_dims\n      INTEGER(KIND=int_8), DIMENSION(2)  :: matrix_dims\n      INTEGER, DIMENSION(:), ALLOCATABLE :: index_map\n\n      IF (which_dim == 1) THEN\n         ALLOCATE (new_dbcsr_tas_dist_t%dims(ndims_mapping_row(map_blks)))\n         ALLOCATE (index_map(ndims_mapping_row(map_blks)))\n         CALL dbcsr_t_get_mapping_info(map_blks, &\n                                       dims_2d_i8=matrix_dims, &\n                                       map1_2d=index_map, &\n                                       dims1_2d=new_dbcsr_tas_dist_t%dims)\n         ALLOCATE (new_dbcsr_tas_dist_t%dims_grid(ndims_mapping_row(map_grid)))\n         CALL dbcsr_t_get_mapping_info(map_grid, &\n                                       dims_2d=grid_dims, &\n                                       dims1_2d=new_dbcsr_tas_dist_t%dims_grid)\n      ELSEIF (which_dim == 2) THEN\n         ALLOCATE (new_dbcsr_tas_dist_t%dims(ndims_mapping_column(map_blks)))\n         ALLOCATE (index_map(ndims_mapping_column(map_blks)))\n         CALL dbcsr_t_get_mapping_info(map_blks, &\n                                       dims_2d_i8=matrix_dims, &\n                                       map2_2d=index_map, &\n                                       dims2_2d=new_dbcsr_tas_dist_t%dims)\n         ALLOCATE (new_dbcsr_tas_dist_t%dims_grid(ndims_mapping_column(map_grid)))\n         CALL dbcsr_t_get_mapping_info(map_grid, &\n                                       dims_2d=grid_dims, &\n                                       dims2_2d=new_dbcsr_tas_dist_t%dims_grid)\n      ELSE\n         DBCSR_ABORT(\"Unknown value for which_dim\")\n      END IF\n\n      new_dbcsr_tas_dist_t%nd_dist = array_sublist(nd_dist, index_map)\n      new_dbcsr_tas_dist_t%nprowcol = grid_dims(which_dim)\n      new_dbcsr_tas_dist_t%nmrowcol = matrix_dims(which_dim)\n   END FUNCTION\n\n   FUNCTION tas_dist_t(t, rowcol)\n      CLASS(dbcsr_tas_dist_t), INTENT(IN) :: t\n      INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n      INTEGER, DIMENSION(${maxrank}$) :: ind_blk\n      INTEGER, DIMENSION(${maxrank}$) :: dist_blk\n      INTEGER :: tas_dist_t\n\n      ind_blk(:SIZE(t%dims)) = split_tensor_index(rowcol, t%dims)\n      dist_blk(:SIZE(t%dims)) = get_array_elements(t%nd_dist, ind_blk(:SIZE(t%dims)))\n      tas_dist_t = combine_pgrid_index(dist_blk(:SIZE(t%dims)), t%dims_grid)\n   END FUNCTION\n\n   FUNCTION tas_rowcols_t(t, dist)\n      CLASS(dbcsr_tas_dist_t), INTENT(IN) :: t\n      INTEGER, INTENT(IN) :: dist\n      INTEGER(KIND=int_8), DIMENSION(:), ALLOCATABLE :: tas_rowcols_t\n      INTEGER, DIMENSION(${maxrank}$) :: dist_blk\n      INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist(\"dist\")}$, ${varlist(\"blks\")}$, blks_tmp, nd_ind\n      INTEGER :: ${varlist(\"i\")}$, i, iblk, iblk_count, nblks\n      INTEGER(KIND=int_8) :: nrowcols\n      TYPE(array_list) :: blks\n\n      dist_blk(:SIZE(t%dims)) = split_pgrid_index(dist, t%dims_grid)\n\n      #:for ndim in range(1, maxdim+1)\n         IF (SIZE(t%dims) == ${ndim}$) THEN\n            CALL get_arrays(t%nd_dist, ${varlist(\"dist\", nmax=ndim)}$)\n         END IF\n      #:endfor\n\n      #:for idim in range(1, maxdim+1)\n         IF (SIZE(t%dims) .GE. ${idim}$) THEN\n            nblks = SIZE(dist_${idim}$)\n            ALLOCATE (blks_tmp(nblks))\n            iblk_count = 0\n            DO iblk = 1, nblks\n               IF (dist_${idim}$ (iblk) == dist_blk(${idim}$)) THEN\n                  iblk_count = iblk_count + 1\n                  blks_tmp(iblk_count) = iblk\n               END IF\n            END DO\n            ALLOCATE (blks_${idim}$ (iblk_count))\n            blks_${idim}$ (:) = blks_tmp(:iblk_count)\n            DEALLOCATE (blks_tmp)\n         END IF\n      #:endfor\n\n      #:for ndim in range(1, maxdim+1)\n         IF (SIZE(t%dims) == ${ndim}$) THEN\n            CALL create_array_list(blks, ${ndim}$, ${varlist(\"blks\", nmax=ndim)}$)\n         END IF\n      #:endfor\n\n      nrowcols = PRODUCT(INT(sizes_of_arrays(blks), int_8))\n      ALLOCATE (tas_rowcols_t(nrowcols))\n\n      #:for ndim in range(1, maxdim+1)\n         IF (SIZE(t%dims) == ${ndim}$) THEN\n            ALLOCATE (nd_ind(${ndim}$))\n            i = 0\n            #:for idim in range(1,ndim+1)\n               DO i_${idim}$ = 1, SIZE(blks_${idim}$)\n                  #:endfor\n                  i = i + 1\n\n                  nd_ind(:) = get_array_elements(blks, [${varlist(\"i\", nmax=ndim)}$])\n                  tas_rowcols_t(i) = combine_tensor_index(nd_ind, t%dims)\n                  #:for idim in range(1,ndim+1)\n                     END DO\n                  #:endfor\n               END IF\n            #:endfor\n\n         END FUNCTION\n\n         FUNCTION new_dbcsr_tas_blk_size_t(blk_size, map_blks, which_dim)\n      !! Create block size object for one matrix dimension\n      !! \\return block size object\n\n            TYPE(array_list), INTENT(IN)                   :: blk_size\n         !! arrays for block sizes along all dimensions\n            TYPE(nd_to_2d_mapping), INTENT(IN)             :: map_blks\n         !! tensor to matrix mapping object for blocks\n            INTEGER, INTENT(IN) :: which_dim\n         !! for which dimension (1 or 2) distribution should be created\n            INTEGER(KIND=int_8), DIMENSION(2) :: matrix_dims\n            INTEGER, DIMENSION(:), ALLOCATABLE :: index_map\n            TYPE(dbcsr_tas_blk_size_t) :: new_dbcsr_tas_blk_size_t\n\n            IF (which_dim == 1) THEN\n               ALLOCATE (index_map(ndims_mapping_row(map_blks)))\n               ALLOCATE (new_dbcsr_tas_blk_size_t%dims(ndims_mapping_row(map_blks)))\n               CALL dbcsr_t_get_mapping_info(map_blks, &\n                                             dims_2d_i8=matrix_dims, &\n                                             map1_2d=index_map, &\n                                             dims1_2d=new_dbcsr_tas_blk_size_t%dims)\n            ELSEIF (which_dim == 2) THEN\n               ALLOCATE (index_map(ndims_mapping_column(map_blks)))\n               ALLOCATE (new_dbcsr_tas_blk_size_t%dims(ndims_mapping_column(map_blks)))\n               CALL dbcsr_t_get_mapping_info(map_blks, &\n                                             dims_2d_i8=matrix_dims, &\n                                             map2_2d=index_map, &\n                                             dims2_2d=new_dbcsr_tas_blk_size_t%dims)\n            ELSE\n               DBCSR_ABORT(\"Unknown value for which_dim\")\n            END IF\n\n            new_dbcsr_tas_blk_size_t%blk_size = array_sublist(blk_size, index_map)\n            new_dbcsr_tas_blk_size_t%nmrowcol = matrix_dims(which_dim)\n\n            new_dbcsr_tas_blk_size_t%nfullrowcol = PRODUCT(INT(sum_of_arrays(new_dbcsr_tas_blk_size_t%blk_size), &\n                                                               KIND=int_8))\n         END FUNCTION\n\n         FUNCTION tas_blk_size_t(t, rowcol)\n            CLASS(dbcsr_tas_blk_size_t), INTENT(IN) :: t\n            INTEGER(KIND=int_8), INTENT(IN) :: rowcol\n            INTEGER :: tas_blk_size_t\n            INTEGER, DIMENSION(SIZE(t%dims)) :: ind_blk\n            INTEGER, DIMENSION(SIZE(t%dims)) :: blk_size\n\n            ind_blk(:) = split_tensor_index(rowcol, t%dims)\n            blk_size(:) = get_array_elements(t%blk_size, ind_blk)\n            tas_blk_size_t = PRODUCT(blk_size)\n\n         END FUNCTION\n\n         FUNCTION dbcsr_t_nd_mp_comm(comm_2d, map1_2d, map2_2d, dims_nd, dims1_nd, dims2_nd, pdims_2d, tdims, &\n                                     nsplit, dimsplit)\n      !! Create a default nd process topology that is consistent with a given 2d topology.\n      !! Purpose: a nd tensor defined on the returned process grid can be represented as a DBCSR\n      !! matrix with the given 2d topology.\n      !! This is needed to enable contraction of 2 tensors (must have the same 2d process grid).\n      !! \\return with nd cartesian grid\n\n            TYPE(mp_comm_type), INTENT(IN)                               :: comm_2d\n         !! communicator with 2-dimensional topology\n            INTEGER, DIMENSION(:), INTENT(IN)                 :: map1_2d, map2_2d\n         !! which nd-indices map to first matrix index and in which order\n         !! which nd-indices map to second matrix index and in which order\n            INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)), &\n               INTENT(IN), OPTIONAL                           :: dims_nd\n         !! nd dimensions\n            INTEGER, DIMENSION(SIZE(map1_2d)), INTENT(IN), OPTIONAL :: dims1_nd\n            INTEGER, DIMENSION(SIZE(map2_2d)), INTENT(IN), OPTIONAL :: dims2_nd\n            INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL           :: pdims_2d\n         !! if comm_2d does not have a cartesian topology associated, can input dimensions with pdims_2d\n            INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)), &\n               INTENT(IN), OPTIONAL                           :: tdims\n         !! tensor block dimensions. If present, process grid dimensions are created such that good\n         !! load balancing is ensured even if some of the tensor dimensions are small (i.e. on the same order\n         !! or smaller than nproc**(1/ndim) where ndim is the tensor rank)\n            INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit\n            INTEGER                                           :: ndim1, ndim2\n            INTEGER                                           :: numtask\n            INTEGER, DIMENSION(2)                             :: dims_2d, task_coor\n\n            INTEGER, DIMENSION(SIZE(map1_2d)) :: dims1_nd_prv\n            INTEGER, DIMENSION(SIZE(map2_2d)) :: dims2_nd_prv\n            INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)) :: dims_nd_prv\n            INTEGER                                           :: handle\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_nd_mp_comm'\n            TYPE(dbcsr_t_pgrid_type)                          :: dbcsr_t_nd_mp_comm\n\n            CALL timeset(routineN, handle)\n\n            ndim1 = SIZE(map1_2d); ndim2 = SIZE(map2_2d)\n\n            IF (PRESENT(pdims_2d)) THEN\n               dims_2d(:) = pdims_2d\n            ELSE\n               CALL mp_environ(numtask, dims_2d, task_coor, comm_2d)\n            END IF\n\n            IF (.NOT. PRESENT(dims_nd)) THEN\n               dims1_nd_prv = 0; dims2_nd_prv = 0\n               IF (PRESENT(dims1_nd)) THEN\n                  dims1_nd_prv(:) = dims1_nd\n               ELSE\n\n                  IF (PRESENT(tdims)) THEN\n                     CALL dbcsr_t_mp_dims_create(dims_2d(1), dims1_nd_prv, tdims(map1_2d))\n                  ELSE\n                     CALL mp_dims_create(dims_2d(1), dims1_nd_prv)\n                  END IF\n               END IF\n\n               IF (PRESENT(dims2_nd)) THEN\n                  dims2_nd_prv(:) = dims2_nd\n               ELSE\n                  IF (PRESENT(tdims)) THEN\n                     CALL dbcsr_t_mp_dims_create(dims_2d(2), dims2_nd_prv, tdims(map2_2d))\n                  ELSE\n                     CALL mp_dims_create(dims_2d(2), dims2_nd_prv)\n                  END IF\n               END IF\n               dims_nd_prv(map1_2d) = dims1_nd_prv\n               dims_nd_prv(map2_2d) = dims2_nd_prv\n            ELSE\n               DBCSR_ASSERT(PRODUCT(dims_nd(map1_2d)) == dims_2d(1))\n               DBCSR_ASSERT(PRODUCT(dims_nd(map2_2d)) == dims_2d(2))\n               dims_nd_prv = dims_nd\n            END IF\n\n            CALL dbcsr_t_pgrid_create_expert(comm_2d, dims_nd_prv, dbcsr_t_nd_mp_comm, &\n                                             tensor_dims=tdims, map1_2d=map1_2d, map2_2d=map2_2d, nsplit=nsplit, dimsplit=dimsplit)\n\n            CALL timestop(handle)\n\n         END FUNCTION\n\n         RECURSIVE SUBROUTINE dbcsr_t_mp_dims_create(nodes, dims, tensor_dims, lb_ratio)\n      !! Create process grid dimensions corresponding to one dimension of the matrix representation\n      !! of a tensor, imposing that no process grid dimension is greater than the corresponding\n      !! tensor dimension.\n\n            INTEGER, INTENT(IN) :: nodes\n         !! Total number of nodes available for this matrix dimension\n            INTEGER, DIMENSION(:), INTENT(INOUT) :: dims\n         !! process grid dimension corresponding to tensor_dims\n            INTEGER, DIMENSION(:), INTENT(IN) :: tensor_dims\n         !! tensor dimensions\n            REAL(real_8), INTENT(IN), OPTIONAL :: lb_ratio\n         !! load imbalance acceptance factor\n\n            INTEGER, DIMENSION(:), ALLOCATABLE :: tensor_dims_sorted, sort_indices, dims_store\n            REAL(real_8), DIMENSION(:), ALLOCATABLE :: sort_key\n            INTEGER :: pdims_rem, idim, pdim\n            REAL(real_8) :: lb_ratio_prv\n\n            IF (PRESENT(lb_ratio)) THEN\n               lb_ratio_prv = lb_ratio\n            ELSE\n               lb_ratio_prv = 0.1_real_8\n            END IF\n\n            CALL allocate_any(dims_store, source=dims)\n\n            ! get default process grid dimensions\n            IF (any(dims == 0)) THEN\n               CALL mp_dims_create(nodes, dims)\n            END IF\n\n            ! sort dimensions such that problematic grid dimensions (those who should be corrected) come first\n            ALLOCATE (sort_key(SIZE(tensor_dims)))\n            sort_key(:) = REAL(tensor_dims, real_8)/dims\n\n            CALL allocate_any(tensor_dims_sorted, source=tensor_dims)\n            ALLOCATE (sort_indices(SIZE(sort_key)))\n            CALL sort(sort_key, SIZE(sort_key), sort_indices)\n            tensor_dims_sorted(:) = tensor_dims_sorted(sort_indices)\n            dims(:) = dims(sort_indices)\n\n            ! remaining number of nodes\n            pdims_rem = nodes\n\n            DO idim = 1, SIZE(tensor_dims_sorted)\n               IF (.NOT. accept_pdims_loadbalancing(pdims_rem, dims(idim), tensor_dims_sorted(idim), lb_ratio_prv)) THEN\n                  pdim = tensor_dims_sorted(idim)\n                  DO WHILE (.NOT. accept_pdims_loadbalancing(pdims_rem, pdim, tensor_dims_sorted(idim), lb_ratio_prv))\n                     pdim = pdim - 1\n                  END DO\n                  dims(idim) = pdim\n                  pdims_rem = pdims_rem/dims(idim)\n\n                  IF (idim .NE. SIZE(tensor_dims_sorted)) THEN\n                     dims(idim + 1:) = 0\n                     CALL mp_dims_create(pdims_rem, dims(idim + 1:))\n                  ELSEIF (lb_ratio_prv < 0.5_real_8) THEN\n                     ! resort to a less strict load imbalance factor\n                     dims(:) = dims_store\n                     CALL dbcsr_t_mp_dims_create(nodes, dims, tensor_dims, 0.5_real_8)\n                     RETURN\n                  ELSE\n                     ! resort to default process grid dimensions\n                     dims(:) = dims_store\n                     CALL mp_dims_create(nodes, dims)\n                     RETURN\n                  END IF\n\n               ELSE\n                  pdims_rem = pdims_rem/dims(idim)\n               END IF\n            END DO\n\n            dims(sort_indices) = dims\n\n         END SUBROUTINE\n\n         PURE FUNCTION accept_pdims_loadbalancing(pdims_avail, pdim, tdim, lb_ratio)\n      !! load balancing criterion whether to accept process grid dimension based on total number of\n      !! cores and tensor dimension\n            INTEGER, INTENT(IN) :: pdims_avail\n         !! available process grid dimensions (total number of cores)\n            INTEGER, INTENT(IN) :: pdim\n         !! process grid dimension to test\n            INTEGER, INTENT(IN) :: tdim\n         !! tensor dimension corresponding to pdim\n            REAL(real_8), INTENT(IN) :: lb_ratio\n         !! load imbalance acceptance factor\n            LOGICAL :: accept_pdims_loadbalancing\n\n            accept_pdims_loadbalancing = .FALSE.\n            IF (MOD(pdims_avail, pdim) == 0) THEN\n               IF (REAL(tdim, real_8)*lb_ratio < REAL(pdim, real_8)) THEN\n                  IF (MOD(tdim, pdim) == 0) accept_pdims_loadbalancing = .TRUE.\n               ELSE\n                  accept_pdims_loadbalancing = .TRUE.\n               END IF\n            END IF\n\n         END FUNCTION\n\n         SUBROUTINE dbcsr_t_nd_mp_free(mp_comm)\n      !! Release the MPI communicator.\n            TYPE(mp_comm_type), INTENT(INOUT)                               :: mp_comm\n\n            CALL mp_comm_free(mp_comm)\n         END SUBROUTINE dbcsr_t_nd_mp_free\n\n         SUBROUTINE dbcsr_t_distribution_new(dist, pgrid, ${varlist(\"nd_dist\")}$)\n      !! Create a tensor distribution.\n            TYPE(dbcsr_t_distribution_type), INTENT(OUT)    :: dist\n            TYPE(dbcsr_t_pgrid_type), INTENT(IN)            :: pgrid\n         !! process grid\n            INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL     :: ${varlist(\"nd_dist\")}$\n         !! distribution vectors for all tensor dimensions\n            INTEGER, DIMENSION(ndims_mapping_row(pgrid%nd_index_grid)) :: map1_2d\n            INTEGER, DIMENSION(ndims_mapping_column(pgrid%nd_index_grid)) :: map2_2d\n            INTEGER :: ndims\n\n            CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, map1_2d=map1_2d, map2_2d=map2_2d, ndim_nd=ndims)\n\n            CALL dbcsr_t_distribution_new_expert(dist, pgrid, map1_2d, map2_2d, ${varlist(\"nd_dist\")}$)\n\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_distribution_new_expert(dist, pgrid, map1_2d, map2_2d, ${varlist(\"nd_dist\")}$, own_comm)\n      !! Create a tensor distribution.\n            TYPE(dbcsr_t_distribution_type), INTENT(OUT)    :: dist\n            TYPE(dbcsr_t_pgrid_type), INTENT(IN)            :: pgrid\n         !! process grid\n            INTEGER, DIMENSION(:), INTENT(IN)               :: map1_2d\n         !! which nd-indices map to first matrix index and in which order\n            INTEGER, DIMENSION(:), INTENT(IN)               :: map2_2d\n         !! which nd-indices map to second matrix index and in which order\n            INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL     :: ${varlist(\"nd_dist\")}$\n            LOGICAL, INTENT(IN), OPTIONAL                   :: own_comm\n         !! whether distribution should own communicator\n            INTEGER                                         :: ndims\n            TYPE(mp_comm_type)                              :: comm_2d\n            INTEGER, DIMENSION(2)                           :: pdims_2d_check, &\n                                                               pdims_2d, task_coor_2d\n            INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)) :: dims, nblks_nd, task_coor\n            LOGICAL, DIMENSION(2)                           :: periods_2d\n            TYPE(array_list)                                :: nd_dist\n            TYPE(nd_to_2d_mapping)                          :: map_blks, map_grid\n            INTEGER                                         :: handle\n            TYPE(dbcsr_tas_dist_t)                          :: row_dist_obj, col_dist_obj\n            TYPE(dbcsr_t_pgrid_type)                        :: pgrid_prv\n            LOGICAL                                         :: need_pgrid_remap\n            INTEGER, DIMENSION(ndims_mapping_row(pgrid%nd_index_grid)) :: map1_2d_check\n            INTEGER, DIMENSION(ndims_mapping_column(pgrid%nd_index_grid)) :: map2_2d_check\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_distribution_new'\n\n            CALL timeset(routineN, handle)\n            ndims = SIZE(map1_2d) + SIZE(map2_2d)\n            DBCSR_ASSERT(ndims .GE. 2 .AND. ndims .LE. ${maxdim}$)\n\n            CALL create_array_list(nd_dist, ndims, ${varlist(\"nd_dist\")}$)\n\n            nblks_nd(:) = sizes_of_arrays(nd_dist)\n\n            need_pgrid_remap = .TRUE.\n            IF (PRESENT(own_comm)) THEN\n               CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, map1_2d=map1_2d_check, map2_2d=map2_2d_check)\n               IF (own_comm) THEN\n                  IF (.NOT. array_eq_i(map1_2d_check, map1_2d) .OR. .NOT. array_eq_i(map2_2d_check, map2_2d)) THEN\n                     DBCSR_ABORT(\"map1_2d / map2_2d are not consistent with pgrid\")\n                  END IF\n                  pgrid_prv = pgrid\n                  need_pgrid_remap = .FALSE.\n               END IF\n            END IF\n\n            IF (need_pgrid_remap) CALL dbcsr_t_pgrid_remap(pgrid, map1_2d, map2_2d, pgrid_prv)\n\n            ! check that 2d process topology is consistent with nd topology.\n            CALL mp_environ_pgrid(pgrid_prv, dims, task_coor)\n\n            ! process grid index mapping\n            CALL create_nd_to_2d_mapping(map_grid, dims, map1_2d, map2_2d, base=0, col_major=.FALSE.)\n\n            ! blk index mapping\n            CALL create_nd_to_2d_mapping(map_blks, nblks_nd, map1_2d, map2_2d)\n\n            row_dist_obj = dbcsr_tas_dist_t(nd_dist, map_blks, map_grid, 1)\n            col_dist_obj = dbcsr_tas_dist_t(nd_dist, map_blks, map_grid, 2)\n\n            CALL dbcsr_t_get_mapping_info(map_grid, dims_2d=pdims_2d)\n\n            comm_2d = pgrid_prv%mp_comm_2d\n\n            CALL mp_environ(comm_2d, 2, pdims_2d_check, task_coor_2d, periods_2d)\n            IF (ANY(pdims_2d_check .NE. pdims_2d)) THEN\n               DBCSR_ABORT(\"inconsistent process grid dimensions\")\n            END IF\n\n            IF (ALLOCATED(pgrid_prv%tas_split_info)) THEN\n               CALL dbcsr_tas_distribution_new(dist%dist, comm_2d, row_dist_obj, col_dist_obj, split_info=pgrid_prv%tas_split_info)\n            ELSE\n               CALL dbcsr_tas_distribution_new(dist%dist, comm_2d, row_dist_obj, col_dist_obj)\n               ALLOCATE (pgrid_prv%tas_split_info, SOURCE=dist%dist%info)\n               CALL dbcsr_tas_info_hold(pgrid_prv%tas_split_info)\n            END IF\n\n            dist%nd_dist = nd_dist\n            dist%pgrid = pgrid_prv\n\n            ALLOCATE (dist%refcount)\n            dist%refcount = 1\n            CALL timestop(handle)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_distribution_destroy(dist)\n      !! Destroy tensor distribution\n            TYPE(dbcsr_t_distribution_type), INTENT(INOUT) :: dist\n            INTEGER                                   :: handle\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_distribution_destroy'\n            LOGICAL :: abort\n\n            CALL timeset(routineN, handle)\n            CALL dbcsr_tas_distribution_destroy(dist%dist)\n            CALL destroy_array_list(dist%nd_dist)\n\n            abort = .FALSE.\n            IF (.NOT. ASSOCIATED(dist%refcount)) THEN\n               abort = .TRUE.\n            ELSEIF (dist%refcount < 1) THEN\n               abort = .TRUE.\n            END IF\n\n            IF (abort) THEN\n               DBCSR_ABORT(\"can not destroy non-existing tensor distribution\")\n            END IF\n\n            dist%refcount = dist%refcount - 1\n\n            IF (dist%refcount == 0) THEN\n               CALL dbcsr_t_pgrid_destroy(dist%pgrid)\n               DEALLOCATE (dist%refcount)\n            ELSE\n               CALL dbcsr_t_pgrid_destroy(dist%pgrid, keep_comm=.TRUE.)\n            END IF\n\n            CALL timestop(handle)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_distribution_hold(dist)\n      !! reference counting for distribution (only needed for communicator handle that must be freed\n      !! when no longer needed)\n\n            TYPE(dbcsr_t_distribution_type), INTENT(IN) :: dist\n            INTEGER, POINTER                            :: ref\n\n            IF (dist%refcount < 1) THEN\n               DBCSR_ABORT(\"can not hold non-existing tensor distribution\")\n            END IF\n            ref => dist%refcount\n            ref = ref + 1\n         END SUBROUTINE\n\n         FUNCTION dbcsr_t_distribution(tensor)\n      !! get distribution from tensor\n      !! \\return distribution\n\n            TYPE(dbcsr_t_type), INTENT(IN)  :: tensor\n            TYPE(dbcsr_t_distribution_type) :: dbcsr_t_distribution\n\n            CALL dbcsr_tas_get_info(tensor%matrix_rep, distribution=dbcsr_t_distribution%dist)\n            dbcsr_t_distribution%pgrid = tensor%pgrid\n            dbcsr_t_distribution%nd_dist = tensor%nd_dist\n            dbcsr_t_distribution%refcount => dbcsr_t_distribution%refcount\n         END FUNCTION\n\n         SUBROUTINE dbcsr_t_create_new(tensor, name, dist, map1_2d, map2_2d, data_type, &\n                                       ${varlist(\"blk_size\")}$)\n      !! create a tensor.\n      !! For performance, the arguments map1_2d and map2_2d (controlling matrix representation of tensor) should be\n      !! consistent with the the contraction to be performed (see documentation of dbcsr_t_contract).\n            TYPE(dbcsr_t_type), INTENT(OUT)                   :: tensor\n            CHARACTER(len=*), INTENT(IN)                      :: name\n            TYPE(dbcsr_t_distribution_type), INTENT(INOUT)    :: dist\n            INTEGER, DIMENSION(:), INTENT(IN)                 :: map1_2d\n      !! which nd-indices to map to first 2d index and in which order\n            INTEGER, DIMENSION(:), INTENT(IN)                 :: map2_2d\n      !! which nd-indices to map to first 2d index and in which order\n            INTEGER, INTENT(IN), OPTIONAL                     :: data_type\n            INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL       :: ${varlist(\"blk_size\")}$\n      !! blk sizes in each dimension\n            INTEGER                                           :: ndims\n            INTEGER(KIND=int_8), DIMENSION(2)                             :: dims_2d\n            INTEGER, DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)) :: dims, pdims, task_coor\n            TYPE(dbcsr_tas_blk_size_t)                        :: col_blk_size_obj, row_blk_size_obj\n            TYPE(dbcsr_t_distribution_type)                   :: dist_new\n            TYPE(array_list)                                  :: blk_size, blks_local\n            TYPE(nd_to_2d_mapping)                            :: map\n            INTEGER                                   :: handle\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_create_new'\n            INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"blks_local\")}$\n            INTEGER, DIMENSION(:), ALLOCATABLE              :: ${varlist(\"dist\")}$\n            INTEGER                                         :: iblk_count, iblk\n            INTEGER, DIMENSION(:), ALLOCATABLE              :: nblks_local, nfull_local\n\n            CALL timeset(routineN, handle)\n            ndims = SIZE(map1_2d) + SIZE(map2_2d)\n            CALL create_array_list(blk_size, ndims, ${varlist(\"blk_size\")}$)\n            dims = sizes_of_arrays(blk_size)\n\n            CALL create_nd_to_2d_mapping(map, dims, map1_2d, map2_2d)\n            CALL dbcsr_t_get_mapping_info(map, dims_2d_i8=dims_2d)\n\n            row_blk_size_obj = dbcsr_tas_blk_size_t(blk_size, map, 1)\n            col_blk_size_obj = dbcsr_tas_blk_size_t(blk_size, map, 2)\n\n            CALL dbcsr_t_distribution_remap(dist, map1_2d, map2_2d, dist_new)\n\n            ALLOCATE (tensor%matrix_rep)\n            CALL dbcsr_tas_create(matrix=tensor%matrix_rep, &\n                                  name=TRIM(name)//\" matrix\", &\n                                  dist=dist_new%dist, &\n                                  row_blk_size=row_blk_size_obj, &\n                                  col_blk_size=col_blk_size_obj, &\n                                  data_type=data_type)\n\n            tensor%owns_matrix = .TRUE.\n\n            tensor%nd_index_blk = map\n            tensor%name = name\n\n            CALL dbcsr_tas_finalize(tensor%matrix_rep)\n            CALL destroy_nd_to_2d_mapping(map)\n\n            ! map element-wise tensor index\n            CALL create_nd_to_2d_mapping(map, sum_of_arrays(blk_size), map1_2d, map2_2d)\n            tensor%nd_index = map\n            tensor%blk_sizes = blk_size\n\n            CALL mp_environ_pgrid(dist_new%pgrid, pdims, task_coor)\n\n            #:for ndim in range(1, maxdim+1)\n               IF (ndims == ${ndim}$) THEN\n                  CALL get_arrays(dist_new%nd_dist, ${varlist(\"dist\", nmax=ndim)}$)\n               END IF\n            #:endfor\n\n            ALLOCATE (nblks_local(ndims))\n            ALLOCATE (nfull_local(ndims))\n            nfull_local(:) = 0\n            #:for idim in range(1, maxdim+1)\n               IF (ndims .GE. ${idim}$) THEN\n                  nblks_local(${idim}$) = COUNT(dist_${idim}$ == task_coor(${idim}$))\n                  ALLOCATE (blks_local_${idim}$ (nblks_local(${idim}$)))\n                  iblk_count = 0\n                  DO iblk = 1, SIZE(dist_${idim}$)\n                     IF (dist_${idim}$ (iblk) == task_coor(${idim}$)) THEN\n                        iblk_count = iblk_count + 1\n                        blks_local_${idim}$ (iblk_count) = iblk\n                        nfull_local(${idim}$) = nfull_local(${idim}$) + blk_size_${idim}$ (iblk)\n                     END IF\n                  END DO\n               END IF\n            #:endfor\n\n            #:for ndim in range(1, maxdim+1)\n               IF (ndims == ${ndim}$) THEN\n                  CALL create_array_list(blks_local, ${ndim}$, ${varlist(\"blks_local\", nmax=ndim)}$)\n               END IF\n            #:endfor\n\n            ALLOCATE (tensor%nblks_local(ndims))\n            ALLOCATE (tensor%nfull_local(ndims))\n            tensor%nblks_local(:) = nblks_local\n            tensor%nfull_local(:) = nfull_local\n\n            tensor%blks_local = blks_local\n\n            tensor%nd_dist = dist_new%nd_dist\n            tensor%pgrid = dist_new%pgrid\n\n            CALL dbcsr_t_distribution_hold(dist_new)\n            tensor%refcount => dist_new%refcount\n            CALL dbcsr_t_distribution_destroy(dist_new)\n\n            CALL array_offsets(tensor%blk_sizes, tensor%blk_offsets)\n\n            tensor%valid = .TRUE.\n            CALL timestop(handle)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_hold(tensor)\n      !! reference counting for tensors (only needed for communicator handle that must be freed\n      !! when no longer needed)\n\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER, POINTER :: ref\n\n            IF (tensor%refcount < 1) THEN\n               DBCSR_ABORT(\"can not hold non-existing tensor\")\n            END IF\n            ref => tensor%refcount\n            ref = ref + 1\n\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_create_template(tensor_in, tensor, name, dist, map1_2d, map2_2d, data_type)\n      !! create a tensor from template\n            TYPE(dbcsr_t_type), INTENT(INOUT)      :: tensor_in\n            TYPE(dbcsr_t_type), INTENT(OUT)        :: tensor\n            CHARACTER(len=*), INTENT(IN), OPTIONAL :: name\n            TYPE(dbcsr_t_distribution_type), &\n               INTENT(INOUT), OPTIONAL             :: dist\n            INTEGER, DIMENSION(:), INTENT(IN), &\n               OPTIONAL                            :: map1_2d, map2_2d\n            INTEGER, INTENT(IN), OPTIONAL          :: data_type\n            INTEGER                                :: handle\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_create_template'\n            INTEGER, DIMENSION(:), ALLOCATABLE     :: ${varlist(\"bsize\")}$\n            INTEGER, DIMENSION(:), ALLOCATABLE     :: map1_2d_prv, map2_2d_prv\n            CHARACTER(len=default_string_length)   :: name_prv\n            TYPE(dbcsr_t_distribution_type)        :: dist_prv\n            INTEGER                                :: data_type_prv\n\n            CALL timeset(routineN, handle)\n\n            IF (PRESENT(dist) .OR. PRESENT(map1_2d) .OR. PRESENT(map2_2d)) THEN\n               ! need to create matrix representation from scratch\n               IF (PRESENT(dist)) THEN\n                  dist_prv = dist\n               ELSE\n                  dist_prv = dbcsr_t_distribution(tensor_in)\n               END IF\n               IF (PRESENT(map1_2d) .AND. PRESENT(map2_2d)) THEN\n                  CALL allocate_any(map1_2d_prv, source=map1_2d)\n                  CALL allocate_any(map2_2d_prv, source=map2_2d)\n               ELSE\n                  ALLOCATE (map1_2d_prv(ndims_matrix_row(tensor_in)))\n                  ALLOCATE (map2_2d_prv(ndims_matrix_column(tensor_in)))\n                  CALL dbcsr_t_get_mapping_info(tensor_in%nd_index_blk, map1_2d=map1_2d_prv, map2_2d=map2_2d_prv)\n               END IF\n               IF (PRESENT(name)) THEN\n                  name_prv = name\n               ELSE\n                  name_prv = tensor_in%name\n               END IF\n               IF (PRESENT(data_type)) THEN\n                  data_type_prv = data_type\n               ELSE\n                  data_type_prv = dbcsr_t_get_data_type(tensor_in)\n               END IF\n               #:for ndim in range(1, maxdim+1)\n                  IF (ndims_tensor(tensor_in) == ${ndim}$) THEN\n                     CALL get_arrays(tensor_in%blk_sizes, ${varlist(\"bsize\", nmax=ndim)}$)\n                     CALL dbcsr_t_create(tensor, name_prv, dist_prv, map1_2d_prv, map2_2d_prv, &\n                                         data_type_prv, ${varlist(\"bsize\", nmax=ndim)}$)\n                  END IF\n               #:endfor\n            ELSE\n               ! create matrix representation from template\n               ALLOCATE (tensor%matrix_rep)\n               IF (.NOT. PRESENT(name)) THEN\n                  CALL dbcsr_tas_create(tensor_in%matrix_rep, tensor%matrix_rep, &\n                                        name=TRIM(tensor_in%name)//\" matrix\", data_type=data_type)\n               ELSE\n                  CALL dbcsr_tas_create(tensor_in%matrix_rep, tensor%matrix_rep, name=TRIM(name)//\" matrix\", data_type=data_type)\n               END IF\n               tensor%owns_matrix = .TRUE.\n               CALL dbcsr_tas_finalize(tensor%matrix_rep)\n\n               tensor%nd_index_blk = tensor_in%nd_index_blk\n               tensor%nd_index = tensor_in%nd_index\n               tensor%blk_sizes = tensor_in%blk_sizes\n               tensor%blk_offsets = tensor_in%blk_offsets\n               tensor%nd_dist = tensor_in%nd_dist\n               tensor%blks_local = tensor_in%blks_local\n               ALLOCATE (tensor%nblks_local(ndims_tensor(tensor_in)))\n               tensor%nblks_local(:) = tensor_in%nblks_local\n               ALLOCATE (tensor%nfull_local(ndims_tensor(tensor_in)))\n               tensor%nfull_local(:) = tensor_in%nfull_local\n               tensor%pgrid = tensor_in%pgrid\n\n               tensor%refcount => tensor_in%refcount\n               CALL dbcsr_t_hold(tensor)\n\n               tensor%valid = .TRUE.\n               IF (PRESENT(name)) THEN\n                  tensor%name = name\n               ELSE\n                  tensor%name = tensor_in%name\n               END IF\n            END IF\n            CALL timestop(handle)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_create_matrix(matrix_in, tensor, order, name)\n      !! Create 2-rank tensor from matrix.\n            TYPE(dbcsr_type), INTENT(IN)                :: matrix_in\n            TYPE(dbcsr_t_type), INTENT(OUT)             :: tensor\n            INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: order\n            CHARACTER(len=*), INTENT(IN), OPTIONAL      :: name\n\n            CHARACTER(len=default_string_length)        :: name_in\n            INTEGER, DIMENSION(2)                       :: order_in\n            INTEGER                                     :: comm_2d_handle, data_type\n            TYPE(dbcsr_distribution_type)                :: matrix_dist\n            TYPE(dbcsr_t_distribution_type)             :: dist\n            INTEGER, DIMENSION(:), POINTER              :: row_blk_size, col_blk_size\n            INTEGER, DIMENSION(:), POINTER              :: col_dist, row_dist\n            INTEGER                                   :: handle\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_create_matrix'\n            TYPE(dbcsr_t_pgrid_type)                  :: comm_nd\n            INTEGER, DIMENSION(2)                     :: pdims_2d\n            TYPE(mp_comm_type)                        :: comm_2d\n\n            CALL timeset(routineN, handle)\n\n            NULLIFY (row_blk_size, col_blk_size, col_dist, row_dist)\n            IF (PRESENT(name)) THEN\n               name_in = name\n            ELSE\n               CALL dbcsr_get_info(matrix_in, name=name_in)\n            END IF\n\n            IF (PRESENT(order)) THEN\n               order_in = order\n            ELSE\n               order_in = [1, 2]\n            END IF\n\n            CALL dbcsr_get_info(matrix_in, distribution=matrix_dist)\n            CALL dbcsr_distribution_get(matrix_dist, group=comm_2d_handle, row_dist=row_dist, col_dist=col_dist, &\n                                        nprows=pdims_2d(1), npcols=pdims_2d(2))\n            CALL comm_2d%set_handle(comm_2d_handle)\n            comm_nd = dbcsr_t_nd_mp_comm(comm_2d, [order_in(1)], [order_in(2)], pdims_2d=pdims_2d)\n\n            CALL dbcsr_t_distribution_new_expert( &\n               dist, &\n               comm_nd, &\n               [order_in(1)], [order_in(2)], &\n               row_dist, col_dist, own_comm=.TRUE.)\n\n            CALL dbcsr_get_info(matrix_in, &\n                                data_type=data_type, &\n                                row_blk_size=row_blk_size, &\n                                col_blk_size=col_blk_size)\n\n            CALL dbcsr_t_create_new(tensor, name_in, dist, &\n                                    [order_in(1)], [order_in(2)], &\n                                    data_type, &\n                                    row_blk_size, &\n                                    col_blk_size)\n\n            CALL dbcsr_t_distribution_destroy(dist)\n            CALL timestop(handle)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_destroy(tensor)\n      !! Destroy a tensor\n            TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor\n            INTEGER                                   :: handle\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_destroy'\n            LOGICAL :: abort\n\n            CALL timeset(routineN, handle)\n            IF (tensor%owns_matrix) THEN\n               CALL dbcsr_tas_destroy(tensor%matrix_rep)\n               DEALLOCATE (tensor%matrix_rep)\n            ELSE\n               NULLIFY (tensor%matrix_rep)\n            END IF\n            tensor%owns_matrix = .FALSE.\n\n            CALL destroy_nd_to_2d_mapping(tensor%nd_index_blk)\n            CALL destroy_nd_to_2d_mapping(tensor%nd_index)\n            !CALL destroy_nd_to_2d_mapping(tensor%nd_index_grid)\n            CALL destroy_array_list(tensor%blk_sizes)\n            CALL destroy_array_list(tensor%blk_offsets)\n            CALL destroy_array_list(tensor%nd_dist)\n            CALL destroy_array_list(tensor%blks_local)\n\n            DEALLOCATE (tensor%nblks_local, tensor%nfull_local)\n\n            abort = .FALSE.\n            IF (.NOT. ASSOCIATED(tensor%refcount)) THEN\n               abort = .TRUE.\n            ELSEIF (tensor%refcount < 1) THEN\n               abort = .TRUE.\n            END IF\n\n            IF (abort) THEN\n               DBCSR_ABORT(\"can not destroy non-existing tensor\")\n            END IF\n\n            tensor%refcount = tensor%refcount - 1\n\n            IF (tensor%refcount == 0) THEN\n               CALL dbcsr_t_pgrid_destroy(tensor%pgrid)\n               !CALL mp_comm_free(tensor%comm_2d)\n               !CALL mp_comm_free(tensor%comm_nd)\n               DEALLOCATE (tensor%refcount)\n            ELSE\n               CALL dbcsr_t_pgrid_destroy(tensor%pgrid, keep_comm=.TRUE.)\n            END IF\n\n            tensor%valid = .FALSE.\n            tensor%name = \"\"\n            CALL timestop(handle)\n         END SUBROUTINE\n\n         PURE FUNCTION dbcsr_t_nblks_total(tensor, idim)\n      !! total numbers of blocks along dimension idim\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER, INTENT(IN) :: idim\n            INTEGER :: dbcsr_t_nblks_total\n\n            IF (idim > ndims_tensor(tensor)) THEN\n               dbcsr_t_nblks_total = 0\n            ELSE\n               dbcsr_t_nblks_total = tensor%nd_index_blk%dims_nd(idim)\n            END IF\n         END FUNCTION\n\n         PURE FUNCTION dbcsr_t_nblks_local(tensor, idim)\n      !! local number of blocks along dimension idim\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER, INTENT(IN) :: idim\n            INTEGER :: dbcsr_t_nblks_local\n\n            IF (idim > ndims_tensor(tensor)) THEN\n               dbcsr_t_nblks_local = 0\n            ELSE\n               dbcsr_t_nblks_local = tensor%nblks_local(idim)\n            END IF\n\n         END FUNCTION\n\n         PURE FUNCTION ndims_tensor(tensor)\n      !! tensor rank\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER                        :: ndims_tensor\n\n            ndims_tensor = tensor%nd_index%ndim_nd\n         END FUNCTION\n\n         SUBROUTINE dims_tensor(tensor, dims)\n      !! tensor dimensions\n            TYPE(dbcsr_t_type), INTENT(IN)              :: tensor\n            INTEGER, DIMENSION(ndims_tensor(tensor)), &\n               INTENT(OUT)                              :: dims\n\n            DBCSR_ASSERT(tensor%valid)\n            dims = tensor%nd_index%dims_nd\n         END SUBROUTINE\n\n         SUBROUTINE blk_dims_tensor(tensor, dims)\n      !! tensor block dimensions\n            TYPE(dbcsr_t_type), INTENT(IN)              :: tensor\n            INTEGER, DIMENSION(ndims_tensor(tensor)), &\n               INTENT(OUT)                              :: dims\n\n            DBCSR_ASSERT(tensor%valid)\n            dims = tensor%nd_index_blk%dims_nd\n         END SUBROUTINE\n\n         FUNCTION dbcsr_t_get_data_type(tensor) RESULT(data_type)\n      !! tensor data type\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER                        :: data_type\n\n            data_type = dbcsr_tas_get_data_type(tensor%matrix_rep)\n         END FUNCTION\n\n         SUBROUTINE dbcsr_t_blk_sizes(tensor, ind, blk_size)\n      !! Size of tensor block\n            TYPE(dbcsr_t_type), INTENT(IN)              :: tensor\n            INTEGER, DIMENSION(ndims_tensor(tensor)), &\n               INTENT(IN)                               :: ind\n            INTEGER, DIMENSION(ndims_tensor(tensor)), &\n               INTENT(OUT)                              :: blk_size\n\n            blk_size(:) = get_array_elements(tensor%blk_sizes, ind)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_blk_offsets(tensor, ind, blk_offset)\n      !! offset of tensor block\n\n            TYPE(dbcsr_t_type), INTENT(IN)              :: tensor\n            INTEGER, DIMENSION(ndims_tensor(tensor)), &\n               INTENT(IN)                               :: ind\n         !! block index\n            INTEGER, DIMENSION(ndims_tensor(tensor)), &\n               INTENT(OUT)                              :: blk_offset\n         !! block offset\n\n            DBCSR_ASSERT(tensor%valid)\n            blk_offset(:) = get_array_elements(tensor%blk_offsets, ind)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_get_stored_coordinates(tensor, ind_nd, processor)\n      !! Generalization of dbcsr_get_stored_coordinates for tensors.\n            TYPE(dbcsr_t_type), INTENT(IN)               :: tensor\n            INTEGER, DIMENSION(ndims_tensor(tensor)), &\n               INTENT(IN)                                :: ind_nd\n            INTEGER, INTENT(OUT)                         :: processor\n\n            INTEGER(KIND=int_8), DIMENSION(2)                        :: ind_2d\n\n            ind_2d(:) = get_2d_indices_tensor(tensor%nd_index_blk, ind_nd)\n            CALL dbcsr_tas_get_stored_coordinates(tensor%matrix_rep, ind_2d(1), ind_2d(2), processor)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_pgrid_create(mp_comm, dims, pgrid, tensor_dims)\n            TYPE(mp_comm_type), INTENT(IN) :: mp_comm\n            INTEGER, DIMENSION(:), INTENT(INOUT) :: dims\n            TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid\n            INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: tensor_dims\n            INTEGER, DIMENSION(:), ALLOCATABLE :: map1_2d, map2_2d\n            INTEGER :: i, ndims\n\n            ndims = SIZE(dims)\n\n            ALLOCATE (map1_2d(ndims/2))\n            ALLOCATE (map2_2d(ndims - ndims/2))\n            map1_2d(:) = (/(i, i=1, SIZE(map1_2d))/)\n            map2_2d(:) = (/(i, i=SIZE(map1_2d) + 1, SIZE(map1_2d) + SIZE(map2_2d))/)\n\n            CALL dbcsr_t_pgrid_create_expert(mp_comm, dims, pgrid, map1_2d, map2_2d, tensor_dims)\n\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_pgrid_create_expert(mp_comm, dims, pgrid, map1_2d, map2_2d, tensor_dims, nsplit, dimsplit)\n      !! Create an n-dimensional process grid.\n      !! We can not use a n-dimensional MPI cartesian grid for tensors since the mapping between\n      !! n-dim. and 2-dim. index allows for an arbitrary reordering of tensor index. Therefore we can not\n      !! use n-dim. MPI Cartesian grid because it may not be consistent with the respective 2d grid.\n      !! The 2d Cartesian MPI grid is the reference grid (since tensor data is stored as DBCSR matrix)\n      !! and this routine creates an object that is a n-dim. interface to this grid.\n      !! map1_2d and map2_2d don't need to be specified (correctly), grid may be redefined in dbcsr_t_distribution_new\n      !! Note that pgrid is equivalent to a MPI cartesian grid only if map1_2d and map2_2d don't reorder indices\n      !! (which is the case if [map1_2d, map2_2d] == [1, 2, ..., ndims]). Otherwise the mapping of grid\n      !! coordinates to processes depends on the ordering of the indices and is not equivalent to a MPI\n      !! cartesian grid.\n\n            TYPE(mp_comm_type), INTENT(IN) :: mp_comm\n         !! simple MPI Communicator\n            INTEGER, DIMENSION(:), INTENT(INOUT) :: dims\n         !! grid dimensions - if entries are 0, dimensions are chosen automatically.\n            TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid\n         !! n-dimensional grid object\n            INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d\n         !! which nd-indices map to first matrix index and in which order\n         !! which nd-indices map to first matrix index and in which order\n            INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: tensor_dims\n         !! tensor block dimensions. If present, process grid dimensions are created such that good\n         !! load balancing is ensured even if some of the tensor dimensions are small (i.e. on the same order\n         !! or smaller than nproc**(1/ndim) where ndim is the tensor rank)\n            INTEGER, INTENT(IN), OPTIONAL :: nsplit, dimsplit\n         !! impose a constant split factor\n         !! which matrix dimension to split\n            INTEGER :: nproc, iproc, ndims, handle\n            INTEGER, DIMENSION(2) :: pdims_2d, pos\n            TYPE(dbcsr_tas_split_info) :: info\n\n            CHARACTER(LEN=*), PARAMETER :: routineN = 'dbcsr_t_pgrid_create'\n\n            CALL timeset(routineN, handle)\n\n            ndims = SIZE(dims)\n\n            CALL mp_environ(nproc, iproc, mp_comm)\n            IF (ANY(dims == 0)) THEN\n               IF (.NOT. PRESENT(tensor_dims)) THEN\n                  CALL mp_dims_create(nproc, dims)\n               ELSE\n                  CALL dbcsr_t_mp_dims_create(nproc, dims, tensor_dims)\n               END IF\n            END IF\n            CALL create_nd_to_2d_mapping(pgrid%nd_index_grid, dims, map1_2d, map2_2d, base=0, col_major=.FALSE.)\n            CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, dims_2d=pdims_2d)\n            CALL mp_cart_create(mp_comm, 2, pdims_2d, pos, pgrid%mp_comm_2d)\n\n            IF (PRESENT(nsplit)) THEN\n               DBCSR_ASSERT(PRESENT(dimsplit))\n               CALL dbcsr_tas_create_split(info, pgrid%mp_comm_2d, dimsplit, nsplit, opt_nsplit=.FALSE.)\n               ALLOCATE (pgrid%tas_split_info, SOURCE=info)\n            END IF\n\n            ! store number of MPI ranks because we need it for PURE function dbcsr_t_max_nblks_local\n            pgrid%nproc = nproc\n\n            CALL timestop(handle)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_pgrid_destroy(pgrid, keep_comm)\n      !! destroy process grid\n\n            TYPE(dbcsr_t_pgrid_type), INTENT(INOUT) :: pgrid\n            LOGICAL, INTENT(IN), OPTIONAL           :: keep_comm\n         !! if .TRUE. communicator is not freed\n            LOGICAL :: keep_comm_prv\n            IF (PRESENT(keep_comm)) THEN\n               keep_comm_prv = keep_comm\n            ELSE\n               keep_comm_prv = .FALSE.\n            END IF\n            IF (.NOT. keep_comm_prv) CALL mp_comm_free(pgrid%mp_comm_2d)\n            CALL destroy_nd_to_2d_mapping(pgrid%nd_index_grid)\n            IF (ALLOCATED(pgrid%tas_split_info) .AND. .NOT. keep_comm_prv) THEN\n               CALL dbcsr_tas_release_info(pgrid%tas_split_info)\n               DEALLOCATE (pgrid%tas_split_info)\n            END IF\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_pgrid_set_strict_split(pgrid)\n      !! freeze current split factor such that it is never changed during contraction\n            TYPE(dbcsr_t_pgrid_type), INTENT(INOUT) :: pgrid\n            IF (ALLOCATED(pgrid%tas_split_info)) CALL dbcsr_tas_set_strict_split(pgrid%tas_split_info)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_pgrid_remap(pgrid_in, map1_2d, map2_2d, pgrid_out)\n      !! remap a process grid (needed when mapping between tensor and matrix index is changed)\n\n            TYPE(dbcsr_t_pgrid_type), INTENT(IN) :: pgrid_in\n            INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d\n         !! new mapping\n         !! new mapping\n            TYPE(dbcsr_t_pgrid_type), INTENT(OUT) :: pgrid_out\n            INTEGER, DIMENSION(:), ALLOCATABLE :: dims\n            INTEGER, DIMENSION(ndims_mapping_row(pgrid_in%nd_index_grid)) :: map1_2d_old\n            INTEGER, DIMENSION(ndims_mapping_column(pgrid_in%nd_index_grid)) :: map2_2d_old\n\n            ALLOCATE (dims(SIZE(map1_2d) + SIZE(map2_2d)))\n            CALL dbcsr_t_get_mapping_info(pgrid_in%nd_index_grid, dims_nd=dims, map1_2d=map1_2d_old, map2_2d=map2_2d_old)\n            CALL dbcsr_t_pgrid_create_expert(pgrid_in%mp_comm_2d, dims, pgrid_out, map1_2d=map1_2d, map2_2d=map2_2d)\n            IF (array_eq_i(map1_2d_old, map1_2d) .AND. array_eq_i(map2_2d_old, map2_2d)) THEN\n               IF (ALLOCATED(pgrid_in%tas_split_info)) THEN\n                  ALLOCATE (pgrid_out%tas_split_info, SOURCE=pgrid_in%tas_split_info)\n                  CALL dbcsr_tas_info_hold(pgrid_out%tas_split_info)\n               END IF\n            END IF\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_pgrid_change_dims(pgrid, pdims)\n      !! change dimensions of an existing process grid.\n\n            TYPE(dbcsr_t_pgrid_type), INTENT(INOUT) :: pgrid\n         !! process grid to be changed\n            INTEGER, DIMENSION(:), INTENT(INOUT)    :: pdims\n         !! new process grid dimensions, should all be set > 0\n            TYPE(dbcsr_t_pgrid_type)                :: pgrid_tmp\n            INTEGER                                 :: nsplit, dimsplit\n            INTEGER, DIMENSION(ndims_mapping_row(pgrid%nd_index_grid)) :: map1_2d\n            INTEGER, DIMENSION(ndims_mapping_column(pgrid%nd_index_grid)) :: map2_2d\n            TYPe(nd_to_2d_mapping)                  :: nd_index_grid\n            INTEGER, DIMENSION(2)                   :: pdims_2d\n\n            DBCSR_ASSERT(ALL(pdims > 0))\n            CALL dbcsr_tas_get_split_info(pgrid%tas_split_info, nsplit=nsplit, split_rowcol=dimsplit)\n            CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, map1_2d=map1_2d, map2_2d=map2_2d)\n            CALL create_nd_to_2d_mapping(nd_index_grid, pdims, map1_2d, map2_2d, base=0, col_major=.FALSE.)\n            CALL dbcsr_t_get_mapping_info(nd_index_grid, dims_2d=pdims_2d)\n            IF (MOD(pdims_2d(dimsplit), nsplit) == 0) THEN\n               CALL dbcsr_t_pgrid_create_expert(pgrid%mp_comm_2d, pdims, pgrid_tmp, map1_2d=map1_2d, map2_2d=map2_2d, &\n                                                nsplit=nsplit, dimsplit=dimsplit)\n            ELSE\n               CALL dbcsr_t_pgrid_create_expert(pgrid%mp_comm_2d, pdims, pgrid_tmp, map1_2d=map1_2d, map2_2d=map2_2d)\n            END IF\n            CALL dbcsr_t_pgrid_destroy(pgrid)\n            pgrid = pgrid_tmp\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_distribution_remap(dist_in, map1_2d, map2_2d, dist_out)\n            TYPE(dbcsr_t_distribution_type), INTENT(IN)    :: dist_in\n            INTEGER, DIMENSION(:), INTENT(IN) :: map1_2d, map2_2d\n            TYPE(dbcsr_t_distribution_type), INTENT(OUT)    :: dist_out\n            INTEGER, DIMENSION(:), ALLOCATABLE :: ${varlist(\"dist\")}$\n            INTEGER :: ndims\n            ndims = SIZE(map1_2d) + SIZE(map2_2d)\n            #:for ndim in range(1, maxdim+1)\n               IF (ndims == ${ndim}$) THEN\n                  CALL get_arrays(dist_in%nd_dist, ${varlist(\"dist\", nmax=ndim)}$)\n                  CALL dbcsr_t_distribution_new_expert(dist_out, dist_in%pgrid, map1_2d, map2_2d, ${varlist(\"dist\", nmax=ndim)}$)\n               END IF\n            #:endfor\n         END SUBROUTINE\n\n         SUBROUTINE mp_environ_pgrid(pgrid, dims, task_coor)\n      !! as mp_environ but for special pgrid type\n            TYPE(dbcsr_t_pgrid_type), INTENT(IN) :: pgrid\n            INTEGER, DIMENSION(ndims_mapping(pgrid%nd_index_grid)), INTENT(OUT) :: dims\n            INTEGER, DIMENSION(ndims_mapping(pgrid%nd_index_grid)), INTENT(OUT) :: task_coor\n            INTEGER, DIMENSION(2)                                          :: dims_2d, task_coor_2d\n            INTEGER :: nproc\n\n            CALL mp_environ(nproc, dims_2d, task_coor_2d, pgrid%mp_comm_2d)\n            CALL mp_environ(nproc, dims_2d, task_coor_2d, pgrid%mp_comm_2d)\n            CALL dbcsr_t_get_mapping_info(pgrid%nd_index_grid, dims_nd=dims)\n            task_coor = get_nd_indices_pgrid(pgrid%nd_index_grid, task_coor_2d)\n         END SUBROUTINE\n\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            SUBROUTINE dbcsr_t_set_${dsuffix}$ (tensor, alpha)\n      !! As dbcsr_set\n               TYPE(dbcsr_t_type), INTENT(INOUT)                   :: tensor\n               ${dtype}$, INTENT(IN)                               :: alpha\n               CALL dbcsr_tas_set(tensor%matrix_rep, alpha)\n            END SUBROUTINE\n         #:endfor\n\n         #:for dparam, dtype, dsuffix in dtype_float_list\n            SUBROUTINE dbcsr_t_filter_${dsuffix}$ (tensor, eps, method, use_absolute)\n      !! As dbcsr_filter\n\n               TYPE(dbcsr_t_type), INTENT(INOUT)    :: tensor\n               ${dtype}$, INTENT(IN)                :: eps\n               INTEGER, INTENT(IN), OPTIONAL        :: method\n               LOGICAL, INTENT(IN), OPTIONAL        :: use_absolute\n\n               CALL dbcsr_tas_filter(tensor%matrix_rep, eps, method, use_absolute)\n\n            END SUBROUTINE\n         #:endfor\n\n         SUBROUTINE dbcsr_t_get_info(tensor, nblks_total, &\n                                     nfull_total, &\n                                     nblks_local, &\n                                     nfull_local, &\n                                     pdims, &\n                                     my_ploc, &\n                                     ${varlist(\"blks_local\")}$, &\n                                     ${varlist(\"proc_dist\")}$, &\n                                     ${varlist(\"blk_size\")}$, &\n                                     ${varlist(\"blk_offset\")}$, &\n                                     distribution, &\n                                     name, &\n                                     data_type)\n      !! As dbcsr_get_info but for tensors\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: nblks_total\n         !! number of blocks along each dimension\n            INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: nfull_total\n         !! number of elements along each dimension\n            INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: nblks_local\n         !! local number of blocks along each dimension\n            INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: nfull_local\n         !! local number of elements along each dimension\n            INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: my_ploc\n         !! process coordinates in process grid\n            INTEGER, INTENT(OUT), OPTIONAL, DIMENSION(ndims_tensor(tensor)) :: pdims\n         !! process grid dimensions\n            #:for idim in range(1, maxdim+1)\n               INTEGER, DIMENSION(dbcsr_t_nblks_local(tensor, ${idim}$)), INTENT(OUT), OPTIONAL :: blks_local_${idim}$\n         !! local blocks along dimension ${idim}$\n               INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)), INTENT(OUT), OPTIONAL :: proc_dist_${idim}$\n         !! distribution along dimension ${idim}$\n               INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)), INTENT(OUT), OPTIONAL :: blk_size_${idim}$\n         !! block sizes along dimension ${idim}$\n               INTEGER, DIMENSION(dbcsr_t_nblks_total(tensor, ${idim}$)), INTENT(OUT), OPTIONAL :: blk_offset_${idim}$\n         !! block offsets along dimension ${idim}$\n            #:endfor\n            TYPE(dbcsr_t_distribution_type), INTENT(OUT), OPTIONAL    :: distribution\n         !! distribution object\n            CHARACTER(len=*), INTENT(OUT), OPTIONAL                   :: name\n         !! name of tensor\n            INTEGER, INTENT(OUT), OPTIONAL                            :: data_type\n         !! data type of tensor\n            INTEGER, DIMENSION(ndims_tensor(tensor))                  :: pdims_tmp, my_ploc_tmp\n\n            IF (PRESENT(nblks_total)) CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, dims_nd=nblks_total)\n            IF (PRESENT(nfull_total)) CALL dbcsr_t_get_mapping_info(tensor%nd_index, dims_nd=nfull_total)\n            IF (PRESENT(nblks_local)) nblks_local(:) = tensor%nblks_local\n            IF (PRESENT(nfull_local)) nfull_local(:) = tensor%nfull_local\n\n            IF (PRESENT(my_ploc) .OR. PRESENT(pdims)) CALL mp_environ_pgrid(tensor%pgrid, pdims_tmp, my_ploc_tmp)\n            IF (PRESENT(my_ploc)) my_ploc = my_ploc_tmp\n            IF (PRESENT(pdims)) pdims = pdims_tmp\n\n            #:for idim in range(1, maxdim+1)\n               IF (${idim}$ <= ndims_tensor(tensor)) THEN\n                  IF (PRESENT(blks_local_${idim}$)) CALL get_ith_array(tensor%blks_local, ${idim}$, &\n                                                                       dbcsr_t_nblks_local(tensor, ${idim}$), &\n                                                                       blks_local_${idim}$)\n                  IF (PRESENT(proc_dist_${idim}$)) CALL get_ith_array(tensor%nd_dist, ${idim}$, &\n                                                                      dbcsr_t_nblks_total(tensor, ${idim}$), &\n                                                                      proc_dist_${idim}$)\n                  IF (PRESENT(blk_size_${idim}$)) CALL get_ith_array(tensor%blk_sizes, ${idim}$, &\n                                                                     dbcsr_t_nblks_total(tensor, ${idim}$), &\n                                                                     blk_size_${idim}$)\n                  IF (PRESENT(blk_offset_${idim}$)) CALL get_ith_array(tensor%blk_offsets, ${idim}$, &\n                                                                       dbcsr_t_nblks_total(tensor, ${idim}$), &\n                                                                       blk_offset_${idim}$)\n               END IF\n            #:endfor\n\n            IF (PRESENT(distribution)) distribution = dbcsr_t_distribution(tensor)\n            IF (PRESENT(name)) name = tensor%name\n            IF (PRESENT(data_type)) data_type = dbcsr_t_get_data_type(tensor)\n\n         END SUBROUTINE\n\n         PURE FUNCTION dbcsr_t_get_num_blocks(tensor) RESULT(num_blocks)\n      !! As dbcsr_get_num_blocks: get number of local blocks\n            TYPE(dbcsr_t_type), INTENT(IN)    :: tensor\n            INTEGER                           :: num_blocks\n            num_blocks = dbcsr_tas_get_num_blocks(tensor%matrix_rep)\n         END FUNCTION\n\n         FUNCTION dbcsr_t_get_num_blocks_total(tensor) RESULT(num_blocks)\n      !! Get total number of blocks\n            TYPE(dbcsr_t_type), INTENT(IN)    :: tensor\n            INTEGER(KIND=int_8)               :: num_blocks\n            num_blocks = dbcsr_tas_get_num_blocks_total(tensor%matrix_rep)\n         END FUNCTION\n\n         FUNCTION dbcsr_t_get_data_size(tensor) RESULT(data_size)\n      !! As dbcsr_get_data_size\n            TYPE(dbcsr_t_type), INTENT(IN)    :: tensor\n            INTEGER                           :: data_size\n            data_size = dbcsr_tas_get_data_size(tensor%matrix_rep)\n         END FUNCTION\n\n         SUBROUTINE dbcsr_t_clear(tensor)\n      !! Clear tensor (s.t. it does not contain any blocks)\n            TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor\n\n            CALL dbcsr_tas_clear(tensor%matrix_rep)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_finalize(tensor)\n      !! Finalize tensor, as dbcsr_finalize. This should be taken care of internally in dbcsr tensors,\n      !! there should not be any need to call this routine outside of dbcsr tensors.\n\n            TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor\n            CALL dbcsr_tas_finalize(tensor%matrix_rep)\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_scale(tensor, alpha)\n      !! as dbcsr_scale\n            TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor\n            TYPE(dbcsr_scalar_type), INTENT(IN) :: alpha\n            CALL dbcsr_scale(tensor%matrix_rep%matrix, alpha)\n         END SUBROUTINE\n\n         PURE FUNCTION dbcsr_t_get_nze(tensor)\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER                        :: dbcsr_t_get_nze\n            dbcsr_t_get_nze = dbcsr_tas_get_nze(tensor%matrix_rep)\n         END FUNCTION\n\n         FUNCTION dbcsr_t_get_nze_total(tensor)\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER(KIND=int_8)            :: dbcsr_t_get_nze_total\n            dbcsr_t_get_nze_total = dbcsr_tas_get_nze_total(tensor%matrix_rep)\n         END FUNCTION\n\n         PURE FUNCTION dbcsr_t_blk_size(tensor, ind, idim)\n      !! block size of block with index ind along dimension idim\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER, DIMENSION(ndims_tensor(tensor)), &\n               INTENT(IN) :: ind\n            INTEGER, INTENT(IN) :: idim\n            INTEGER, DIMENSION(ndims_tensor(tensor)) :: blk_size\n            INTEGER :: dbcsr_t_blk_size\n\n            IF (idim > ndims_tensor(tensor)) THEN\n               dbcsr_t_blk_size = 0\n            ELSE\n               blk_size(:) = get_array_elements(tensor%blk_sizes, ind)\n               dbcsr_t_blk_size = blk_size(idim)\n            END IF\n         END FUNCTION\n\n         PURE FUNCTION ndims_matrix_row(tensor)\n      !! how many tensor dimensions are mapped to matrix row\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER(int_8) :: ndims_matrix_row\n\n            ndims_matrix_row = ndims_mapping_row(tensor%nd_index_blk)\n\n         END FUNCTION\n\n         PURE FUNCTION ndims_matrix_column(tensor)\n      !! how many tensor dimensions are mapped to matrix column\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER(int_8) :: ndims_matrix_column\n\n            ndims_matrix_column = ndims_mapping_column(tensor%nd_index_blk)\n         END FUNCTION\n\n         PURE FUNCTION dbcsr_t_max_nblks_local(tensor) RESULT(blk_count)\n      !! returns an estimate of maximum number of local blocks in tensor\n      !! (irrespective of the actual number of currently present blocks)\n      !! this estimate is based on the following assumption: tensor data is dense and\n      !! load balancing is within a factor of 2\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor\n            INTEGER :: blk_count, nproc\n            INTEGER, DIMENSION(ndims_tensor(tensor)) :: bdims\n            INTEGER(int_8) :: blk_count_total\n            INTEGER, PARAMETER :: max_load_imbalance = 2\n\n            CALL dbcsr_t_get_mapping_info(tensor%nd_index_blk, dims_nd=bdims)\n\n            blk_count_total = PRODUCT(INT(bdims, int_8))\n\n            ! can not call an MPI routine due to PURE\n            !CALL mp_environ(nproc, myproc, tensor%pgrid%mp_comm_2d)\n            nproc = tensor%pgrid%nproc\n\n            blk_count = INT(blk_count_total/nproc*max_load_imbalance)\n\n         END FUNCTION\n\n         SUBROUTINE dbcsr_t_default_distvec(nblk, nproc, blk_size, dist)\n      !! get a load-balanced and randomized distribution along one tensor dimension\n            INTEGER, INTENT(IN)                                :: nblk\n         !! number of blocks (along one tensor dimension)\n            INTEGER, INTENT(IN)                                :: nproc\n         !! number of processes (along one process grid dimension)\n            INTEGER, DIMENSION(nblk), INTENT(IN)                :: blk_size\n         !! block sizes\n            INTEGER, DIMENSION(nblk), INTENT(OUT)               :: dist\n         !! distribution\n\n            CALL dbcsr_tas_default_distvec(nblk, nproc, blk_size, dist)\n\n         END SUBROUTINE\n\n         SUBROUTINE dbcsr_t_copy_contraction_storage(tensor_in, tensor_out)\n            TYPE(dbcsr_t_type), INTENT(IN) :: tensor_in\n            TYPE(dbcsr_t_type), INTENT(INOUT) :: tensor_out\n            TYPE(dbcsr_t_contraction_storage), ALLOCATABLE :: tensor_storage_tmp\n            TYPE(dbcsr_tas_mm_storage), ALLOCATABLE :: tas_storage_tmp\n\n            IF (tensor_in%matrix_rep%do_batched > 0) THEN\n               ALLOCATE (tas_storage_tmp, SOURCE=tensor_in%matrix_rep%mm_storage)\n               ! transfer data for batched contraction\n               IF (ALLOCATED(tensor_out%matrix_rep%mm_storage)) DEALLOCATE (tensor_out%matrix_rep%mm_storage)\n               CALL move_alloc(tas_storage_tmp, tensor_out%matrix_rep%mm_storage)\n            END IF\n            CALL dbcsr_tas_set_batched_state(tensor_out%matrix_rep, state=tensor_in%matrix_rep%do_batched, &\n                                             opt_grid=tensor_in%matrix_rep%has_opt_pgrid)\n            IF (ALLOCATED(tensor_in%contraction_storage)) THEN\n               ALLOCATE (tensor_storage_tmp, SOURCE=tensor_in%contraction_storage)\n            END IF\n            IF (ALLOCATED(tensor_out%contraction_storage)) DEALLOCATE (tensor_out%contraction_storage)\n            IF (ALLOCATED(tensor_storage_tmp)) CALL move_alloc(tensor_storage_tmp, tensor_out%contraction_storage)\n\n         END SUBROUTINE\n\n      END MODULE\n"
  },
  {
    "path": "src/utils/PACKAGE",
    "content": "{\n\"description\": \"Utilities for DBCSR\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../base\", \"../core\"],\n}\n"
  },
  {
    "path": "src/utils/dbcsr_array_sort.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n#:include 'dbcsr_array_sort.fypp'\n\nMODULE dbcsr_array_sort\n   !! Routine for sorting an array\n   !! @note\n   !! CP2K:\n   !! Please use the interface defined in util.F for calling sort().\n   !! DBCSR:\n   !! Please use the interface defined in dbcsr_toollib.F for calling sort().\n\n   USE dbcsr_kinds, ONLY: ${uselist(usekinds)}$\n\n   IMPLICIT NONE\n   PRIVATE\n\n   LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .FALSE.\n   CHARACTER(len=*), PRIVATE, PARAMETER :: moduleN = 'dbcsr_array_sort'\n\n   #:for nametype in nametype1\n      PUBLIC :: dbcsr_1d_${nametype}$_sort\n   #:endfor\n\nCONTAINS\n\n   #:for nametype1, type1, lessQ in inst_params\n      subroutine dbcsr_1d_${nametype1}$_sort(arr, n, indices)\n      !! Sorts an array inplace using a combination of merge- and bubble-sort.\n      !! It also returns the indices, which the elements had before the sort.\n\n         integer, intent(in)                  :: n\n         !! length of array\n         ${type1}$, dimension(1:n), intent(inout) :: arr\n         !! the array to sort\n         integer, dimension(1:n), intent(out)   :: indices\n         !! returns elements-indices before the sort\n\n         integer :: i\n         ${type1}$, pointer, CONTIGUOUS     :: tmp_arr(:)\n         integer, pointer, CONTIGUOUS       :: tmp_idx(:)\n\n         if (n == 0) return ! for some reason this is a frequent case in cp2k\n\n         ! scratch space used during the merge step\n         allocate (tmp_arr((size(arr) + 1)/2), tmp_idx((size(arr) + 1)/2))\n\n         indices = (/(i, i=1, size(arr))/)\n\n         call dbcsr_1d_${nametype1}$_sort_low(arr(1:n), indices, tmp_arr, tmp_idx)\n\n         deallocate (tmp_arr, tmp_idx)\n\n      end subroutine dbcsr_1d_${nametype1}$_sort\n\n      recursive subroutine dbcsr_1d_${nametype1}$_sort_low(arr, indices, tmp_arr, tmp_idx)\n      !! The actual sort routine.\n      !! Only dbcsr_1d_${nametype1}$_sort and itself should call this.\n\n         ${type1}$, dimension(:), intent(inout) :: arr\n         !! the array to sort\n         integer, dimension(size(arr)), intent(inout) :: indices\n         !! elements-indices before the sort\n         ${type1}$, dimension((size(arr) + 1)/2), intent(inout) :: tmp_arr\n         !! scratch space\n         integer, dimension((size(arr) + 1)/2), intent(inout) :: tmp_idx\n         !! scratch space\n         ${type1}$ :: a\n         integer :: t, m, i, j, k\n         LOGICAL :: swapped\n         ! a,t:  used during swapping of elements in arr and indices\n\n         swapped = .TRUE.\n\n         ! If only a few elements are left we switch to bubble-sort for efficiency.\n         if (size(arr) <= 7) then ! 7 seems to be a good choice for the moment\n            DO j = size(arr) - 1, 1, -1\n               swapped = .FALSE.\n               DO i = 1, j\n                  IF (@{lessQ(arr(i+1), arr(i))}@) THEN\n                     ! swap arr(i) with arr(i+1)\n                     a = arr(i)\n                     arr(i) = arr(i + 1)\n                     arr(i + 1) = a\n                     ! swap indices(i) with indices(i+1)\n                     t = indices(i)\n                     indices(i) = indices(i + 1)\n                     indices(i + 1) = t\n                     swapped = .true.\n                  END IF\n               END DO\n               IF (.NOT. swapped) EXIT\n            END DO\n            return\n         end if\n\n         ! split list in half and recursively sort both sublists\n         m = (size(arr) + 1)/2 ! index where we going to divide the list in two\n         call dbcsr_1d_${nametype1}$_sort_low(arr(1:m), indices(1:m), tmp_arr, tmp_idx)\n         call dbcsr_1d_${nametype1}$_sort_low(arr(m + 1:), indices(m + 1:), tmp_arr, tmp_idx)\n\n         ! Check for a special case: Can we just concatenate the two sorted sublists?\n         ! This leads to O(n) scaling if the input is already sorted.\n         if (@{lessQ(arr(m+1), arr(m))}@) then\n            ! ...no - let's merge the two sorted sublists arr(:m) and arr(m+1:)\n            ! Merge will be performed directly in arr. Need backup of first sublist.\n            tmp_arr(1:m) = arr(1:m)\n            tmp_idx(1:m) = indices(1:m)\n            i = 1; ! number of elements consumed from 1st sublist\n            j = 1; ! number of elements consumed from 2nd sublist\n            k = 1; ! number of elements already merged\n\n            do while (i <= m .and. j <= size(arr) - m)\n            if (@{lessQ(arr(m+j), tmp_arr(i))}@) then\n               arr(k) = arr(m + j)\n               indices(k) = indices(m + j)\n               j = j + 1\n            else\n               arr(k) = tmp_arr(i)\n               indices(k) = tmp_idx(i)\n               i = i + 1\n            end if\n            k = k + 1\n            end do\n\n            ! One of the two sublist is now empty.\n            ! Copy possibly remaining tail of 1st sublist\n            do while (i <= m)\n               arr(k) = tmp_arr(i)\n               indices(k) = tmp_idx(i)\n               i = i + 1\n               k = k + 1\n            end do\n\n            ! The possibly remaining tail of 2nd sublist is already at the right spot.\n\n         end if\n\n      end subroutine dbcsr_1d_${nametype1}$_sort_low\n   #:endfor\n\nEND MODULE dbcsr_array_sort\n"
  },
  {
    "path": "src/utils/dbcsr_array_sort.fypp",
    "content": "#!--------------------------------------------------------------------------------------------------!\n#! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n#! This file is part of the DBCSR library.                                                          !\n#!                                                                                                  !\n#! For information on the license, see the LICENSE file.                                            !\n#! For further information please visit https://dbcsr.cp2k.org                                      !\n#! SPDX-License-Identifier: GPL-2.0+                                                                !\n#!--------------------------------------------------------------------------------------------------!\n\n#:mute\n\n#:set nametype1 =['d', 's', 'i4', 'i8']\n#:set type1 = ['REAL(kind=real_8)','REAL(kind=real_4)','INTEGER(kind=int_4)','INTEGER(kind=int_8)']\n#:set usekinds = ['real_8', 'real_4', 'int_4', 'int_8']\n\n#:def lessQnum(el1, el2)\n${el1}$ < ${el2}$\n#:enddef\n\n#:set lessQ = [lessQnum, lessQnum, lessQnum, lessQnum]\n\n#:set inst_params = list(zip(nametype1, type1, lessQ))\n\n#:def uselist(list_in)\n#!    comma-separated list of unique entries of list_in\n$:    \", \".join(list(set(list_in)))\n#:enddef\n\n#:endmute\n"
  },
  {
    "path": "src/utils/dbcsr_blas_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_blas_operations\n   !! Wrappers to BLAS calls.\n   USE dbcsr_kinds, ONLY: int_8\n   USE dbcsr_types, ONLY: dbcsr_data_obj, &\n                          dbcsr_type_complex_4, &\n                          dbcsr_type_complex_8, &\n                          dbcsr_type_real_4, &\n                          dbcsr_type_real_8\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_blas_operations'\n\n   PUBLIC :: dbcsr_lapack_larnv, set_larnv_seed\n\nCONTAINS\n\n   SUBROUTINE set_larnv_seed(irow, nrow, icol, ncol, ival, iseed)\n      !! generate a seed respecting the lapack constraints,\n      !! - values between 0..4095 (2**12-1)\n      !! - iseed(4) odd\n      !! also try to avoid iseed that are zero.\n      !! Have but with a unique 2D mapping (irow,icol), and a 'mini-seed' ival\n\n      INTEGER, INTENT(IN)                                :: irow, nrow, icol, ncol, ival\n         !! 1..nrow\n         !! nrow\n         !! 1..ncol\n         !! ncol\n         !! mini-seed\n      INTEGER, INTENT(OUT)                               :: iseed(4)\n         !! a lapack compatible seed\n\n      INTEGER(KIND=int_8)                                :: map\n\n      map = ((irow - 1 + icol*INT(nrow, int_8))*(1 + MODULO(ival, 2**16)))*2 + 1 + 0*ncol ! ncol used\n      iseed(4) = INT(MODULO(map, 2_int_8**12)); map = map/2_int_8**12; ! keep odd\n      iseed(3) = INT(MODULO(IEOR(map, 3541_int_8), 2_int_8**12)); map = map/2_int_8**12\n      iseed(2) = INT(MODULO(IEOR(map, 1153_int_8), 2_int_8**12)); map = map/2_int_8**12\n      iseed(1) = INT(MODULO(IEOR(map, 2029_int_8), 2_int_8**12)); map = map/2_int_8**12\n   END SUBROUTINE set_larnv_seed\n\n   SUBROUTINE dbcsr_lapack_larnv(idist, iseed, n, x)\n      !! fills an array with random numbers\n\n      INTEGER, INTENT(IN)                                :: idist\n         !! type of distribution (1..3, see lapack docs)\n      INTEGER, DIMENSION(:), INTENT(INOUT)               :: iseed\n         !! requires each int to be in the range 0..2**12, and the iseed(4) odd\n      INTEGER, INTENT(IN)                                :: n\n      TYPE(dbcsr_data_obj), INTENT(INOUT)                :: x\n\n      SELECT CASE (x%d%data_type)\n      CASE (dbcsr_type_real_4)\n         CALL slarnv(idist, iseed, n, x%d%r_sp)\n      CASE (dbcsr_type_real_8)\n         CALL dlarnv(idist, iseed, n, x%d%r_dp)\n      CASE (dbcsr_type_complex_4)\n         CALL clarnv(idist, iseed, n, x%d%c_sp)\n      CASE (dbcsr_type_complex_8)\n         CALL zlarnv(idist, iseed, n, x%d%c_dp)\n      CASE default\n         DBCSR_ABORT(\"Invalid data type\")\n      END SELECT\n   END SUBROUTINE dbcsr_lapack_larnv\n\nEND MODULE dbcsr_blas_operations\n"
  },
  {
    "path": "src/utils/dbcsr_btree.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n#:include 'dbcsr_btree.fypp'\n\nMODULE dbcsr_btree\n   !! B-tree\n   IMPLICIT NONE\n   PRIVATE\n\n   !API\n   PUBLIC :: btree_new, btree_add, btree_find, &\n             btree_delete, btree_get_entries\n   #:for nt in nametype\n      PUBLIC :: btree_${nt}$\n   #:endfor\n\n   INTEGER, PARAMETER :: keyt = SELECTED_INT_KIND(10)\n   INTEGER, PARAMETER :: valt = SELECTED_INT_KIND(5)\n   INTEGER, PARAMETER :: sp = KIND(0.0)\n   INTEGER, PARAMETER :: dp = KIND(0.0d0)\n\n   #:for ts in type2setup\n      $:ts\n   #:endfor\n\n   INTERFACE btree_new\n      #:for nt in nametype\n         MODULE PROCEDURE btree_new_${nt}$\n      #:endfor\n   END INTERFACE\n\n   INTERFACE btree_add\n      #:for nt in nametype\n         MODULE PROCEDURE btree_add_${nt}$\n      #:endfor\n   END INTERFACE\n\n   INTERFACE btree_find\n      #:for nt in nametype\n         MODULE PROCEDURE btree_find_${nt}$\n      #:endfor\n   END INTERFACE\n\n   INTERFACE btree_delete\n      #:for nt in nametype\n         MODULE PROCEDURE btree_delete_${nt}$\n      #:endfor\n   END INTERFACE\n\n   INTERFACE btree_get_entries\n      #:for nt in nametype\n         MODULE PROCEDURE btree_get_entries_${nt}$\n      #:endfor\n   END INTERFACE\n\n   #:for nametype, nametype1, nametype2, type1, type2, defaultFormatType1, defaultFormatType2, accessorType2 in inst_params\n      TYPE btree_node_${nametype}$\n         INTEGER :: id = -1\n         INTEGER :: filled = -1\n         ${type1}$, DIMENSION(:), POINTER :: keys => NULL()\n         ${type2}$, DIMENSION(:), POINTER :: values => NULL()\n         TYPE(btree_node_p_${nametype}$), DIMENSION(:), POINTER :: subtrees => NULL()\n         TYPE(btree_node_${nametype}$), POINTER :: parent => NULL()\n      END TYPE btree_node_${nametype}$\n\n      TYPE btree_node_p_${nametype}$\n         TYPE(btree_node_${nametype}$), POINTER :: node => NULL()\n      END TYPE btree_node_p_${nametype}$\n\n      TYPE btree_node_structure_${nametype}$\n         INTEGER :: min_fill = -1, max_fill = -1\n         INTEGER :: n = -1\n         INTEGER :: lastid = -1\n         INTEGER :: refcount = -1\n         TYPE(btree_node_${nametype}$), POINTER :: root => NULL()\n      END TYPE btree_node_structure_${nametype}$\n\n      TYPE btree_${nametype}$\n         TYPE(btree_node_structure_${nametype}$) :: b = btree_node_structure_${nametype}$ ()\n      END TYPE btree_${nametype}$\n   #:endfor\n\nCONTAINS\n\n   #:for nametype, nametype1, nametype2, type1, type2, defaultFormatType1, defaultFormatType2, accessorType2 in inst_params\n      SUBROUTINE btree_new_${nametype}$ (tree, order)\n         TYPE(btree_${nametype}$), INTENT(OUT) :: tree\n         INTEGER, INTENT(IN), OPTIONAL :: order\n         INTEGER :: maxs, mins\n         !\n         IF (PRESENT(order)) THEN\n            maxs = order - 1\n         ELSE\n            maxs = 15\n         END IF\n         mins = ISHFT(maxs, -1)\n         IF (mins*2 .GT. maxs) maxs = 2*maxs\n         IF (mins .LT. 1) mins = 1\n         IF (maxs .LT. 3) maxs = 3\n         tree%b%min_fill = mins\n         tree%b%max_fill = maxs\n         tree%b%refcount = 1\n         tree%b%n = 0\n         NULLIFY (tree%b%root)\n         tree%b%lastid = 0\n      END SUBROUTINE btree_new_${nametype}$\n\n      FUNCTION btree_get_entries_${nametype}$ (tree) RESULT(num_entries)\n         TYPE(btree_${nametype}$), INTENT(INOUT) :: tree\n         INTEGER :: num_entries\n         num_entries = tree%b%n\n      END FUNCTION btree_get_entries_${nametype}$\n\n      ! node is a non-leaf node\n      SUBROUTINE btree_adopt_subtrees_${nametype}$ (node)\n         TYPE(btree_node_${nametype}$), POINTER :: node\n         INTEGER :: i\n         !\n         ! Assume that node is not a leaf!\n         DO i = 1, node%filled + 1\n            !IF (ASSOCIATED (node%subtrees(i)%node)) THEN\n            !IF (.NOT. ASSOCIATED (node%subtrees(i)%node%parent,&\n            ! node)) THEN\n            node%subtrees(i)%node%parent => node\n            !ENDIF\n            !ENDIF\n         END DO\n      END SUBROUTINE btree_adopt_subtrees_${nametype}$\n\n      SUBROUTINE btree_delete_${nametype}$ (tree, keys, values)\n         TYPE(btree_${nametype}$), INTENT(INOUT) :: tree\n         ${type1}$, DIMENSION(:), INTENT(OUT), OPTIONAL :: keys\n         ${type2}$, DIMENSION(:), INTENT(OUT), OPTIONAL :: values\n         INTEGER :: pos\n         !\n         IF (ASSOCIATED(tree%b%root)) THEN\n            pos = 0\n            IF (PRESENT(keys) .AND. PRESENT(values)) THEN\n               pos = 1\n               CALL btree_delete_node_${nametype}$ (tree%b%root, pos, keys, values)\n            ELSE\n               CALL btree_delete_node_${nametype}$ (tree%b%root)\n            END IF\n         END IF\n         NULLIFY (tree%b%root)\n      END SUBROUTINE btree_delete_${nametype}$\n\n      RECURSIVE SUBROUTINE btree_delete_node_${nametype}$ (node, pos, keys, values)\n         TYPE(btree_node_${nametype}$), POINTER :: node\n         INTEGER, INTENT(INOUT), OPTIONAL :: pos\n         ${type1}$, DIMENSION(:), INTENT(INOUT), OPTIONAL :: keys\n         ${type2}$, DIMENSION(:), INTENT(INOUT), OPTIONAL :: values\n         !\n         INTEGER :: i\n         !\n         IF (node%filled .GT. 0 .AND. ASSOCIATED(node%subtrees(1)%node)) THEN\n            DO i = 1, node%filled + 1\n               IF (PRESENT(pos)) THEN\n                  CALL btree_delete_node_${nametype}$ (node%subtrees(i)%node, pos, keys, values)\n               ELSE\n                  CALL btree_delete_node_${nametype}$ (node%subtrees(i)%node)\n               END IF\n               IF (PRESENT(pos) .AND. i .LE. node%filled) THEN\n                  keys(pos) = node%keys(i)\n                  values(pos) = node%values(i)\n                  pos = pos + 1\n               END IF\n            END DO\n         ELSEIF (PRESENT(pos) .AND. node%filled .GT. 0) THEN\n            keys(pos:pos + node%filled - 1) = node%keys(1:node%filled)\n            values(pos:pos + node%filled - 1) = node%values(1:node%filled)\n            pos = pos + node%filled\n         END IF\n         CALL btree_free_node_${nametype}$ (node)\n      END SUBROUTINE btree_delete_node_${nametype}$\n\n      ! Find the key\n      ! IF node still has space, insert & update the node\n      ! else\n      ! 1. select median\n      ! 2. split keys into two nodes (one is new)\n      ! 3. insert separation key put into parent, and repeat upwards\n\n      SUBROUTINE btree_add_${nametype}$ (tree, key, value, exists, existing_value, replace)\n         TYPE(btree_${nametype}$), INTENT(INOUT) :: tree\n         ${type1}$, INTENT(IN) :: key\n         ${type2}$, INTENT(IN) :: value\n         LOGICAL, INTENT(OUT), OPTIONAL :: exists\n         ${type2}$, INTENT(OUT), OPTIONAL :: existing_value\n         LOGICAL, INTENT(IN), OPTIONAL :: replace\n         !\n         TYPE(btree_node_${nametype}$), POINTER :: node\n         INTEGER :: ge_pos, position\n         !\n         IF (PRESENT(exists)) THEN\n            CALL btree_find_full_${nametype}$ (tree, key, node, position, ge_pos, short=.TRUE.)\n            IF (position .GT. 0) THEN\n               exists = .TRUE.\n               existing_value = node%values(position)\n               IF (PRESENT(replace)) THEN\n                  IF (replace) THEN\n                     node%values(position) = value\n                  END IF\n               END IF\n               RETURN\n            ELSE\n               exists = .FALSE.\n            END IF\n         ELSE\n            CALL btree_find_leaf_${nametype}$ (tree, key, node, ge_pos)\n         END IF\n         CALL btree_add_into_${nametype}$ (tree, node, key, value, before=ge_pos)\n         IF (PRESENT(exists)) existing_value = value\n         tree%b%n = tree%b%n + 1\n      END SUBROUTINE btree_add_${nametype}$\n\n      RECURSIVE SUBROUTINE btree_add_into_${nametype}$ (tree, node, key, value, before, subtree)\n         TYPE(btree_${nametype}$), INTENT(INOUT) :: tree\n         TYPE(btree_node_${nametype}$), POINTER :: node\n         ${type1}$, INTENT(IN) :: key\n         ${type2}$, INTENT(IN) :: value\n         INTEGER, INTENT(IN), OPTIONAL :: before\n         TYPE(btree_node_${nametype}$), POINTER, OPTIONAL :: subtree\n         !\n         TYPE(btree_node_${nametype}$), POINTER :: new_node\n         ${type1}$ :: upgrade_key\n         INTEGER :: ge_pos, split_pos\n         ${type2}$ :: upgrade_value\n         LOGICAL :: leaf\n         !\n         ! Root is special\n         IF (.NOT. ASSOCIATED(node)) THEN\n            CALL btree_new_root_${nametype}$ (tree, key, value)\n            IF (PRESENT(subtree)) THEN\n               tree%b%root%subtrees(2)%node => subtree\n               subtree%parent => tree%b%root\n            END IF\n            RETURN\n         END IF\n         ! Where the insertion takes place.\n         IF (PRESENT(before)) THEN\n            ge_pos = before\n         ELSE\n            CALL btree_node_find_gt_pos_${nametype}$ (node%keys, key, ge_pos, node%filled)\n         END IF\n         ! Addition is easy if the node has enough space.\n         leaf = .NOT. ASSOCIATED(node%subtrees(1)%node)\n         IF (node%filled .LT. tree%b%max_fill) THEN\n            IF (PRESENT(subtree)) THEN\n               CALL btree_simple_insertion_${nametype}$ (node, key, value, ge_pos, subtree)\n            ELSE\n               CALL btree_simple_insertion_${nametype}$ (node, key, value, ge_pos)\n            END IF\n            RETURN\n         ELSE\n            split_pos = ISHFT(tree%b%max_fill + 1, -1)\n            ! I assert that split_pos <= SIZE(node%keys)\n            CALL btree_new_node_${nametype}$ (tree, new_node)\n            ! The key to be added falls in the left node\n            node%filled = split_pos - 1\n            IF (ge_pos .LE. split_pos) THEN\n               IF (ge_pos .EQ. split_pos) THEN\n                  upgrade_key = key\n                  upgrade_value = value\n               ELSE\n                  upgrade_key = node%keys(split_pos - 1)\n                  upgrade_value = node%values(split_pos - 1)\n               END IF\n               IF (PRESENT(subtree)) THEN\n                  CALL btree_left_insertion_${nametype}$ (tree, node, new_node, key, value, &\n                                                          ge_pos, split_pos, subtree)\n                  !CALL btree_adopt_subtrees_${nametype}$ (new_node)\n               ELSE\n                  CALL btree_left_insertion_${nametype}$ (tree, node, new_node, key, value, &\n                                                          ge_pos, split_pos)\n               END IF\n               !\n            ELSE\n               upgrade_key = node%keys(split_pos)\n               upgrade_value = node%values(split_pos)\n               IF (PRESENT(subtree)) THEN\n                  CALL btree_right_insertion_${nametype}$ (tree, node, new_node, key, value, &\n                                                           ge_pos, split_pos, subtree)\n                  !CALL btree_adopt_subtrees_${nametype}$ (new_node)\n               ELSE\n                  CALL btree_right_insertion_${nametype}$ (tree, node, new_node, key, value, &\n                                                           ge_pos, split_pos)\n               END IF\n               !\n            END IF\n            !\n            new_node%parent => node%parent\n            !\n            IF (.NOT. leaf) THEN\n               CALL btree_adopt_subtrees_${nametype}$ (new_node)\n            END IF\n            !\n            CALL btree_add_into_${nametype}$ (tree, node%parent, upgrade_key, upgrade_value, &\n                                              subtree=new_node)\n            !\n         END IF\n      END SUBROUTINE btree_add_into_${nametype}$\n\n      SUBROUTINE btree_simple_insertion_${nametype}$ (node, key, value, before, subtree)\n         TYPE(btree_node_${nametype}$), INTENT(INOUT) :: node\n         ${type1}$, INTENT(IN) :: key\n         ${type2}$, INTENT(IN) :: value\n         INTEGER, INTENT(IN) :: before\n         TYPE(btree_node_${nametype}$), POINTER, OPTIONAL :: subtree\n         !\n         ! Shift keys\n         node%keys(before + 1:node%filled + 1) = node%keys(before:node%filled)\n         node%keys(before) = key\n         ! Shift values\n         node%values(before + 1:node%filled + 1) = node%values(before:node%filled)\n         node%values(before) = value\n         ! Shift subtree pointers, but only if node is not a leaf ; assume\n         ! leaf <=> present(subtree)\n         IF (PRESENT(subtree)) THEN\n            node%subtrees(before + 2:node%filled + 2) = &\n               node%subtrees(before + 1:node%filled + 1)\n            node%subtrees(before + 1)%node => subtree\n         END IF\n         node%filled = node%filled + 1\n      END SUBROUTINE btree_simple_insertion_${nametype}$\n\n      SUBROUTINE btree_left_insertion_${nametype}$ (tree, node, new_node, key, value, before, split_pos, subtree)\n         TYPE(btree_${nametype}$), INTENT(IN) :: tree\n         TYPE(btree_node_${nametype}$), INTENT(INOUT) :: node, new_node\n         ${type1}$, INTENT(IN) :: key\n         ${type2}$, INTENT(IN) :: value\n         INTEGER, INTENT(IN) :: before, split_pos\n         TYPE(btree_node_${nametype}$), POINTER, OPTIONAL :: subtree\n         !\n         new_node%filled = (tree%b%max_fill) - (split_pos - 1)\n         new_node%keys(1:new_node%filled) = &\n            node%keys(split_pos:tree%b%max_fill)\n         new_node%values(1:new_node%filled) = &\n            node%values(split_pos:tree%b%max_fill)\n         !IF (ASSOCIATED (node%subtrees(1)%node)) THEN\n         IF (PRESENT(subtree)) THEN\n            IF (before .EQ. split_pos) THEN\n               new_node%subtrees(2:new_node%filled + 1) = &\n                  node%subtrees(split_pos + 1:tree%b%max_fill + 1)\n               new_node%subtrees(1)%node => subtree\n            ELSE\n               new_node%subtrees(1:new_node%filled + 1) = &\n                  node%subtrees(split_pos:tree%b%max_fill + 1)\n            END IF\n         END IF\n         ! Fill node%{keys,values}(1:node%filled), where node%filled\n         ! is split_pos-1, but do insert the new value at ge_pos. The\n         ! key/value at split_pos is to be inserted into the\n         ! parent.\n         ! The new tree is added to the right of the new insertion.\n         node%keys(before + 1:node%filled) = node%keys(before:node%filled - 1)\n         node%keys(before) = key\n         node%values(before + 1:node%filled) = node%values(before:node%filled - 1)\n         node%values(before) = value\n         IF (PRESENT(subtree)) THEN\n            node%subtrees(before + 2:node%filled + 1) = &\n               node%subtrees(before + 1:node%filled)\n            node%subtrees(before + 1)%node => subtree\n         ELSE\n            NULLIFY (node%subtrees(before + 1)%node)\n         END IF\n      END SUBROUTINE btree_left_insertion_${nametype}$\n\n      SUBROUTINE btree_right_insertion_${nametype}$ (tree, node, new_node, key, value, before, split_pos, subtree)\n         TYPE(btree_${nametype}$), INTENT(IN) :: tree\n         TYPE(btree_node_${nametype}$), INTENT(INOUT) :: node, new_node\n         ${type1}$, INTENT(IN) :: key\n         ${type2}$, INTENT(IN) :: value\n         INTEGER, INTENT(IN) :: before, split_pos\n         TYPE(btree_node_${nametype}$), POINTER, OPTIONAL :: subtree\n         !\n         new_node%filled = (tree%b%max_fill + 1) - split_pos\n         new_node%keys(1:before - split_pos - 1) = &\n            node%keys(split_pos + 1:before - 1)\n         new_node%keys(before - split_pos) = key\n         new_node%keys(before - split_pos + 1:new_node%filled) = &\n            node%keys(before:tree%b%max_fill)\n         new_node%values(1:before - split_pos - 1) = &\n            node%values(split_pos + 1:before - 1)\n         new_node%values(before - split_pos) = value\n         new_node%values(before - split_pos + 1:new_node%filled) = &\n            node%values(before:tree%b%max_fill)\n         IF (PRESENT(subtree)) THEN\n            new_node%subtrees(1:before - split_pos) = &\n               node%subtrees(split_pos + 1:before)\n            new_node%subtrees(before - split_pos + 1)%node => subtree\n            new_node%subtrees(before - split_pos + 2:new_node%filled + 1) = &\n               node%subtrees(before + 1:tree%b%max_fill + 1)\n         END IF\n      END SUBROUTINE btree_right_insertion_${nametype}$\n\n      SUBROUTINE btree_new_root_${nametype}$ (tree, key, value)\n         TYPE(btree_${nametype}$), INTENT(INOUT) :: tree\n         ${type1}$, INTENT(IN) :: key\n         ${type2}$, INTENT(IN) :: value\n         TYPE(btree_node_${nametype}$), POINTER :: old_root, new_root\n         !\n         CALL btree_new_node_${nametype}$ (tree, new_root)\n         new_root%filled = 1\n         new_root%keys(1) = key\n         new_root%values(1) = value\n         IF (ASSOCIATED(tree%b%root)) THEN\n            old_root => tree%b%root\n            old_root%parent => new_root\n            new_root%subtrees(1)%node => old_root\n            old_root%parent => new_root\n         END IF\n         tree%b%root => new_root\n      END SUBROUTINE btree_new_root_${nametype}$\n\n      SUBROUTINE btree_new_node_${nametype}$ (tree, node)\n         TYPE(btree_${nametype}$), INTENT(INOUT) :: tree\n         TYPE(btree_node_${nametype}$), POINTER :: node\n         INTEGER :: i\n         !\n         ALLOCATE (node)\n         ALLOCATE (node%keys(tree%b%max_fill))\n         ALLOCATE (node%values(tree%b%max_fill))\n         ALLOCATE (node%subtrees(tree%b%max_fill + 1))\n         DO i = 1, tree%b%max_fill + 1\n            NULLIFY (node%subtrees(i)%node)\n         END DO\n         node%filled = 0\n         NULLIFY (node%parent)\n         tree%b%lastid = tree%b%lastid + 1\n         node%id = tree%b%lastid\n      END SUBROUTINE btree_new_node_${nametype}$\n\n      SUBROUTINE btree_free_node_${nametype}$ (node)\n         TYPE(btree_node_${nametype}$), POINTER :: node\n         !\n         DEALLOCATE (node%keys)\n         DEALLOCATE (node%values)\n         DEALLOCATE (node%subtrees)\n         DEALLOCATE (node)\n      END SUBROUTINE btree_free_node_${nametype}$\n\n      SUBROUTINE btree_find_${nametype}$ (tree, key, value, exists)\n         TYPE(btree_${nametype}$), INTENT(IN) :: tree\n         ${type1}$, INTENT(IN) :: key\n         ${type2}$, INTENT(OUT) :: value\n         LOGICAL, INTENT(OUT), OPTIONAL :: exists\n         !\n         TYPE(btree_node_${nametype}$), POINTER :: node\n         INTEGER :: position\n         !\n         CALL btree_find_full_${nametype}$ (tree, key, node, position, short=.TRUE.)\n         IF (PRESENT(exists)) THEN\n            exists = position .GT. 0\n         END IF\n         IF (position .GT. 0) THEN\n            value = node%values(position)\n         END IF\n      END SUBROUTINE btree_find_${nametype}$\n\n      SUBROUTINE btree_node_find_ge_pos_${nametype}$ (keys, key, position, filled)\n         ${type1}$, DIMENSION(:) :: keys\n         ${type1}$, INTENT(IN) :: key\n         INTEGER, INTENT(OUT) :: position\n         INTEGER, INTENT(IN) :: filled\n         INTEGER :: left, right\n         !\n         IF (keys(1) .GE. key) THEN\n            position = 1\n            RETURN\n         END IF\n         IF (keys(filled) .LT. key) THEN\n            position = filled + 1\n            RETURN\n         END IF\n         left = 2\n         right = filled\n         position = MAX(ISHFT(left + right, -1), left)\n         DO WHILE (left .LE. right)\n            IF (keys(position) .GE. key .AND. keys(position - 1) .LT. key) THEN\n               RETURN\n            END IF\n            IF (keys(position) .GE. key) right = MIN(position, right - 1)\n            IF (keys(position) .LT. key) left = MAX(position, left + 1)\n            position = MAX(ISHFT(left + right, -1), left)\n         END DO\n      END SUBROUTINE btree_node_find_ge_pos_${nametype}$\n\n      SUBROUTINE btree_node_find_gt_pos_${nametype}$ (keys, key, position, filled)\n         ${type1}$, DIMENSION(:) :: keys\n         ${type1}$, INTENT(IN) :: key\n         INTEGER, INTENT(OUT) :: position\n         INTEGER, INTENT(IN) :: filled\n         INTEGER :: left, right\n         !\n         IF (keys(1) .GT. key) THEN\n            position = 1\n            RETURN\n         END IF\n         IF (keys(filled) .LE. key) THEN\n            position = filled + 1\n            RETURN\n         END IF\n         left = 2\n         right = filled\n         position = MAX(ISHFT(left + right, -1), left)\n         DO WHILE (left .LE. right)\n            IF (keys(position) .GT. key .AND. keys(position - 1) .LE. key) THEN\n               RETURN\n            END IF\n            IF (keys(position) .GT. key) right = MIN(position, right - 1)\n            IF (keys(position) .LE. key) left = MAX(position, left + 1)\n            position = MAX(ISHFT(left + right, -1), left)\n         END DO\n      END SUBROUTINE btree_node_find_gt_pos_${nametype}$\n\n      SUBROUTINE btree_node_find_gte_pos_${nametype}$ (keys, key, position, filled, first)\n         ${type1}$, DIMENSION(:) :: keys\n         ${type1}$, INTENT(IN) :: key\n         INTEGER, INTENT(OUT) :: position\n         INTEGER, INTENT(IN) :: filled\n         INTEGER, INTENT(IN), OPTIONAL :: first\n         INTEGER :: left, right, one\n         !\n         one = 1\n         IF (PRESENT(FIRST)) one = first\n         IF (one .LE. filled) THEN\n            IF (keys(one) .GT. key) THEN\n               position = one\n               RETURN\n            END IF\n         END IF\n         IF (keys(filled) .LE. key) THEN\n            position = filled + 1\n            RETURN\n         END IF\n         left = one + 1\n         right = filled\n         position = MAX(ISHFT(left + right, -1), left)\n         DO WHILE (left .LE. right)\n            IF (keys(position) .GT. key .AND. keys(position - 1) .LE. key) THEN\n               RETURN\n            END IF\n            IF (keys(position) .GT. key) right = MIN(position, right - 1)\n            IF (keys(position) .LE. key) left = MAX(position, left + 1)\n            position = MAX(ISHFT(left + right, -1), left)\n         END DO\n      END SUBROUTINE btree_node_find_gte_pos_${nametype}$\n\n      ! node is unassociated and position=0 if not found\n      ! Precondition: The key is tree or its subtree.\n\n      SUBROUTINE btree_find_full_${nametype}$ (tree, key, node, position, ge_position, short)\n         TYPE(btree_${nametype}$), INTENT(IN) :: tree\n         ${type1}$, INTENT(IN) :: key\n         TYPE(btree_node_${nametype}$), POINTER :: node\n         INTEGER, INTENT(OUT) :: position\n         INTEGER, INTENT(OUT), OPTIONAL :: ge_position\n         LOGICAL, INTENT(IN), OPTIONAL :: short\n         INTEGER :: gti ! Used mark searches\n         LOGICAL :: stop_short\n         !\n         stop_short = .FALSE.\n         IF (PRESENT(short)) stop_short = short\n         NULLIFY (node)\n         position = 0\n         IF (PRESENT(ge_position)) ge_position = 0\n         !IF (tree%b%n .EQ. 0) RETURN\n         IF (.NOT. ASSOCIATED(tree%b%root)) RETURN\n         gti = 1\n         ! Try to find the key in the given node. If it's found, then\n         ! return the node.\n         node => tree%b%root\n         descent: DO WHILE (.TRUE.)\n            ! Try to find the first element equal to or greater than the\n            ! one we're searching for.\n            CALL btree_node_find_ge_pos_${nametype}$ (node%keys, key, position, node%filled)\n            ! One of three things is now true about position: it's now\n            ! greater than the number of keys (if all keys are smaller), or\n            ! it points to the key that is equal to or greater than the one\n            ! we are searching for. If it is found and we are just\n            ! searching for one equal element (i.e., user search), we can\n            ! return.\n            IF (stop_short .AND. position .LE. node%filled) THEN\n               IF (node%keys(position) .EQ. key) THEN\n                  IF (PRESENT(ge_position)) ge_position = position\n                  RETURN\n               END IF\n            END IF\n            ! If the key is not found, then either return the GE position\n            ! if we're in a leaf (case 2 here), otherwise descend into the\n            ! subtrees.\n            !CALL btree_node_find_gt_pos_${nametype}$ (node%keys, key, gti, node%filled, position)\n            CALL btree_node_find_gte_pos_${nametype}$ (node%keys, key, gti, node%filled, position)\n            IF (ASSOCIATED(node%subtrees(1)%node)) THEN\n               node => node%subtrees(gti)%node\n            ELSE\n               IF (PRESENT(ge_position)) ge_position = gti\n               position = 0\n               RETURN\n            END IF\n         END DO descent\n      END SUBROUTINE btree_find_full_${nametype}$\n\n      ! node is unassociated and position=0 if not found\n      ! Precondition: The key is tree or its subtree.\n\n      SUBROUTINE btree_find_leaf_${nametype}$ (tree, key, node, gti)\n         TYPE(btree_${nametype}$), INTENT(IN) :: tree\n         ${type1}$, INTENT(IN) :: key\n         TYPE(btree_node_${nametype}$), POINTER :: node\n         INTEGER, INTENT(OUT) :: gti\n         !\n         NULLIFY (node)\n         !IF (tree%b%n .EQ. 0) RETURN\n         IF (.NOT. ASSOCIATED(tree%b%root)) RETURN\n         gti = 1\n         ! Try to find the key in the given node. If it's found, then\n         ! return the node.\n         node => tree%b%root\n         descent: DO WHILE (.TRUE.)\n            ! Try to find the first element equal to or greater than the\n            ! one we're searching for.\n            !CALL btree_node_find_ge_pos_${nametype}$ (node%keys, key, position, node%filled)\n            ! One of three things is now true about position: it's now\n            ! greater than the number of keys (if all keys are smaller), or\n            ! it points to the key that is equal to or greater than the one\n            ! we are searching for. If it is found and we are just\n            ! searching for one equal element (i.e., user search), we can\n            ! return.\n            !\n            ! If the key is not found, then either return the GE position\n            ! if we're in a leaf (case 2 here), otherwise descend into the\n            ! subtrees.\n            CALL btree_node_find_gt_pos_${nametype}$ (node%keys, key, gti, node%filled)\n            !CALL btree_node_find_gt2_pos_${nametype}$ (node%keys, key, i, node%filled)\n            !IF (i .NE. gti) WRITE(*,*)'XXXX difference',i,gti\n            IF (ASSOCIATED(node%subtrees(1)%node)) THEN\n               node => node%subtrees(gti)%node\n            ELSE\n               RETURN\n            END IF\n         END DO descent\n      END SUBROUTINE btree_find_leaf_${nametype}$\n   #:endfor\n\nEND MODULE dbcsr_btree\n"
  },
  {
    "path": "src/utils/dbcsr_btree.fypp",
    "content": "#!--------------------------------------------------------------------------------------------------!\n#! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n#! This file is part of the DBCSR library.                                                          !\n#!                                                                                                  !\n#! For information on the license, see the LICENSE file.                                            !\n#! For further information please visit https://dbcsr.cp2k.org                                      !\n#! SPDX-License-Identifier: GPL-2.0+                                                                !\n#!--------------------------------------------------------------------------------------------------!\n\n#:mute\n\n#:def type2setup_1_get()\nTYPE btree_data_sp2d\nREAL(KIND=sp), DIMENSION(:,:), POINTER :: p => NULL()\nLOGICAL :: tr = .FALSE.\nEND TYPE btree_data_sp2d\nPUBLIC :: btree_data_sp2d\n#:enddef\n\n#:def type2setup_2_get()\nTYPE btree_data_dp2d\nREAL(KIND=dp), DIMENSION(:,:), POINTER :: p => NULL()\nLOGICAL :: tr = .FALSE.\nEND TYPE btree_data_dp2d\nPUBLIC :: btree_data_dp2d\n#:enddef\n\n#:def type2setup_3_get()\nTYPE btree_data_cp2d\nCOMPLEX(KIND=sp), DIMENSION(:,:), POINTER :: p => NULL()\nLOGICAL :: tr = .FALSE.\nEND TYPE btree_data_cp2d\nPUBLIC :: btree_data_cp2d\n#:enddef\n\n#:def type2setup_4_get()\nTYPE btree_data_zp2d\nCOMPLEX(KIND=dp), DIMENSION(:,:), POINTER :: p => NULL()\nLOGICAL :: tr = .FALSE.\nEND TYPE btree_data_zp2d\nPUBLIC :: btree_data_zp2d\n#:enddef\n\n#:set nametype1 = ['i8','i8','i8','i8']\n#:set type1 = ['INTEGER(KIND=keyt)','INTEGER(KIND=keyt)','INTEGER(KIND=keyt)','INTEGER(KIND=keyt)']\n#:set nametype2 = ['sp2d', 'dp2d', 'cp2d', 'zp2d']\n#:set type2 = ['TYPE(btree_data_sp2d)', 'TYPE(btree_data_dp2d)', 'TYPE(btree_data_cp2d)', 'TYPE(btree_data_zp2d)']\n#:set type2setup = [type2setup_1_get(),type2setup_2_get(),type2setup_3_get(),type2setup_4_get()]\n#:set defaultFormatType1 = ['I12', 'I12', 'I12', 'I12']\n#:set defaultFormatType2 = ['F12.3', 'F12.3', 'F12.3', 'F12.3']\n#:set accessorType2 = ['%p','%p','%p','%p']\n#:set nametype = [_ + '_' + __ for _, __ in zip(nametype1, nametype2)]\n\n#:set inst_params = list(zip(nametype, nametype1, nametype2, type1, type2, defaultFormatType1, defaultFormatType2, accessorType2))\n#:endmute\n"
  },
  {
    "path": "src/utils/dbcsr_files.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_files\n   !! Utility routines to open and close files.\n\n   USE dbcsr_kinds, ONLY: default_path_length\n   USE dbcsr_machine, ONLY: default_input_unit, &\n                            default_output_unit, &\n                            m_getcwd\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC :: close_file, &\n             open_file, &\n             get_unit_number, &\n             file_exists\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_files'\n\n   INTEGER, PARAMETER :: max_preconnections = 10, &\n                         max_unit_number = 999\n\n   TYPE preconnection_type\n      PRIVATE\n      CHARACTER(LEN=default_path_length) :: file_name = \"\"\n      INTEGER                            :: unit_number = -1\n   END TYPE preconnection_type\n\n   TYPE(preconnection_type), DIMENSION(max_preconnections) :: preconnected\n\nCONTAINS\n\n   SUBROUTINE assign_preconnection(file_name, unit_number)\n      !! Add an entry to the list of preconnected units\n\n      CHARACTER(LEN=*), INTENT(IN)                       :: file_name\n      INTEGER, INTENT(IN)                                :: unit_number\n\n      INTEGER                                            :: ic, islot, nc\n\n      IF ((unit_number < 1) .OR. (unit_number > max_unit_number)) THEN\n         DBCSR_ABORT(\"An invalid logical unit number was specified.\")\n      END IF\n\n      IF (LEN_TRIM(file_name) == 0) THEN\n         DBCSR_ABORT(\"No valid file name was specified\")\n      END IF\n\n      nc = SIZE(preconnected)\n\n      ! Check if a preconnection already exists\n      DO ic = 1, nc\n         IF (TRIM(preconnected(ic)%file_name) == TRIM(file_name)) THEN\n            ! Return if the entry already exists\n            IF (preconnected(ic)%unit_number == unit_number) THEN\n               RETURN\n            ELSE\n               CALL print_preconnection_list()\n               CALL dbcsr_abort(__LOCATION__, &\n                                \"Attempt to connect the already connected file <\"// &\n                                TRIM(ADJUSTL(file_name))//\"> to another unit\")\n            END IF\n         END IF\n      END DO\n\n      ! Search for an unused entry\n      islot = -1\n      DO ic = 1, nc\n         IF (preconnected(ic)%unit_number == -1) THEN\n            islot = ic\n            EXIT\n         END IF\n      END DO\n\n      IF (islot == -1) THEN\n         CALL print_preconnection_list()\n         DBCSR_ABORT(\"No free slot found in the list of preconnected units\")\n      END IF\n\n      preconnected(islot)%file_name = TRIM(ADJUSTL(file_name))\n      preconnected(islot)%unit_number = unit_number\n\n   END SUBROUTINE assign_preconnection\n\n   SUBROUTINE close_file(unit_number, file_status, keep_preconnection)\n      !! Close an open file given by its logical unit number.\n      !! Optionally, keep the file and unit preconnected.\n\n      INTEGER, INTENT(IN)                                :: unit_number\n      CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: file_status\n      LOGICAL, INTENT(IN), OPTIONAL                      :: keep_preconnection\n\n      CHARACTER(LEN=2*default_path_length)               :: message\n      CHARACTER(LEN=6)                                   :: status_string\n      CHARACTER(LEN=default_path_length)                 :: file_name\n      INTEGER                                            :: istat\n      LOGICAL                                            :: exists, is_open, keep_file_connection\n\n      keep_file_connection = .FALSE.\n      IF (PRESENT(keep_preconnection)) keep_file_connection = keep_preconnection\n\n      INQUIRE (UNIT=unit_number, EXIST=exists, OPENED=is_open, IOSTAT=istat)\n\n      IF (istat /= 0) THEN\n         WRITE (UNIT=message, FMT=\"(A,I0,A,I0,A)\") &\n            \"An error occurred inquiring the unit with the number \", unit_number, &\n            \" (IOSTAT = \", istat, \")\"\n         DBCSR_ABORT(TRIM(message))\n      ELSE IF (.NOT. exists) THEN\n         WRITE (UNIT=message, FMT=\"(A,I0,A)\") &\n            \"The specified unit number \", unit_number, &\n            \" cannot be closed, because it does not exist.\"\n         DBCSR_ABORT(TRIM(message))\n      END IF\n\n      ! Close the specified file\n\n      IF (is_open) THEN\n         ! Refuse to close any preconnected system unit\n         IF (unit_number == default_input_unit) THEN\n            WRITE (UNIT=message, FMT=\"(A,I0)\") &\n               \"Attempt to close the default input unit number \", unit_number\n            DBCSR_ABORT(TRIM(message))\n         END IF\n         IF (unit_number == default_output_unit) THEN\n            WRITE (UNIT=message, FMT=\"(A,I0)\") &\n               \"Attempt to close the default output unit number \", unit_number\n            DBCSR_ABORT(TRIM(message))\n         END IF\n         ! Define status after closing the file\n         IF (PRESENT(file_status)) THEN\n            status_string = TRIM(ADJUSTL(file_status))\n         ELSE\n            status_string = \"KEEP\"\n         END IF\n         ! Optionally, keep this unit preconnected\n         INQUIRE (UNIT=unit_number, NAME=file_name, IOSTAT=istat)\n         IF (istat /= 0) THEN\n            WRITE (UNIT=message, FMT=\"(A,I0,A,I0,A)\") &\n               \"An error occurred inquiring the unit with the number \", unit_number, &\n               \" (IOSTAT = \", istat, \")\"\n            DBCSR_ABORT(TRIM(message))\n         END IF\n         ! Manage preconnections\n         IF (keep_file_connection) THEN\n            CALL assign_preconnection(file_name, unit_number)\n         ELSE\n            CALL delete_preconnection(file_name, unit_number)\n            CLOSE (UNIT=unit_number, IOSTAT=istat, STATUS=TRIM(status_string))\n            IF (istat /= 0) THEN\n               WRITE (UNIT=message, FMT=\"(A,I0,A,I0,A)\") &\n                  \"An error occurred closing the file with the logical unit number \", &\n                  unit_number, \" (IOSTAT = \", istat, \")\"\n               DBCSR_ABORT(TRIM(message))\n            END IF\n         END IF\n      END IF\n\n   END SUBROUTINE close_file\n\n   SUBROUTINE delete_preconnection(file_name, unit_number)\n      !! Remove an entry from the list of preconnected units\n\n      CHARACTER(LEN=*), INTENT(IN)                       :: file_name\n      INTEGER                                            :: unit_number\n\n      INTEGER                                            :: ic, nc\n\n      nc = SIZE(preconnected)\n\n      ! Search for preconnection entry and delete it when found\n      DO ic = 1, nc\n         IF (TRIM(preconnected(ic)%file_name) == TRIM(file_name)) THEN\n            IF (preconnected(ic)%unit_number == unit_number) THEN\n               preconnected(ic)%file_name = \"\"\n               preconnected(ic)%unit_number = -1\n               EXIT\n            ELSE\n               CALL print_preconnection_list()\n               CALL dbcsr_abort(__LOCATION__, &\n                                \"Attempt to disconnect the file <\"// &\n                                TRIM(ADJUSTL(file_name))// &\n                                \"> from an unlisted unit\")\n            END IF\n         END IF\n      END DO\n\n   END SUBROUTINE delete_preconnection\n\n   FUNCTION get_unit_number(file_name) RESULT(unit_number)\n      !! Returns the first logical unit that is not preconnected\n      !! @note\n      !! -1 if no free unit exists\n\n      CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: file_name\n      INTEGER                                            :: unit_number\n\n      INTEGER                                            :: ic, istat, nc\n      LOGICAL                                            :: exists, is_open\n\n      IF (PRESENT(file_name)) THEN\n         nc = SIZE(preconnected)\n         ! Check for preconnected units\n         DO ic = 3, nc ! Exclude the preconnected system units (< 3)\n            IF (TRIM(preconnected(ic)%file_name) == TRIM(file_name)) THEN\n               unit_number = preconnected(ic)%unit_number\n               RETURN\n            END IF\n         END DO\n      END IF\n\n      ! Get a new unit number\n      DO unit_number = 1, max_unit_number\n         IF (ANY(unit_number == preconnected(:)%unit_number)) CYCLE\n         INQUIRE (UNIT=unit_number, EXIST=exists, OPENED=is_open, IOSTAT=istat)\n         IF (exists .AND. (.NOT. is_open) .AND. (istat == 0)) RETURN\n      END DO\n\n      unit_number = -1\n\n   END FUNCTION get_unit_number\n\n   SUBROUTINE open_file(file_name, file_status, file_form, file_action, &\n                        file_position, file_pad, unit_number, debug, &\n                        skip_get_unit_number, file_access)\n      !! Opens the requested file using a free unit number\n\n      CHARACTER(LEN=*), INTENT(IN)                       :: file_name\n      CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: file_status, file_form, file_action, &\n                                                            file_position, file_pad\n      INTEGER, INTENT(INOUT)                             :: unit_number\n      INTEGER, INTENT(IN), OPTIONAL                      :: debug\n      LOGICAL, INTENT(IN), OPTIONAL                      :: skip_get_unit_number\n      CHARACTER(LEN=*), INTENT(IN), OPTIONAL             :: file_access\n         !! file access mode\n\n      CHARACTER(LEN=*), PARAMETER :: routineN = 'open_file'\n      CHARACTER(LEN=11) :: access_string, action_string, current_action, current_form, &\n                           form_string, pad_string, position_string, status_string\n      CHARACTER(LEN=2*default_path_length)               :: message\n      CHARACTER(LEN=default_path_length)                 :: cwd, iomsgstr\n      INTEGER                                            :: debug_unit, istat\n      LOGICAL                                            :: exists, get_a_new_unit, is_open\n\n      IF (PRESENT(file_access)) THEN\n         access_string = TRIM(file_access)\n      ELSE\n         access_string = \"SEQUENTIAL\"\n      END IF\n\n      IF (PRESENT(file_status)) THEN\n         status_string = TRIM(file_status)\n      ELSE\n         status_string = \"OLD\"\n      END IF\n\n      IF (PRESENT(file_form)) THEN\n         form_string = TRIM(file_form)\n      ELSE\n         form_string = \"FORMATTED\"\n      END IF\n\n      IF (PRESENT(file_pad)) THEN\n         pad_string = file_pad\n         IF (form_string == \"UNFORMATTED\") THEN\n            WRITE (UNIT=message, FMT=\"(A)\") &\n               \"The PAD specifier is not allowed for an UNFORMATTED file\"\n            DBCSR_ABORT(TRIM(message))\n         END IF\n      ELSE\n         pad_string = \"YES\"\n      END IF\n\n      IF (PRESENT(file_action)) THEN\n         action_string = TRIM(file_action)\n      ELSE\n         action_string = \"READ\"\n      END IF\n\n      IF (PRESENT(file_position)) THEN\n         position_string = TRIM(file_position)\n      ELSE\n         position_string = \"REWIND\"\n      END IF\n\n      IF (PRESENT(debug)) THEN\n         debug_unit = debug\n      ELSE\n         debug_unit = 0 ! use default_output_unit for debugging\n      END IF\n\n      ! Check the specified input file name\n      INQUIRE (FILE=TRIM(file_name), EXIST=exists, OPENED=is_open, IOSTAT=istat)\n\n      IF (istat /= 0) THEN\n         WRITE (UNIT=message, FMT=\"(A,I0,A)\") &\n            \"An error occurred inquiring the file <\"//TRIM(file_name)// &\n            \"> (IOSTAT = \", istat, \")\"\n         DBCSR_ABORT(TRIM(message))\n      ELSE IF (status_string == \"OLD\") THEN\n         IF (.NOT. exists) THEN\n            WRITE (UNIT=message, FMT=\"(A)\") &\n               \"The specified file <\"//TRIM(ADJUSTL(file_name))// &\n               \"> cannot be opened. It does not exist. \"\n            DBCSR_ABORT(TRIM(message))\n         END IF\n      END IF\n\n      ! Open the specified input file\n      IF (is_open) THEN\n         INQUIRE (FILE=TRIM(file_name), NUMBER=unit_number, &\n                  ACTION=current_action, FORM=current_form)\n         IF (TRIM(position_string) == \"REWIND\") REWIND (UNIT=unit_number)\n         IF (TRIM(status_string) == \"NEW\") THEN\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"Attempt to re-open the existing OLD file <\"// &\n                             TRIM(file_name)//\"> with status attribute NEW.\")\n         END IF\n         IF (TRIM(current_form) /= TRIM(form_string)) THEN\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"Attempt to re-open the existing \"// &\n                             TRIM(current_form)//\" file <\"//TRIM(file_name)// &\n                             \"> as \"//TRIM(form_string)//\" file.\")\n         END IF\n         IF (TRIM(current_action) /= TRIM(action_string)) THEN\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"Attempt to re-open the existing file <\"// &\n                             TRIM(file_name)//\"> with the modified ACTION attribute \"// &\n                             TRIM(action_string)//\". The current ACTION attribute is \"// &\n                             TRIM(current_action)//\".\")\n         END IF\n      ELSE\n         ! Find an unused unit number\n         get_a_new_unit = .TRUE.\n         IF (PRESENT(skip_get_unit_number)) THEN\n            IF (skip_get_unit_number) get_a_new_unit = .FALSE.\n         END IF\n         IF (get_a_new_unit) unit_number = get_unit_number(TRIM(file_name))\n         IF (unit_number < 1) THEN\n            WRITE (UNIT=message, FMT=\"(A)\") &\n               \"Cannot open the file <\"//TRIM(ADJUSTL(file_name))// &\n               \">, because no unused logical unit number could be obtained.\"\n            DBCSR_ABORT(TRIM(message))\n         END IF\n         IF (TRIM(form_string) == \"FORMATTED\") THEN\n            OPEN (UNIT=unit_number, &\n                  FILE=TRIM(file_name), &\n                  STATUS=TRIM(status_string), &\n                  ACCESS=TRIM(access_string), &\n                  FORM=TRIM(form_string), &\n                  POSITION=TRIM(position_string), &\n                  ACTION=TRIM(action_string), &\n                  PAD=TRIM(pad_string), &\n                  IOMSG=iomsgstr, &\n                  IOSTAT=istat)\n         ELSE\n            OPEN (UNIT=unit_number, &\n                  FILE=TRIM(file_name), &\n                  STATUS=TRIM(status_string), &\n                  ACCESS=TRIM(access_string), &\n                  FORM=TRIM(form_string), &\n                  POSITION=TRIM(position_string), &\n                  ACTION=TRIM(action_string), &\n                  IOMSG=iomsgstr, &\n                  IOSTAT=istat)\n         END IF\n         IF (istat /= 0) THEN\n            CALL m_getcwd(cwd)\n            WRITE (UNIT=message, FMT=\"(A,I0,A,I0,A)\") &\n               \"An error occurred opening the file '\"//TRIM(ADJUSTL(file_name))// &\n               \"' (UNIT = \", unit_number, \", IOSTAT = \", istat, \"). \"//TRIM(iomsgstr)//\". \"// &\n               \"Current working directory: \"//TRIM(cwd)\n\n            DBCSR_ABORT(TRIM(message))\n         END IF\n      END IF\n\n      IF (debug_unit > 0) THEN\n         INQUIRE (FILE=TRIM(file_name), OPENED=is_open, NUMBER=unit_number, &\n                  POSITION=position_string, NAME=message, ACCESS=access_string, &\n                  FORM=form_string, ACTION=action_string)\n         WRITE (UNIT=debug_unit, FMT=\"(T2,A)\") \"BEGIN DEBUG \"//TRIM(ADJUSTL(routineN))\n         WRITE (UNIT=debug_unit, FMT=\"(T3,A,I0)\") \"NUMBER  : \", unit_number\n         WRITE (UNIT=debug_unit, FMT=\"(T3,A,L1)\") \"OPENED  : \", is_open\n         WRITE (UNIT=debug_unit, FMT=\"(T3,A)\") \"NAME    : \"//TRIM(ADJUSTL(message))\n         WRITE (UNIT=debug_unit, FMT=\"(T3,A)\") \"POSITION: \"//TRIM(ADJUSTL(position_string))\n         WRITE (UNIT=debug_unit, FMT=\"(T3,A)\") \"ACCESS  : \"//TRIM(ADJUSTL(access_string))\n         WRITE (UNIT=debug_unit, FMT=\"(T3,A)\") \"FORM    : \"//TRIM(ADJUSTL(form_string))\n         WRITE (UNIT=debug_unit, FMT=\"(T3,A)\") \"ACTION  : \"//TRIM(ADJUSTL(action_string))\n         WRITE (UNIT=debug_unit, FMT=\"(T2,A)\") \"END DEBUG \"//TRIM(ADJUSTL(routineN))\n         CALL print_preconnection_list(debug_unit)\n      END IF\n\n   END SUBROUTINE open_file\n\n   FUNCTION file_exists(file_name) RESULT(exist)\n      !! Checks if file exists, considering also the file discovery mechanism.\n      CHARACTER(LEN=*), INTENT(IN)                       :: file_name\n      LOGICAL                                            :: exist\n\n      INQUIRE (FILE=TRIM(file_name), exist=exist)\n   END FUNCTION file_exists\n\n   SUBROUTINE print_preconnection_list(output_unit)\n      !! Print the list of preconnected units\n\n      INTEGER, INTENT(IN), OPTIONAL                      :: output_unit\n         !! which unit to print to (optional)\n\n      INTEGER                                            :: ic, nc, unit\n\n      IF (PRESENT(output_unit)) THEN\n         unit = output_unit\n      ELSE\n         unit = default_output_unit\n      END IF\n\n      nc = SIZE(preconnected)\n\n      IF (output_unit > 0) THEN\n\n         WRITE (UNIT=output_unit, FMT=\"(A,/,A)\") &\n            \" LIST OF PRECONNECTED LOGICAL UNITS\", &\n            \"  Slot   Unit number   File name\"\n         DO ic = 1, nc\n            IF (preconnected(ic)%unit_number > 0) THEN\n               WRITE (UNIT=output_unit, FMT=\"(I6,3X,I6,8X,A)\") &\n                  ic, preconnected(ic)%unit_number, &\n                  TRIM(ADJUSTL(preconnected(ic)%file_name))\n            ELSE\n               WRITE (UNIT=output_unit, FMT=\"(I6,17X,A)\") &\n                  ic, \"UNUSED\"\n            END IF\n         END DO\n      END IF\n   END SUBROUTINE print_preconnection_list\n\nEND MODULE dbcsr_files\n"
  },
  {
    "path": "src/utils/dbcsr_hash_table.f90",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n! -----------------------------------------------------------------------------\n! Beginning of hashtable.\n! this file can be 'INCLUDE'ed verbatim in various place, where it needs to be\n! part of the module to guarantee inlining\n! hashes (c,p) pairs, where p is assumed to be >0\n! on return (0 is used as a flag for not present)\n!\n!\n  FUNCTION matching_prime(i) RESULT(res)\n     !! finds a prime equal or larger than i, needed at creation\n\n     INTEGER, INTENT(IN)                      :: i\n     INTEGER                                  :: res\n\n     INTEGER                                  :: j\n\n     res = i\n     j = 0\n     DO WHILE (j < res)\n        DO j = 2, res - 1\n           IF (MOD(res, j) == 0) THEN\n              res = res + 1\n              EXIT\n           END IF\n        END DO\n     END DO\n  END FUNCTION\n\n  SUBROUTINE hash_table_create(hash_table, table_size)\n     !! create a hash_table of given initial size.\n     !! the hash table will expand as needed (but this requires rehashing)\n\n     TYPE(hash_table_type)                    :: hash_table\n     INTEGER, INTENT(IN)                      :: table_size\n\n     INTEGER                                  :: j\n\n     ! guarantee a minimal hash table size (8), so that expansion works\n\n     j = 3\n     DO WHILE (2**j - 1 < table_size)\n        j = j + 1\n     END DO\n     hash_table%nmax = 2**j - 1\n     hash_table%prime = matching_prime(hash_table%nmax)\n     hash_table%nele = 0\n     ALLOCATE (hash_table%table(0:hash_table%nmax))\n  END SUBROUTINE hash_table_create\n\n! *****************************************************************************\n! **************************************************************************************************\n  SUBROUTINE hash_table_release(hash_table)\n     TYPE(hash_table_type)                    :: hash_table\n\n     hash_table%nmax = 0\n     hash_table%nele = 0\n     DEALLOCATE (hash_table%table)\n\n  END SUBROUTINE hash_table_release\n\n  RECURSIVE SUBROUTINE hash_table_add(hash_table, c, p)\n     !! add a pair (c,p) to the hash table\n\n     TYPE(hash_table_type), INTENT(INOUT)     :: hash_table\n     INTEGER, INTENT(IN)                      :: c, p\n        !! this value is being hashed\n        !! this is being stored\n\n     REAL(KIND=sp), PARAMETER :: hash_table_expand = 1.5_sp, &\n                                 inv_hash_table_fill = 2.5_sp\n\n     INTEGER                                  :: i, j\n     TYPE(ele_type), ALLOCATABLE, &\n        DIMENSION(:)                           :: tmp_hash\n\n! if too small, make a copy and rehash in a larger table\n\n     IF (hash_table%nele*inv_hash_table_fill > hash_table%nmax) THEN\n        ALLOCATE (tmp_hash(LBOUND(hash_table%table, 1):UBOUND(hash_table%table, 1)))\n        tmp_hash(:) = hash_table%table\n        CALL hash_table_release(hash_table)\n        CALL hash_table_create(hash_table, INT((UBOUND(tmp_hash, 1) + 8)*hash_table_expand))\n        DO i = LBOUND(tmp_hash, 1), UBOUND(tmp_hash, 1)\n           IF (tmp_hash(i)%c .NE. 0) THEN\n              CALL hash_table_add(hash_table, tmp_hash(i)%c, tmp_hash(i)%p)\n           END IF\n        END DO\n        DEALLOCATE (tmp_hash)\n     END IF\n\n     hash_table%nele = hash_table%nele + 1\n     i = IAND(c*hash_table%prime, hash_table%nmax)\n\n     DO j = i, hash_table%nmax\n        IF (hash_table%table(j)%c == 0 .OR. hash_table%table(j)%c == c) THEN\n           hash_table%table(j)%c = c\n           hash_table%table(j)%p = p\n           RETURN\n        END IF\n     END DO\n     DO j = 0, i - 1\n        IF (hash_table%table(j)%c == 0 .OR. hash_table%table(j)%c == c) THEN\n           hash_table%table(j)%c = c\n           hash_table%table(j)%p = p\n           RETURN\n        END IF\n     END DO\n\n  END SUBROUTINE hash_table_add\n\n! *****************************************************************************\n! **************************************************************************************************\n  PURE FUNCTION hash_table_get(hash_table, c) RESULT(p)\n     TYPE(hash_table_type), INTENT(IN)        :: hash_table\n     INTEGER, INTENT(IN)                      :: c\n     INTEGER                                  :: p\n\n     INTEGER                                  :: i, j\n\n     i = IAND(c*hash_table%prime, hash_table%nmax)\n\n     ! catch the likely case first\n     IF (hash_table%table(i)%c == c) THEN\n        p = hash_table%table(i)%p\n        RETURN\n     END IF\n\n     DO j = i, hash_table%nmax\n        IF (hash_table%table(j)%c == 0 .OR. hash_table%table(j)%c == c) THEN\n           p = hash_table%table(j)%p\n           RETURN\n        END IF\n     END DO\n     DO j = 0, i - 1\n        IF (hash_table%table(j)%c == 0 .OR. hash_table%table(j)%c == c) THEN\n           p = hash_table%table(j)%p\n           RETURN\n        END IF\n     END DO\n\n     ! we should never reach this point.\n     p = HUGE(p)\n\n  END FUNCTION hash_table_get\n\n! End of hashtable\n! -----------------------------------------------------------------------------\n"
  },
  {
    "path": "src/utils/dbcsr_hash_table_types.f90",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n  TYPE ele_type\n     !! Types needed for the hashtable.\n\n     INTEGER :: c = 0\n     INTEGER :: p = 0\n  END TYPE ele_type\n\n  TYPE hash_table_type\n     TYPE(ele_type), DIMENSION(:), POINTER :: table\n     INTEGER :: nele = 0\n     INTEGER :: nmax = 0\n     INTEGER :: prime = 0\n  END TYPE hash_table_type\n"
  },
  {
    "path": "src/utils/dbcsr_min_heap.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_min_heap\n   USE dbcsr_kinds, ONLY: int_4\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n   PRIVATE\n\n   PUBLIC :: dbcsr_heap_type, keyt, valt\n   PUBLIC :: dbcsr_heap_pop, dbcsr_heap_reset_node, dbcsr_heap_fill\n   PUBLIC :: dbcsr_heap_new, dbcsr_heap_release\n   PUBLIC :: dbcsr_heap_get_first, dbcsr_heap_reset_first\n\n   ! Sets the types\n   INTEGER, PARAMETER         :: keyt = int_4\n   INTEGER, PARAMETER         :: valt = int_4\n\n   TYPE dbcsr_heap_node\n      INTEGER(KIND=keyt) :: key = -1_keyt\n      INTEGER(KIND=valt) :: value = -1_valt\n   END TYPE dbcsr_heap_node\n\n   TYPE dbcsr_heap_node_e\n      TYPE(dbcsr_heap_node) :: node = dbcsr_heap_node()\n   END TYPE dbcsr_heap_node_e\n\n   TYPE dbcsr_heap_type\n      INTEGER :: n = -1\n      INTEGER, DIMENSION(:), POINTER           :: index => NULL()\n      TYPE(dbcsr_heap_node_e), DIMENSION(:), POINTER :: nodes => NULL()\n   END TYPE dbcsr_heap_type\n\nCONTAINS\n\n   ! Lookup functions\n\n   ELEMENTAL FUNCTION get_parent(n) RESULT(parent)\n      INTEGER, INTENT(IN)                                :: n\n      INTEGER                                            :: parent\n\n      parent = INT(n/2)\n   END FUNCTION get_parent\n\n   ELEMENTAL FUNCTION get_left_child(n) RESULT(child)\n      INTEGER, INTENT(IN)                                :: n\n      INTEGER                                            :: child\n\n      child = 2*n\n   END FUNCTION get_left_child\n\n   ELEMENTAL FUNCTION get_value(heap, n) RESULT(value)\n      TYPE(dbcsr_heap_type), INTENT(IN)                  :: heap\n      INTEGER, INTENT(IN)                                :: n\n      INTEGER(KIND=valt)                                 :: value\n\n      value = heap%nodes(n)%node%value\n   END FUNCTION get_value\n\n   ! Initialization functions\n\n   SUBROUTINE dbcsr_heap_new(heap, n)\n      TYPE(dbcsr_heap_type), INTENT(OUT)                 :: heap\n      INTEGER, INTENT(IN)                                :: n\n\n      heap%n = n\n      ALLOCATE (heap%index(n))\n      ALLOCATE (heap%nodes(n))\n   END SUBROUTINE dbcsr_heap_new\n\n   SUBROUTINE dbcsr_heap_release(heap)\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n\n      DEALLOCATE (heap%index)\n      DEALLOCATE (heap%nodes)\n      heap%n = 0\n   END SUBROUTINE dbcsr_heap_release\n\n   SUBROUTINE dbcsr_heap_fill(heap, values)\n      !! Fill heap with given values\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n      INTEGER(KIND=valt), DIMENSION(:), INTENT(IN)       :: values\n\n      INTEGER                                            :: first, i, n\n\n      n = SIZE(values)\n      DBCSR_ASSERT(heap%n >= n)\n\n      DO i = 1, n\n         heap%index(i) = i\n         heap%nodes(i)%node%key = i\n         heap%nodes(i)%node%value = values(i)\n      END DO\n      ! Sort from the last full subtree\n      first = get_parent(n)\n      DO i = first, 1, -1\n         CALL bubble_down(heap, i)\n      END DO\n\n   END SUBROUTINE dbcsr_heap_fill\n\n   SUBROUTINE dbcsr_heap_get_first(heap, key, value, found)\n      !! Returns the first heap element without removing it.\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n      INTEGER(KIND=keyt), INTENT(OUT)                    :: key\n      INTEGER(KIND=valt), INTENT(OUT)                    :: value\n      LOGICAL, INTENT(OUT)                               :: found\n\n      IF (heap%n .LT. 1) THEN\n         found = .FALSE.\n      ELSE\n         found = .TRUE.\n         key = heap%nodes(1)%node%key\n         value = heap%nodes(1)%node%value\n      END IF\n   END SUBROUTINE dbcsr_heap_get_first\n\n   SUBROUTINE dbcsr_heap_pop(heap, key, value, found)\n      !! Returns and removes the first heap element and rebalances\n      !! the heap.\n\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n      INTEGER(KIND=keyt), INTENT(OUT)                    :: key\n      INTEGER(KIND=valt), INTENT(OUT)                    :: value\n      LOGICAL, INTENT(OUT)                               :: found\n\n!\n\n      CALL dbcsr_heap_get_first(heap, key, value, found)\n      IF (found) THEN\n         IF (heap%n .GT. 1) THEN\n            CALL dbcsr_heap_copy_node(heap, 1, heap%n)\n            heap%n = heap%n - 1\n            CALL bubble_down(heap, 1)\n         ELSE\n            heap%n = heap%n - 1\n         END IF\n      END IF\n   END SUBROUTINE dbcsr_heap_pop\n\n   SUBROUTINE dbcsr_heap_reset_node(heap, key, value)\n      !! Changes the value of the heap element with given key and\n      !! rebalances the heap.\n\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n      INTEGER(KIND=keyt), INTENT(IN)                     :: key\n      INTEGER(KIND=valt), INTENT(IN)                     :: value\n\n      INTEGER                                            :: n, new_pos\n\n      DBCSR_ASSERT(heap%n > 0)\n\n      n = heap%index(key)\n      DBCSR_ASSERT(heap%nodes(n)%node%key == key)\n      heap%nodes(n)%node%value = value\n      CALL bubble_up(heap, n, new_pos)\n      CALL bubble_down(heap, new_pos)\n   END SUBROUTINE dbcsr_heap_reset_node\n\n   SUBROUTINE dbcsr_heap_reset_first(heap, value)\n      !! Changes the value of the minimum heap element and rebalances the heap.\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n      INTEGER(KIND=valt), INTENT(IN)                     :: value\n\n      DBCSR_ASSERT(heap%n > 0)\n      heap%nodes(1)%node%value = value\n      CALL bubble_down(heap, 1)\n   END SUBROUTINE dbcsr_heap_reset_first\n\n   PURE SUBROUTINE dbcsr_heap_swap(heap, e1, e2)\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n      INTEGER, INTENT(IN)                                :: e1, e2\n\n      INTEGER(KIND=keyt)                                 :: key1, key2\n      TYPE(dbcsr_heap_node)                              :: tmp_node\n\n      key1 = heap%nodes(e1)%node%key\n      key2 = heap%nodes(e2)%node%key\n\n      tmp_node = heap%nodes(e1)%node\n      heap%nodes(e1)%node = heap%nodes(e2)%node\n      heap%nodes(e2)%node = tmp_node\n\n      heap%index(key1) = e2\n      heap%index(key2) = e1\n   END SUBROUTINE dbcsr_heap_swap\n\n   PURE SUBROUTINE dbcsr_heap_copy_node(heap, e1, e2)\n      !! Sets node e1 to e2\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n      INTEGER, INTENT(IN)                                :: e1, e2\n\n      INTEGER(KIND=keyt)                                 :: key1, key2\n\n      key1 = heap%nodes(e1)%node%key\n      key2 = heap%nodes(e2)%node%key\n\n      heap%nodes(e1)%node = heap%nodes(e2)%node\n\n      heap%index(key1) = 0\n      heap%index(key2) = e1\n   END SUBROUTINE dbcsr_heap_copy_node\n\n   SUBROUTINE bubble_down(heap, first)\n      !! Balances a heap by bubbling down from the given element.\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n      INTEGER, INTENT(IN)                                :: first\n\n      INTEGER                                            :: e, left_child, right_child, smallest\n      INTEGER(kind=valt)                                 :: left_child_value, min_value, &\n                                                            right_child_value\n      LOGICAL                                            :: all_done\n\n!\n      DBCSR_ASSERT(0 < first .AND. first <= heap%n)\n\n      e = first\n      all_done = .FALSE.\n      ! Check whether we are finished, i.e,. whether the element to\n      ! bubble down is childless.\n      DO WHILE (e .LE. get_parent(heap%n) .AND. .NOT. all_done)\n         ! Determines which node (current, left, or right child) has the\n         ! smallest value.\n         smallest = e\n         min_value = get_value(heap, e)\n         left_child = get_left_child(e)\n         IF (left_child .LE. heap%n) THEN\n            left_child_value = get_value(heap, left_child)\n            IF (left_child_value .LT. min_value) THEN\n               min_value = left_child_value\n               smallest = left_child\n            END IF\n         END IF\n         right_child = left_child + 1\n         IF (right_child .LE. heap%n) THEN\n            right_child_value = get_value(heap, right_child)\n            IF (right_child_value .LT. min_value) THEN\n               min_value = right_child_value\n               smallest = right_child\n            END IF\n         END IF\n         !\n         CALL dbcsr_heap_swap(heap, e, smallest)\n         IF (smallest .EQ. e) THEN\n            all_done = .TRUE.\n         ELSE\n            e = smallest\n         END IF\n      END DO\n   END SUBROUTINE bubble_down\n\n   SUBROUTINE bubble_up(heap, first, new_pos)\n      !! Balances a heap by bubbling up from the given element.\n      TYPE(dbcsr_heap_type), INTENT(INOUT)               :: heap\n      INTEGER, INTENT(IN)                                :: first\n      INTEGER, INTENT(OUT)                               :: new_pos\n\n      INTEGER                                            :: e, parent\n      INTEGER(kind=valt)                                 :: my_value, parent_value\n      LOGICAL                                            :: all_done\n\n      DBCSR_ASSERT(0 < first .AND. first <= heap%n)\n\n      e = first\n      all_done = .FALSE.\n      IF (e .GT. 1) THEN\n         my_value = get_value(heap, e)\n      END IF\n      ! Check whether we are finished, i.e,. whether the element to\n      ! bubble up is an orphan.\n      new_pos = e\n      DO WHILE (e .GT. 1 .AND. .NOT. all_done)\n         ! Switches the parent and the current element if the current\n         ! element's value is greater than the parent's value.\n         parent = get_parent(e)\n         parent_value = get_value(heap, parent)\n         IF (my_value .LT. parent_value) THEN\n            CALL dbcsr_heap_swap(heap, e, parent)\n            e = parent\n         ELSE\n            all_done = .TRUE.\n         END IF\n      END DO\n      new_pos = e\n   END SUBROUTINE bubble_up\n\nEND MODULE dbcsr_min_heap\n"
  },
  {
    "path": "src/utils/dbcsr_string_utilities.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_string_utilities\n   !! Utilities for string manipulations\n\n   USE dbcsr_kinds, ONLY: default_blank_character\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC :: compress, &\n             stringify, &\n             uppercase, &\n             str2int\n\n   INTERFACE stringify\n      MODULE PROCEDURE integer_to_string\n   END INTERFACE\nCONTAINS\n\n   SUBROUTINE compress(string, full)\n      !! Eliminate multiple space characters in a string.\n      !! If full is .TRUE., then all spaces are eliminated.\n\n      CHARACTER(LEN=*), INTENT(INOUT)                    :: string\n      LOGICAL, INTENT(IN), OPTIONAL                      :: full\n\n      CHARACTER                                          :: tmp\n      INTEGER                                            :: i, z\n      LOGICAL                                            :: remove_all\n\n      IF (PRESENT(full)) THEN\n         remove_all = full\n      ELSE\n         remove_all = .FALSE.\n      END IF\n\n      z = 1\n\n      DO i = 1, LEN_TRIM(string)\n         IF ((z == 1) .OR. remove_all) THEN\n            IF (string(i:i) /= \" \") THEN\n               tmp = string(i:i)\n               string(z:z) = tmp\n               z = z + 1\n            END IF\n         ELSE\n            IF ((string(i:i) /= \" \") .OR. (string(z - 1:z - 1) /= \" \")) THEN\n               tmp = string(i:i)\n               string(z:z) = tmp\n               z = z + 1\n            END IF\n         END IF\n      END DO\n\n      string(z:) = \"\"\n\n   END SUBROUTINE compress\n\n   FUNCTION integer_to_string(inumber) RESULT(string)\n      !! Converts an integer number to a string.\n      !! The WRITE statement will return an error message, if the number of\n      !! digits of the integer number is larger the than the length of the\n      !! supplied string.\n\n      INTEGER, INTENT(IN)                                :: inumber\n      CHARACTER(:), ALLOCATABLE                          :: string\n      CHARACTER(RANGE(inumber) + 2)                      :: tmp\n\n      WRITE (UNIT=tmp, FMT='(I0)') inumber\n      string = TRIM(tmp)\n   END FUNCTION integer_to_string\n\n   SUBROUTINE uppercase(string)\n      !! Convert all lower case characters in a string to upper case.\n      CHARACTER(LEN=*), INTENT(INOUT)                    :: string\n\n      INTEGER                                            :: i, iascii\n\n      DO i = 1, LEN_TRIM(string)\n         iascii = ICHAR(string(i:i))\n         IF ((iascii >= 97) .AND. (iascii <= 122)) THEN\n            string(i:i) = CHAR(iascii - 32)\n         END IF\n      END DO\n\n   END SUBROUTINE uppercase\n\n   ELEMENTAL SUBROUTINE str2int(str, int, stat)\n    !! Convert a string to integer\n      CHARACTER(LEN=*), INTENT(in) :: str\n      INTEGER, INTENT(OUT)         :: int, stat\n\n      read (str, *, iostat=stat) int\n   END SUBROUTINE str2int\n\nEND MODULE dbcsr_string_utilities\n"
  },
  {
    "path": "src/utils/dbcsr_toollib.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_toollib\n   !! Tools usually found in a standard library.\n\n   USE dbcsr_array_sort, ONLY: dbcsr_1d_d_sort, &\n                               dbcsr_1d_i4_sort, &\n                               dbcsr_1d_i8_sort, &\n                               dbcsr_1d_s_sort\n   USE dbcsr_kinds, ONLY: int_4, &\n                          int_8, &\n                          real_8\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_toollib'\n\n   ! Block sizes and arrays\n   PUBLIC :: dbcsr_unpack_i8_2i4, make_coordinate_tuple\n   PUBLIC :: swap\n   ! math routines\n   PUBLIC :: gcd, lcm\n   ! utility routines\n   PUBLIC :: sort, joaat_hash\n   PUBLIC :: ordered_search\n   PUBLIC :: atoi, atol, ator\n\n   INTERFACE swap\n      MODULE PROCEDURE iswap, bswap\n   END INTERFACE\n\n   INTERFACE sort\n      MODULE PROCEDURE dbcsr_1d_i4_sort, dbcsr_1d_i8_sort\n      MODULE PROCEDURE dbcsr_1d_s_sort, dbcsr_1d_d_sort\n   END INTERFACE\n\nCONTAINS\n\n   ELEMENTAL FUNCTION make_coordinate_tuple(most, least) RESULT(tuple)\n      INTEGER, INTENT(IN)                                :: most, least\n      INTEGER(KIND=int_8)                                :: tuple\n\n!tuple = IOR (ISHFT (most, 32), least)\n\n      tuple = most\n      tuple = IOR(ISHFT(tuple, 32), INT(least, int_8))\n   END FUNCTION make_coordinate_tuple\n\n   ELEMENTAL SUBROUTINE iswap(a, b)\n      !! Swaps two integers\n\n      INTEGER, INTENT(INOUT)                             :: a, b\n         !! Integers to swap\n         !! Integers to swap\n\n      INTEGER                                            :: tmp\n\n      tmp = a\n      a = b\n      b = tmp\n   END SUBROUTINE iswap\n\n   ELEMENTAL SUBROUTINE bswap(a, b)\n      !! Swaps two logicals\n\n      LOGICAL, INTENT(INOUT)                             :: a, b\n         !! Logicals to swap\n         !! Logicals to swap\n\n      LOGICAL                                            :: tmp\n\n      tmp = a\n      a = b\n      b = tmp\n   END SUBROUTINE bswap\n\n   SUBROUTINE dbcsr_unpack_i8_2i4(merged, array_upper, array_lower)\n      !! Splits an array of int8 values into two int4 arrays.\n\n      INTEGER(KIND=int_8), DIMENSION(:), INTENT(IN)      :: merged\n         !! array of merged values\n      INTEGER(KIND=int_4), DIMENSION(:), INTENT(OUT)     :: array_upper, array_lower\n         !! array to fill with the upper bytes of the merged values\n         !! array to fill with the lower bytes of the merged values\n\n      INTEGER(KIND=int_8), PARAMETER                     :: lmask8 = 4294967295_int_8\n\n      INTEGER                                            :: i\n\n!\n!   ---------------------------------------------------------------------------\n! Lmask is used to filter in the lower 4 bytes and so its lower 32 bits are\n! set to 1: lmask8 = 2^32-1.\n! Umask is used to filter in the higher 4 bytes and so its higher 32 bits\n! are set to 1: umask8 = 2^32-1 << 32\n!lmask8 = 4294967295 ! 2^32-1\n!umask8 = 18446744069414584320 ! (2^32-1) * 2^32 = (2^64-1)-(2^32-1)\n\n      DO i = 1, SIZE(merged)\n         array_upper(i) = INT(ISHFT(merged(i), -32), KIND=int_4)\n         array_lower(i) = INT(IAND(merged(i), lmask8), KIND=int_4)\n      END DO\n   END SUBROUTINE dbcsr_unpack_i8_2i4\n\n   ELEMENTAL FUNCTION gcd(a, b)\n      INTEGER, INTENT(IN)                                :: a, b\n      INTEGER                                            :: gcd\n\n      INTEGER                                            :: aa, ab, l, rem, s\n\n      aa = ABS(a)\n      ab = ABS(b)\n      IF (aa < ab) THEN\n         s = aa\n         l = ab\n      ELSE\n         s = ab\n         l = aa\n      END IF\n      IF (s .NE. 0) THEN\n         DO\n            rem = MOD(l, s)\n            IF (rem == 0) EXIT\n            l = s\n            s = rem\n         END DO\n         GCD = s\n      ELSE\n         GCD = l\n      END IF\n   END FUNCTION gcd\n\n   ELEMENTAL FUNCTION lcm(a, b)\n      INTEGER, INTENT(IN)                                :: a, b\n      INTEGER                                            :: lcm\n\n      INTEGER                                            :: tmp\n\n      tmp = gcd(a, b)\n      IF (tmp == 0) THEN\n         lcm = 0\n      ELSE\n         ! could still overflow if the true lcm is larger than maxint\n         lcm = ABS((a/tmp)*b)\n      END IF\n   END FUNCTION lcm\n\n   FUNCTION joaat_hash(key) RESULT(hash_index)\n      !! generates the hash of a string and the index in the table\n      !! @note\n      !! http://en.wikipedia.org/wiki/Hash_table\n      !! http://www.burtleburtle.net/bob/hash/doobs.html\n      !! However, since fortran doesn't have an unsigned 4 byte int\n      !! we compute it using an integer with the appropriate range\n      !! we return already the index in the table as a final result\n\n      ! LIBXSMM: at least v1.9.0-6 is required\n#if defined(__LIBXSMM) && TO_VERSION(1, 10) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)\n      USE libxsmm, ONLY: libxsmm_hash\n      INTEGER, PARAMETER                                 :: seed = 0\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: key\n         !! a string of any length\n      INTEGER                                            :: hash_index\n      hash_index = libxsmm_hash(key, seed)\n#else\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: key\n      INTEGER                                            :: hash_index\n\n      INTEGER(KIND=int_8), PARAMETER                     :: b32 = 2_int_8**32 - 1_int_8\n\n      INTEGER                                            :: i, j\n      INTEGER(KIND=int_8)                                :: byte, hash\n\n      hash = 0_int_8\n      DO i = 1, SIZE(key)\n         DO j = 0, 3\n            byte = IAND(ISHFT(key(i), -j*8), 255)\n            hash = IAND(hash + byte, b32)\n            hash = IAND(hash + IAND(ISHFT(hash, 10), b32), b32)\n            hash = IAND(IEOR(hash, IAND(ISHFT(hash, -6), b32)), b32)\n         END DO\n      END DO\n      hash = IAND(hash + IAND(ISHFT(hash, 3), b32), b32)\n      hash = IAND(IEOR(hash, IAND(ISHFT(hash, -11), b32)), b32)\n      hash = IAND(hash + IAND(ISHFT(hash, 15), b32), b32)\n      ! In fortran 4-byte-integers have only 31 bits because they are signed\n      ! In fortran the rightmost (least significant) bit is in position 0\n      hash_index = INT(IBCLR(hash, 31))\n#endif\n   END FUNCTION joaat_hash\n\n   PURE SUBROUTINE ordered_search(array, key, loc, found, lb, ub)\n      !! search a value in an ordered array of indices\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: array\n      INTEGER, INTENT(IN)                                :: key\n      INTEGER, INTENT(OUT)                               :: loc\n      LOGICAL, INTENT(OUT)                               :: found\n      INTEGER, INTENT(IN), OPTIONAL                      :: lb, ub\n\n      INTEGER                                            :: high, low, val\n\n      found = .FALSE.\n      IF (PRESENT(lb)) THEN\n         low = lb\n      ELSE\n         low = LBOUND(array, 1)\n      END IF\n      IF (PRESENT(ub)) THEN\n         high = ub\n      ELSE\n         high = UBOUND(array, 1)\n      END IF\n      loc = (low + high)/2\n      DO WHILE (loc .GE. low .AND. loc .LE. high)\n         val = array(loc)\n         IF (val .EQ. key) THEN\n            found = .TRUE.\n            EXIT\n         ELSEIF (val .LT. key) THEN\n            low = loc + 1\n         ELSE\n            high = loc - 1\n         END IF\n         loc = (low + high)/2\n      END DO\n   END SUBROUTINE ordered_search\n\n   FUNCTION atoi(a)\n      CHARACTER(len=*), INTENT(in)                       :: a\n      INTEGER                                            :: atoi\n\n      READ (a, '(I9)') atoi\n   END FUNCTION atoi\n\n   FUNCTION atol(a)\n      CHARACTER(len=*), INTENT(in)                       :: a\n      LOGICAL                                            :: atol\n\n      READ (a, '(L1)') atol\n   END FUNCTION atol\n\n   FUNCTION ator(a)\n      CHARACTER(len=*), INTENT(in)                       :: a\n      REAL(real_8)                                       :: ator\n\n      READ (a, '(E26.15)') ator\n   END FUNCTION ator\n\nEND MODULE dbcsr_toollib\n"
  },
  {
    "path": "src/work/PACKAGE",
    "content": "{\n\"description\": \"DBCSR block level routines\",\n\"archive\": \"libdbcsr\",\n\"requires\": [\"../base\", \"../dist\", \"../utils\", \"../core\", \"../data\", \"../block\"],\n}\n"
  },
  {
    "path": "src/work/dbcsr_work_operations.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_work_operations\n   !! DBCSR work matrix utilities\n\n   USE dbcsr_array_types, ONLY: array_data, &\n                                array_hold, &\n                                array_i1d_obj, &\n                                array_new, &\n                                array_nullify, &\n                                array_release, &\n                                array_size\n   USE dbcsr_btree, ONLY: btree_data_cp2d, &\n                          btree_data_dp2d, &\n                          btree_data_sp2d, &\n                          btree_data_zp2d\n   USE dbcsr_block_operations, ONLY: block_copy_c, &\n                                     block_copy_d, &\n                                     block_copy_s, &\n                                     block_copy_z, &\n                                     dbcsr_data_copy, &\n                                     dbcsr_data_set\n   USE dbcsr_config, ONLY: default_resize_factor\n   USE dbcsr_data_methods, ONLY: &\n      dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_get_memory_type, &\n      dbcsr_data_get_size, dbcsr_data_get_size_referenced, dbcsr_data_get_type, dbcsr_data_hold, &\n      dbcsr_data_init, dbcsr_data_new, dbcsr_data_release, dbcsr_data_set_size_referenced, &\n      dbcsr_data_valid, dbcsr_get_data_p_c, dbcsr_get_data_p_d, dbcsr_get_data_p_s, &\n      dbcsr_get_data_p_z\n   USE dbcsr_data_operations, ONLY: dbcsr_data_copyall, &\n                                    dbcsr_sort_data, &\n                                    dbcsr_switch_data_area\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_has_threads, &\n                                 dbcsr_distribution_hold, &\n                                 dbcsr_distribution_make_threads, &\n                                 dbcsr_distribution_ncols, &\n                                 dbcsr_distribution_nrows, &\n                                 dbcsr_distribution_release\n   USE dbcsr_index_operations, ONLY: dbcsr_addto_index_array, &\n                                     dbcsr_build_row_index, &\n                                     dbcsr_clearfrom_index_array, &\n                                     dbcsr_index_prune_deleted, &\n                                     dbcsr_make_dbcsr_index, &\n                                     dbcsr_make_index_exist, &\n                                     dbcsr_repoint_index, &\n                                     dbcsr_sort_indices\n   USE dbcsr_iterator_operations, ONLY: dbcsr_iterator_blocks_left, &\n                                        dbcsr_iterator_next_block, &\n                                        dbcsr_iterator_start, &\n                                        dbcsr_iterator_stop\n   USE dbcsr_mem_methods, ONLY: dbcsr_memtype_equal\n   USE dbcsr_methods, ONLY: &\n      dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_memory_type, &\n      dbcsr_get_data_size_used, dbcsr_get_data_type, dbcsr_get_index_memory_type, &\n      dbcsr_get_matrix_type, dbcsr_get_replication_type, dbcsr_matrix_counter, &\n      dbcsr_max_col_size, dbcsr_max_row_size, dbcsr_mutable_destroy, dbcsr_mutable_init, &\n      dbcsr_mutable_instantiated, dbcsr_mutable_new, dbcsr_mutable_release, dbcsr_name, &\n      dbcsr_row_block_sizes, dbcsr_use_mutable, dbcsr_valid_index, dbcsr_wm_use_mutable\n   USE dbcsr_ptr_util, ONLY: ensure_array_size\n   USE dbcsr_toollib, ONLY: dbcsr_unpack_i8_2i4, &\n                            sort\n   USE dbcsr_string_utilities, ONLY: uppercase\n   USE dbcsr_types, ONLY: &\n      dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_iterator, dbcsr_memtype_default, &\n      dbcsr_memtype_type, dbcsr_meta_size, dbcsr_num_slots, dbcsr_repl_col, dbcsr_repl_full, &\n      dbcsr_repl_none, dbcsr_repl_row, dbcsr_slot_blk_p, dbcsr_slot_col_i, dbcsr_slot_home_coli, &\n      dbcsr_slot_home_pcol, dbcsr_slot_home_prow, dbcsr_slot_home_rowi, dbcsr_slot_home_vpcol, &\n      dbcsr_slot_home_vprow, dbcsr_slot_nblkcols_local, dbcsr_slot_nblkcols_total, &\n      dbcsr_slot_nblkrows_local, dbcsr_slot_nblkrows_total, dbcsr_slot_nblks, &\n      dbcsr_slot_nfullcols_local, dbcsr_slot_nfullcols_total, dbcsr_slot_nfullrows_local, &\n      dbcsr_slot_nfullrows_total, dbcsr_slot_nze, dbcsr_slot_row_p, dbcsr_slot_size, dbcsr_type, &\n      dbcsr_type_antihermitian, dbcsr_type_antisymmetric, dbcsr_type_complex_4, &\n      dbcsr_type_complex_8, dbcsr_type_hermitian, dbcsr_type_no_symmetry, dbcsr_type_real_4, &\n      dbcsr_type_real_8, dbcsr_type_real_default, dbcsr_type_symmetric, dbcsr_work_type\n   USE dbcsr_dist_util, ONLY: convert_sizes_to_offsets, &\n                              dbcsr_calc_block_sizes, &\n                              dbcsr_verify_matrix, &\n                              meta_from_dist\n   USE dbcsr_kinds, ONLY: default_string_length, &\n                          int_8, &\n                          real_4, &\n                          real_8\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads, omp_in_parallel\n\n   IMPLICIT NONE\n   PRIVATE\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_work_operations'\n\n   LOGICAL, PARAMETER :: careful_mod = .FALSE.\n\n   PUBLIC :: dbcsr_create, dbcsr_work_create, dbcsr_finalize, dbcsr_special_finalize\n   PUBLIC :: dbcsr_add_wm_from_matrix, &\n             add_work_coordinate\n   PUBLIC :: dbcsr_work_destroy\n\n   INTERFACE dbcsr_create\n      MODULE PROCEDURE dbcsr_create_new, dbcsr_create_template\n   END INTERFACE\n\n   TYPE i_array_p\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: p => NULL()\n   END TYPE i_array_p\n\nCONTAINS\n\n   SUBROUTINE dbcsr_create_new(matrix, name, dist, matrix_type, &\n                               row_blk_size, col_blk_size, row_blk_size_obj, col_blk_size_obj, &\n                               nze, data_type, data_buffer, &\n                               data_memory_type, index_memory_type, &\n                               max_rbs, max_cbs, &\n                               row_blk_offset, col_blk_offset, &\n                               thread_dist, &\n                               reuse, reuse_arrays, mutable_work, make_index, replication_type)\n      !! Creates a matrix, allocating the essentials.\n      !!\n      !! The matrix itself is allocated, as well as the essential parts of\n      !! the index. When passed the nze argument, the data is also allocated\n      !! to that size.\n      !! see dbcsr_types.F\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! new matrix\n      CHARACTER(len=*), INTENT(IN)                       :: name\n      TYPE(dbcsr_distribution_obj), INTENT(IN)           :: dist\n         !! distribution_2d distribution\n      CHARACTER, INTENT(IN)                              :: matrix_type\n         !! 'N' for normal, 'T' for transposed, 'S' for symmetric, and 'A' for antisymmetric\n      INTEGER, DIMENSION(:), INTENT(INOUT), POINTER, &\n         CONTIGUOUS, OPTIONAL                            :: row_blk_size, col_blk_size\n      TYPE(array_i1d_obj), INTENT(IN), OPTIONAL          :: row_blk_size_obj, col_blk_size_obj\n      INTEGER, INTENT(IN), OPTIONAL                      :: nze, data_type\n         !! number of elements\n         !! type of data from 'rRcC' for single/double precision real/complex, default is 'R'\n      TYPE(dbcsr_data_obj), INTENT(IN), OPTIONAL         :: data_buffer\n      TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL     :: data_memory_type, index_memory_type\n         !! allocate indices and data using special memory\n         !! allocate indices using special memory\n      INTEGER, INTENT(IN), OPTIONAL                      :: max_rbs, max_cbs\n      TYPE(array_i1d_obj), INTENT(IN), OPTIONAL          :: row_blk_offset, col_blk_offset\n      TYPE(dbcsr_distribution_obj), INTENT(IN), OPTIONAL :: thread_dist\n      LOGICAL, INTENT(IN), OPTIONAL                      :: reuse, reuse_arrays, mutable_work, &\n                                                            make_index\n         !! reuses an existing matrix, default is to create a fresh one\n         !! uses the mutable data for working and not the append-only data; default is append-only\n      CHARACTER, INTENT(IN), OPTIONAL                    :: replication_type\n         !! replication to be used for this matrix; default is dbcsr_repl_none\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_create_new'\n\n      CHARACTER                                          :: matrix_type_l\n      INTEGER                                            :: handle, my_nze\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: vec_col_blk_offset, vec_row_blk_offset\n      INTEGER, DIMENSION(dbcsr_meta_size)                :: new_meta\n      LOGICAL                                            :: hijack, my_make_index\n\n!   ---------------------------------------------------------------------------\n\n      MARK_USED(thread_dist) ! only used with OMP\n\n      CALL timeset(routineN, handle)\n\n      ! Reuse matrix only if has actually been allocated.\n      hijack = ASSOCIATED(matrix%index)\n      IF (PRESENT(reuse)) hijack = reuse\n\n      my_make_index = .TRUE.\n      IF (PRESENT(make_index)) my_make_index = make_index\n\n      IF (.NOT. hijack) THEN\n         matrix = dbcsr_type()\n         matrix%refcount = 1\n      END IF\n!$OMP     CRITICAL (crit_counter)\n      matrix%serial_number = dbcsr_matrix_counter\n      dbcsr_matrix_counter = dbcsr_matrix_counter + 1\n!$OMP     END CRITICAL (crit_counter)\n      ! Mark matrix index as having an invalid index.\n      matrix%valid = .FALSE.\n      matrix%name = name\n      ! Sets the type of matrix building/modifying work structures.\n      IF (PRESENT(mutable_work)) THEN\n         matrix%work_mutable = mutable_work\n      ELSE\n         matrix%work_mutable = .FALSE.\n      END IF\n      ! Sets the correct data type.\n      IF (PRESENT(data_type)) THEN\n         SELECT CASE (data_type)\n         CASE (dbcsr_type_real_4)\n            matrix%data_type = dbcsr_type_real_4\n         CASE (dbcsr_type_real_8)\n            matrix%data_type = dbcsr_type_real_8\n         CASE (dbcsr_type_complex_4)\n            matrix%data_type = dbcsr_type_complex_4\n         CASE (dbcsr_type_complex_8)\n            matrix%data_type = dbcsr_type_complex_8\n         CASE DEFAULT\n            DBCSR_ABORT(\"Invalid matrix type\")\n         END SELECT\n      ELSE\n         matrix%data_type = dbcsr_type_real_default\n      END IF\n\n      matrix%data_memory_type = dbcsr_memtype_default\n      IF (PRESENT(data_memory_type)) &\n         matrix%data_memory_type = data_memory_type\n\n      matrix%index_memory_type = dbcsr_memtype_default\n      IF (PRESENT(index_memory_type)) &\n         matrix%index_memory_type = index_memory_type\n\n      IF (hijack) THEN\n         ! Release/deallocate elements that are replaced or not needed\n         ! by the new matrix. This is similar to what dbcsr_destroy\n         ! does, except that it keeps the index and data.\n         CALL array_release(matrix%row_blk_size)\n         CALL array_release(matrix%col_blk_size)\n         CALL array_release(matrix%row_blk_offset)\n         CALL array_release(matrix%col_blk_offset)\n         IF (matrix%has_local_rows) &\n            CALL array_release(matrix%local_rows)\n         IF (matrix%has_global_rows) &\n            CALL array_release(matrix%global_rows)\n         IF (matrix%has_local_cols) &\n            CALL array_release(matrix%local_cols)\n         IF (matrix%has_global_cols) &\n            CALL array_release(matrix%global_cols)\n         CALL dbcsr_distribution_release(matrix%dist)\n         IF (ASSOCIATED(matrix%wms)) THEN\n            CALL dbcsr_work_destroy_all(matrix)\n         END IF\n         CALL array_nullify(matrix%local_rows)\n         CALL array_nullify(matrix%global_rows)\n         CALL array_nullify(matrix%local_cols)\n         CALL array_nullify(matrix%global_cols)\n         !\n         IF (matrix%data_type /= matrix%data_area%d%data_type) &\n            DBCSR_ABORT(\"Inconsistent data type for the existing buffer.\")\n         CALL dbcsr_data_set_size_referenced(matrix%data_area, 0)\n      ELSE\n         ! Invalidate index\n         NULLIFY (matrix%index)\n         ! Invalidate data\n         IF (PRESENT(data_buffer)) THEN\n            IF (.NOT. dbcsr_data_valid(data_buffer)) &\n               DBCSR_ABORT(\"Input data buffer not valid.\")\n            IF (matrix%data_type /= data_buffer%d%data_type) &\n               DBCSR_ABORT(\"Input buffer data type different by matrix data type.\")\n            matrix%data_memory_type = data_buffer%d%memory_type\n            matrix%data_area = data_buffer\n            CALL dbcsr_data_hold(matrix%data_area)\n         ELSE\n            CALL dbcsr_data_init(matrix%data_area)\n         END IF\n      END IF\n      ! These are always invalidated.\n      NULLIFY (matrix%row_p, matrix%col_i, matrix%blk_p, matrix%thr_c, &\n               matrix%coo_l)\n      IF (PRESENT(row_blk_size_obj)) THEN\n         matrix%row_blk_size = row_blk_size_obj\n         CALL array_hold(matrix%row_blk_size)\n      ELSEIF (PRESENT(row_blk_size)) THEN\n         CALL array_new(matrix%row_blk_size, row_blk_size, gift=reuse_arrays)\n      ELSE\n         DBCSR_ABORT(\"Missing row_blk_size\")\n      END IF\n      IF (PRESENT(max_rbs)) THEN\n         matrix%max_rbs = max_rbs\n      ELSE IF (array_size(matrix%row_blk_size) .GT. 0) THEN\n         matrix%max_rbs = MAXVAL(array_data(matrix%row_blk_size))\n      ELSE\n         matrix%max_rbs = 0\n      END IF\n      IF (PRESENT(col_blk_size_obj)) THEN\n         matrix%col_blk_size = col_blk_size_obj\n         CALL array_hold(matrix%col_blk_size)\n      ELSEIF (PRESENT(col_blk_size)) THEN\n         CALL array_new(matrix%col_blk_size, col_blk_size, gift=reuse_arrays)\n      ELSE\n         DBCSR_ABORT(\"Missing col_blk_size\")\n      END IF\n      IF (PRESENT(max_cbs)) THEN\n         matrix%max_cbs = max_cbs\n      ELSE IF (array_size(matrix%col_blk_size) .GT. 0) THEN\n         matrix%max_cbs = MAXVAL(array_data(matrix%col_blk_size))\n      ELSE\n         matrix%max_cbs = 0\n      END IF\n      !\n      IF (array_size(matrix%row_blk_size) /= dbcsr_distribution_nrows(dist)) &\n         DBCSR_ABORT(\"Number of blocked rows does match blocked row distribution.\")\n      IF (array_size(matrix%col_blk_size) /= dbcsr_distribution_ncols(dist)) &\n         DBCSR_ABORT(\"Number of blocked columns does match blocked column distribution.\")\n      ! initialize row/col offsets\n      IF (PRESENT(row_blk_offset)) THEN\n         IF (dbcsr_distribution_nrows(dist) + 1 /= array_size(row_blk_offset)) &\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"Number of blocked offset rows does match blocked row distribution.\")\n         matrix%row_blk_offset = row_blk_offset\n         CALL array_hold(matrix%row_blk_offset)\n      ELSE\n         ALLOCATE (vec_row_blk_offset(array_size(matrix%row_blk_size) + 1))\n         CALL convert_sizes_to_offsets(array_data(matrix%row_blk_size), vec_row_blk_offset)\n         CALL array_new(matrix%row_blk_offset, vec_row_blk_offset, gift=.TRUE.)\n      END IF\n\n      IF (PRESENT(col_blk_offset)) THEN\n         IF (dbcsr_distribution_ncols(dist) + 1 /= array_size(col_blk_offset)) &\n            CALL dbcsr_abort(__LOCATION__, &\n                             \"Number of blocked offset columns does match blocked column distribution.\")\n         matrix%col_blk_offset = col_blk_offset\n         CALL array_hold(matrix%col_blk_offset)\n      ELSE\n         ALLOCATE (vec_col_blk_offset(array_size(matrix%col_blk_size) + 1))\n         CALL convert_sizes_to_offsets(array_data(matrix%col_blk_size), vec_col_blk_offset)\n         CALL array_new(matrix%col_blk_offset, vec_col_blk_offset, gift=.TRUE.)\n      END IF\n\n      matrix%dist = dist\n      CALL dbcsr_distribution_hold(matrix%dist)\n!$    IF (.NOT. dbcsr_distribution_has_threads(matrix%dist) .AND. PRESENT(thread_dist)) THEN\n!$       IF (dbcsr_distribution_has_threads(thread_dist)) THEN\n!$          matrix%dist%d%num_threads = thread_dist%d%num_threads\n!$          matrix%dist%d%has_thread_dist = .TRUE.\n!$          matrix%dist%d%thread_dist = thread_dist%d%thread_dist\n!$          CALL array_hold(matrix%dist%d%thread_dist)\n!$       END IF\n!$    END IF\n!$    IF (.NOT. dbcsr_distribution_has_threads(matrix%dist)) THEN\n!$       CALL dbcsr_distribution_make_threads(matrix%dist, &\n!$                                            array_data(matrix%row_blk_size))\n!$    END IF\n      ! Set up some data.\n      IF (my_make_index) THEN\n         CALL meta_from_dist(new_meta, dist, array_data(matrix%row_blk_size), &\n                             array_data(matrix%col_blk_size))\n         matrix%nblkrows_total = new_meta(dbcsr_slot_nblkrows_total)\n         matrix%nblkcols_total = new_meta(dbcsr_slot_nblkcols_total)\n         matrix%nfullrows_total = new_meta(dbcsr_slot_nfullrows_total)\n         matrix%nfullcols_total = new_meta(dbcsr_slot_nfullcols_total)\n         matrix%nblkrows_local = new_meta(dbcsr_slot_nblkrows_local)\n         matrix%nblkcols_local = new_meta(dbcsr_slot_nblkcols_local)\n         matrix%nfullrows_local = new_meta(dbcsr_slot_nfullrows_local)\n         matrix%nfullcols_local = new_meta(dbcsr_slot_nfullcols_local)\n      END IF\n      my_nze = 0; IF (PRESENT(nze)) my_nze = nze\n      matrix%nblks = 0\n      matrix%nze = 0\n\n      IF (PRESENT(replication_type)) THEN\n         IF (replication_type .NE. dbcsr_repl_none &\n             .AND. replication_type .NE. dbcsr_repl_full &\n             .AND. replication_type .NE. dbcsr_repl_row &\n             .AND. replication_type .NE. dbcsr_repl_col) &\n            DBCSR_ABORT(\"Invalid replication type '\"//replication_type//\"'\")\n         IF (replication_type .EQ. dbcsr_repl_row .OR. replication_type .EQ. dbcsr_repl_col) &\n            DBCSR_WARN(\"Row and column replication not fully supported\")\n         matrix%replication_type = replication_type\n      ELSE\n         matrix%replication_type = dbcsr_repl_none\n      END IF\n      !\n      ! Setup a matrix from scratch\n      IF (.NOT. hijack) THEN\n         IF (.NOT. PRESENT(data_buffer)) THEN\n            CALL dbcsr_data_new(matrix%data_area, matrix%data_type, my_nze, &\n                                memory_type=matrix%data_memory_type)\n            CALL dbcsr_data_set_size_referenced(matrix%data_area, 0)\n         END IF\n         !\n         IF (my_make_index) THEN\n            NULLIFY (matrix%index)\n            CALL ensure_array_size(matrix%index, lb=1, ub=dbcsr_num_slots, &\n                                   zero_pad=.TRUE., memory_type=matrix%index_memory_type)\n         END IF\n      END IF\n      IF (my_make_index) THEN\n         IF (LBOUND(matrix%index, 1) .GT. 1 &\n             .OR. UBOUND(matrix%index, 1) .LT. dbcsr_num_slots) &\n            DBCSR_ABORT(\"Index is not large enough\")\n         matrix%index(1:dbcsr_num_slots) = 0\n         matrix%index(1:dbcsr_meta_size) = new_meta(1:dbcsr_meta_size)\n         matrix%index(dbcsr_slot_size) = dbcsr_num_slots\n      END IF\n      !\n      matrix%symmetry = .FALSE.\n      matrix%negate_real = .FALSE.\n      matrix%negate_imaginary = .FALSE.\n      !matrix%transpose = .FALSE.\n      matrix_type_l = matrix_type\n      CALL uppercase(matrix_type_l)\n      SELECT CASE (matrix_type_l)\n      CASE (dbcsr_type_no_symmetry)\n      CASE (dbcsr_type_symmetric)\n         matrix%symmetry = .TRUE.\n      CASE (dbcsr_type_antisymmetric)\n         matrix%symmetry = .TRUE.\n         matrix%negate_real = .TRUE.\n         matrix%negate_imaginary = .TRUE.\n      CASE (dbcsr_type_hermitian)\n         matrix%symmetry = .TRUE.\n         matrix%negate_imaginary = .TRUE.\n      CASE (dbcsr_type_antihermitian)\n         matrix%symmetry = .TRUE.\n         matrix%negate_real = .TRUE.\n      CASE DEFAULT\n         DBCSR_ABORT(\"Invalid matrix type.\")\n      END SELECT\n      matrix%bcsc = .FALSE.\n      matrix%local_indexing = .FALSE.\n      matrix%list_indexing = .FALSE.\n      CALL array_nullify(matrix%local_rows)\n      CALL array_nullify(matrix%global_rows)\n      CALL array_nullify(matrix%local_cols)\n      CALL array_nullify(matrix%global_cols)\n      matrix%has_local_rows = .FALSE.\n      matrix%has_global_rows = .FALSE.\n      matrix%has_local_cols = .FALSE.\n      matrix%has_global_cols = .FALSE.\n      IF (my_make_index) THEN\n         CALL dbcsr_make_index_exist(matrix)\n      END IF\n      matrix%valid = .TRUE.\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_create_new\n\n   SUBROUTINE dbcsr_create_template(matrix, template, name, dist, matrix_type, &\n                                    row_blk_size, col_blk_size, row_blk_size_obj, col_blk_size_obj, &\n                                    nze, data_type, &\n                                    data_buffer, data_memory_type, index_memory_type, &\n                                    max_rbs, max_cbs, &\n                                    row_blk_offset, col_blk_offset, &\n                                    reuse_arrays, mutable_work, make_index, replication_type)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      TYPE(dbcsr_type), INTENT(IN)                       :: template\n      CHARACTER(len=*), INTENT(IN), OPTIONAL             :: name\n      TYPE(dbcsr_distribution_obj), INTENT(IN), OPTIONAL :: dist\n      CHARACTER, INTENT(IN), OPTIONAL                    :: matrix_type\n      INTEGER, DIMENSION(:), INTENT(INOUT), OPTIONAL, &\n         POINTER, CONTIGUOUS                             :: row_blk_size, col_blk_size\n      TYPE(array_i1d_obj), INTENT(IN), OPTIONAL          :: row_blk_size_obj, col_blk_size_obj\n      INTEGER, INTENT(IN), OPTIONAL                      :: nze, data_type\n      TYPE(dbcsr_data_obj), INTENT(IN), OPTIONAL         :: data_buffer\n      TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL     :: data_memory_type, index_memory_type\n      INTEGER, INTENT(IN), OPTIONAL                      :: max_rbs, max_cbs\n      TYPE(array_i1d_obj), INTENT(IN), OPTIONAL          :: row_blk_offset, col_blk_offset\n      LOGICAL, INTENT(IN), OPTIONAL                      :: reuse_arrays, mutable_work, make_index\n      CHARACTER, INTENT(IN), OPTIONAL                    :: replication_type\n\n      CHARACTER                                          :: new_matrix_type, new_replication_type\n      CHARACTER(len=default_string_length)               :: new_name\n      INTEGER                                            :: new_data_type, new_max_cbs, new_max_rbs\n      LOGICAL                                            :: my_make_index, new_mutable_work\n      TYPE(array_i1d_obj)                                :: new_col_blk_offset, new_row_blk_offset\n      TYPE(dbcsr_distribution_obj)                       :: new_dist\n      TYPE(dbcsr_memtype_type)                           :: new_data_memory_type, &\n                                                            new_index_memory_type\n\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: blk_size\n\n!   ---------------------------------------------------------------------------\n\n      IF (PRESENT(name)) THEN\n         new_name = TRIM(name)\n      ELSE\n         new_name = TRIM(dbcsr_name(template))\n      END IF\n      IF (PRESENT(dist)) THEN\n         new_dist = dist\n      ELSE\n         new_dist = dbcsr_distribution(template)\n      END IF\n      IF (PRESENT(matrix_type)) THEN\n         new_matrix_type = matrix_type\n      ELSE\n         new_matrix_type = dbcsr_get_matrix_type(template)\n      END IF\n      !\n      IF ((PRESENT(row_blk_size) .NEQV. PRESENT(col_blk_size)) .OR. &\n          (PRESENT(row_blk_size_obj) .NEQV. PRESENT(col_blk_size_obj))) THEN\n         DBCSR_ABORT(\"Both row_blk_size and col_blk_size must be provided\")\n      END IF\n      !\n      IF (PRESENT(max_rbs)) new_max_rbs = max_rbs\n      IF (PRESENT(row_blk_offset)) new_row_blk_offset = row_blk_offset\n      NULLIFY (blk_size)\n      IF (PRESENT(row_blk_size_obj)) THEN\n         blk_size => array_data(row_blk_size_obj)\n      ELSEIF (PRESENT(row_blk_size)) THEN\n         blk_size => row_blk_size\n      END IF\n      IF (ASSOCIATED(blk_size)) THEN\n         IF (.NOT. PRESENT(max_rbs)) &\n            new_max_rbs = MAXVAL(blk_size)\n      ELSE\n         IF (.NOT. PRESENT(max_rbs)) &\n            new_max_rbs = dbcsr_max_row_size(template)\n         IF (.NOT. PRESENT(row_blk_offset)) &\n            new_row_blk_offset = template%row_blk_offset\n      END IF\n      !\n      IF (PRESENT(max_cbs)) new_max_cbs = max_cbs\n      IF (PRESENT(col_blk_offset)) new_col_blk_offset = col_blk_offset\n      NULLIFY (blk_size)\n      IF (PRESENT(col_blk_size_obj)) THEN\n         blk_size => array_data(col_blk_size_obj)\n      ELSEIF (PRESENT(col_blk_size)) THEN\n         blk_size => col_blk_size\n      END IF\n      IF (ASSOCIATED(blk_size)) THEN\n         IF (.NOT. PRESENT(max_cbs)) &\n            new_max_cbs = MAXVAL(blk_size)\n      ELSE\n         IF (.NOT. PRESENT(max_cbs)) &\n            new_max_cbs = dbcsr_max_col_size(template)\n         IF (.NOT. PRESENT(col_blk_offset)) &\n            new_col_blk_offset = template%col_blk_offset\n      END IF\n      IF (PRESENT(data_type)) THEN\n         new_data_type = data_type\n      ELSE\n         new_data_type = dbcsr_get_data_type(template)\n      END IF\n      IF (PRESENT(data_memory_type)) THEN\n         new_data_memory_type = data_memory_type\n      ELSE\n         new_data_memory_type = dbcsr_get_data_memory_type(template)\n      END IF\n      IF (PRESENT(index_memory_type)) THEN\n         new_index_memory_type = index_memory_type\n      ELSE\n         new_index_memory_type = dbcsr_get_index_memory_type(template)\n      END IF\n      IF (PRESENT(replication_type)) THEN\n         new_replication_type = replication_type\n      ELSE\n         new_replication_type = dbcsr_get_replication_type(template)\n      END IF\n      IF (PRESENT(mutable_work)) THEN\n         new_mutable_work = mutable_work\n      ELSE\n         new_mutable_work = dbcsr_use_mutable(template)\n      END IF\n      IF (PRESENT(row_blk_size_obj)) THEN\n         CALL dbcsr_create(matrix, name=new_name, dist=new_dist, &\n                           matrix_type=new_matrix_type, &\n                           row_blk_size_obj=row_blk_size_obj, &\n                           col_blk_size_obj=col_blk_size_obj, &\n                           nze=nze, &\n                           data_type=new_data_type, &\n                           data_buffer=data_buffer, &\n                           data_memory_type=new_data_memory_type, &\n                           index_memory_type=new_index_memory_type, &\n                           max_rbs=new_max_rbs, max_cbs=new_max_cbs, &\n                           row_blk_offset=row_blk_offset, col_blk_offset=col_blk_offset, &\n                           reuse_arrays=reuse_arrays, &\n                           mutable_work=new_mutable_work, &\n                           make_index=make_index, &\n                           replication_type=new_replication_type)\n      ELSEIF (PRESENT(row_blk_size)) THEN\n         CALL dbcsr_create(matrix, name=new_name, dist=new_dist, &\n                           matrix_type=new_matrix_type, &\n                           row_blk_size=row_blk_size, &\n                           col_blk_size=col_blk_size, &\n                           nze=nze, &\n                           data_type=new_data_type, &\n                           data_buffer=data_buffer, &\n                           data_memory_type=new_data_memory_type, &\n                           index_memory_type=new_index_memory_type, &\n                           max_rbs=new_max_rbs, max_cbs=new_max_cbs, &\n                           row_blk_offset=row_blk_offset, col_blk_offset=col_blk_offset, &\n                           reuse_arrays=reuse_arrays, &\n                           mutable_work=new_mutable_work, &\n                           make_index=make_index, &\n                           replication_type=new_replication_type)\n      ELSE\n         CALL dbcsr_create(matrix, name=new_name, dist=new_dist, &\n                           matrix_type=new_matrix_type, &\n                           row_blk_size_obj=template%row_blk_size, &\n                           col_blk_size_obj=template%col_blk_size, &\n                           nze=nze, &\n                           data_type=new_data_type, &\n                           data_buffer=data_buffer, &\n                           data_memory_type=new_data_memory_type, &\n                           index_memory_type=new_index_memory_type, &\n                           max_rbs=new_max_rbs, max_cbs=new_max_cbs, &\n                           row_blk_offset=new_row_blk_offset, col_blk_offset=new_col_blk_offset, &\n                           thread_dist=dbcsr_distribution(template), &\n                           reuse_arrays=reuse_arrays, &\n                           mutable_work=new_mutable_work, &\n                           make_index=make_index, &\n                           replication_type=new_replication_type)\n      END IF\n      ! Copy stuff from the meta-array.  These are not normally needed,\n      ! but have to be here for creating matrices from \"image\" matrices.\n      my_make_index = .TRUE.\n      IF (PRESENT(make_index)) my_make_index = make_index\n      IF (my_make_index) THEN\n         matrix%index(dbcsr_slot_home_prow) = template%index(dbcsr_slot_home_prow)\n         matrix%index(dbcsr_slot_home_rowi) = template%index(dbcsr_slot_home_rowi)\n         matrix%index(dbcsr_slot_home_pcol) = template%index(dbcsr_slot_home_pcol)\n         matrix%index(dbcsr_slot_home_coli) = template%index(dbcsr_slot_home_coli)\n         matrix%index(dbcsr_slot_home_vprow) = template%index(dbcsr_slot_home_vprow)\n         matrix%index(dbcsr_slot_home_vpcol) = template%index(dbcsr_slot_home_vpcol)\n      END IF\n      IF (PRESENT(row_blk_size) .AND. .NOT. PRESENT(row_blk_offset)) THEN\n         CALL array_release(new_row_blk_offset)\n      END IF\n      IF (PRESENT(col_blk_size) .AND. .NOT. PRESENT(col_blk_offset)) THEN\n         CALL array_release(new_col_blk_offset)\n      END IF\n\n   END SUBROUTINE dbcsr_create_template\n\n   SUBROUTINE dbcsr_init_wm(wm, data_type, nblks_guess, sizedata_guess, memory_type)\n      !! Initializes one work matrix\n\n      TYPE(dbcsr_work_type), INTENT(OUT)                 :: wm\n         !! initialized work matrix\n      INTEGER, INTENT(IN)                                :: data_type\n      INTEGER, INTENT(IN), OPTIONAL                      :: nblks_guess, sizedata_guess\n         !! estimated number of blocks\n         !! estimated size of data\n      TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL     :: memory_type\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_init_wm'\n      INTEGER                                            :: handle, nblks, stat\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) CALL timeset(routineN, handle)\n      wm%lastblk = 0\n      wm%datasize = 0\n      ! Index\n      IF (PRESENT(nblks_guess)) THEN\n         nblks = nblks_guess\n         IF (nblks_guess < 0) &\n            DBCSR_ABORT(\"Can not have negative block count.\")\n         ALLOCATE (wm%row_i(nblks), stat=stat)\n         IF (stat /= 0) DBCSR_ABORT(\"wm%row_i\")\n         ALLOCATE (wm%col_i(nblks), stat=stat)\n         IF (stat /= 0) DBCSR_ABORT(\"wm%col_i\")\n         ALLOCATE (wm%blk_p(nblks), stat=stat)\n         IF (stat /= 0) DBCSR_ABORT(\"wm%blk_p\")\n      ELSE\n         NULLIFY (wm%row_i, wm%col_i, wm%blk_p)\n         !nblks = CEILING (REAL (matrix%nblkrows_local * matrix%nblkcols_local)&\n         !     / REAL (dbcsr_mp_numnodes (dbcsr_distribution_mp (matrix%dist))))\n      END IF\n      ! Data\n      CALL dbcsr_data_init(wm%data_area)\n      IF (PRESENT(sizedata_guess)) THEN\n         IF (sizedata_guess < 0) &\n            DBCSR_ABORT(\"Can not have negative data size.\")\n         CALL dbcsr_data_new(wm%data_area, data_type, &\n                             data_size=sizedata_guess, memory_type=memory_type)\n      ELSE\n         CALL dbcsr_data_new(wm%data_area, data_type, memory_type=memory_type)\n      END IF\n      CALL dbcsr_mutable_init(wm%mutable)\n      IF (careful_mod) CALL timestop(handle)\n   END SUBROUTINE dbcsr_init_wm\n\n   SUBROUTINE dbcsr_work_create(matrix, nblks_guess, sizedata_guess, n, &\n                                work_mutable, memory_type)\n      !! Creates a the working matrix(es) for a DBCSR matrix.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! new matrix\n      INTEGER, INTENT(IN), OPTIONAL                      :: nblks_guess, sizedata_guess, n\n         !! estimated number of blocks\n         !! estimated size of data\n         !! number work matrices to create, default is 1\n      LOGICAL, INTENT(in), OPTIONAL                      :: work_mutable\n         !! use mutable work type, default is what was specified in create\n      TYPE(dbcsr_memtype_type), INTENT(IN), OPTIONAL     :: memory_type\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_work_create'\n\n      INTEGER                                            :: handle, iw, nw, ow\n      LOGICAL                                            :: wms_new, wms_realloc\n      TYPE(dbcsr_work_type), DIMENSION(:), POINTER       :: wms\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      IF (PRESENT(n)) THEN\n         nw = n\n      ELSE\n         nw = 1\n!$       IF (omp_in_parallel()) THEN\n!$          nw = omp_get_num_threads()\n!$       ELSE\n!$          nw = omp_get_max_threads()\n!$       END IF\n      END IF\n!$OMP     MASTER\n      wms_new = .NOT. ASSOCIATED(matrix%wms)\n      wms_realloc = .FALSE.\n      IF (ASSOCIATED(matrix%wms)) THEN\n         ow = SIZE(matrix%wms)\n         IF (ow .LT. nw) &\n            DBCSR_WARN(\"Number of work matrices less than threads.\")\n         IF (ow .LT. nw) wms_realloc = .TRUE.\n      END IF\n      IF (PRESENT(work_mutable)) THEN\n         matrix%work_mutable = work_mutable\n      END IF\n      IF (wms_realloc) THEN\n         ALLOCATE (wms(nw))\n         wms(1:ow) = matrix%wms(1:ow)\n         DEALLOCATE (matrix%wms)\n         matrix%wms => wms\n         DO iw = ow + 1, nw\n            CALL dbcsr_init_wm(matrix%wms(iw), matrix%data_type, &\n                               nblks_guess=nblks_guess, sizedata_guess=sizedata_guess, &\n                               memory_type=memory_type)\n            IF (matrix%work_mutable) &\n               CALL dbcsr_mutable_new(matrix%wms(iw)%mutable, &\n                                      dbcsr_get_data_type(matrix))\n         END DO\n      END IF\n      IF (wms_new) THEN\n         ALLOCATE (matrix%wms(nw))\n         DO iw = 1, nw\n            CALL dbcsr_init_wm(matrix%wms(iw), matrix%data_type, &\n                               nblks_guess=nblks_guess, sizedata_guess=sizedata_guess, &\n                               memory_type=memory_type)\n            IF (matrix%work_mutable) &\n               CALL dbcsr_mutable_new(matrix%wms(iw)%mutable, &\n                                      dbcsr_get_data_type(matrix))\n         END DO\n      END IF\n      matrix%valid = .FALSE.\n!$OMP     END MASTER\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_work_create\n\n   SUBROUTINE dbcsr_finalize(matrix, reshuffle)\n      !! Creates the final dbcsr_type matrix from the working matrix.\n      !! Work matrices (array or tree-based) are merged into the base DBCSR matrix.\n      !! If a matrix is marked as having a valid index, then nothing is done.\n      !! Deleted blocks are pruned from the index.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! final matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: reshuffle\n         !! whether the data should be reshuffled, default is false\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_finalize'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: handle, i, nblks, nwms, start_offset\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: empty_row_p\n      INTEGER, DIMENSION(:), POINTER, SAVE               :: old_blk_p, old_col_i, old_row_p\n      LOGICAL                                            :: can_quick, fake_row_p, sort_data, spawn\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n!$OMP     MASTER\n      NULLIFY (old_blk_p, old_col_i, old_row_p)\n!$OMP     END MASTER\n\n!$OMP     BARRIER\n      ! If the matrix is not marked as dirty then skip the work.\n      IF (dbcsr_valid_index(matrix)) THEN\n         !\"No need to finalize a valid matrix, skipping.\"\n         !\n         ! A matrix with a valid index should not have associated work\n         ! arrays.  This may happen when this routine is called on a\n         ! matrix that was not changed.\n!$OMP        BARRIER\n!$OMP        MASTER\n         IF (ASSOCIATED(matrix%wms)) &\n            CALL dbcsr_work_destroy_all(matrix)\n         matrix%valid = .TRUE.\n!$OMP        END MASTER\n!$OMP        BARRIER\n         CALL timestop(handle)\n         RETURN\n      END IF\n      !\n      ! If possible, data copying is avoided.\n      IF (PRESENT(reshuffle)) THEN\n         sort_data = reshuffle\n      ELSE\n         sort_data = .FALSE.\n      END IF\n      !\n      ! Now make sure that a valid row_p exists. Also clear the row_p if\n      ! the matrix is declared to have 0 blocks.\n!$OMP     MASTER\n      fake_row_p = .NOT. ASSOCIATED(matrix%row_p)\n      IF (ASSOCIATED(matrix%row_p)) THEN\n         fake_row_p = SIZE(matrix%row_p) .LE. 1\n      END IF\n      fake_row_p = fake_row_p .OR. matrix%nblks .EQ. 0\n!$OMP     END MASTER\n      !\n      ! See where data will be appended in the main data\n      ! area. Alternatively, set to the start if the matrix is declared\n      ! to have no data. (This value is ignored if reshuffle is true\n      ! because the main data area is always new.)\n      start_offset = matrix%nze\n      i = dbcsr_get_data_size_used(matrix)\n!$OMP     MASTER\n      matrix%nze = 0\n!$OMP     END MASTER\n!$OMP     BARRIER\n!$OMP     ATOMIC\n      matrix%nze = matrix%nze + i\n!$OMP     BARRIER\n      IF (dbg) THEN\n         WRITE (*, *) routineN//\" sizes\", matrix%nze, i, &\n            dbcsr_data_get_size_referenced(matrix%data_area), &\n            dbcsr_data_get_size(matrix%data_area)\n      END IF\n      IF (.FALSE. .AND. dbcsr_data_get_size_referenced(matrix%data_area) .NE. &\n          matrix%nze) THEN\n         IF (matrix%nze .NE. dbcsr_data_get_size_referenced(matrix%data_area)) &\n            DBCSR_WARN(\"Should reshuffle.\")\n         IF (ASSOCIATED(matrix%wms)) THEN\n            sort_data = .NOT. dbcsr_wm_use_mutable(matrix%wms(1))\n         END IF\n      END IF\n      IF (sort_data .AND. matrix%nze .GT. 0) THEN\n         CALL dbcsr_add_wm_from_matrix(matrix)\n         matrix%nze = 0\n!$OMP        MASTER\n         fake_row_p = .TRUE.\n!$OMP        END MASTER\n      END IF\n      start_offset = dbcsr_data_get_size_referenced(matrix%data_area) + 1\n      IF (matrix%nze .EQ. 0) start_offset = 1\n!$OMP     MASTER\n      matrix%index(dbcsr_slot_nze) = matrix%nze\n      IF (fake_row_p) THEN\n         ALLOCATE (empty_row_p(matrix%nblkrows_total + 1))\n         empty_row_p(:) = 0\n         CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, &\n                                      DATA=empty_row_p, extra=0)\n         CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, &\n                                      reservation=0)\n         CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, &\n                                      reservation=0)\n         CALL dbcsr_repoint_index(matrix)\n      END IF\n!$OMP     END MASTER\n      !\n!$OMP     BARRIER\n      can_quick = can_quickly_finalize(matrix)\n!$OMP     BARRIER\n      ! If the matrix, work matrices, and environment fit several\n      ! criteria, then a quick O(1) finalization is performed.\n      IF (can_quick .AND. .NOT. sort_data) THEN\n         CALL quick_finalize(matrix)\n      ELSE\n         !\n!$OMP        MASTER\n         !\n         ! Create work matrices if not yet existing\n         IF (.NOT. ASSOCIATED(matrix%wms)) THEN\n            nwms = 1\n!$          nwms = omp_get_num_threads()\n            CALL dbcsr_work_create(matrix, n=nwms)\n         END IF\n!$OMP        END MASTER\n!$OMP        BARRIER\n         !\n         ! Ensure index arrays at least exist.\n!$OMP        DO SCHEDULE (STATIC, 1)\n         DO i = 1, SIZE(matrix%wms)\n            IF (.NOT. ASSOCIATED(matrix%wms(i)%row_i)) THEN\n               CALL ensure_array_size(matrix%wms(i)%row_i, ub=0)\n            END IF\n            IF (.NOT. ASSOCIATED(matrix%wms(i)%col_i)) THEN\n               CALL ensure_array_size(matrix%wms(i)%col_i, ub=0)\n            END IF\n            IF (.NOT. ASSOCIATED(matrix%wms(i)%blk_p)) THEN\n               CALL ensure_array_size(matrix%wms(i)%blk_p, ub=0)\n            END IF\n         END DO\n!$OMP        ENDDO\n         !\n         ! Check for deleted blocks\n!$OMP        MASTER\n         nblks = matrix%row_p(matrix%nblkrows_total + 1)\n         IF (ANY(matrix%blk_p(1:nblks) .EQ. 0)) THEN\n            CALL dbcsr_index_prune_deleted(matrix)\n         END IF\n         old_row_p => matrix%row_p\n         old_col_i => matrix%col_i\n         old_blk_p => matrix%blk_p\n!$OMP        END MASTER\n         !\n!$OMP        BARRIER\n         ! Check to see if we will need to create a parallel environment\n         ! (needed when there are multiple work matrices but we are not\n         ! in an OpenMP parallel section.)\n         !\n         ! A parallel section is created and used when the matrix has\n         ! more work matrices. It's a shortcut when the finalize is\n         ! called from a non-parallel environment whereas the matrix was\n         ! built/modified in a parallel environment\n         nwms = SIZE(matrix%wms)\n         spawn = .FALSE.\n!$       IF (.NOT. omp_in_parallel()) THEN\n!$          IF (nwms .GT. 1) spawn = .TRUE.\n!$       END IF\n         IF (spawn) THEN\n!$OMP           PARALLEL IF (spawn) &\n!$OMP                    DEFAULT (NONE) &\n!$OMP                    SHARED (matrix, old_row_p, old_col_i, old_blk_p,&\n!$OMP                            start_offset, sort_data)\n            CALL dbcsr_merge_all(matrix, &\n                                 old_row_p, old_col_i, old_blk_p, &\n                                 sort_data=sort_data)\n!$OMP           END PARALLEL\n         ELSE\n            CALL dbcsr_merge_all(matrix, &\n                                 old_row_p, old_col_i, old_blk_p, &\n                                 sort_data=sort_data)\n         END IF\n      END IF\n!$OMP BARRIER\n!$OMP MASTER\n      ! Clean up.\n      IF (ASSOCIATED(matrix%wms)) THEN\n         CALL dbcsr_work_destroy_all(matrix)\n      END IF\n      matrix%valid = .TRUE.\n!$OMP END MASTER\n!$OMP BARRIER\n      IF (dbg) THEN\n!$OMP        SINGLE\n         CALL dbcsr_verify_matrix(matrix)\n!$OMP        END SINGLE\n      END IF\n!$OMP MASTER\n      IF (fake_row_p) THEN\n         DEALLOCATE (empty_row_p)\n      END IF\n!$OMP END MASTER\n!$OMP BARRIER\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_finalize\n\n   SUBROUTINE dbcsr_special_finalize(matrix, reshuffle)\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n      LOGICAL, INTENT(IN), OPTIONAL                      :: reshuffle\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_special_finalize'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: handle\n      LOGICAL                                            :: can_quick, sort_data\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      IF (matrix%nblks .NE. 0) &\n         DBCSR_ABORT(\"Optimized finalize requires empty matrix.\")\n      IF (dbcsr_valid_index(matrix)) &\n         DBCSR_ABORT(\"Optimized finalize requires invalid matrix.\")\n      IF (.NOT. ASSOCIATED(matrix%wms)) &\n         DBCSR_ABORT(\"Optimized finalize requires work matrices exist.\")\n      IF (SIZE(matrix%wms) .NE. 1) &\n         DBCSR_ABORT(\"Optimized finalize requires single work matrix\")\n\n      !\n      ! If possible, data copying is avoided.\n      IF (PRESENT(reshuffle)) THEN\n         sort_data = reshuffle\n      ELSE\n         sort_data = .FALSE.\n      END IF\n!$OMP     BARRIER\n      can_quick = can_quickly_finalize(matrix)\n!$OMP     BARRIER\n\n      ! If the matrix, work matrices, and environment fit several\n      ! criteria, then a quick O(1) finalization is performed.\n      IF (can_quick .AND. .NOT. sort_data) THEN\n         CALL quick_finalize(matrix)\n      ELSE\n         IF (.NOT. sort_data) &\n            DBCSR_ABORT(\"merge_single_wm only supports data sorting\")\n         !\n         ! Ensure needed index arrays at least exist.\n!$OMP        MASTER\n         !\n         IF (.NOT. ASSOCIATED(matrix%wms(1)%row_i)) THEN\n            CALL ensure_array_size(matrix%wms(1)%row_i, ub=0)\n         END IF\n         IF (.NOT. ASSOCIATED(matrix%wms(1)%col_i)) THEN\n            CALL ensure_array_size(matrix%wms(1)%col_i, ub=0)\n         END IF\n         IF (.NOT. ASSOCIATED(matrix%wms(1)%blk_p)) THEN\n            CALL ensure_array_size(matrix%wms(1)%blk_p, ub=0)\n         END IF\n         !\n!$OMP        END MASTER\n!$OMP        BARRIER\n         !\n!$OMP        PARALLEL DEFAULT (NONE), SHARED(matrix)\n         CALL dbcsr_merge_single_wm(matrix)\n!$OMP        END PARALLEL\n\n      END IF\n\n!$OMP     MASTER\n      ! Clean up.\n      IF (ASSOCIATED(matrix%wms)) THEN\n         CALL dbcsr_work_destroy_all(matrix)\n      END IF\n      matrix%valid = .TRUE.\n!$OMP     END MASTER\n!$OMP     BARRIER\n      IF (dbg) THEN\n!$OMP        SINGLE\n         CALL dbcsr_verify_matrix(matrix)\n!$OMP        END SINGLE\n      END IF\n!$OMP     BARRIER\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_special_finalize\n\n   FUNCTION can_quickly_finalize(matrix) RESULT(quick)\n      !! Checks whether the matrix can be finalized with minimal copying.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix to check\n      LOGICAL                                            :: quick\n         !! whether matrix can be quickly finalized\n\n!   ---------------------------------------------------------------------------\n\n      IF (ASSOCIATED(matrix%wms)) THEN\n         quick = matrix%nblks .EQ. 0\n         quick = quick .AND. SIZE(matrix%wms) .EQ. 1 .AND. &\n                 .NOT. dbcsr_wm_use_mutable(matrix%wms(1))\n         IF (quick) THEN\n            quick = quick .AND. &\n                    dbcsr_memtype_equal( &\n                    dbcsr_data_get_memory_type(matrix%wms(1)%data_area), &\n                    dbcsr_data_get_memory_type(matrix%data_area))\n            quick = quick .AND. &\n                    ASSOCIATED(matrix%wms(1)%row_i)\n            quick = quick .AND. &\n                    (matrix%wms(1)%datasize_after_filtering .LT. 0 .OR. &\n                     matrix%wms(1)%datasize .EQ. matrix%wms(1)%datasize_after_filtering)\n         END IF\n      ELSE\n         quick = .FALSE.\n      END IF\n   END FUNCTION can_quickly_finalize\n\n   SUBROUTINE quick_finalize(matrix)\n      !! Performs quick finalization of matrix\n      !! The data area from the work matrix is accepted as the new matrix's data\n      !! area and the index is built from the work matrix.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix to finalize\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'quick_finalize'\n      INTEGER                                            :: error_handle, nblks, nrows\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n!$OMP     SECTIONS\n!$OMP     SECTION\n      nblks = matrix%wms(1)%lastblk\n      nrows = matrix%nblkrows_total\n      CALL dbcsr_sort_indices(nblks, &\n                              matrix%wms(1)%row_i, &\n                              matrix%wms(1)%col_i, &\n                              matrix%wms(1)%blk_p)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p)\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, &\n                                   reservation=nrows + 1, extra=2*nblks)\n      CALL dbcsr_make_dbcsr_index(matrix%row_p, matrix%wms(1)%row_i, &\n                                  nrows, nblks)\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, &\n                                   DATA=matrix%wms(1)%col_i(1:nblks))\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, &\n                                   DATA=matrix%wms(1)%blk_p(1:nblks))\n      matrix%nblks = nblks\n      matrix%nze = matrix%wms(1)%datasize\n      matrix%index(dbcsr_slot_nblks) = nblks\n      matrix%index(dbcsr_slot_nze) = matrix%wms(1)%datasize\n      CALL dbcsr_repoint_index(matrix)\n!$OMP     SECTION\n      CALL dbcsr_switch_data_area(matrix, matrix%wms(1)%data_area)\n!$OMP     END SECTIONS\n      CALL timestop(error_handle)\n   END SUBROUTINE quick_finalize\n\n   SUBROUTINE dbcsr_add_wm_from_matrix(matrix, limits)\n      !! Creates a work matrix from the data present in a finalized matrix.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! DBCSR matrix\n      INTEGER, DIMENSION(4), INTENT(IN), OPTIONAL        :: limits\n         !! the limits to use for copying\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_add_wm_from_matrix'\n\n      INTEGER                                            :: handle, ithread, nthreads, nwms, &\n                                                            old_nwms, size_used\n      LOGICAL                                            :: preexists\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n!$OMP     BARRIER\n      preexists = ASSOCIATED(matrix%wms)\n      IF (preexists) THEN\n         old_nwms = SIZE(matrix%wms)\n         IF (old_nwms .EQ. 0) &\n            DBCSR_WARN(\"Nonexisting work matrices?!\")\n      ELSE\n         old_nwms = 0\n      END IF\n      nthreads = 1; ithread = 0\n!$    nthreads = OMP_GET_NUM_THREADS(); ithread = OMP_GET_THREAD_NUM()\n      IF (nthreads .GT. 1) THEN\n         IF (old_nwms /= nthreads .AND. old_nwms /= 0) &\n            DBCSR_ABORT(\"Number of work matrices and threads do not match\")\n      END IF\n      nwms = MAX(1, old_nwms)\n!$    nwms = MAX(nwms, nthreads)\n!$OMP     BARRIER\n!$OMP     MASTER\n      IF (.NOT. ASSOCIATED(matrix%wms)) THEN\n         CALL dbcsr_work_create(matrix, &\n                                INT(matrix%nblks*default_resize_factor/nwms), &\n                                INT(matrix%nze*default_resize_factor/nwms), &\n                                n=nwms, work_mutable=.FALSE.)\n      END IF\n!$OMP     END MASTER\n!$OMP     BARRIER\n      size_used = matrix%nze\n      CALL dbcsr_fill_wm_from_matrix(matrix%wms, matrix, size_used, &\n                                     limits=limits)\n!$OMP     BARRIER\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_add_wm_from_matrix\n\n   SUBROUTINE dbcsr_fill_wm_from_matrix(wm, matrix, size_used, limits)\n      !! Fills index and data of the work matrix from the\n      !! previously-finalized one.\n      !!\n      !! limits\n      !! The limits is a 4-tuple\n      !! (lower_row, higher_row, lower_column, higher_column).\n\n      TYPE(dbcsr_work_type), DIMENSION(:), INTENT(INOUT) :: wm\n         !! the work matrix to fill\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! DBCSR matrix\n      INTEGER, INTENT(IN)                                :: size_used\n      INTEGER, DIMENSION(4), INTENT(IN), OPTIONAL        :: limits\n         !! only fills blocks within this range\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_fill_wm_from_matrix'\n\n      INTEGER                                            :: blk, blk_p, col, handle, ithread, &\n                                                            nthreads, nwms, nze, row, wblk_p, &\n                                                            which_wm, wm_first, wm_last\n      LOGICAL                                            :: careful, limit, mt, tr\n      LOGICAL, SAVE                                      :: mutable\n      TYPE(dbcsr_data_obj)                               :: data_block\n      TYPE(dbcsr_iterator)                               :: iter\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      nwms = SIZE(matrix%wms)\n      mt = .FALSE.\n!$    IF (nwms .GT. 1) mt = omp_get_num_threads() .GT. 1\n      ithread = 0; nthreads = 1\n!$    ithread = omp_get_thread_num()\n!$    nthreads = omp_get_num_threads()\n      limit = PRESENT(limits)\n      careful = size_used + size_used/8 &\n                .LT. dbcsr_data_get_size_referenced(matrix%data_area)\n      CALL dbcsr_data_init(data_block)\n      CALL dbcsr_data_new(data_block, dbcsr_data_get_type(matrix%data_area))\n      IF (mt) THEN\n         wm_first = ithread + 1\n         wm_last = ithread + 1\n      ELSE\n         wm_first = 1\n         wm_last = nwms\n      END IF\n      ! Prepares the work matrices to accept the main data.\n!$OMP     MASTER\n      mutable = .FALSE.\n      DO which_wm = 1, nwms\n         mutable = mutable .OR. dbcsr_wm_use_mutable(wm(which_wm))\n      END DO\n!$OMP     END MASTER\n!$OMP     BARRIER\n      DO which_wm = wm_first, wm_last\n         IF (dbcsr_wm_use_mutable(wm(which_wm))) &\n            DBCSR_ABORT(\"Adding main matrix into mutable not supported.\")\n         IF (mutable) THEN\n            IF (.NOT. dbcsr_mutable_instantiated(wm(which_wm)%mutable)) THEN\n               CALL dbcsr_mutable_new(wm(which_wm)%mutable, matrix%data_type)\n            END IF\n         ELSE\n            ! We don't know how much data we'll get so we have to be generous.\n            CALL dbcsr_data_ensure_size(wm(which_wm)%data_area, &\n                                        size_used/nwms)\n            CALL dbcsr_data_set_size_referenced(wm(which_wm)%data_area, 0)\n         END IF\n      END DO\n      ! Now copy the data\n      CALL dbcsr_iterator_start(iter, matrix, shared=mt, &\n                                contiguous_pointers=.FALSE., read_only=.TRUE.)\n      DO WHILE (dbcsr_iterator_blocks_left(iter))\n         CALL dbcsr_iterator_next_block(iter, row, col, data_block, &\n                                        transposed=tr, block_number=blk)\n         IF (limit) THEN\n            IF (.NOT. within_limits(row, col, limits)) CYCLE\n         END IF\n         blk_p = matrix%blk_p(blk)\n         which_wm = ithread + 1\n         wblk_p = SIGN(wm(which_wm)%datasize + 1, blk_p)\n         nze = dbcsr_data_get_size(data_block)\n         IF (mt .OR. limit .OR. careful .OR. mutable) THEN\n            ! The data gets copied block by block so the block pointers\n            ! are ordered accordingly.\n            IF (.NOT. mutable) THEN\n               CALL add_work_coordinate(wm(which_wm), row, col, wblk_p)\n               CALL dbcsr_data_ensure_size(wm(which_wm)%data_area, &\n                                           ABS(wblk_p) + nze - 1, factor=default_resize_factor)\n               CALL dbcsr_data_set_size_referenced(wm(which_wm)%data_area, &\n                                                   ABS(wblk_p) + nze - 1)\n               CALL dbcsr_data_set(wm(which_wm)%data_area, &\n                                   lb=ABS(wblk_p), &\n                                   data_size=nze, &\n                                   src=data_block, source_lb=1)\n            END IF\n         ELSE\n            ! The data gets copied all at once so the block pointers\n            ! should remain the same as they were.\n            CALL add_work_coordinate(wm(which_wm), row, col, blk_p)\n         END IF\n         IF (.NOT. mutable) &\n            wm(which_wm)%datasize = wm(which_wm)%datasize + nze\n      END DO\n      CALL dbcsr_iterator_stop(iter)\n      CALL dbcsr_data_clear_pointer(data_block)\n      CALL dbcsr_data_release(data_block)\n      ! Copy all blocks at once\n      IF (.NOT. mt .AND. .NOT. limit .AND. .NOT. careful .AND. .NOT. mutable) THEN\n         DO which_wm = 1, nwms\n            CALL dbcsr_data_ensure_size(wm(which_wm)%data_area, &\n                                        dbcsr_data_get_size_referenced(matrix%data_area))\n            CALL dbcsr_data_copyall(wm(which_wm)%data_area, matrix%data_area)\n            wm(which_wm)%datasize = size_used\n         END DO\n      END IF\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_fill_wm_from_matrix\n\n   PURE FUNCTION within_limits(row, column, limits)\n      !! Checks whether a point is within bounds\n      !! \\return whether the point is within the bounds\n\n      INTEGER, INTENT(IN)                                :: row, column\n         !! point to check\n         !! point to check\n      INTEGER, DIMENSION(4), INTENT(IN)                  :: limits\n         !! limits (low_row, high_row, low_col, high_col)\n      LOGICAL                                            :: within_limits\n\n      within_limits = row .GE. limits(1) .AND. row .LE. limits(2) .AND. &\n                      column .GE. limits(3) .AND. column .LE. limits(4)\n   END FUNCTION within_limits\n\n   SUBROUTINE dbcsr_work_destroy(wm)\n      !! Deallocates and destroys a work matrix.\n\n      TYPE(dbcsr_work_type), INTENT(INOUT)               :: wm\n         !! work matrix\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_work_destroy'\n\n      INTEGER                                            :: handle\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) CALL timeset(routineN, handle)\n\n      IF (ASSOCIATED(wm%row_i)) THEN\n         DEALLOCATE (wm%row_i)\n      END IF\n      IF (ASSOCIATED(wm%col_i)) THEN\n         DEALLOCATE (wm%col_i)\n      END IF\n      IF (ASSOCIATED(wm%blk_p)) THEN\n         DEALLOCATE (wm%blk_p)\n      END IF\n      CALL dbcsr_data_release(wm%data_area)\n      CALL dbcsr_mutable_destroy(wm%mutable)\n\n      IF (careful_mod) CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_work_destroy\n\n   SUBROUTINE dbcsr_work_destroy_all(m)\n      !! Deallocates and destroys a work matrix.\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: m\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_work_destroy_all'\n\n      INTEGER                                            :: handle, i\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      IF (.NOT. ASSOCIATED(m%wms)) &\n         DBCSR_WARN(\"Want to destroy nonexisting work matrices.\")\n      IF (ASSOCIATED(m%wms)) THEN\n         DO i = 1, SIZE(m%wms)\n            CALL dbcsr_work_destroy(m%wms(i))\n         END DO\n         DEALLOCATE (m%wms)\n      END IF\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_work_destroy_all\n\n   SUBROUTINE add_work_coordinate(matrix, row, col, blk, index)\n      !! Adds a coordinate (or other data) into a work matrix's row_i and\n      !! col_i arrays and returns its position.\n      !! @note\n      !! Uses the matrix%lastblk to keep track of the current position.\n      !! @endnote\n\n      TYPE(dbcsr_work_type), INTENT(INOUT)               :: matrix\n         !! work matrix\n      INTEGER, INTENT(IN)                                :: row, col\n         !! row data to add\n         !! col data to add\n      INTEGER, INTENT(IN), OPTIONAL                      :: blk\n         !! block pointer to add\n      INTEGER, INTENT(OUT), OPTIONAL                     :: index\n         !! saved position\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'add_work_coordinate'\n\n      INTEGER                                            :: handle\n\n!   ---------------------------------------------------------------------------\n\n      IF (careful_mod) CALL timeset(routineN, handle)\n      matrix%lastblk = matrix%lastblk + 1\n      CALL ensure_array_size(matrix%row_i, ub=matrix%lastblk, &\n                             factor=default_resize_factor)\n      CALL ensure_array_size(matrix%col_i, ub=matrix%lastblk, &\n                             factor=default_resize_factor)\n      matrix%row_i(matrix%lastblk) = row\n      matrix%col_i(matrix%lastblk) = col\n      IF (PRESENT(blk)) THEN\n         CALL ensure_array_size(matrix%blk_p, ub=matrix%lastblk, &\n                                factor=default_resize_factor)\n         matrix%blk_p(matrix%lastblk) = blk\n      END IF\n      IF (PRESENT(index)) index = matrix%lastblk\n      IF (careful_mod) CALL timestop(handle)\n   END SUBROUTINE add_work_coordinate\n\n   SUBROUTINE dbcsr_merge_all(matrix, old_row_p, old_col_i, old_blk_p, &\n                              sort_data)\n      !! Merge data from matrix and work matrices into the final matrix.\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix to work on\n      INTEGER, DIMENSION(*), INTENT(IN)                  :: old_row_p, old_col_i, old_blk_p\n      LOGICAL, INTENT(IN)                                :: sort_data\n         !! whether data will be fully sorted\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_merge_all'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: handle, my_row_count, nblks, &\n                                                            nrows, nwms, row, t, &\n                                                            which_wm, wm_datasize\n      INTEGER, ALLOCATABLE, DIMENSION(:), SAVE           :: all_data_offsets, all_data_sizes, &\n                                                            new_blk_p_sorted, new_blk_sizes, &\n                                                            new_row_p\n      INTEGER, ALLOCATABLE, DIMENSION(:), SAVE, TARGET   :: blk_d, new_blk_p, new_col_i\n      INTEGER, DIMENSION(:), CONTIGUOUS, POINTER         :: my_row_p\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS, SAVE   :: cbs, rbs\n      INTEGER, SAVE                                      :: max_row_count, new_nblks = 0, new_nze = 0\n      TYPE(dbcsr_data_obj), ALLOCATABLE, DIMENSION(:), &\n         SAVE                                            :: all_data_areas\n      TYPE(dbcsr_work_type), POINTER                     :: wm\n      TYPE(i_array_p), DIMENSION(:), POINTER, SAVE       :: all_blk_p, all_col_i, all_row_p\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      ! Outline:\n      ! Each thread has a work matrix.  These must be merged and made\n      ! into a new index.  If sort_data is False, then the data areas\n      ! are simply appended.  This is probably quicker but the data\n      ! blocks are not in order and the data size may expand beyond\n      ! what is needed.  If sort_data is True, then data blocks are\n      ! sorted in order.\n\n      IF (dbg) WRITE (*, *) routineN//\" starting, sort?\", sort_data\n!$OMP     BARRIER\n      nrows = matrix%nblkrows_total\n      nwms = SIZE(matrix%wms)\n!$    IF (nwms /= OMP_GET_NUM_THREADS()) &\n!$       DBCSR_ABORT(\"Number of threads does not match number of work matrices.\")\n      which_wm = 1\n!$    which_wm = OMP_GET_THREAD_NUM() + 1\n      wm => matrix%wms(which_wm)\n      !\n      ! Currently B-tree-based work matrices are converted to array form.\n      IF (dbcsr_wm_use_mutable(wm)) THEN\n         SELECT CASE (wm%mutable%m%data_type)\n         CASE (dbcsr_type_real_4)\n            CALL tree_to_linear_s(wm)\n         CASE (dbcsr_type_real_8)\n            CALL tree_to_linear_d(wm)\n         CASE (dbcsr_type_complex_4)\n            CALL tree_to_linear_c(wm)\n         CASE (dbcsr_type_complex_8)\n            CALL tree_to_linear_z(wm)\n         CASE default\n            DBCSR_ABORT(\"Invalid data type\")\n         END SELECT\n      END IF\n      !\n      ! Initializations and some counts from the threads are summed.\n      !\n!$OMP     MASTER\n      new_nblks = old_row_p(nrows + 1)\n      new_nze = matrix%nze\n      ALLOCATE (all_row_p(nwms))\n      ALLOCATE (all_col_i(nwms))\n      ALLOCATE (all_blk_p(nwms))\n      ALLOCATE (all_data_sizes(0:nwms))\n      ALLOCATE (all_data_offsets(nwms))\n      IF (sort_data) THEN\n         ALLOCATE (all_data_areas(0:nwms))\n         CALL dbcsr_data_init(all_data_areas(0))\n         all_data_areas(0) = matrix%data_area\n!$OMP        CRITICAL (crit_data)\n         CALL dbcsr_data_hold(all_data_areas(0))\n!$OMP        END CRITICAL (crit_data)\n      END IF\n      ! The following is valid because the data actually referenced\n      ! by blocks is explicitly calculated in dbcsr_finalize.\n      all_data_sizes(0) = matrix%nze\n      rbs => array_data(matrix%row_blk_size)\n      cbs => array_data(matrix%col_blk_size)\n!$OMP     END MASTER\n      !\n!$OMP     BARRIER\n      IF (sort_data .AND. wm%datasize_after_filtering .GE. 0) THEN\n         wm_datasize = wm%datasize_after_filtering\n      ELSE\n         wm_datasize = wm%datasize\n      END IF\n      nblks = wm%lastblk\n!$OMP     ATOMIC\n      new_nblks = new_nblks + nblks\n!$OMP     ATOMIC\n      new_nze = new_nze + wm_datasize\n!$OMP     BARRIER\n      !\n!$OMP     MASTER\n      ALLOCATE (new_row_p(nrows + 1))\n      ALLOCATE (new_col_i(new_nblks))\n      ALLOCATE (new_blk_p(new_nblks))\n      IF (sort_data) THEN\n         ALLOCATE (blk_d(new_nblks))\n      ELSE\n         ALLOCATE (blk_d(1))\n      END IF\n!$OMP     END MASTER\n      !\n      ! Each thread creates a row_p index for its new blocks.  This gives the\n      ! number of new blocks per thread per row.\n      CALL dbcsr_sort_indices(nblks, wm%row_i, wm%col_i, wm%blk_p)\n      ALLOCATE (my_row_p(nrows + 1))\n      CALL dbcsr_make_dbcsr_index(my_row_p, wm%row_i, nrows, nblks)\n      !\n      ! The threads must share their row_p, col_i, blk_p, and data areas\n      ! among themselves.\n      all_row_p(which_wm)%p => my_row_p\n      all_data_sizes(which_wm) = wm_datasize\n      IF (.NOT. sort_data) THEN\n         IF (wm_datasize > dbcsr_data_get_size_referenced(wm%data_area)) &\n            DBCSR_ABORT(\"Data size mismatch.\")\n      END IF\n      all_col_i(which_wm)%p => wm%col_i\n      all_blk_p(which_wm)%p => wm%blk_p\n!$OMP     BARRIER\n      IF (sort_data) THEN\n!$OMP        MASTER\n         all_data_offsets(:) = 0\n!$OMP        END MASTER\n         CALL dbcsr_data_init(all_data_areas(which_wm))\n         all_data_areas(which_wm) = wm%data_area\n!$OMP        CRITICAL (crit_data)\n         CALL dbcsr_data_hold(all_data_areas(which_wm))\n!$OMP        END CRITICAL (crit_data)\n      ELSE\n!$OMP        MASTER\n         all_data_offsets(1) = all_data_sizes(0)\n         DO t = 2, nwms\n            all_data_offsets(t) = all_data_offsets(t - 1) + all_data_sizes(t - 1)\n         END DO\n!$OMP        END MASTER\n      END IF\n      !\n      ! The new row counts are created, then the new row_p index is created.\n      !\n!$OMP     DO\n      DO row = 1, nrows\n         my_row_count = old_row_p(row + 1) - old_row_p(row)\n         DO t = 1, nwms\n            my_row_count = my_row_count &\n                 &       + all_row_p(t)%p(row + 1) - all_row_p(t)%p(row)\n         END DO\n         new_row_p(row) = my_row_count\n      END DO\n!$OMP     END DO\n!$OMP     MASTER\n      max_row_count = MAXVAL(new_row_p(1:nrows))\n      CALL dbcsr_build_row_index(new_row_p, nrows)\n!$OMP     END MASTER\n!$OMP     BARRIER\n      !\n      ! The new index is built\n      CALL merge_index(new_row_p, new_col_i, new_blk_p, &\n                       blk_d, &\n                       old_row_p, old_col_i, old_blk_p, &\n                       all_row_p, all_col_i, all_blk_p, &\n                       all_data_offsets, nwms, nrows, max_row_count, sort_data)\n      !\n      ! The data is then merged in one of two ways.\n      !\n!$OMP     MASTER\n      IF (sort_data) THEN\n         ! The matrix gets a fresh data area.  Blocks from the work\n         ! matrices will be copied into it in order.\n         !\n!$OMP        CRITICAL (crit_data)\n         CALL dbcsr_data_release(matrix%data_area)\n         CALL dbcsr_data_init(matrix%data_area)\n!$OMP        END CRITICAL (crit_data)\n         CALL dbcsr_data_new(matrix%data_area, &\n                             data_size=new_nze, &\n                             data_type=dbcsr_data_get_type(all_data_areas(0)), &\n                             memory_type=dbcsr_data_get_memory_type(all_data_areas(0)))\n         ALLOCATE (new_blk_p_sorted(new_nblks))\n         ALLOCATE (new_blk_sizes(new_nblks))\n      ELSE\n         ! Data stored in the work matrices will be just appended to the\n         ! current data area.\n         CALL dbcsr_data_ensure_size(matrix%data_area, new_nze)\n      END IF\n!$OMP     END MASTER\n!$OMP     BARRIER\n      IF (sort_data) THEN\n         CALL dbcsr_calc_block_sizes(new_blk_sizes, &\n                                     new_row_p, new_col_i, rbs, cbs)\n         CALL dbcsr_sort_data(new_blk_p_sorted, new_blk_p, &\n                              new_blk_sizes, dsts=matrix%data_area, &\n                              src=all_data_areas(0), &\n                              srcs=all_data_areas, old_blk_d=blk_d)\n      ELSE\n         IF (all_data_sizes(which_wm) .GT. 0) THEN\n            CALL dbcsr_data_copy(dst=matrix%data_area, &\n                                 dst_lb=(/all_data_offsets(which_wm) + 1/), &\n                                 dst_sizes=(/all_data_sizes(which_wm)/), &\n                                 src=wm%data_area, &\n                                 src_lb=(/1/), &\n                                 src_sizes=(/all_data_sizes(which_wm)/))\n         END IF\n      END IF\n      !\n      ! Creates a new index array.\n      !\n!$OMP     BARRIER\n!$OMP     MASTER\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p)\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, &\n                                   DATA=new_row_p(1:nrows + 1), extra=new_nblks*2)\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, &\n                                   DATA=new_col_i(1:new_nblks))\n      IF (sort_data) THEN\n         CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, &\n                                      DATA=new_blk_p_sorted)\n      ELSE\n         CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, &\n                                      DATA=new_blk_p)\n      END IF\n      matrix%nblks = new_nblks\n      matrix%nze = new_nze\n      matrix%index(dbcsr_slot_nblks) = matrix%nblks\n      matrix%index(dbcsr_slot_nze) = matrix%nze\n      CALL dbcsr_repoint_index(matrix)\n!$OMP     END MASTER\n      !\n!$OMP     BARRIER\n      !\n      DEALLOCATE (my_row_p)\n      IF (sort_data) THEN\n!$OMP        MASTER\n!$OMP        CRITICAL (crit_data)\n         CALL dbcsr_data_release(all_data_areas(0))\n!$OMP        END CRITICAL (crit_data)\n         DO which_wm = 1, nwms\n!$OMP           CRITICAL (crit_data)\n            CALL dbcsr_data_release(all_data_areas(which_wm))\n!$OMP           END CRITICAL (crit_data)\n         END DO\n!$OMP        END MASTER\n      END IF\n!$OMP     BARRIER\n!$OMP     MASTER\n      DEALLOCATE (all_row_p)\n      DEALLOCATE (all_col_i)\n      DEALLOCATE (all_blk_p)\n      DEALLOCATE (new_row_p)\n      DEALLOCATE (new_col_i)\n      DEALLOCATE (new_blk_p)\n      DEALLOCATE (all_data_sizes)\n      DEALLOCATE (all_data_offsets)\n      IF (sort_data) THEN\n         DEALLOCATE (all_data_areas)\n         DEALLOCATE (new_blk_sizes)\n         DEALLOCATE (new_blk_p_sorted)\n      END IF\n      DEALLOCATE (blk_d)\n!$OMP     END MASTER\n!$OMP     BARRIER\n      IF (dbg) WRITE (*, *) routineN//\" stopped\"\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_merge_all\n\n   SUBROUTINE dbcsr_merge_single_wm(matrix)\n      !! Sort data from the WM into the final matrix, based closely on dbcsr_merge_all\n\n      TYPE(dbcsr_type), INTENT(INOUT)                    :: matrix\n         !! matrix to work on\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_merge_single_wm'\n      LOGICAL, PARAMETER                                 :: dbg = .FALSE.\n\n      INTEGER                                            :: handle, nblks, nrows\n      INTEGER, ALLOCATABLE, DIMENSION(:), SAVE           :: new_blk_p_sorted, new_blk_sizes, &\n                                                            new_row_p\n      INTEGER, ALLOCATABLE, DIMENSION(:), SAVE, TARGET   :: blk_d\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS, SAVE   :: cbs, rbs\n      TYPE(dbcsr_work_type), POINTER                     :: wm\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      ! Outline:\n      ! There is a single work matrix.  Data blocks are sorted and copied\n      ! into the matrix data area (which is empty).  The index is made consistent\n\n      nrows = matrix%nblkrows_total\n      wm => matrix%wms(1)\n      nblks = wm%lastblk\n      IF (dbcsr_wm_use_mutable(wm)) &\n         DBCSR_ABORT(\"Number of threads does not match number of work matrices.\")\n      !\n      ! The following is valid because the data actually referenced\n      ! by blocks is explicitly calculated in dbcsr_finalize.\n!$OMP     MASTER\n      rbs => array_data(matrix%row_blk_size)\n      cbs => array_data(matrix%col_blk_size)\n      !\n      ! Initializations\n      !\n      ALLOCATE (new_row_p(nrows + 1))\n      ALLOCATE (blk_d(nblks))\n      ALLOCATE (new_blk_p_sorted(nblks))\n      ALLOCATE (new_blk_sizes(nblks))\n      !\n      ! Master thread creates a row_p index for the (sorted) blocks.\n      CALL dbcsr_sort_indices(nblks, wm%row_i, wm%col_i, wm%blk_p)\n      CALL dbcsr_make_dbcsr_index(new_row_p, wm%row_i, nrows, nblks)\n      !\n      !\n      ! The matrix data area is resized.  Blocks from the work\n      ! matrices will be copied into it in order.\n      !\n      CALL dbcsr_data_ensure_size(matrix%data_area, wm%datasize, nocopy=.TRUE.)\n!$OMP     END MASTER\n!$OMP     BARRIER\n      CALL dbcsr_calc_block_sizes(new_blk_sizes, &\n                                  new_row_p, wm%col_i, rbs, cbs)\n      CALL dbcsr_sort_data(new_blk_p_sorted, wm%blk_p, &\n                           new_blk_sizes, dsts=matrix%data_area, &\n                           src=wm%data_area)\n      !\n      ! Creates a new index array.\n      !\n!$OMP     BARRIER\n!$OMP     MASTER\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_row_p)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_col_i)\n      CALL dbcsr_clearfrom_index_array(matrix, dbcsr_slot_blk_p)\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_row_p, &\n                                   DATA=new_row_p(1:nrows + 1), extra=nblks*2)\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_col_i, &\n                                   DATA=wm%col_i(1:nblks))\n      CALL dbcsr_addto_index_array(matrix, dbcsr_slot_blk_p, &\n                                   DATA=new_blk_p_sorted)\n      matrix%nblks = nblks\n      matrix%nze = wm%datasize\n      matrix%index(dbcsr_slot_nblks) = matrix%nblks\n      matrix%index(dbcsr_slot_nze) = matrix%nze\n      CALL dbcsr_repoint_index(matrix)\n      DEALLOCATE (new_row_p)\n      DEALLOCATE (new_blk_sizes)\n      DEALLOCATE (new_blk_p_sorted)\n      DEALLOCATE (blk_d)\n!$OMP     END MASTER\n      IF (dbg) WRITE (*, *) routineN//\" stopped\"\n      CALL timestop(handle)\n   END SUBROUTINE dbcsr_merge_single_wm\n\n   SUBROUTINE merge_index(new_row_p, new_col_i, new_blk_p, &\n      !! Builds a new index from several work matrices.\n                          blk_d, old_row_p, old_col_i, old_blk_p, &\n                          all_row_p, all_col_i, all_blk_p, &\n                          all_data_offsets, nwms, nrows, max_row_count, sort_data)\n      INTEGER, DIMENSION(*), INTENT(IN)                  :: new_row_p\n      INTEGER, DIMENSION(*), INTENT(OUT), TARGET         :: new_col_i, new_blk_p\n      INTEGER, DIMENSION(*), INTENT(IN), TARGET          :: blk_d\n      INTEGER, DIMENSION(*), INTENT(IN)                  :: old_row_p, old_col_i, old_blk_p\n      TYPE(i_array_p), DIMENSION(*), INTENT(IN)          :: all_row_p, all_col_i, all_blk_p\n      INTEGER, DIMENSION(*), INTENT(IN)                  :: all_data_offsets\n      INTEGER, INTENT(IN)                                :: nwms, nrows, max_row_count\n      LOGICAL, INTENT(IN)                                :: sort_data\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'merge_index'\n      INTEGER                                            :: blk1, blk2, error_handle, first_row_blk, &\n                                                            last_row_blk, row, src_blk_1, &\n                                                            src_blk_2, t\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: blk_p_buff, tmp_arr\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: blk_span, col_span, d_span\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, error_handle)\n      !\n      ALLOCATE (tmp_arr(max_row_count))\n      ALLOCATE (blk_p_buff(max_row_count))\n      !\n!$OMP     DO\n      DO row = 1, nrows\n         first_row_blk = new_row_p(row) + 1\n         last_row_blk = new_row_p(row + 1)\n         col_span => new_col_i(first_row_blk:last_row_blk)\n         blk_span => new_blk_p(first_row_blk:last_row_blk)\n         IF (sort_data) d_span => blk_d(first_row_blk:last_row_blk)\n         src_blk_1 = old_row_p(row) + 1\n         src_blk_2 = old_row_p(row + 1)\n         blk1 = 1\n         blk2 = blk1 + (src_blk_2 - src_blk_1 + 1) - 1\n         col_span(blk1:blk2) = old_col_i(src_blk_1:src_blk_2)\n         blk_span(blk1:blk2) = old_blk_p(src_blk_1:src_blk_2)\n         IF (sort_data) THEN\n            d_span(blk1:blk2) = 1\n            DO t = 1, nwms\n               src_blk_1 = all_row_p(t)%p(row) + 1\n               src_blk_2 = all_row_p(t)%p(row + 1)\n               blk1 = blk2 + 1\n               blk2 = blk1 + (src_blk_2 - src_blk_1 + 1) - 1\n               col_span(blk1:blk2) = all_col_i(t)%p(src_blk_1:src_blk_2)\n               blk_span(blk1:blk2) = all_blk_p(t)%p(src_blk_1:src_blk_2)\n               d_span(blk1:blk2) = t + 1\n            END DO\n         ELSE\n            DO t = 1, nwms\n               src_blk_1 = all_row_p(t)%p(row) + 1\n               src_blk_2 = all_row_p(t)%p(row + 1)\n               blk1 = blk2 + 1\n               blk2 = blk1 + (src_blk_2 - src_blk_1 + 1) - 1\n               col_span(blk1:blk2) = all_col_i(t)%p(src_blk_1:src_blk_2)\n               blk_span(blk1:blk2) = all_blk_p(t)%p(src_blk_1:src_blk_2) &\n                    &              + all_data_offsets(t)\n            END DO\n         END IF\n         CALL sort(col_span, SIZE(col_span), tmp_arr)\n         blk_p_buff(1:SIZE(blk_span)) = blk_span(:)\n         blk_span(1:SIZE(blk_span)) = blk_p_buff(tmp_arr(1:SIZE(blk_span)))\n      END DO\n!$OMP     END DO\n      !\n      DEALLOCATE (tmp_arr)\n      DEALLOCATE (blk_p_buff)\n      !\n      CALL timestop(error_handle)\n   END SUBROUTINE merge_index\n\n   #:include '../data/dbcsr.fypp'\n   #:for n, nametype1, base1, prec1, kind1, type1, dkind1 in inst_params_float\n      SUBROUTINE tree_to_linear_${nametype1}$ (wm)\n     !! Converts mutable data to linear (array) type.\n\n         USE dbcsr_btree, &\n            ONLY: btree_2d_data_${nametype1}$ => btree_data_${nametype1}$p2d, &\n                  btree_destroy_${nametype1}$ => btree_delete, &\n                  btree_size_${nametype1}$ => btree_get_entries\n         TYPE(dbcsr_work_type), INTENT(INOUT)     :: wm\n        !! work matrix to convert\n\n         CHARACTER(len=*), PARAMETER :: routineN = 'tree_to_linear_${nametype1}$'\n\n         INTEGER                                  :: blk, blk_p, treesize, &\n                                                     error_handler, needed_size\n         INTEGER(KIND=int_8), ALLOCATABLE, &\n            DIMENSION(:)                           :: keys\n         ${type1}$, DIMENSION(:), POINTER, CONTIGUOUS :: target_data\n         ${type1}$, DIMENSION(:, :), POINTER        :: block_2d\n         TYPE(btree_2d_data_${nametype1}$), ALLOCATABLE, &\n            DIMENSION(:)                           :: values\n\n!   ---------------------------------------------------------------------------\n\n         CALL timeset(routineN, error_handler)\n         ! srt = .TRUE. ! Not needed because of the copy\n         treesize = btree_size_${nametype1}$ (wm%mutable%m%btree_${nametype1}$)\n         IF (wm%lastblk .NE. treesize) &\n            DBCSR_ABORT(\"Mismatch in number of blocks\")\n         ALLOCATE (keys(treesize), values(treesize))\n         CALL btree_destroy_${nametype1}$ (wm%mutable%m%btree_${nametype1}$, keys, values)\n         CALL ensure_array_size(wm%row_i, ub=treesize)\n         CALL ensure_array_size(wm%col_i, ub=treesize)\n         CALL dbcsr_unpack_i8_2i4(keys, wm%row_i, &\n                                  wm%col_i)\n         ! For now we also fill the data, sloooowly, but this should\n         ! be avoided and the data should be copied directly from the\n         ! source in the subroutine's main loop.\n         CALL ensure_array_size(wm%blk_p, ub=treesize)\n         needed_size = 0\n         DO blk = 1, treesize\n            block_2d => values(blk)%p\n            needed_size = needed_size + SIZE(block_2d)\n         END DO\n         wm%datasize = needed_size\n         CALL dbcsr_data_ensure_size(wm%data_area, &\n                                     wm%datasize)\n         target_data => dbcsr_get_data_p_${nametype1}$ (wm%data_area)\n         blk_p = 1\n         DO blk = 1, treesize\n            block_2d => values(blk)%p\n            IF (.NOT. values(blk)%tr) THEN\n               wm%blk_p(blk) = blk_p\n            ELSE\n               wm%blk_p(blk) = -blk_p\n            END IF\n            CALL block_copy_${nametype1}$ (target_data, block_2d, &\n                                           SIZE(block_2d), blk_p, 1)\n            blk_p = blk_p + SIZE(block_2d)\n            DEALLOCATE (block_2d)\n         END DO\n         DEALLOCATE (keys, values)\n         CALL dbcsr_mutable_release(wm%mutable)\n         CALL timestop(error_handler)\n      END SUBROUTINE tree_to_linear_${nametype1}$\n\n   #:endfor\n\nEND MODULE dbcsr_work_operations\n"
  },
  {
    "path": "tests/.gitignore",
    "content": "# Files generated at build stage\nlibsmm_acc_unittest_multiply.cpp\nlibsmm_acc_timer_multiply.cpp\n"
  },
  {
    "path": "tests/CMakeLists.txt",
    "content": "# =================================== OpenMP\nif (USE_OPENMP)\n  set(NUM_THREADS ${TEST_OMP_THREADS})\nelse ()\n  set(NUM_THREADS 1)\nendif ()\n\n# =================================== MPI\nif (USE_MPI)\n  if (TEST_MPI_RANKS STREQUAL \"auto\")\n    include(ProcessorCount)\n    ProcessorCount(nproc)\n    math(EXPR num_ranks \"(${nproc}+${NUM_THREADS}-1)/${NUM_THREADS}\"\n    )# get 1/$NUM_THREADS the number of procs (rounded up)\n  else ()\n    set(num_ranks ${TEST_MPI_RANKS})\n  endif ()\n  math(EXPR test_processors \"${num_ranks} * ${NUM_THREADS}\")\n\n  message(\n    \"Tests will run with ${num_ranks} MPI ranks and ${NUM_THREADS} OpenMP threads each\"\n  )\nelse ()\n  set(test_processors ${NUM_THREADS})\nendif ()\n\n# =================================== DBCSR PERF TESTS\nset(DBCSR_PERF_SRCS dbcsr_performance_driver.F dbcsr_performance_multiply.F)\nadd_executable(dbcsr_perf ${DBCSR_PERF_SRCS})\ntarget_link_libraries(dbcsr_perf dbcsr)\nset_target_properties(dbcsr_perf PROPERTIES LINKER_LANGUAGE Fortran)\ntarget_link_libraries(dbcsr_perf\n                      $<$<BOOL:${USE_OPENMP}>:OpenMP::OpenMP_Fortran>)\n\nfile(\n  GLOB DBCSR_PERF_TESTS\n  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n  \"inputs/*.perf\")\n\nif (\"${MPI_Fortran_LIBRARY_VERSION_STRING}\" MATCHES \"Open MPI v2.1\"\n    OR \"${MPI_Fortran_LIBRARY_VERSION_STRING}\" MATCHES \"Open MPI v3.1\")\n  list(FILTER DBCSR_PERF_TESTS EXCLUDE REGEX \"_rma\")\nendif ()\n\nforeach (dbcsr_perf_test ${DBCSR_PERF_TESTS})\n  if (USE_MPI)\n    separate_arguments(MPIEXEC_PREFLAGS)\n    add_test(\n      NAME dbcsr_perf:${dbcsr_perf_test}\n      COMMAND\n        ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${num_ranks}\n        ${MPIEXEC_PREFLAGS} $<TARGET_FILE:dbcsr_perf> ${MPIEXEC_POSTFLAGS}\n        \"${CMAKE_CURRENT_SOURCE_DIR}/${dbcsr_perf_test}\")\n  else ()\n    add_test(NAME dbcsr_perf:${dbcsr_perf_test}\n             COMMAND $<TARGET_FILE:dbcsr_perf>\n                     \"${CMAKE_CURRENT_SOURCE_DIR}/${dbcsr_perf_test}\")\n  endif ()\n  set_tests_properties(\n    dbcsr_perf:${dbcsr_perf_test}\n    PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS\n               ${test_processors})\nendforeach ()\n\n# =================================== DBCSR CORRECTNESS TESTS Define all the\n# tests here, will be used as the executable name\nset(DBCSR_TESTS_FTN\n    dbcsr_unittest1\n    dbcsr_unittest2\n    dbcsr_unittest3\n    dbcsr_unittest4\n    dbcsr_tensor_unittest\n    dbcsr_tas_unittest\n    dbcsr_test_csr_conversions)\n\nif (USE_ACCEL)\n  set(DBCSR_TESTS_BACKEND dbcsr_acc_test acc_bench)\nendif ()\n\nif (NOT (CMAKE_Fortran_COMPILER_ID STREQUAL \"Cray\"))\n  set(DBCSR_TESTS_SRCS_CPP dbcsr_test.cpp dbcsr_tensor_test.cpp)\nendif ()\n\n# For each test, set a variable testname_SRCS defining the sources of that test\nset(dbcsr_unittest1_SRCS dbcsr_unittest1.F)\nset(dbcsr_unittest2_SRCS dbcsr_unittest2.F)\nset(dbcsr_unittest3_SRCS dbcsr_unittest3.F)\nset(dbcsr_unittest4_SRCS dbcsr_unittest4.F dbcsr_test_scale_by_vector.F)\nset(dbcsr_tensor_unittest_SRCS dbcsr_tensor_unittest.F)\nset(dbcsr_tas_unittest_SRCS dbcsr_tas_unittest.F)\nset(dbcsr_test_csr_conversions_SRCS dbcsr_test_csr_conversions.F)\nset(dbcsr_test_cpp_SRCS dbcsr_test.cpp)\nset(dbcsr_tensor_test_cpp_SRCS dbcsr_tensor_test.cpp)\nset(dbcsr_acc_test_SRCS dbcsr_acc_test.c)\nset(acc_bench_SRCS ${CMAKE_SOURCE_DIR}/src/acc/acc_bench.c)\n\n# Make a list of the source files of fortran tests\nset(DBCSR_TESTS_SRCS_FTN)\nforeach (dbcsr_test ${DBCSR_TESTS_FTN})\n  set(DBCSR_TESTS_SRCS_FTN ${DBCSR_TESTS_SRCS_FTN} ${${dbcsr_test}_SRCS})\nendforeach ()\n\n# Common object files linked to all tests\nset(dbcsr_unittest_common_SRCS dbcsr_test_add.F dbcsr_test_multiply.F)\n\n# instead of building a full-blown lib, it would be better to simply build an\n# OBJECT lib, but we would need cmake 3.12 to be able to specify\n# target_link_libraries on those to get the proper compile flags\nadd_library(dbcsr_unittest_common STATIC ${dbcsr_unittest_common_SRCS})\n# target_link_libraries(dbcsr_unittest_common PUBLIC dbcsr)\ntarget_link_libraries(dbcsr_unittest_common PUBLIC ${BLAS_LIBRARIES}\n                                                   ${LAPACK_LIBRARIES})\nif (OpenMP_FOUND)\n  target_link_libraries(dbcsr_unittest_common PUBLIC OpenMP::OpenMP_Fortran)\nendif ()\nif (APPLE AND BLAS_LIBRARIES MATCHES \"Accelerate\")\n  target_compile_definitions(dbcsr_unittest_common PRIVATE __ACCELERATE)\nendif ()\ntarget_link_libraries(dbcsr_unittest_common PUBLIC dbcsr) # last\n\n# Compile Fortran tests\nforeach (dbcsr_test ${DBCSR_TESTS_FTN})\n  add_executable(${dbcsr_test} ${${dbcsr_test}_SRCS})\n  target_link_libraries(${dbcsr_test} dbcsr_unittest_common)\n  set_target_properties(${dbcsr_test} PROPERTIES LINKER_LANGUAGE Fortran)\n  # register unittest executable with CMake\n  if (USE_MPI)\n    separate_arguments(MPIEXEC_PREFLAGS)\n    add_test(\n      NAME ${dbcsr_test}\n      COMMAND\n        ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${num_ranks}\n        ${MPIEXEC_PREFLAGS} $<TARGET_FILE:${dbcsr_test}> ${MPIEXEC_POSTFLAGS})\n  else ()\n    add_test(NAME ${dbcsr_test} COMMAND ${dbcsr_test})\n  endif ()\n  if (OpenMP_FOUND)\n    target_link_libraries(${dbcsr_test} OpenMP::OpenMP_Fortran)\n  endif ()\n  set_tests_properties(\n    ${dbcsr_test} PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS}\n                             PROCESSORS ${test_processors})\nendforeach ()\n\n# set the __SHORT_FILE__ per file for dbcsr sources\nforeach (tests_src ${DBCSR_PERF_SRCS} ${dbcsr_unittest_common_SRCS}\n                   ${DBCSR_TESTS_SRCS_FTN})\n  # add_fypp_sources returns a path in the current binary dir\n  get_filename_component(short_file \"${tests_src}\" NAME)\n  set_source_files_properties(\n    ${tests_src} PROPERTIES COMPILE_DEFINITIONS __SHORT_FILE__=\"${short_file}\")\nendforeach ()\n\nif (WITH_C_API)\n  foreach (dbcsr_test_cpp_src ${DBCSR_TESTS_SRCS_CPP})\n    get_filename_component(dbcsr_test_cpp_name ${dbcsr_test_cpp_src} NAME_WE)\n    add_executable(${dbcsr_test_cpp_name} ${dbcsr_test_cpp_src})\n    target_link_libraries(${dbcsr_test_cpp_name} dbcsr_c MPI::MPI_CXX)\n    set_target_properties(${dbcsr_test_cpp_name} PROPERTIES LINKER_LANGUAGE CXX)\n    if (OpenMP_FOUND)\n      target_link_libraries(${dbcsr_test_cpp_name} OpenMP::OpenMP_CXX)\n    endif ()\n    # register unittest executable with CMake\n    if (USE_MPI)\n      separate_arguments(MPIEXEC_PREFLAGS)\n      add_test(\n        NAME ${dbcsr_test_cpp_name}\n        COMMAND\n          ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${num_ranks}\n          ${MPIEXEC_PREFLAGS} ./${dbcsr_test_cpp_name} ${MPIEXEC_POSTFLAGS})\n    else ()\n      add_test(NAME ${dbcsr_test_cpp_name} COMMAND ./${dbcsr_test_cpp_name})\n    endif ()\n    set_tests_properties(\n      ${dbcsr_test_cpp_name}\n      PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS\n                 ${test_processors})\n  endforeach ()\nendif ()\n\n# =================================== BACKEND TESTS (ACC interface)\n\nif (NOT USE_MPI)\n  foreach (dbcsr_test_backend ${DBCSR_TESTS_BACKEND})\n    add_executable(${dbcsr_test_backend} ${${dbcsr_test_backend}_SRCS})\n    # tests may not need to link dbcsr but there is no separate dbcsr_acc\n    target_link_libraries(${dbcsr_test_backend} PRIVATE dbcsr)\n    # register unittest executable with CMake\n    add_test(NAME ${dbcsr_test_backend} COMMAND ./${dbcsr_test_backend})\n    set_tests_properties(\n      ${dbcsr_test_backend}\n      PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS\n                 ${NUM_THREADS})\n  endforeach ()\nendif ()\n\n# =================================== GPU BACKEND TESTS (CUDA/HIP)\n\n# Add custom commands for the test files that need to be generated from a\n# template\nfile(RELATIVE_PATH CURRENT_BINARY_DIR_RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/..\n     ${CMAKE_CURRENT_BINARY_DIR})\n\n# libsmm_acc_unittest_multiply\nadd_custom_target(\n  generate_libsmm_acc_unittest_multiply_test_cpp\n  COMMAND\n    ${Python_EXECUTABLE}\n    ${CMAKE_CURRENT_SOURCE_DIR}/generate_libsmm_acc_unittest_multiply.py\n    --base_dir ${CMAKE_CURRENT_SOURCE_DIR}/.. --out_dir\n    ${CURRENT_BINARY_DIR_RELATIVE} --gpu_version=${WITH_GPU_PARAMS}\n  DEPENDS libsmm_acc_unittest_multiply.cpp.template\n          generate_libsmm_acc_unittest_multiply.py\n  BYPRODUCTS libsmm_acc_unittest_multiply.cpp\n  COMMENT \"Generate tests/libsmm_acc_unittest_multiply.cpp\")\n\n# libsmm_acc_timer_multiply\nadd_custom_target(\n  generate_libsmm_acc_timer_multiply_test_cpp\n  COMMAND\n    ${Python_EXECUTABLE}\n    ${CMAKE_CURRENT_SOURCE_DIR}/generate_libsmm_acc_timer_multiply.py --base_dir\n    ${CMAKE_CURRENT_SOURCE_DIR}/.. --out_dir ${CURRENT_BINARY_DIR_RELATIVE}\n    --gpu_version=${WITH_GPU_PARAMS}\n  DEPENDS libsmm_acc_timer_multiply.cpp.template\n          generate_libsmm_acc_timer_multiply.py\n  BYPRODUCTS libsmm_acc_timer_multiply.cpp\n  COMMENT \"Generate tests/generate_libsmm_acc_timer_multiply.cpp\")\n\nif (USE_ACCEL MATCHES \"cuda|hip\")\n\n  # All libsmm_acc tests\n  set(LIBSMM_ACC_TESTS_SRCS\n      ${CMAKE_CURRENT_BINARY_DIR}/libsmm_acc_unittest_multiply.cpp\n      ${CMAKE_CURRENT_BINARY_DIR}/libsmm_acc_timer_multiply.cpp\n      libsmm_acc_unittest_transpose.cpp)\n\n  # Add executables for all libsmm_acc tests\n  foreach (libsmm_acc_test ${LIBSMM_ACC_TESTS_SRCS})\n    get_filename_component(libsmm_acc_test_name ${libsmm_acc_test} NAME_WE)\n    add_executable(${libsmm_acc_test_name} ${libsmm_acc_test})\n    target_compile_definitions(\n      ${libsmm_acc_test_name} PRIVATE $<$<STREQUAL:${USE_ACCEL},hip>:__HIP>\n                                      $<$<STREQUAL:${USE_ACCEL},cuda>:__CUDA>)\n    # some of the tests access internal headers and functions, requiring include\n    # paths to be present which are otherwise not exported\n    target_link_libraries(\n      ${libsmm_acc_test_name} dbcsr $<$<STREQUAL:${USE_ACCEL},hip>:hip::host>\n      $<$<STREQUAL:${USE_ACCEL},cuda>:CUDA::cuda_driver> libsmm_acc)\n    set_target_properties(${libsmm_acc_test_name} PROPERTIES LINKER_LANGUAGE\n                                                             CXX)\n    if (OpenMP_FOUND)\n      target_link_libraries(${libsmm_acc_test_name} OpenMP::OpenMP_CXX)\n    endif ()\n  endforeach ()\n\n  # Comment for the moment, they are not parallelized, very slow... Check issue\n  # https://github.com/cp2k/dbcsr/issues/427 add_test(NAME\n  # libsmm_acc_unittest_multiply COMMAND libsmm_acc_unittest_multiply)\n  # add_test(NAME libsmm_acc_unittest_transpose COMMAND\n  # libsmm_acc_unittest_transpose) add_test(NAME\n  # libsmm_acc_timer_multiply-autotuned COMMAND libsmm_acc_timer_multiply\n  # autotuned) add_test(NAME libsmm_acc_timer_multiply-predicted COMMAND\n  # libsmm_acc_timer_multiply predicted)\n\nendif ()\n\n# =================================== DOCUMENTATION GENERATION Copy test source\n# files into the build directory so that their documentation can be generated by\n# FORD\nset(DBCSR_TESTS dbcsr_performance_driver.F ${DBCSR_TESTS_SRCS_FTN}\n                ${DBCSR_TESTS_SRCS_CPP} libsmm_acc_unittest_transpose.cpp)\n\n# Make a list of the copy commands\nset(test_copy_commands)\nforeach (test ${DBCSR_TESTS})\n  list(\n    APPEND\n    test_copy_commands\n    COMMAND\n    ${CMAKE_COMMAND}\n    -E\n    copy\n    ${CMAKE_SOURCE_DIR}/tests/${test}\n    ${CMAKE_BINARY_DIR}/tests)\nendforeach ()\n\nadd_custom_target(\n  doc_copy_tests\n  COMMENT \"Copy tests for documentation generation\"\n  COMMAND mkdir -p ${CMAKE_BINARY_DIR}/tests ${test_copy_commands}\n  VERBATIM)\n\n# libsmm_acc_unittest_multiply.cpp and libsmm_acc_timer_multiply.cpp do not need\n# to be copied to the build directory since they are generated at build-time and\n# written to the build directory directly. We just need to make sure that the\n# documentation generation depends on the generation of these tests.\nadd_dependencies(doc_copy_tests generate_libsmm_acc_unittest_multiply_test_cpp)\nadd_dependencies(doc_copy_tests generate_libsmm_acc_timer_multiply_test_cpp)\n"
  },
  {
    "path": "tests/README.md",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\n# DBCSR Testing and Performance\n\n## Correctness tests\n\n- [dbcsr_tas_unittest](dbcsr_tas_unittest.F) : unit test for tall-and-skinny matrices\n- [dbcsr_tensor_test](dbcsr_tensor_test.cpp) : test the tensor contraction (13|2)x(54|21)=(3|45) 31 and other functions\n- [dbcsr_tensor_unittest](dbcsr_tensor_unittest.F) : unit test for tensor functionalities\n- [dbcsr_test_csr_conversions](dbcsr_test_csr_conversions.F) : test DBCSR to CSR conversion with random matrices\n- [dbcsr_unittest_1](dbcsr_unittest1.F) : test matrix operations: add, multiply and multiply-ghost\n- [dbcsr_unittest_2](dbcsr_unittest2.F) : test matrix-multiply with large blocks (block size=100) and rectangular matrices (block size=5)\n\n### GPU-backend correctness tests:\n\n- [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\n- [libsmm_acc_unittest_multiply](libsmm_acc_unittest_multiply.cpp.template) : tests all libsmm_acc transpose kernels\n- [libsmm_acc_unittest_transpose](libsmm_acc_unittest_transpose.cpp) : tests all libsmm_acc batch-multiplication kernels\n\n## Performance tests\n\nDBCSR performance tests:\n\n- [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.\n\n### GPU backend performance tests:\n\n- [libsmm_acc_timer_multiply](libsmm_acc_timer_multiply.cpp.template) : time all libsmm_acc batch-multiplication kernels\n\n---\n\nSee the [tests' documentation](../docs/guide/2-user-guide/2-tests/index.md).\n"
  },
  {
    "path": "tests/dbcsr_acc_test.c",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n#include \"acc/acc.h\"\n#include <stdlib.h>\n#include <string.h>\n#include <stdio.h>\n#if !defined(NDEBUG)\n#  include <assert.h>\n#endif\n#if defined(_OPENMP)\n#  include <omp.h>\n#endif\n\n#if !defined(ACC_STRING_MAXLEN)\n#  define ACC_STRING_MAXLEN 32\n#endif\n#if !defined(ACC_STREAM_MAXCOUNT)\n#  define ACC_STREAM_MAXCOUNT 16\n#endif\n#if !defined(ACC_EVENT_MAXCOUNT)\n#  define ACC_EVENT_MAXCOUNT (16 * ACC_STREAM_MAXCOUNT)\n#endif\n#if !defined(ACC_STREAM_MAXNTH_DESTROY)\n#  define ACC_STREAM_MAXNTH_DESTROY 2\n#endif\n#if !defined(ACC_EVENT_MAXNTH_DESTROY)\n#  define ACC_EVENT_MAXNTH_DESTROY 3\n#endif\n\n#if defined(NDEBUG)\n#  define ACC_CHECK(RESULT) \\\n    do { \\\n      const int acc_check_result_ = (RESULT); \\\n      if (EXIT_SUCCESS != acc_check_result_) exit(acc_check_result_); \\\n    } while (0)\n#  define PRINTF(A, ...)\n#else /* debug */\n#  define ACC_CHECK(RESULT) assert(EXIT_SUCCESS == (RESULT))\n#  define PRINTF(A, ...) printf(A, __VA_ARGS__)\n#endif\n\n\n/**\n * This program tests the ACC interface (include/acc.h) for adhering to expectations.\n * The expected behavior is to match the CUDA based implementation, which was available\n * first. This test program can serve as a specification for other backends such as the\n * OpenMP based backend. It may also be used to stress-test any backend including the\n * CUDA based backend for thread-safety. Thread-safety is an implicit requirement\n * induced by DBCSR (and CP2K). To test any backend (other than the OpenMP backend),\n * the Makefile must be adjusted to link with the desired backend.\n */\nint main(int argc, char* argv[]) {\n  const int device = (1 < argc ? atoi(argv[1]) : 0);\n#if defined(_OPENMP)\n  const int max_nthreads = omp_get_max_threads();\n#else\n  const int max_nthreads = 1;\n#endif\n  const int cli_nthreads = (2 < argc ? atoi(argv[2]) : max_nthreads);\n  const int nthreads = ((0 < cli_nthreads && cli_nthreads <= max_nthreads) ? cli_nthreads : max_nthreads);\n  int randnums[ACC_EVENT_MAXCOUNT], ndevices, priomin, priomax, i, nt;\n  void *event[ACC_EVENT_MAXCOUNT], *s = NULL;\n  const size_t mem_alloc = (16 /*MB*/ << 20);\n  size_t mem_free, mem_total, mem_chunk;\n  void *host_mem = NULL, *dev_mem = NULL;\n\n  for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) {\n    randnums[i] = rand();\n  }\n\n  /* allow get_ndevices/set_active_device before init */\n  ACC_CHECK(c_dbcsr_acc_get_ndevices(&ndevices));\n  if (0 <= device && device < ndevices) { /* not an error */\n    ACC_CHECK(c_dbcsr_acc_set_active_device(device));\n  }\n  ACC_CHECK(c_dbcsr_acc_init());\n  ACC_CHECK(c_dbcsr_acc_get_ndevices(&ndevices));\n  PRINTF(\"ndevices: %i\\n\", ndevices);\n  /* continue tests even with no device */\n  if (0 <= device && device < ndevices) { /* not an error */\n    ACC_CHECK(c_dbcsr_acc_set_active_device(device));\n  }\n\n  if (0 < ndevices) {\n    ACC_CHECK(c_dbcsr_acc_dev_mem_info(&mem_free, &mem_total));\n    ACC_CHECK(mem_free <= mem_total ? EXIT_SUCCESS : EXIT_FAILURE);\n    PRINTF(\"device memory: free=%i MB total=%i MB\\n\", (int)(mem_free >> 20), (int)(mem_total >> 20));\n\n    ACC_CHECK(c_dbcsr_acc_stream_priority_range(&priomin, &priomax));\n    PRINTF(\"stream priority: lowest=%i highest=%i\\n\", priomin, priomax);\n\n    for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) {\n      event[i] = NULL;\n    }\n\n    /* create stream with NULL-name and low priority */\n    ACC_CHECK(c_dbcsr_acc_stream_create(&s, NULL /*name*/, priomin));\n    ACC_CHECK(c_dbcsr_acc_stream_destroy(s));\n    /* create stream with empty name and medium priority */\n    ACC_CHECK(c_dbcsr_acc_stream_create(&s, \"\", (priomin + priomax) / 2));\n    ACC_CHECK(c_dbcsr_acc_stream_destroy(s));\n    /* destroying NULL-stream shall be valid (just like delete/free) */\n    ACC_CHECK(c_dbcsr_acc_stream_destroy(NULL));\n    ACC_CHECK(c_dbcsr_acc_event_destroy(NULL));\n\n#if defined(_OPENMP)\n#  pragma omp parallel for num_threads(nthreads) private(i)\n#endif\n    for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) {\n      const int r = randnums[i] % ACC_EVENT_MAXCOUNT;\n      ACC_CHECK(c_dbcsr_acc_event_create(event + i));\n      if (ACC_EVENT_MAXNTH_DESTROY * r < ACC_EVENT_MAXCOUNT) {\n        void* const ei = event[i];\n        event[i] = NULL;\n        ACC_CHECK(c_dbcsr_acc_event_destroy(ei));\n      }\n    }\n#if defined(_OPENMP)\n#  pragma omp parallel for num_threads(nthreads) private(i)\n#endif\n    for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) {\n      if (NULL == event[i]) {\n        ACC_CHECK(c_dbcsr_acc_event_create(event + i));\n      }\n      ACC_CHECK(c_dbcsr_acc_event_destroy(event[i]));\n    }\n#if defined(_OPENMP)\n#  pragma omp parallel for num_threads(nthreads) private(i)\n#endif\n    for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) ACC_CHECK(c_dbcsr_acc_event_create(event + i));\n\n    for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) {\n      c_dbcsr_acc_bool_t has_occurred = 0;\n      ACC_CHECK(c_dbcsr_acc_event_query(event[i], &has_occurred));\n      ACC_CHECK(has_occurred ? EXIT_SUCCESS : EXIT_FAILURE);\n    }\n\n    ACC_CHECK(c_dbcsr_acc_stream_create(&s, \"stream\", priomax));\n    if (NULL != s) {\n      ACC_CHECK(c_dbcsr_acc_host_mem_allocate(&host_mem, mem_alloc, s));\n      ACC_CHECK(c_dbcsr_acc_stream_sync(s)); /* wait for completion */\n      memset(host_mem, 0xFF, mem_alloc); /* non-zero pattern */\n    }\n\n    ACC_CHECK(c_dbcsr_acc_dev_mem_allocate(&dev_mem, mem_alloc));\n    nt = (nthreads < ACC_EVENT_MAXCOUNT ? nthreads : ACC_EVENT_MAXCOUNT);\n    mem_chunk = (mem_alloc + nt - 1) / nt;\n#if defined(_OPENMP)\n#  pragma omp parallel num_threads(nt)\n#endif\n    {\n#if defined(_OPENMP)\n      const int tid = omp_get_thread_num();\n#else\n      const int tid = 0;\n#endif\n      const size_t offset = tid * mem_chunk, mem_rest = mem_alloc - offset;\n      const size_t size = (mem_chunk <= mem_rest ? mem_chunk : mem_rest);\n      c_dbcsr_acc_bool_t has_occurred = 0;\n      ACC_CHECK(c_dbcsr_acc_memset_zero(dev_mem, offset, size, s));\n      /* can enqueue multiple/duplicate copies for the same memory region */\n      ACC_CHECK(c_dbcsr_acc_memcpy_d2h(dev_mem, host_mem, mem_alloc, s));\n      ACC_CHECK(c_dbcsr_acc_event_query(event[tid], &has_occurred));\n      /* unrecorded event has no work to wait for, hence it occurred */\n      ACC_CHECK(has_occurred ? EXIT_SUCCESS : EXIT_FAILURE);\n      ACC_CHECK(c_dbcsr_acc_event_record(event[tid], s));\n      ACC_CHECK(c_dbcsr_acc_stream_wait_event(s, event[tid]));\n      ACC_CHECK(c_dbcsr_acc_event_synchronize(event[tid]));\n      ACC_CHECK(c_dbcsr_acc_event_query(event[tid], &has_occurred));\n      ACC_CHECK(has_occurred ? EXIT_SUCCESS : EXIT_FAILURE);\n    }\n    /* validate backwards from where the last transfers occurred */\n    for (i = (int)(mem_alloc - 1); 0 <= i; --i) {\n      ACC_CHECK(0 == ((char*)host_mem)[i] ? EXIT_SUCCESS : EXIT_FAILURE);\n    }\n\n#if defined(_OPENMP)\n#  pragma omp parallel for num_threads(nthreads) private(i)\n#endif\n    for (i = 0; i < ACC_EVENT_MAXCOUNT; ++i) ACC_CHECK(c_dbcsr_acc_event_destroy(event[i]));\n  }\n\n  ACC_CHECK(c_dbcsr_acc_dev_mem_deallocate(dev_mem));\n  if (NULL != s) ACC_CHECK(c_dbcsr_acc_host_mem_deallocate(host_mem, s));\n  ACC_CHECK(c_dbcsr_acc_stream_destroy(s));\n  c_dbcsr_acc_clear_errors(); /* no result code */\n  ACC_CHECK(c_dbcsr_acc_finalize());\n\n  return EXIT_SUCCESS;\n}\n"
  },
  {
    "path": "tests/dbcsr_performance_driver.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_performance_driver\n   !! Performance tester for DBCSR operations\n   USE dbcsr_config, ONLY: dbcsr_set_config, dbcsr_print_config\n   USE dbcsr_files, ONLY: open_file\n   USE dbcsr_kinds, ONLY: default_string_length\n   USE dbcsr_lib, ONLY: dbcsr_finalize_lib, &\n                        dbcsr_init_lib, &\n                        dbcsr_print_statistics\n   USE dbcsr_machine, ONLY: default_output_unit, &\n                            m_getarg, &\n                            m_iargc\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, &\n                               dbcsr_mp_release\n   USE dbcsr_mpiwrap, ONLY: &\n      mp_bcast, mp_cart_create, mp_cart_rank, mp_comm_free, mp_environ, &\n      mp_world_finalize, mp_world_init, mp_comm_type\n   USE dbcsr_performance_multiply, ONLY: dbcsr_perf_multiply\n   USE dbcsr_toollib, ONLY: atoi, atol\n   USE dbcsr_types, ONLY: dbcsr_mp_obj\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   INTEGER                                  :: numnodes, mynode, &\n                                               prow, pcol, io_unit, narg, handle\n   INTEGER, DIMENSION(2)                    :: npdims, myploc\n   INTEGER, DIMENSION(:, :), POINTER        :: pgrid\n   TYPE(dbcsr_mp_obj)                       :: mp_env\n   CHARACTER(len=default_string_length)     :: args(100)\n   TYPE(mp_comm_type)                       :: mp_comm, group\n\n   CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_performance_driver'\n\n   !***************************************************************************************\n\n   ! initialize mpi\n   CALL mp_world_init(mp_comm)\n\n   ! Number of nodes and rankid\n   CALL mp_environ(numnodes, mynode, mp_comm)\n\n   ! read and distribute input args\n   IF (mynode .EQ. 0) CALL dbcsr_test_read_args(narg, args)\n   CALL mp_bcast(narg, 0, mp_comm)\n   CALL mp_bcast(args, 0, mp_comm)\n   IF (narg .LT. 1) &\n      DBCSR_ABORT(\"nargs not correct\")\n\n   ! setup the mp environment\n   IF (atoi(args(1)) .LE. 0) THEN\n      npdims(:) = 0\n   ELSE\n      npdims(2) = atoi(args(1))\n      IF (MOD(numnodes, npdims(2)) .NE. 0) THEN\n         CALL dbcsr_abort(__LOCATION__, &\n                          \"numnodes is not multiple of npcols\")\n      END IF\n      npdims(1) = numnodes/npdims(2)\n   END IF\n   CALL mp_cart_create(mp_comm, 2, npdims, myploc, group)\n   ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1))\n   DO prow = 0, npdims(1) - 1\n      DO pcol = 0, npdims(2) - 1\n         CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol))\n      END DO\n   END DO\n   CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, &\n                     myprow=myploc(1), mypcol=myploc(2))\n   DEALLOCATE (pgrid)\n\n   ! set standard output parameters\n   io_unit = 0\n   IF (mynode .EQ. mp_env%mp%source) io_unit = default_output_unit\n\n   ! initialize libdbcsr\n   CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit)\n\n   ! initialize libdbcsr errors\n   CALL timeset(routineN, handle)\n\n   ! Check for MPI-RMA algorithm\n   CALL dbcsr_set_config(use_mpi_rma=atol(args(2)))\n\n   ! print DBCSR configuration\n   CALL dbcsr_print_config(io_unit)\n\n   ! select the operation\n   SELECT CASE (args(3))\n   CASE ('dbcsr_multiply')\n      CALL dbcsr_perf_multiply(group, mp_env, npdims, io_unit, narg, 3, args)\n   CASE DEFAULT\n      DBCSR_ABORT(\"operation not found\")\n   END SELECT\n\n   ! finalize libdbcsr errors\n   CALL timestop(handle)\n\n   ! clean mp environment\n   CALL dbcsr_mp_release(mp_env)\n\n   ! free comm\n   CALL mp_comm_free(group)\n\n   ! print statistics\n   CALL dbcsr_print_statistics(.true., \"test.callgraph\")\n\n   ! finalize DBCSR\n   CALL dbcsr_finalize_lib()\n\n   ! finalize mpi\n   CALL mp_world_finalize()\n\nCONTAINS\n\n   SUBROUTINE dbcsr_test_read_args(narg, args)\n      INTEGER, INTENT(out)                               :: narg\n      CHARACTER(len=*), DIMENSION(:), INTENT(out)        :: args\n\n      CHARACTER(len=1000)                                :: line\n      INTEGER                                            :: istat, unit\n\n      ! Read for standard input\n      unit = 5\n      !\n      ! Read from a file\n      IF (m_iargc() .GT. 0) THEN\n         CALL m_getarg(1, line)\n         CALL open_file(TRIM(line), unit_number=unit)\n      END IF\n\n      narg = 0\n      DO\n         READ (unit, *, IOSTAT=istat) line\n         IF (istat .NE. 0) EXIT\n         IF (line(1:1) .EQ. '#') CYCLE\n         narg = narg + 1\n         args(narg) = line\n      END DO\n\n   END SUBROUTINE dbcsr_test_read_args\n\nEND PROGRAM dbcsr_performance_driver\n"
  },
  {
    "path": "tests/dbcsr_performance_multiply.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_performance_multiply\n   !! Performance for DBCSR multiply\n   USE dbcsr_data_methods, ONLY: dbcsr_scalar, &\n                                 dbcsr_scalar_negative, &\n                                 dbcsr_scalar_one\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_col_dist, &\n                                 dbcsr_distribution_new, &\n                                 dbcsr_distribution_release, &\n                                 dbcsr_distribution_row_dist\n   USE dbcsr_dist_operations, ONLY: dbcsr_dist_bin\n   USE dbcsr_dist_util, ONLY: dbcsr_checksum\n   USE dbcsr_io, ONLY: dbcsr_print\n   USE dbcsr_kinds, ONLY: int_8, &\n                          real_4, &\n                          real_8\n   USE dbcsr_machine, ONLY: m_walltime\n   USE dbcsr_methods, ONLY: &\n      dbcsr_col_block_offsets, dbcsr_col_block_sizes, dbcsr_distribution, dbcsr_get_data_type, &\n      dbcsr_get_matrix_type, dbcsr_name, dbcsr_nfullcols_total, dbcsr_nfullrows_total, &\n      dbcsr_release, dbcsr_row_block_offsets, dbcsr_row_block_sizes\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_npcols, &\n                               dbcsr_mp_nprows\n   USE dbcsr_mpiwrap, ONLY: mp_environ, &\n                            mp_sum, &\n                            mp_sync, mp_comm_type\n   USE dbcsr_multiply_api, ONLY: dbcsr_multiply\n   USE dbcsr_operations, ONLY: dbcsr_copy, &\n                               dbcsr_scale\n   USE dbcsr_test_methods, ONLY: dbcsr_make_random_block_sizes, &\n                                 dbcsr_make_random_matrix, &\n                                 dbcsr_reset_randmat_seed\n   USE dbcsr_toollib, ONLY: atoi, &\n                            atol, &\n                            ator\n   USE dbcsr_transformations, ONLY: dbcsr_redistribute\n   USE dbcsr_types, ONLY: &\n      dbcsr_conjugate_transpose, dbcsr_distribution_obj, dbcsr_mp_obj, dbcsr_no_transpose, &\n      dbcsr_scalar_type, dbcsr_transpose, dbcsr_type, dbcsr_type_antisymmetric, &\n      dbcsr_type_complex_4, dbcsr_type_complex_8, dbcsr_type_no_symmetry, dbcsr_type_real_4, &\n      dbcsr_type_real_8\n   USE dbcsr_work_operations, ONLY: dbcsr_create, &\n                                    dbcsr_finalize\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC :: dbcsr_perf_multiply\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_performance_multiply'\n\nCONTAINS\n\n   SUBROUTINE dbcsr_perf_multiply(group, mp_env, npdims, io_unit, narg, args_shift, args)\n\n      TYPE(mp_comm_type)                                 :: group\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, DIMENSION(2), INTENT(in)                  :: npdims\n      INTEGER                                            :: io_unit, narg, args_shift\n      CHARACTER(len=*), DIMENSION(:), INTENT(IN)         :: args\n\n      CHARACTER                                          :: symmetries(3), trans(2)\n      INTEGER                                            :: i, iblk, kblk_to_read, limits(6), &\n                                                            matrix_sizes(3), mblk_to_read, &\n                                                            nblk_to_read, nrep, TYPE\n      INTEGER, ALLOCATABLE, DIMENSION(:)                 :: bs_k, bs_m, bs_n\n      LOGICAL                                            :: chksum_check, retain_sparsity\n      REAL(real_8)                                       :: alpha(2), beta(2), chksum_ref, &\n                                                            chksum_ref_pos, chksum_threshold, &\n                                                            sparsities(3)\n\n!\n! parsing\n\n      IF (narg .LT. args_shift + 31) THEN\n         WRITE (io_unit, *) \"Input file format:\"\n         WRITE (io_unit, *) \"      npcols for MPI grid \\\\\"\n         WRITE (io_unit, *) \"      use MPI-RMA algorithm \\\\\"\n         WRITE (io_unit, *) \"      dbcsr_multiply \\\\\"\n         WRITE (io_unit, *) \"      M N K \\\\\"\n         WRITE (io_unit, *) \"      SpA SpB SpC \\\\\"\n         WRITE (io_unit, *) \"      TrA TrB \\\\\"\n         WRITE (io_unit, *) \"      SymA SymB SymC \\\\\"\n         WRITE (io_unit, *) \"      data_type \\\\\"\n         WRITE (io_unit, *) \"      Re(alpha) Im(alpha) Re(beta) Im(beta) \\\\\"\n         WRITE (io_unit, *) \"      limRowL limRowU limColL limColU limKL limKU \\\\\"\n         WRITE (io_unit, *) \"      retain_sparsity nrep \\\\\"\n         WRITE (io_unit, *) \"      nmblksizes nnblksizes nkblksizes \\\\\"\n         WRITE (io_unit, *) \"      [mblksizes] [nblksizes] [kblksizes] \\\\\"\n         WRITE (io_unit, *) \"      checksum_check checksum_threshold checksum_ref checksum_ref_pos\"\n         DBCSR_ABORT(\"narg not correct\")\n      END IF\n\n      matrix_sizes(1) = atoi(args(args_shift + 1))\n      matrix_sizes(2) = atoi(args(args_shift + 2))\n      matrix_sizes(3) = atoi(args(args_shift + 3))\n      sparsities(1) = ator(args(args_shift + 4))\n      sparsities(2) = ator(args(args_shift + 5))\n      sparsities(3) = ator(args(args_shift + 6))\n      trans(1) = args(args_shift + 7)\n      trans(2) = args(args_shift + 8)\n      symmetries(1) = args(args_shift + 9)\n      symmetries(2) = args(args_shift + 10)\n      symmetries(3) = args(args_shift + 11)\n      TYPE = atoi(args(args_shift + 12))\n      alpha(1) = ator(args(args_shift + 13))\n      alpha(2) = ator(args(args_shift + 14))\n      beta(1) = ator(args(args_shift + 15))\n      beta(2) = ator(args(args_shift + 16))\n      limits(1) = atoi(args(args_shift + 17))\n      limits(2) = atoi(args(args_shift + 18))\n      limits(3) = atoi(args(args_shift + 19))\n      limits(4) = atoi(args(args_shift + 20))\n      limits(5) = atoi(args(args_shift + 21))\n      limits(6) = atoi(args(args_shift + 22))\n      retain_sparsity = atol(args(args_shift + 23))\n      nrep = atoi(args(args_shift + 24))\n      mblk_to_read = atoi(args(args_shift + 25))\n      nblk_to_read = atoi(args(args_shift + 26))\n      kblk_to_read = atoi(args(args_shift + 27))\n\n      IF (narg < 34 + 2*(mblk_to_read + nblk_to_read + kblk_to_read)) &\n         DBCSR_ABORT(\"narg not correct\")\n\n      ALLOCATE (bs_m(2*mblk_to_read), bs_n(2*nblk_to_read), bs_k(2*kblk_to_read))\n\n      i = args_shift + 27\n      DO iblk = 1, mblk_to_read\n         i = i + 1\n         bs_m(2*(iblk - 1) + 1) = atoi(args(i))\n         i = i + 1\n         bs_m(2*(iblk - 1) + 2) = atoi(args(i))\n      END DO\n      DO iblk = 1, nblk_to_read\n         i = i + 1\n         bs_n(2*(iblk - 1) + 1) = atoi(args(i))\n         i = i + 1\n         bs_n(2*(iblk - 1) + 2) = atoi(args(i))\n      END DO\n      DO iblk = 1, kblk_to_read\n         i = i + 1\n         bs_k(2*(iblk - 1) + 1) = atoi(args(i))\n         i = i + 1\n         bs_k(2*(iblk - 1) + 2) = atoi(args(i))\n      END DO\n\n      chksum_check = atol(args(i + 1))\n      chksum_threshold = ator(args(i + 2))\n      IF (chksum_check .AND. chksum_threshold .LE. 0.0) &\n         CALL dbcsr_abort(__LOCATION__, &\n                          \"Checksum threshold must be positive!\")\n      chksum_ref = ator(args(i + 3))\n      chksum_ref_pos = ator(args(i + 4))\n\n      !\n      ! do checks here\n\n      !\n      ! if the limits are not specified (i.e 0), we set them here\n      IF (limits(1) .EQ. 0) limits(1) = 1\n      IF (limits(2) .EQ. 0) limits(2) = matrix_sizes(1)\n      IF (limits(3) .EQ. 0) limits(3) = 1\n      IF (limits(4) .EQ. 0) limits(4) = matrix_sizes(2)\n      IF (limits(5) .EQ. 0) limits(5) = 1\n      IF (limits(6) .EQ. 0) limits(6) = matrix_sizes(3)\n\n      !\n      ! lets go !\n      CALL dbcsr_perf_multiply_low(group, mp_env, npdims, io_unit, matrix_sizes, &\n                                   bs_m, bs_n, bs_k, sparsities, trans, symmetries, TYPE, &\n                                   alpha, beta, limits, retain_sparsity, nrep, &\n                                   chksum_check, chksum_threshold, chksum_ref, &\n                                   chksum_ref_pos)\n\n      DEALLOCATE (bs_m, bs_n, bs_k)\n\n   END SUBROUTINE dbcsr_perf_multiply\n\n   SUBROUTINE dbcsr_perf_multiply_low(mp_group, mp_env, npdims, io_unit, &\n                                      matrix_sizes, bs_m, bs_n, bs_k, sparsities, trans, symmetries, data_type, &\n                                      alpha_in, beta_in, limits, retain_sparsity, nrep, &\n                                      chksum_check, chksum_threshold, chksum_ref, chksum_ref_pos)\n      !! Performs a variety of matrix multiplies of same matrices on different\n      !! processor grids\n\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_group\n         !! MPI communicator\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, DIMENSION(2), INTENT(in)                  :: npdims\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! which unit to write to, if not negative\n      INTEGER, DIMENSION(:), INTENT(in)                  :: matrix_sizes, bs_m, bs_n, bs_k\n         !! size of matrices to test\n         !! block sizes of the 3 dimensions\n         !! block sizes of the 3 dimensions\n         !! block sizes of the 3 dimensions\n      REAL(real_8), DIMENSION(3), INTENT(in)             :: sparsities\n         !! sparsities of matrices to create\n      CHARACTER, DIMENSION(2), INTENT(in)                :: trans\n         !! transposes of the two matrices\n      CHARACTER, DIMENSION(3), INTENT(in)                :: symmetries\n      INTEGER, INTENT(IN)                                :: data_type\n         !! types of matrices to create\n      REAL(real_8), DIMENSION(2), INTENT(in)             :: alpha_in, beta_in\n         !! alpha value to use in multiply\n         !! beta value to use in multiply\n      INTEGER, DIMENSION(6), INTENT(in)                  :: limits\n      LOGICAL, INTENT(in)                                :: retain_sparsity\n      INTEGER, INTENT(IN)                                :: nrep\n      LOGICAL, INTENT(in)                                :: chksum_check\n      REAL(real_8), INTENT(in)                           :: chksum_threshold, chksum_ref, &\n                                                            chksum_ref_pos\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_perf_multiply_low'\n\n      CHARACTER                                          :: a_symm, b_symm, c_symm, transa, transb\n      INTEGER                                            :: handle, mynode, numnodes, numthreads\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist_a, col_dist_b, col_dist_c, my_sizes_k, &\n                                               my_sizes_m, my_sizes_n, row_dist_a, row_dist_b, row_dist_c, sizes_k, sizes_m, sizes_n\n      LOGICAL                                            :: do_complex\n      LOGICAL, DIMENSION(2)                              :: trs\n      TYPE(dbcsr_distribution_obj)                       :: dist_a, dist_b, dist_c\n      TYPE(dbcsr_scalar_type)                            :: alpha, beta\n      TYPE(dbcsr_type)                                   :: matrix_a, matrix_b, matrix_c\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      NULLIFY (my_sizes_k, my_sizes_m, my_sizes_n, &\n               sizes_k, sizes_m, sizes_n)\n\n      !\n      ! print\n      CALL mp_environ(numnodes, mynode, mp_group)\n      IF (io_unit .GT. 0) THEN\n         numthreads = 1\n!$OMP PARALLEL\n!$OMP MASTER\n!$       numthreads = omp_get_num_threads()\n!$OMP END MASTER\n!$OMP END PARALLEL\n         WRITE (io_unit, *) 'numthreads', numthreads\n         WRITE (io_unit, *) 'numnodes', numnodes\n         WRITE (io_unit, *) 'matrix_sizes', matrix_sizes\n         WRITE (io_unit, *) 'sparsities', sparsities\n         WRITE (io_unit, *) 'trans ', trans\n         WRITE (io_unit, *) 'symmetries ', symmetries\n         WRITE (io_unit, *) 'type ', data_type\n         WRITE (io_unit, *) 'alpha_in', alpha_in\n         WRITE (io_unit, *) 'beta_in', beta_in\n         WRITE (io_unit, *) 'limits', limits\n         WRITE (io_unit, *) 'retain_sparsity', retain_sparsity\n         WRITE (io_unit, *) 'nrep', nrep\n         WRITE (io_unit, *) 'bs_m', bs_m\n         WRITE (io_unit, *) 'bs_n', bs_n\n         WRITE (io_unit, *) 'bs_k', bs_k\n      END IF\n      !\n      CALL dbcsr_reset_randmat_seed()\n      !\n      a_symm = symmetries(1)\n      b_symm = symmetries(2)\n      c_symm = symmetries(3)\n\n      IF (a_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(3)) &\n         DBCSR_ABORT(\"\")\n\n      IF (b_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(2) .NE. matrix_sizes(3)) &\n         DBCSR_ABORT(\"\")\n\n      IF (c_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(2)) &\n         DBCSR_ABORT(\"\")\n\n      do_complex = data_type .EQ. dbcsr_type_complex_4 .OR. data_type .EQ. dbcsr_type_complex_8\n\n      SELECT CASE (data_type)\n      CASE (dbcsr_type_real_4)\n         alpha = dbcsr_scalar(REAL(alpha_in(1), real_4))\n         beta = dbcsr_scalar(REAL(beta_in(1), real_4))\n      CASE (dbcsr_type_real_8)\n         alpha = dbcsr_scalar(REAL(alpha_in(1), real_8))\n         beta = dbcsr_scalar(REAL(beta_in(1), real_8))\n      CASE (dbcsr_type_complex_4)\n         alpha = dbcsr_scalar(CMPLX(alpha_in(1), alpha_in(2), real_4))\n         beta = dbcsr_scalar(CMPLX(beta_in(1), beta_in(2), real_4))\n      CASE (dbcsr_type_complex_8)\n         alpha = dbcsr_scalar(CMPLX(alpha_in(1), alpha_in(2), real_8))\n         beta = dbcsr_scalar(CMPLX(beta_in(1), beta_in(2), real_8))\n      END SELECT\n\n      transa = trans(1)\n      transb = trans(2)\n\n      !\n      ! if C has a symmetry, we need special transpositions\n      IF (c_symm .NE. dbcsr_type_no_symmetry) THEN\n         IF (.NOT. (transa .EQ. dbcsr_no_transpose .AND. &\n                    transb .EQ. dbcsr_transpose .OR. &\n                    transa .EQ. dbcsr_transpose .AND. &\n                    transb .EQ. dbcsr_no_transpose .OR. &\n                    transa .EQ. dbcsr_no_transpose .AND. &\n                    transb .EQ. dbcsr_conjugate_transpose .AND. &\n                    .NOT. do_complex .OR. &\n                    transa .EQ. dbcsr_conjugate_transpose .AND. &\n                    transb .EQ. dbcsr_no_transpose .AND. &\n                    .NOT. do_complex)) THEN\n            DBCSR_ABORT(\"\")\n         END IF\n      END IF\n      !\n      ! if C has symmetry and special limits\n      IF (c_symm .NE. dbcsr_type_no_symmetry) THEN\n         IF (limits(1) .NE. 1 .OR. limits(2) .NE. matrix_sizes(1) .OR. &\n             limits(3) .NE. 1 .OR. limits(4) .NE. matrix_sizes(2)) THEN\n            DBCSR_ABORT(\"\")\n         END IF\n      END IF\n\n      !\n      ! Create the row/column block sizes.\n      CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), bs_m)\n      CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), bs_n)\n      CALL dbcsr_make_random_block_sizes(sizes_k, matrix_sizes(3), bs_k)\n\n      !\n      ! if we have symmetry the row and column block sizes have to match\n      IF (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. &\n          b_symm .NE. dbcsr_type_no_symmetry) THEN\n         my_sizes_m => sizes_m; my_sizes_n => sizes_m; my_sizes_k => sizes_m\n      ELSEIF ((c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. &\n               b_symm .NE. dbcsr_type_no_symmetry) .OR. &\n              (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. &\n               b_symm .NE. dbcsr_type_no_symmetry) .OR. &\n              (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. &\n               b_symm .EQ. dbcsr_type_no_symmetry)) THEN\n         my_sizes_m => sizes_m; my_sizes_n => sizes_m; my_sizes_k => sizes_m\n      ELSEIF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. &\n              b_symm .NE. dbcsr_type_no_symmetry) THEN\n         my_sizes_m => sizes_m; my_sizes_n => sizes_n; my_sizes_k => sizes_n\n      ELSEIF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. &\n              b_symm .EQ. dbcsr_type_no_symmetry) THEN\n         my_sizes_m => sizes_m; my_sizes_n => sizes_n; my_sizes_k => sizes_m\n      ELSEIF (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. &\n              b_symm .EQ. dbcsr_type_no_symmetry) THEN\n         my_sizes_m => sizes_m; my_sizes_n => sizes_m; my_sizes_k => sizes_k\n      ELSEIF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. &\n              b_symm .EQ. dbcsr_type_no_symmetry) THEN\n         my_sizes_m => sizes_m; my_sizes_n => sizes_n; my_sizes_k => sizes_k\n      ELSE\n         DBCSR_ABORT(\"something wrong here...\")\n      END IF\n\n      ! Create the random matrices.\n      trs(1) = transa .NE. dbcsr_no_transpose\n      trs(2) = transb .NE. dbcsr_no_transpose\n      CALL dbcsr_dist_bin(row_dist_c, SIZE(sizes_m), npdims(1), &\n                          sizes_m)\n      CALL dbcsr_dist_bin(col_dist_c, SIZE(sizes_n), npdims(2), &\n                          sizes_n)\n      CALL dbcsr_distribution_new(dist_c, mp_env, row_dist_c, col_dist_c)\n      CALL dbcsr_make_random_matrix(matrix_c, sizes_m, sizes_n, \"Matrix C\", &\n                                    REAL(sparsities(3), real_8), &\n                                    mp_group, data_type=data_type, dist=dist_c)\n      CALL dbcsr_distribution_release(dist_c)\n      IF (trs(1)) THEN\n         CALL dbcsr_dist_bin(row_dist_a, SIZE(sizes_k), npdims(1), &\n                             sizes_k)\n         CALL dbcsr_dist_bin(col_dist_a, SIZE(sizes_m), npdims(2), &\n                             sizes_m)\n         CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a)\n         CALL dbcsr_make_random_matrix(matrix_a, sizes_k, sizes_m, \"Matrix A\", &\n                                       REAL(sparsities(1), real_8), &\n                                       mp_group, data_type=data_type, dist=dist_a)\n         DEALLOCATE (row_dist_a, col_dist_a)\n      ELSE\n         CALL dbcsr_dist_bin(col_dist_a, SIZE(sizes_k), npdims(2), &\n                             sizes_k)\n         CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_c, col_dist_a)\n         CALL dbcsr_make_random_matrix(matrix_a, sizes_m, sizes_k, \"Matrix A\", &\n                                       REAL(sparsities(1), real_8), &\n                                       mp_group, data_type=data_type, dist=dist_a)\n         DEALLOCATE (col_dist_a)\n      END IF\n      CALL dbcsr_distribution_release(dist_a)\n      IF (trs(2)) THEN\n         CALL dbcsr_dist_bin(row_dist_b, SIZE(sizes_n), npdims(1), &\n                             sizes_n)\n         CALL dbcsr_dist_bin(col_dist_b, SIZE(sizes_k), npdims(2), &\n                             sizes_k)\n         CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b)\n         CALL dbcsr_make_random_matrix(matrix_b, sizes_n, sizes_k, \"Matrix B\", &\n                                       REAL(sparsities(2), real_8), &\n                                       mp_group, data_type=data_type, dist=dist_b)\n         DEALLOCATE (row_dist_b, col_dist_b)\n      ELSE\n         CALL dbcsr_dist_bin(row_dist_b, SIZE(sizes_k), npdims(1), &\n                             sizes_k)\n         CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_c)\n         CALL dbcsr_make_random_matrix(matrix_b, sizes_k, sizes_n, \"Matrix B\", &\n                                       REAL(sparsities(2), real_8), &\n                                       mp_group, data_type=data_type, dist=dist_b)\n         DEALLOCATE (row_dist_b)\n      END IF\n      CALL dbcsr_distribution_release(dist_b)\n      DEALLOCATE (row_dist_c, col_dist_c, sizes_m, sizes_n, sizes_k)\n\n      !\n      ! if C has a symmetry, we build it accordingly, i.e. C=A*A and C=A*(-A)\n      IF (c_symm .NE. dbcsr_type_no_symmetry) THEN\n         CALL dbcsr_copy(matrix_b, matrix_a)\n         !print*, a_symm,b_symm,dbcsr_get_matrix_type(matrix_a),dbcsr_get_matrix_type(matrix_b)\n         IF (c_symm .EQ. dbcsr_type_antisymmetric) THEN\n            CALL dbcsr_scale(matrix_b, &\n                             alpha_scalar=dbcsr_scalar_negative( &\n                             dbcsr_scalar_one(data_type)))\n         END IF\n      END IF\n\n      !\n      ! Prepare test parameters\n      CALL perf_multiply(mp_group, mp_env, io_unit, &\n                         matrix_a, matrix_b, matrix_c, &\n                         transa, transb, &\n                         alpha, beta, &\n                         limits, retain_sparsity, &\n                         nrep, &\n                         chksum_check, chksum_threshold, chksum_ref, &\n                         chksum_ref_pos)\n\n      !\n      ! cleanup\n      CALL dbcsr_release(matrix_a)\n      CALL dbcsr_release(matrix_b)\n      CALL dbcsr_release(matrix_c)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_perf_multiply_low\n\n   SUBROUTINE perf_multiply(mp_group, mp_env, io_unit, &\n                            matrix_a, matrix_b, matrix_c, &\n                            transa, transb, alpha, beta, limits, retain_sparsity, &\n                            nrep, chksum_check, chksum_threshold, chksum_ref, chksum_ref_pos)\n      !! Performs a variety of matrix multiplies of same matrices on different\n      !! processor grids\n\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_group\n         !! MPI communicator\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! which unit to write to, if not negative\n      TYPE(dbcsr_type), INTENT(in)                       :: matrix_a, matrix_b, matrix_c\n         !! matrices to multiply\n         !! matrices to multiply\n         !! matrices to multiply\n      CHARACTER, INTENT(in)                              :: transa, transb\n      TYPE(dbcsr_scalar_type), INTENT(in)                :: alpha, beta\n      INTEGER, DIMENSION(6), INTENT(in)                  :: limits\n      LOGICAL, INTENT(in)                                :: retain_sparsity\n      INTEGER, INTENT(IN)                                :: nrep\n      LOGICAL, INTENT(in)                                :: chksum_check\n      REAL(real_8), INTENT(in)                           :: chksum_threshold, chksum_ref, &\n                                                            chksum_ref_pos\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'perf_multiply'\n      INTEGER                                            :: c_a, c_b, c_c, handle, irep, mynode, &\n                                                            nthreads, numnodes, r_a, r_b, r_c\n      INTEGER(int_8)                                     :: flop\n      INTEGER(int_8), ALLOCATABLE, DIMENSION(:)          :: flop_sum\n      INTEGER(int_8), ALLOCATABLE, DIMENSION(:, :)       :: flops\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: blk_offsets, col_dist_a, col_dist_b, &\n                                                            col_dist_c, row_dist_a, row_dist_b, &\n                                                            row_dist_c\n      LOGICAL                                            :: chksum_err\n      REAL(real_8)                                       :: chksum_a, chksum_b, chksum_c_in, &\n                                                            chksum_c_out, chksum_c_out_pos, &\n                                                            rel_diff, std_all, std_t, t1, t2\n      REAL(real_8), ALLOCATABLE, DIMENSION(:)            :: flops_all, flops_node, flops_thread, &\n                                                            load_imb, t, t_max, t_min\n      REAL(real_8), ALLOCATABLE, DIMENSION(:, :)         :: times\n      TYPE(dbcsr_distribution_obj)                       :: dist_a, dist_b, dist_c\n      TYPE(dbcsr_type)                                   :: m_a, m_b, m_c, m_c_orig\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      CALL mp_environ(numnodes, mynode, mp_group)\n\n      nthreads = 1\n!$    nthreads = OMP_GET_MAX_THREADS()\n\n      ALLOCATE (times(0:numnodes - 1, nrep), flops(0:numnodes - 1, nrep), t_max(nrep), &\n                flops_node(nrep), flops_thread(nrep), flops_all(nrep), flop_sum(nrep), &\n                t_min(nrep), t(nrep), load_imb(nrep))\n      times(:, :) = 0.0_real_8\n      t_max(:) = 0.0_real_8\n      t_min(:) = 0.0_real_8\n      t(:) = 0.0_real_8\n      flops_node(:) = 0.0_real_8\n      flops_thread(:) = 0.0_real_8\n      flops_all(:) = 0.0_real_8\n      flops(:, :) = 0\n      flop_sum(:) = 0\n      load_imb(:) = 0.0_real_8\n\n      ! Row & column distributions\n      row_dist_c => dbcsr_distribution_row_dist(dbcsr_distribution(matrix_c))\n      col_dist_c => dbcsr_distribution_col_dist(dbcsr_distribution(matrix_c))\n      row_dist_a => dbcsr_distribution_row_dist(dbcsr_distribution(matrix_a))\n      col_dist_a => dbcsr_distribution_col_dist(dbcsr_distribution(matrix_a))\n      row_dist_b => dbcsr_distribution_row_dist(dbcsr_distribution(matrix_b))\n      col_dist_b => dbcsr_distribution_col_dist(dbcsr_distribution(matrix_b))\n\n      CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a)\n      CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b)\n      CALL dbcsr_distribution_new(dist_c, mp_env, row_dist_c, col_dist_c)\n      ! Redistribute the matrices\n      ! A\n      CALL dbcsr_create(m_a, \"Test for \"//TRIM(dbcsr_name(matrix_a)), &\n                        dist_a, dbcsr_get_matrix_type(matrix_a), &\n                        row_blk_size_obj=matrix_a%row_blk_size, &\n                        col_blk_size_obj=matrix_a%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix_a))\n      CALL dbcsr_distribution_release(dist_a)\n      CALL dbcsr_redistribute(matrix_a, m_a)\n      ! B\n      CALL dbcsr_create(m_b, \"Test for \"//TRIM(dbcsr_name(matrix_b)), &\n                        dist_b, dbcsr_get_matrix_type(matrix_b), &\n                        row_blk_size_obj=matrix_b%row_blk_size, &\n                        col_blk_size_obj=matrix_b%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix_b))\n      CALL dbcsr_distribution_release(dist_b)\n      CALL dbcsr_redistribute(matrix_b, m_b)\n      ! C orig\n      CALL dbcsr_create(m_c_orig, \"Test for \"//TRIM(dbcsr_name(matrix_c)), &\n                        dist_c, dbcsr_get_matrix_type(matrix_c), &\n                        row_blk_size_obj=matrix_c%row_blk_size, &\n                        col_blk_size_obj=matrix_c%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix_c))\n      CALL dbcsr_distribution_release(dist_c)\n      CALL dbcsr_redistribute(matrix_c, m_c_orig)\n      ! C\n      CALL dbcsr_create(m_c, \"Test for \"//TRIM(dbcsr_name(matrix_c)), &\n                        dist_c, dbcsr_get_matrix_type(matrix_c), &\n                        row_blk_size_obj=matrix_c%row_blk_size, &\n                        col_blk_size_obj=matrix_c%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix_c))\n      CALL dbcsr_finalize(m_c)\n\n      IF (.FALSE.) THEN\n         blk_offsets => dbcsr_row_block_offsets(matrix_c)\n         WRITE (io_unit, *) 'row_block_offsets(matrix_c)', blk_offsets\n         blk_offsets => dbcsr_col_block_offsets(matrix_c)\n         WRITE (io_unit, *) 'col_block_offsets(matrix_c)', blk_offsets\n      END IF\n\n      IF (.FALSE.) THEN\n         CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_in_')\n         CALL dbcsr_print(m_a, matlab_format=.FALSE., variable_name='a_')\n         CALL dbcsr_print(m_b, matlab_format=.FALSE., variable_name='b_')\n         CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_out_')\n      END IF\n\n      r_a = dbcsr_nfullrows_total(m_a)\n      c_a = dbcsr_nfullcols_total(m_a)\n      r_b = dbcsr_nfullrows_total(m_b)\n      c_b = dbcsr_nfullcols_total(m_b)\n      r_c = dbcsr_nfullrows_total(m_c_orig)\n      c_c = dbcsr_nfullcols_total(m_c_orig)\n\n      chksum_a = dbcsr_checksum(m_a)\n      chksum_b = dbcsr_checksum(m_b)\n      chksum_c_in = dbcsr_checksum(m_c_orig)\n\n      !\n      !\n      DO irep = 1, nrep\n\n         !\n         ! set the C matrix\n         CALL dbcsr_copy(m_c, m_c_orig)\n\n         !\n         ! Perform multiply\n         CALL mp_sync(mp_group)\n         t1 = m_walltime()\n         flop = 0\n         CALL dbcsr_multiply(transa, transb, alpha, &\n                             m_a, m_b, beta, m_c, &\n                             first_row=limits(1), &\n                             last_row=limits(2), &\n                             first_column=limits(3), &\n                             last_column=limits(4), &\n                             first_k=limits(5), &\n                             last_k=limits(6), &\n                             retain_sparsity=retain_sparsity, &\n                             flop=flop)\n         t2 = m_walltime()\n         times(mynode, irep) = t2 - t1\n         flops(mynode, irep) = flop\n      END DO\n\n      chksum_c_out = dbcsr_checksum(m_c)\n      chksum_c_out_pos = dbcsr_checksum(m_c, pos=.TRUE.)\n\n      CALL mp_sum(times, 0, mp_group)\n      CALL mp_sum(flops, 0, mp_group)\n\n      !\n      !\n      t_max(:) = MAXVAL(times, DIM=1)\n      t_min(:) = MINVAL(times, DIM=1)\n      t(:) = SUM(times, DIM=1)/REAL(numnodes, real_8)\n      flop_sum(:) = SUM(flops, DIM=1)\n      t_max(:) = MAX(t_max(:), 0.001_real_8)\n      flops_all(:) = REAL(flop_sum(:), KIND=real_8)/t_max(:) !* 1.0e-9_real_8\n      flops_node(:) = flops_all(:)/REAL(numnodes, real_8)\n      flops_thread(:) = flops_node(:)/REAL(nthreads, real_8)\n      load_imb(:) = t_max(:) - t(:)/REAL(numnodes, real_8)\n\n      std_t = 1.0_real_8\n      std_all = 1.0_real_8\n\n      IF (io_unit .GT. 0) THEN\n         WRITE (io_unit, *) REPEAT(\"*\", 80)\n         WRITE (io_unit, *) \" -- PERF dbcsr_multiply (\", transa, \", \", transb, &\n            \", \", dbcsr_get_data_type(m_a), &\n            \", \", dbcsr_get_matrix_type(m_a), &\n            \", \", dbcsr_get_matrix_type(m_b), &\n            \", \", dbcsr_get_matrix_type(m_c), &\n            \")\"\n         WRITE (io_unit, '(T4,3(A,I9,A,I9),A)') &\n            \"matrix sizes A(\", r_a, \" x\", c_a, \"), B(\", r_b, \" x\", c_b, \") and C(\", r_c, \" x\", c_c, \")\"\n         WRITE (io_unit, '(T4,A,I5,A,I3,A,I3,A)') 'numnodes (nprows X npcols) = ', numnodes, &\n            \"(\", dbcsr_mp_nprows(mp_env), \" X \", &\n            dbcsr_mp_npcols(mp_env), \")\"\n         WRITE (io_unit, '(T4,A,I5)') 'nthreads        = ', nthreads\n         WRITE (io_unit, '(T4,A,E26.15)') 'checksum(A)     = ', chksum_a\n         WRITE (io_unit, '(T4,A,E26.15)') 'checksum(B)     = ', chksum_b\n         WRITE (io_unit, '(T4,A,E26.15)') 'checksum(C_in)  = ', chksum_c_in\n         WRITE (io_unit, '(T4,A,E26.15)') 'checksum(C_out) = ', chksum_c_out\n         WRITE (io_unit, '(T4,A,E26.15)') 'checksum(C_out) POS = ', chksum_c_out_pos\n         IF (chksum_check) THEN\n            chksum_err = .FALSE.\n            rel_diff = ABS(chksum_c_out/MAX(chksum_ref, chksum_threshold) - 1.)\n            IF (rel_diff .GT. chksum_threshold) THEN\n               WRITE (io_unit, '(T4,A,E26.15,A,E26.15,A,E26.15)') \"Wrong checksum(C_out), ref = \", &\n                  chksum_ref, &\n                  \"  rel_diff = \", rel_diff, &\n                  \"  threshold = \", chksum_threshold\n               chksum_err = .TRUE.\n            END IF\n            rel_diff = ABS(chksum_c_out_pos/MAX(chksum_ref_pos, chksum_threshold) - 1.)\n            IF (rel_diff .GT. chksum_threshold) THEN\n               WRITE (io_unit, '(T4,A,E26.15,A,E26.15,A,E26.15)') \"Wrong checksum(C_out) POS, ref = \", &\n                  chksum_ref_pos, &\n                  \"  rel_diff = \", rel_diff, &\n                  \"  threshold = \", chksum_threshold\n               chksum_err = .TRUE.\n            END IF\n            IF (chksum_err) &\n               CALL dbcsr_abort(__LOCATION__, &\n                                \"Wrong Checksums. Test failed!\")\n         END IF\n         WRITE (io_unit, *)\n         WRITE (io_unit, *)\n         WRITE (io_unit, '(T4,A)') \"                       mean        std         minmin      maxmax\"\n         WRITE (io_unit, '(T4,A,4EN12.2,A)') \"time            = \", mean(t), std(t), &\n            MINVAL(times), MAXVAL(times), ' seconds'\n         WRITE (io_unit, '(T4,A,4EN12.2,A)') \"perf total      = \", mean(flops_all), std(flops_all), &\n            MINVAL(flops_all), MAXVAL(flops_all), ' FLOPS'\n         WRITE (io_unit, '(T4,A,4EN12.2,A)') \"perf per node   = \", mean(flops_node), std(flops_node), &\n            MINVAL(flops_node), MAXVAL(flops_node), ' FLOPS'\n         WRITE (io_unit, '(T4,A,4EN12.2,A)') \"perf per thread = \", mean(flops_thread), std(flops_thread), &\n            MINVAL(flops_thread), MAXVAL(flops_thread), ' FLOPS'\n         WRITE (io_unit, '(T4,A,4E12.2,A)') \"load imbalance  = \", mean(load_imb), std(load_imb), &\n            MINVAL(load_imb), MAXVAL(load_imb), ''\n         WRITE (io_unit, '(T4,A,4E12.2,A)') \"rel load imbal  = \", mean(load_imb/t_max), std(load_imb/t_max), &\n            MINVAL(load_imb/t_max), MAXVAL(load_imb/t_max), ''\n\n         WRITE (io_unit, *) REPEAT(\"*\", 80)\n      END IF\n\n      CALL dbcsr_release(m_a)\n      CALL dbcsr_release(m_b)\n      CALL dbcsr_release(m_c)\n      CALL dbcsr_release(m_c_orig)\n\n      DEALLOCATE (times, flops, t_max, flops_node, flops_thread, flops_all, &\n                  flop_sum, t_min, t, load_imb)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE perf_multiply\n\n   FUNCTION mean(v)\n      REAL(real_8), DIMENSION(:)                         :: v\n      REAL(real_8)                                       :: mean\n\n      INTEGER                                            :: i, n\n\n      mean = 0.0_real_8\n      n = SIZE(v, 1)\n      DO i = 1, n\n         mean = mean + v(i)\n      END DO\n      mean = mean/REAL(n, real_8)\n   END FUNCTION mean\n   FUNCTION std(v)\n      REAL(real_8), DIMENSION(:)                         :: v\n      REAL(real_8)                                       :: std\n\n      INTEGER                                            :: i, n\n      REAL(real_8)                                       :: mn\n\n      mn = mean(v)\n      std = 0.0_real_8\n      n = SIZE(v, 1)\n      DO i = 1, n\n         std = std + (v(i) - mn)**2\n      END DO\n      std = SQRT(std)/REAL(n, real_8)\n   END FUNCTION std\n\nEND MODULE dbcsr_performance_multiply\n"
  },
  {
    "path": "tests/dbcsr_tas_unittest.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_tas_unittest\n\n   !! Unit testing for tall-and-skinny matrices\n   USE dbcsr_api, ONLY: dbcsr_finalize_lib, &\n                        dbcsr_init_lib, &\n                        dbcsr_print_statistics\n   USE dbcsr_tas_base, ONLY: dbcsr_tas_destroy, &\n                             dbcsr_tas_info, &\n                             dbcsr_tas_nblkcols_total, &\n                             dbcsr_tas_nblkrows_total, &\n                             dbcsr_tas_create\n   USE dbcsr_tas_types, ONLY: dbcsr_tas_type\n   USE dbcsr_tas_test, ONLY: dbcsr_tas_random_bsizes, &\n                             dbcsr_tas_setup_test_matrix, &\n                             dbcsr_tas_test_mm, &\n                             dbcsr_tas_reset_randmat_seed\n   USE dbcsr_kinds, ONLY: int_8, &\n                          real_8\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_mpiwrap, ONLY: mp_comm_free, &\n                            mp_environ, &\n                            mp_world_finalize, &\n                            mp_world_init, mp_comm_type\n   USE dbcsr_tas_io, ONLY: dbcsr_tas_write_split_info\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   INTEGER(KIND=int_8), PARAMETER :: m = 100, k = 20, n = 10\n   TYPE(dbcsr_tas_type)             :: A, B, C, At, Bt, Ct, A_out, B_out, C_out, At_out, Bt_out, Ct_out\n   INTEGER, DIMENSION(m)          :: bsize_m\n   INTEGER, DIMENSION(n)          :: bsize_n\n   INTEGER, DIMENSION(k)          :: bsize_k\n   REAL(KIND=real_8), PARAMETER   :: sparsity = 0.1\n   INTEGER                        :: numnodes, mynode, io_unit\n   TYPE(mp_comm_type)             :: mp_comm, mp_comm_A, mp_comm_At, mp_comm_B, mp_comm_Bt, mp_comm_C, mp_comm_Ct\n   REAL(KIND=real_8), PARAMETER   :: filter_eps = 1.0E-08\n\n   CALL mp_world_init(mp_comm)\n\n   CALL mp_environ(numnodes, mynode, mp_comm)\n\n   io_unit = -1\n   IF (mynode .EQ. 0) io_unit = default_output_unit\n\n   CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit)\n\n   CALL dbcsr_tas_reset_randmat_seed()\n\n   CALL dbcsr_tas_random_bsizes([13, 8, 5, 25, 12], 2, bsize_m)\n   CALL dbcsr_tas_random_bsizes([3, 78, 33, 12, 3, 15], 1, bsize_n)\n   CALL dbcsr_tas_random_bsizes([9, 64, 23, 2], 3, bsize_k)\n\n   CALL mp_environ(numnodes, mynode, mp_comm)\n\n   CALL dbcsr_tas_setup_test_matrix(A, mp_comm_A, mp_comm, m, k, bsize_m, bsize_k, [5, 1], \"A\", sparsity)\n   CALL dbcsr_tas_setup_test_matrix(At, mp_comm_At, mp_comm, k, m, bsize_k, bsize_m, [3, 8], \"A^t\", sparsity)\n   CALL dbcsr_tas_setup_test_matrix(B, mp_comm_B, mp_comm, n, m, bsize_n, bsize_m, [3, 2], \"B\", sparsity)\n   CALL dbcsr_tas_setup_test_matrix(Bt, mp_comm_Bt, mp_comm, m, n, bsize_m, bsize_n, [1, 3], \"B^t\", sparsity)\n   CALL dbcsr_tas_setup_test_matrix(C, mp_comm_C, mp_comm, k, n, bsize_k, bsize_n, [5, 7], \"C\", sparsity)\n   CALL dbcsr_tas_setup_test_matrix(Ct, mp_comm_Ct, mp_comm, n, k, bsize_n, bsize_k, [1, 1], \"C^t\", sparsity)\n\n   CALL dbcsr_tas_create(A, A_out)\n   CALL dbcsr_tas_create(At, At_out)\n   CALL dbcsr_tas_create(B, B_out)\n   CALL dbcsr_tas_create(Bt, Bt_out)\n   CALL dbcsr_tas_create(C, C_out)\n   CALL dbcsr_tas_create(Ct, Ct_out)\n\n   IF (mynode == 0) WRITE (io_unit, '(A)') \"DBCSR TALL-AND-SKINNY MATRICES\"\n   IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') \"Split info for matrix\", &\n      TRIM(A%matrix%name), dbcsr_tas_nblkrows_total(A), 'X', dbcsr_tas_nblkcols_total(A)\n   CALL dbcsr_tas_write_split_info(dbcsr_tas_info(A), io_unit, name=\"A\")\n   IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') \"Split info for matrix\", &\n      TRIM(At%matrix%name), dbcsr_tas_nblkrows_total(At), 'X', dbcsr_tas_nblkcols_total(At)\n   CALL dbcsr_tas_write_split_info(dbcsr_tas_info(At), io_unit, name=\"At\")\n   IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') \"Split info for matrix\", &\n      TRIM(B%matrix%name), dbcsr_tas_nblkrows_total(B), 'X', dbcsr_tas_nblkcols_total(B)\n   CALL dbcsr_tas_write_split_info(dbcsr_tas_info(B), io_unit, name=\"B\")\n   IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') \"Split info for matrix\", &\n      TRIM(Bt%matrix%name), dbcsr_tas_nblkrows_total(Bt), 'X', dbcsr_tas_nblkcols_total(Bt)\n   CALL dbcsr_tas_write_split_info(dbcsr_tas_info(Bt), io_unit, name=\"Bt\")\n   IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') \"Split info for matrix\", &\n      TRIM(C%matrix%name), dbcsr_tas_nblkrows_total(C), 'X', dbcsr_tas_nblkcols_total(C)\n   CALL dbcsr_tas_write_split_info(dbcsr_tas_info(C), io_unit, name=\"C\")\n   IF (mynode == 0) WRITE (io_unit, '(1X, A, 1X, A, I10, 1X, A, 1X, I10)') \"Split info for matrix\", &\n      TRIM(Ct%matrix%name), dbcsr_tas_nblkrows_total(Ct), 'X', dbcsr_tas_nblkcols_total(Ct)\n   CALL dbcsr_tas_write_split_info(dbcsr_tas_info(Ct), io_unit, name=\"Ct\")\n\n   CALL dbcsr_tas_test_mm('N', 'N', 'N', B, A, Ct_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'N', 'N', Bt, A, Ct_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('N', 'T', 'N', B, At, Ct_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'T', 'N', Bt, At, Ct_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('N', 'N', 'T', B, A, C_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'N', 'T', Bt, A, C_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('N', 'T', 'T', B, At, C_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'T', 'T', Bt, At, C_out, unit_nr=io_unit, filter_eps=filter_eps)\n\n   CALL dbcsr_tas_test_mm('N', 'N', 'N', A, C, Bt_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'N', 'N', At, C, Bt_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('N', 'T', 'N', A, Ct, Bt_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'T', 'N', At, Ct, Bt_out, unit_nr=io_unit, filter_eps=filter_eps)\n\n   CALL dbcsr_tas_test_mm('N', 'N', 'T', A, C, B_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'N', 'T', At, C, B_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('N', 'T', 'T', A, Ct, B_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'T', 'T', At, Ct, B_out, unit_nr=io_unit, filter_eps=filter_eps)\n\n   CALL dbcsr_tas_test_mm('N', 'N', 'N', C, B, At_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'N', 'N', Ct, B, At_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('N', 'T', 'N', C, Bt, At_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'T', 'N', Ct, Bt, At_out, unit_nr=io_unit, filter_eps=filter_eps)\n\n   CALL dbcsr_tas_test_mm('N', 'N', 'T', C, B, A_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'N', 'T', Ct, B, A_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('N', 'T', 'T', C, Bt, A_out, unit_nr=io_unit, filter_eps=filter_eps)\n   CALL dbcsr_tas_test_mm('T', 'T', 'T', Ct, Bt, A_out, unit_nr=io_unit, filter_eps=filter_eps)\n\n   CALL dbcsr_tas_destroy(A)\n   CALL dbcsr_tas_destroy(At)\n   CALL dbcsr_tas_destroy(B)\n   CALL dbcsr_tas_destroy(Bt)\n   CALL dbcsr_tas_destroy(C)\n   CALL dbcsr_tas_destroy(Ct)\n   CALL dbcsr_tas_destroy(A_out)\n   CALL dbcsr_tas_destroy(At_out)\n   CALL dbcsr_tas_destroy(B_out)\n   CALL dbcsr_tas_destroy(Bt_out)\n   CALL dbcsr_tas_destroy(C_out)\n   CALL dbcsr_tas_destroy(Ct_out)\n\n   CALL mp_comm_free(mp_comm_A)\n   CALL mp_comm_free(mp_comm_At)\n   CALL mp_comm_free(mp_comm_B)\n   CALL mp_comm_free(mp_comm_Bt)\n   CALL mp_comm_free(mp_comm_C)\n   CALL mp_comm_free(mp_comm_Ct)\n\n   call dbcsr_print_statistics(.true.)\n   CALL dbcsr_finalize_lib()\n\n   CALL mp_world_finalize()\n\nEND PROGRAM\n"
  },
  {
    "path": "tests/dbcsr_tensor_test.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include <vector>\n#include <string>\n#include <iostream>\n#include <algorithm>\n#include <cstdlib>\n#include <cstdio>\n#include <functional>\n#include <cstdint>\n#include <random>\n#include <mpi.h>\n#include <dbcsr.h>\n#include <tensors/dbcsr_tensor.h>\n#include <complex.h>\n\n//-------------------------------------------------------------------------------------------------!\n// Testing the tensor contraction (13|2)x(54|21)=(3|45)\n// and several other functions, to make sure there are not any segmentation faults\n//-------------------------------------------------------------------------------------------------!\n\nstd::random_device rd;\nstd::mt19937 gen(rd());\nstd::uniform_real_distribution<> dis(-1.0, 1.0);\n\ntemplate<typename T> T get_rand_real() { return dis(gen); }\n\nstd::vector<int> random_dist(int dist_size, int nbins) {\n  std::vector<int> dist(dist_size);\n\n  for (int i = 0; i < dist_size; i++) dist[i] = i % nbins;\n\n  return dist;\n}\n\ntemplate<typename T> void printvec(T& v) {\n  for (auto i : v) {\n    std::cout << i << \" \";\n  }\n  std::cout << '\\n' << std::endl;\n}\n\ntemplate<typename T> void fill_random(void* tensor, std::vector<std::vector<int>> nzblocks, std::function<T()>& rand_func) {\n  int myrank, mpi_size;\n  int dim = nzblocks.size();\n\n  MPI_Comm_rank(MPI_COMM_WORLD, &myrank);\n  MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);\n\n  if (myrank == 0) std::cout << \"Filling Tensor...\" << std::endl;\n  if (myrank == 0) std::cout << \"Dimension: \" << dim << std::endl;\n\n  int nblocks = nzblocks[0].size();\n  std::vector<std::vector<int>> mynzblocks(dim);\n  std::vector<int> idx(dim);\n\n  for (int i = 0; i != nblocks; ++i) {\n    // make index out of nzblocks\n    for (int j = 0; j != dim; ++j) idx[j] = nzblocks[j][i];\n\n    int proc = -1;\n\n    c_dbcsr_t_get_stored_coordinates(tensor, idx.data(), &proc);\n\n    if (proc == myrank) {\n      for (int j = 0; j != dim; ++j) mynzblocks[j].push_back(idx[j]);\n    }\n  }\n\n  std::vector<int*> dataptr(4, nullptr);\n\n  for (int i = 0; i != dim; ++i) {\n    dataptr[i] = mynzblocks[i].size() == 0 ? nullptr : &mynzblocks[i][0];\n  }\n\n  if (myrank == 0) std::cout << \"Reserving blocks...\" << std::endl;\n\n  if (mynzblocks[0].size() != 0)\n    c_dbcsr_t_reserve_blocks_index(tensor, mynzblocks[0].size(), dataptr[0], dataptr[1], dataptr[2], dataptr[3]);\n\n  auto fill_rand = [&](std::vector<T>& blk) {\n    for (T& e : blk) {\n      e = rand_func();\n      //std::cout << e << std::endl;\n    }\n  };\n\n  void* iter = nullptr;\n\n  c_dbcsr_t_iterator_start(&iter, tensor);\n\n  std::vector<int> loc_idx(dim);\n  std::vector<int> blk_sizes(dim);\n  std::vector<T> block(1);\n\n  int blk = 0;\n  int blk_proc = 0;\n\n  while (c_dbcsr_t_iterator_blocks_left(iter)) {\n    c_dbcsr_t_iterator_next_block(iter, loc_idx.data(), &blk, &blk_proc, blk_sizes.data(), nullptr);\n\n    int tot = 1;\n    for (int i = 0; i != dim; ++i) {\n      tot *= blk_sizes[i];\n    }\n\n    block.resize(tot);\n\n    fill_rand(block);\n\n    c_dbcsr_t_put_block(tensor, loc_idx.data(), blk_sizes.data(), block.data(), nullptr, nullptr);\n  }\n\n  c_dbcsr_t_iterator_stop(&iter);\n\n  c_dbcsr_t_finalize(tensor);\n}\n\n\nint main(int argc, char* argv[]) {\n  MPI_Init(&argc, &argv);\n\n  int mpi_size, mpi_rank;\n  MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);\n  MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);\n\n  c_dbcsr_init_lib(MPI_COMM_WORLD, nullptr);\n\n  void* pgrid_3d = nullptr;\n  void* pgrid_4d = nullptr;\n\n  std::vector<int> dims4(4);\n  std::vector<int> dims3(3);\n\n  MPI_Fint fcomm = MPI_Comm_c2f(MPI_COMM_WORLD);\n\n  c_dbcsr_t_pgrid_create(&fcomm, dims3.data(), dims3.size(), &pgrid_3d, nullptr);\n\n  c_dbcsr_t_pgrid_create(&fcomm, dims4.data(), dims4.size(), &pgrid_4d, nullptr);\n\n  if (mpi_rank == 0) {\n    std::cout << \"pgrid3-dimensions:\" << std::endl;\n    printvec(dims3);\n\n    std::cout << \"pgrid4-dimensions:\" << std::endl;\n    printvec(dims4);\n  }\n\n\n  // block sizes\n  std::vector<int> blk1, blk2, blk3, blk4, blk5;\n  // blk indices of non-zero blocks\n  std::vector<int> nz11, nz12, nz13, nz21, nz22, nz24, nz25, nz33, nz34, nz35;\n\n  blk1 = {3, 9, 12, 1};\n  blk2 = {4, 2, 3, 1, 9, 2, 32, 10, 5, 8, 7};\n  blk3 = {7, 3, 8, 7, 9, 5, 10, 23, 2};\n  blk4 = {8, 1, 4, 13, 6};\n  blk5 = {4, 2, 22};\n\n  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};\n  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};\n  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};\n\n  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};\n  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};\n  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};\n  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};\n\n  nz33 = {1, 3, 4, 4, 4, 5, 5, 7};\n  nz34 = {2, 1, 0, 0, 2, 1, 3, 4};\n  nz35 = {2, 1, 0, 1, 2, 1, 0, 0};\n\n  // (13|2)x(54|21)=(3|45)\n  // distribute blocks\n  std::vector<int> dist11 = random_dist(blk1.size(), dims3[0]);\n  std::vector<int> dist12 = random_dist(blk2.size(), dims3[1]);\n  std::vector<int> dist13 = random_dist(blk3.size(), dims3[2]);\n\n  std::vector<int> dist21 = random_dist(blk1.size(), dims4[0]);\n  std::vector<int> dist22 = random_dist(blk2.size(), dims4[1]);\n  std::vector<int> dist23 = random_dist(blk4.size(), dims4[2]);\n  std::vector<int> dist24 = random_dist(blk5.size(), dims4[3]);\n\n  std::vector<int> dist31 = random_dist(blk3.size(), dims3[0]);\n  std::vector<int> dist32 = random_dist(blk4.size(), dims3[1]);\n  std::vector<int> dist33 = random_dist(blk5.size(), dims3[2]);\n\n\n  if (mpi_rank == 0) {\n    std::cout << \"dist11:\" << std::endl;\n    printvec(dist11);\n\n    std::cout << \"dist12:\" << std::endl;\n    printvec(dist12);\n\n    std::cout << \"dist13:\" << std::endl;\n    printvec(dist13);\n\n    std::cout << \"dist21:\" << std::endl;\n    printvec(dist21);\n\n    std::cout << \"dist22:\" << std::endl;\n    printvec(dist22);\n\n    std::cout << \"dist23:\" << std::endl;\n    printvec(dist23);\n\n    std::cout << \"dist24:\" << std::endl;\n    printvec(dist24);\n\n    std::cout << \"dist31:\" << std::endl;\n    printvec(dist31);\n\n    std::cout << \"dist32:\" << std::endl;\n    printvec(dist32);\n\n    std::cout << \"dist33:\" << std::endl;\n    printvec(dist33);\n  }\n\n  void* dist1 = nullptr;\n  void* dist2 = nullptr;\n  void* dist3 = nullptr;\n\n  // (13|2)x(54|21)=(3|45)\n  std::vector<int> map11, map12, map21, map22, map31, map32;\n\n  map11 = {0, 2};\n  map12 = {1};\n  map21 = {3, 2};\n  map22 = {1, 0};\n  map31 = {0};\n  map32 = {1, 2};\n\n  if (mpi_rank == 0) std::cout << \"Creating dist objects...\" << '\\n' << std::endl;\n\n  // create distribution objects\n  c_dbcsr_t_distribution_new(\n    &dist1, pgrid_3d, dist11.data(), dist11.size(), dist12.data(), dist12.size(), dist13.data(), dist13.size(), nullptr, 0);\n\n  c_dbcsr_t_distribution_new(&dist2, pgrid_4d, dist21.data(), dist21.size(), dist22.data(), dist22.size(), dist23.data(),\n    dist23.size(), dist24.data(), dist24.size());\n\n  c_dbcsr_t_distribution_new(\n    &dist3, pgrid_3d, dist31.data(), dist31.size(), dist32.data(), dist32.size(), dist33.data(), dist33.size(), nullptr, 0);\n\n  // create tensors\n  // (13|2)x(54|21)=(3|45)\n\n  void* tensor1 = nullptr;\n  void* tensor2 = nullptr;\n  void* tensor3 = nullptr;\n\n  if (mpi_rank == 0) std::cout << \"Creating tensors...\" << std::endl;\n\n  c_dbcsr_t_create_new(&tensor1, \"(13|2)\", dist1, map11.data(), map11.size(), map12.data(), map12.size(), nullptr, blk1.data(),\n    blk1.size(), blk2.data(), blk2.size(), blk3.data(), blk3.size(), nullptr, 0);\n\n  c_dbcsr_t_create_new(&tensor2, \"(54|21)\", dist2, map21.data(), map21.size(), map22.data(), map22.size(), nullptr, blk1.data(),\n    blk1.size(), blk2.data(), blk2.size(), blk4.data(), blk4.size(), blk5.data(), blk5.size());\n\n  c_dbcsr_t_create_new(&tensor3, \"(3|45)\", dist3, map31.data(), map31.size(), map32.data(), map32.size(), nullptr, blk3.data(),\n    blk3.size(), blk4.data(), blk4.size(), blk5.data(), blk5.size(), nullptr, 0);\n\n  // fill the tensors\n\n  std::function<double()> drand = get_rand_real<double>;\n\n  if (mpi_rank == 0) std::cout << \"Tensor 1\" << '\\n' << std::endl;\n  fill_random<double>(tensor1, {nz11, nz12, nz13}, drand);\n  if (mpi_rank == 0) std::cout << \"Tensor 2\" << '\\n' << std::endl;\n  fill_random<double>(tensor2, {nz21, nz22, nz24, nz25}, drand);\n  if (mpi_rank == 0) std::cout << \"Tensor 3\" << '\\n' << std::endl;\n  fill_random<double>(tensor3, {nz33, nz34, nz35}, drand);\n\n  // contracting\n\n  // (13|2)x(54|21)=(3|45)\n\n  if (mpi_rank == 0) std::cout << \"Contracting...\" << std::endl;\n\n  // cn : indices to be contracted\n  // noncn : indices not to be contracted\n  // mapn : how nonc indices map to tensor 3\n  std::vector<int> c1, nonc1, c2, nonc2, map1, map2;\n  c1 = {0, 1};\n  nonc1 = {2};\n  c2 = {0, 1};\n  nonc2 = {2, 3};\n  map1 = {0};\n  map2 = {1, 2};\n\n\n  int unit_nr = -1;\n  if (mpi_rank == 0) unit_nr = 6;\n  bool log_verbose = true;\n\n  // tensor_3(map_1, map_2) := 0.2 * tensor_1(notcontract_1, contract_1)\n  //                                 * tensor_2(contract_2, notcontract_2)\n  //                                 + 0.8 * tensor_3(map_1, map_2)\n\n  c_dbcsr_t_contract_r_dp(0.2, tensor1, tensor2, 0.8, tensor3, c1.data(), c1.size(), nonc1.data(), nonc1.size(), c2.data(),\n    c2.size(), nonc2.data(), nonc2.size(), map1.data(), map1.size(), map2.data(), map2.size(), nullptr, nullptr, nullptr, nullptr,\n    nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &unit_nr, &log_verbose);\n\n  // ====================================================\n  // ====== TESTING OTHER FUNCTIONS =============\n  // ====================================================\n\n  // ======== GET_INFO ===========\n\n  std::vector<int> cnblkstot(3), nfulltot(3), cnblksloc(3), nfullloc(3), pdims(3), ploc(3);\n\n  char* name = nullptr;\n  int data_type = 0;\n\n  std::vector<int> nblksloc(3);\n  std::vector<int> nblkstot(3);\n\n  for (int i = 0; i != 3; ++i) {\n    nblksloc[i] = c_dbcsr_t_nblks_local(tensor1, i);\n    nblkstot[i] = c_dbcsr_t_nblks_total(tensor1, i);\n  }\n\n  std::vector<std::vector<int>> c_blks_local(3);\n  std::vector<std::vector<int>> c_proc_dist(3);\n  std::vector<std::vector<int>> c_blk_size(3);\n  std::vector<std::vector<int>> c_blk_offset(3);\n  for (int i = 0; i != 3; ++i) {\n    c_blks_local[i].resize(nblksloc[i]);\n    c_proc_dist[i].resize(nblkstot[i]);\n    c_blk_size[i].resize(nblkstot[i]);\n    c_blk_offset[i].resize(nblkstot[i]);\n  }\n\n  c_dbcsr_t_get_info(tensor1, 3, cnblkstot.data(), nfulltot.data(), cnblksloc.data(), nfullloc.data(), pdims.data(), ploc.data(),\n    nblksloc[0], nblksloc[1], nblksloc[2], 0, nblkstot[0], nblkstot[1], nblkstot[2], 0, c_blks_local[0].data(),\n    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(),\n    nullptr, c_blk_size[0].data(), c_blk_size[1].data(), c_blk_size[2].data(), nullptr, c_blk_offset[0].data(),\n    c_blk_offset[1].data(), c_blk_offset[2].data(), nullptr, nullptr, &name, &data_type);\n\n  std::string tname(name);\n\n  if (mpi_rank == 0) {\n    std::cout << \"Testing get_info for Tensor 1...\" << std::endl;\n    std::cout << \"Name: \" << tname << std::endl;\n    std::cout << \"Data_type: \" << data_type << std::endl;\n  }\n\n  for (int rank = 0; rank != mpi_size; ++rank) {\n    if (rank == mpi_rank) {\n      std::cout << \"======= Process: \" << rank << \" ========\" << std::endl;\n\n      std::cout << \"Total number of blocks:\" << std::endl;\n      printvec(cnblkstot);\n\n      std::cout << \"Total number of elements:\" << std::endl;\n      printvec(nfulltot);\n\n      std::cout << \"Total number of local blocks:\" << std::endl;\n      printvec(cnblksloc);\n\n      std::cout << \"Total number of local elements:\" << std::endl;\n      printvec(nfullloc);\n\n      std::cout << \"Pgrid dimensions:\" << std::endl;\n      printvec(pdims);\n\n      std::cout << \"Process coordinates:\" << std::endl;\n      printvec(ploc);\n\n      std::cout << \"blks_local:\" << std::endl;\n      for (int i = 0; i != 3; ++i) {\n        printvec(c_blks_local[i]);\n      }\n\n      std::cout << \"proc_dist:\" << std::endl;\n      for (int i = 0; i != 3; ++i) {\n        printvec(c_proc_dist[i]);\n      }\n\n      std::cout << \"blk_size:\" << std::endl;\n      for (int i = 0; i != 3; ++i) {\n        printvec(c_blk_size[i]);\n      }\n\n      std::cout << \"blk_offset:\" << std::endl;\n      for (int i = 0; i != 3; ++i) {\n        printvec(c_blk_offset[i]);\n      }\n    }\n\n    MPI_Barrier(MPI_COMM_WORLD);\n  }\n\n  // ================ GET_MAPPING_INFO ======================\n\n  int ndim_nd = 0, ndim1_2d = 0, ndim2_2d = 0;\n  std::vector<long long int> dims_2d_i8(2);\n  std::vector<int> dims_2d(2);\n\n  int nd_size = 3;\n  int nd_row_size = c_dbcsr_t_ndims_matrix_row(tensor1);\n  int nd_col_size = c_dbcsr_t_ndims_matrix_column(tensor1);\n\n  std::vector<int> dims_nd(nd_size), dims1_2d(nd_row_size), dims2_2d(nd_col_size), map1_2d(nd_row_size), map2_2d(nd_col_size),\n    map_nd(nd_size);\n\n  int base;\n  bool col_major;\n\n  c_dbcsr_t_get_mapping_info(tensor1, 3, nd_row_size, nd_col_size, &ndim_nd, &ndim1_2d, &ndim2_2d, dims_2d_i8.data(),\n    dims_2d.data(), dims_nd.data(), dims1_2d.data(), dims2_2d.data(), map1_2d.data(), map2_2d.data(), map_nd.data(), &base,\n    &col_major);\n\n  if (mpi_rank == 0) {\n    std::cout << \"Testing get_mapping_info for Tensor 1...\" << std::endl;\n\n    std::cout << \"ndim_nd = \" << ndim_nd << std::endl;\n    std::cout << \"ndim1_2d = \" << ndim1_2d << std::endl;\n    std::cout << \"ndim2_2d = \" << ndim2_2d << std::endl;\n\n    std::cout << \"dims_2d_i8: \";\n    printvec(dims_2d_i8);\n\n    std::cout << \"dims_2d: \";\n    printvec(dims_2d);\n\n    std::cout << \"dims_nd: \" << std::endl;\n    printvec(dims_nd);\n\n    std::cout << \"dims1_2d: \" << std::endl;\n    printvec(dims1_2d);\n\n    std::cout << \"dims2_2d: \" << std::endl;\n    printvec(dims2_2d);\n\n    std::cout << \"map1_2d: \" << std::endl;\n    printvec(map1_2d);\n\n    std::cout << \"map2_2d: \" << std::endl;\n    printvec(map2_2d);\n\n    std::cout << \"map_nd: \" << std::endl;\n    printvec(map_nd);\n\n    std::cout << \"Base: \" << base << std::endl;\n    std::cout << \"col_major \" << col_major << std::endl;\n  }\n\n  // ======== TESTING contract_index ================\n\n  long long int rsize = c_dbcsr_t_max_nblks_local(tensor3);\n  std::vector<int> result_index(rsize * 3);\n  int nblks_loc = 0;\n\n  if (mpi_rank == 0)\n    std::cout << \"\\n\"\n              << \"Testing c_dbcsr_t_contract_index...\\n\"\n              << std::endl;\n  c_dbcsr_t_contract_index_r_dp(0.2, tensor1, tensor2, 0.8, tensor3, c1.data(), c1.size(), nonc1.data(), nonc1.size(), c2.data(),\n    c2.size(), nonc2.data(), nonc2.size(), map1.data(), map1.size(), map2.data(), map2.size(), nullptr, nullptr, nullptr, nullptr,\n    &nblks_loc, result_index.data(), rsize, 3);\n\n  for (int ip = 0; ip != mpi_size; ++ip) {\n    if (ip == mpi_rank) {\n      std::cout << \"Result Indices on Rank \" << ip << std::endl;\n\n      for (int i = 0; i != nblks_loc; ++i) {\n        for (int n = 0; n != 3; ++n) {\n          std::cout << result_index[i + n * rsize] << \" \";\n        }\n        std::cout << std::endl;\n      }\n    }\n\n    MPI_Barrier(MPI_COMM_WORLD);\n  }\n\n  c_dbcsr_t_destroy(&tensor1);\n  c_dbcsr_t_destroy(&tensor2);\n  c_dbcsr_t_destroy(&tensor3);\n\n  c_dbcsr_t_distribution_destroy(&dist1);\n  c_dbcsr_t_distribution_destroy(&dist2);\n  c_dbcsr_t_distribution_destroy(&dist3);\n\n  c_dbcsr_t_pgrid_destroy(&pgrid_3d, nullptr);\n  c_dbcsr_t_pgrid_destroy(&pgrid_4d, nullptr);\n\n  c_free_string(&name);\n\n  c_dbcsr_finalize_lib();\n\n  MPI_Finalize();\n\n  return 0;\n}\n"
  },
  {
    "path": "tests/dbcsr_tensor_unittest.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_tensor_unittest\n   !! DBCSR tensor unit test\n   USE dbcsr_api, ONLY: dbcsr_finalize_lib, &\n                        dbcsr_init_lib, &\n                        dbcsr_type_real_8, &\n                        dbcsr_print_statistics\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_mpiwrap, ONLY: mp_cart_create, &\n                            mp_comm_free, &\n                            mp_environ, &\n                            mp_world_finalize, &\n                            mp_world_init, mp_comm_type\n   USE dbcsr_tensor_test, ONLY: dbcsr_t_contract_test, &\n                                dbcsr_t_setup_test_tensor, &\n                                dbcsr_t_test_formats, &\n                                dbcsr_t_reset_randmat_seed\n   USE dbcsr_tensor_types, ONLY: &\n      dbcsr_t_create, dbcsr_t_destroy, dbcsr_t_distribution_destroy, dbcsr_t_distribution_new, &\n      dbcsr_t_distribution_type, dbcsr_t_nd_mp_comm, dbcsr_t_type, dbcsr_t_pgrid_type, &\n      dbcsr_t_pgrid_create, dbcsr_t_get_info, dbcsr_t_pgrid_destroy, ndims_tensor, dbcsr_t_default_distvec\n   USE dbcsr_data_methods, ONLY: dbcsr_scalar\n   USE dbcsr_kinds, ONLY: real_8\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   INTEGER                            :: numnodes, mynode, io_unit\n   INTEGER                            :: ndims, nblks_alloc, nblks_1, nblks_2, nblks_3, nblks_4, nblks_5, &\n                                         nblks_alloc_1, nblks_alloc_2, nblks_alloc_3, nblks_alloc_4, nblks_alloc_5\n   INTEGER, DIMENSION(:), ALLOCATABLE :: size_1, size_2, size_3, size_4, size_5, dist1_1, dist1_2, dist1_3, &\n                                         dist2_1, dist2_2, dist3_1, dist3_2, dist3_3, dist4_1, dist4_2, &\n                                         dist4_3, dist4_4, dist5_1, dist5_2, dist5_3\n   INTEGER, DIMENSION(:), ALLOCATABLE :: blk_ind_1, blk_ind_2, blk_ind_3, blk_ind_4, blk_ind_1_1, blk_ind_2_1, &\n                                         blk_ind_3_1, blk_ind_3_2, blk_ind_4_2, blk_ind_1_3, blk_ind_2_3, &\n                                         blk_ind_4_3, blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4, &\n                                         blk_ind_3_5, blk_ind_4_5, blk_ind_5_5\n   INTEGER, DIMENSION(:), ALLOCATABLE :: map11, map31, map12, map32, map21, map22\n\n   LOGICAL, PARAMETER                 :: verbose = .FALSE.\n   TYPE(dbcsr_t_distribution_type)         :: dist1, dist2, dist3\n   TYPE(dbcsr_t_type)            :: tensor_A, tensor_B, tensor_C\n\n   LOGICAL, PARAMETER                 :: test_format = .TRUE.\n   LOGICAL, PARAMETER                 :: test_contraction = .TRUE.\n   INTEGER, DIMENSION(4)              :: pdims_4d\n   INTEGER, DIMENSION(3)              :: pdims_3d\n   INTEGER, DIMENSION(2)              :: pdims_2d\n   TYPE(dbcsr_t_pgrid_type)           :: pgrid_2d, pgrid_3d, pgrid_4d\n   INTEGER, DIMENSION(:), ALLOCATABLE :: bounds_t\n   INTEGER, DIMENSION(:, :), ALLOCATABLE :: bounds, bounds_1, bounds_2\n   TYPE(mp_comm_type)                 :: mp_comm\n\n   CALL mp_world_init(mp_comm)\n   CALL mp_environ(numnodes, mynode, mp_comm)\n\n   ! set standard output parameters\n   io_unit = -1\n   IF (mynode .EQ. 0) io_unit = default_output_unit\n\n   ! initialize libdbcsr\n   CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit)\n\n   CALL dbcsr_t_reset_randmat_seed()\n\n   ! Process grid\n\n   IF (test_format) THEN\n!--------------------------------------------------------------------------------------------------!\n! Test 1: Testing matrix representations of tensor rank 2                                                  !\n!--------------------------------------------------------------------------------------------------!\n      ndims = 2\n\n      ! Number of blocks in each dimension\n      nblks_1 = 14\n      nblks_2 = 21\n\n      ! Block sizes in each dimension\n      ALLOCATE (size_1(nblks_1), size_2(nblks_2))\n\n      size_1(:) = [3, 5, 1, 23, 2, 3, 1, 6, 3, 8, 2, 3, 5, 1]\n      size_2(:) = [4, 2, 5, 3, 1, 5, 13, 5, 2, 4, 5, 6, 7, 2, 3, 1, 2, 6, 9, 12, 21]\n\n      ! Number of non-zero blocks\n      nblks_alloc = 12\n      ALLOCATE (blk_ind_1(nblks_alloc), blk_ind_2(nblks_alloc))\n\n      ! Indices of non-zero blocks (s.t. index of ith block is [blk_ind_1(i), blk_ind_2(i), ...])\n      blk_ind_1(:) = [1, 1,  1,  2, 4,  4,  7,  10, 10, 10, 10, 13] !&\n      blk_ind_2(:) = [1, 3, 11, 15, 4, 17, 21,   6,  9, 13, 19,  7] !&\n\n      ! Test tensor formats\n      CALL dbcsr_t_test_formats(ndims, mp_comm, io_unit, verbose, &\n                                blk_size_1=size_1, blk_size_2=size_2, &\n                                blk_ind_1=blk_ind_1, blk_ind_2=blk_ind_2)\n\n      DEALLOCATE (size_1, size_2)\n      DEALLOCATE (blk_ind_1, blk_ind_2)\n\n!--------------------------------------------------------------------------------------------------!\n! Test 2: Testing matrix representations of tensor rank 3                                          !\n!--------------------------------------------------------------------------------------------------!\n      ndims = 3\n\n      ! Number of blocks in each dimension\n      nblks_1 = 4\n      nblks_2 = 6\n      nblks_3 = 3\n\n      ! Block sizes in each dimension\n      ALLOCATE (size_1(nblks_1), size_2(nblks_2), size_3(nblks_3))\n\n      size_1(:) = [3, 1, 5, 2]\n      size_2(:) = [1, 2, 5, 3, 2, 4]\n      size_3(:) = [4, 2, 10]\n\n      ! Number of non-zero blocks\n      nblks_alloc = 6\n      ALLOCATE (blk_ind_1(nblks_alloc), blk_ind_2(nblks_alloc), blk_ind_3(nblks_alloc))\n\n      ! Indices of non-zero blocks (s.t. index of ith block is [blk_ind_1(i), blk_ind_2(i), ...])\n      blk_ind_1(:) = [1, 1, 1, 2, 2, 2] !&\n      blk_ind_2(:) = [2, 2, 4, 1, 1, 2] !&\n      blk_ind_3(:) = [1, 3, 3, 2, 3, 2] !&\n\n      ! Test tensor formats\n      CALL dbcsr_t_test_formats(ndims, mp_comm, io_unit, verbose, &\n                                blk_size_1=size_1, blk_size_2=size_2, blk_size_3=size_3, &\n                                blk_ind_1=blk_ind_1, blk_ind_2=blk_ind_2, blk_ind_3=blk_ind_3)\n\n      DEALLOCATE (size_1, size_2, size_3)\n      DEALLOCATE (blk_ind_1, blk_ind_2, blk_ind_3)\n\n!--------------------------------------------------------------------------------------------------!\n! Test 3: Testing matrix representations of tensor rank 4                                          !\n!--------------------------------------------------------------------------------------------------!\n      ndims = 4\n\n      ! Number of blocks in each dimension\n      nblks_1 = 2\n      nblks_2 = 13\n      nblks_3 = 7\n      nblks_4 = 3\n\n      ! Block sizes in each dimension\n      ALLOCATE (size_1(nblks_1), size_2(nblks_2), size_3(nblks_3), size_4(nblks_4))\n\n      size_1(:) = [5, 9]\n      size_2(:) = [6, 2, 5, 12, 3, 1, 7, 2, 5, 17, 9, 3, 4]\n      size_3(:) = [2, 7, 3, 8, 5, 15, 1]\n      size_4(:) = [12, 5, 3]\n\n      ! Number of non-zero blocks\n      nblks_alloc = 19\n      ALLOCATE (blk_ind_1(nblks_alloc), blk_ind_2(nblks_alloc), blk_ind_3(nblks_alloc), blk_ind_4(nblks_alloc))\n\n      ! Indices of non-zero blocks (s.t. index of ith block is [blk_ind_1(i), blk_ind_2(i), ...])\n      blk_ind_1(:) = [1, 1, 1, 1, 1, 1,  1,  1,  1,  1,  1, 2, 2, 2, 2, 2, 2, 2,  2] !&\n      blk_ind_2(:) = [2, 2, 3, 4, 7, 7, 10, 11, 11, 12, 12, 1, 1, 3, 5, 6, 6, 9, 12] !&\n      blk_ind_3(:) = [1, 4, 6, 3, 1, 4,  2,  5,  7,  3,  3, 1, 4, 7, 6, 4, 5, 2,  3] !&\n      blk_ind_4(:) = [3, 2, 3, 1, 1, 2,  1,  3,  2,  2,  3, 1, 3, 2, 1, 1, 3, 2,  2] !&\n\n      ! Test tensor formats\n      CALL dbcsr_t_test_formats(ndims, mp_comm, io_unit, verbose, &\n                                blk_size_1=size_1, blk_size_2=size_2, blk_size_3=size_3, blk_size_4=size_4, &\n                                blk_ind_1=blk_ind_1, blk_ind_2=blk_ind_2, blk_ind_3=blk_ind_3, blk_ind_4=blk_ind_4)\n\n      DEALLOCATE (size_1, size_2, size_3, size_4)\n      DEALLOCATE (blk_ind_1, blk_ind_2, blk_ind_3, blk_ind_4)\n\n   END IF\n   IF (test_contraction) THEN\n\n!--------------------------------------------------------------------------------------------------!\n! Preparations for tensor contraction tests                                                        !\n!--------------------------------------------------------------------------------------------------!\n\n      nblks_1 = 4\n      nblks_2 = 11\n      nblks_3 = 9\n      nblks_4 = 5\n      nblks_5 = 3\n\n      ! Block sizes in each dimension\n      ALLOCATE (size_1(nblks_1), size_2(nblks_2), size_3(nblks_3), size_4(nblks_4), size_5(nblks_5))\n\n      size_1(:) = [3, 9, 12, 1]\n      size_2(:) = [4, 2, 3, 1, 9, 2, 32, 10, 5, 8, 7]\n      size_3(:) = [7, 3, 8, 7, 9, 5, 10, 23, 2]\n      size_4(:) = [8, 1, 4, 13, 6]\n      size_5(:) = [4, 2, 22]\n\n      nblks_alloc_1 = 32\n      ALLOCATE (blk_ind_1_1(nblks_alloc_1), blk_ind_2_1(nblks_alloc_1), blk_ind_3_1(nblks_alloc_1))\n\n      blk_ind_1_1(:) = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, & !&\n                        1, 2, 2, 2, 2, 2, 2, 2, 3, 3, & !&\n                        3, 3, 3, 3, 3, 3, 3, 4, 4, 4, & !&\n                        4, 4] !&\n\n      blk_ind_2_1(:) = [ 3, 5, 5, 5, 6,  6,  7,  8, 10, 11, & !&\n                        11, 1, 1, 4, 7,  7,  9, 10 , 2,  2, & !&\n                         5, 6, 8, 8, 9, 11, 11,  2 , 4,  5, & !&\n                         5, 8] !&\n\n      blk_ind_3_1(:) = [7, 3, 5, 9, 6, 8, 2, 8, 3, 2, & !&\n                        3, 1, 4, 6, 2, 7, 5, 8, 3, 7, & !&\n                        1, 4, 3, 7, 8, 5, 8, 9, 6, 1, & !&\n                        2, 7] !&\n\n      nblks_alloc_2 = 12\n      ALLOCATE (blk_ind_3_2(nblks_alloc_2), blk_ind_4_2(nblks_alloc_2))\n\n      blk_ind_3_2(:) = [1, 1, 2, 2, 2, 4, 4, 5, 5, 6, & !&\n                        8, 8] !&\n      blk_ind_4_2(:) = [2, 3, 2, 4, 5, 3, 5, 1, 3, 3, & !&\n                        1, 4] !&\n\n      nblks_alloc_3 = 5\n      ALLOCATE (blk_ind_1_3(nblks_alloc_3), blk_ind_2_3(nblks_alloc_3), blk_ind_4_3(nblks_alloc_3))\n\n      blk_ind_1_3(:) = [1, 1, 2, 4, 4]\n      blk_ind_2_3(:) = [2, 6, 6, 7, 9]\n      blk_ind_4_3(:) = [1, 3, 4, 4, 5]\n\n      nblks_alloc_4 = 36\n      ALLOCATE (blk_ind_1_4(nblks_alloc_4))\n      ALLOCATE (blk_ind_2_4(nblks_alloc_4))\n      ALLOCATE (blk_ind_4_4(nblks_alloc_4))\n      ALLOCATE (blk_ind_5_4(nblks_alloc_4))\n\n      blk_ind_1_4(:) = [ 1, 1, 1, 1, 1, 2, 2, 2,  2,  2, & !&\n                         2, 2, 2, 2, 2, 2, 2, 2,  2,  2, & !&\n                         3, 3, 3, 3, 3, 3, 3, 3,  3,  3, & !&\n                         4, 4, 4, 4, 4, 4] !&\n\n      blk_ind_2_4(:) = [ 1, 3, 4, 6, 10,  2, 2, 4,  5,  5, & !&\n                         6, 6, 6, 7,  7,  9, 9, 9, 10, 11, & !&\n                         1, 3, 3, 4,  5,  6, 8, 9, 11, 11, & !&\n                         1, 3, 4, 6, 10, 11] !&\n\n      blk_ind_4_4(:) = [ 3, 5, 2, 3,  2,  3, 5, 1,  1,  4, & !&\n                         2, 3, 4, 1,  4,  3, 4, 4,  2,  1, & !&\n                         3, 1, 1, 3,  4,  3, 4, 2,  2,  3, & !&\n                         1, 1, 3, 2,  5,  5] !&\n\n      blk_ind_5_4(:) = [ 1, 3, 2, 1,  1,  2, 3,  1,  3, 1, & !&\n                         2, 3, 2, 1,  3,  2, 3,  2,  1, 2, & !&\n                         3, 1, 2, 3,  2,  2, 2,  3,  1, 2, & !&\n                         1, 3, 2, 1,  3,  2] !&\n\n      nblks_alloc_5 = 8\n\n      ALLOCATE (blk_ind_3_5(nblks_alloc_5), blk_ind_4_5(nblks_alloc_5), blk_ind_5_5(nblks_alloc_5))\n\n      blk_ind_3_5(:) = [2, 4, 5, 5, 5, 6, 6, 8]\n      blk_ind_4_5(:) = [3, 2, 1, 1, 3, 2, 4, 5]\n      blk_ind_5_5(:) = [3, 2, 1, 2, 3, 2, 1, 1]\n\n      pdims_4d(:) = 0; pdims_3d(:) = 0; pdims_2d(:) = 0\n      CALL dbcsr_t_pgrid_create(mp_comm, pdims_4d, pgrid_4d)\n      CALL dbcsr_t_pgrid_create(mp_comm, pdims_3d, pgrid_3d)\n      CALL dbcsr_t_pgrid_create(mp_comm, pdims_2d, pgrid_2d)\n\n      ALLOCATE (dist1_1(nblks_1))\n      CALL dbcsr_t_default_distvec(nblks_1, pdims_3d(1), size_1, dist1_1)\n      ALLOCATE (dist1_2(nblks_2))\n      CALL dbcsr_t_default_distvec(nblks_2, pdims_3d(2), size_2, dist1_2)\n      ALLOCATE (dist1_3(nblks_3))\n      CALL dbcsr_t_default_distvec(nblks_3, pdims_3d(3), size_3, dist1_3)\n\n      ALLOCATE (dist2_1(nblks_3))\n      CALL dbcsr_t_default_distvec(nblks_3, pdims_2d(1), size_3, dist2_1)\n      ALLOCATE (dist2_2(nblks_4))\n      CALL dbcsr_t_default_distvec(nblks_4, pdims_2d(2), size_4, dist2_2)\n\n      ALLOCATE (dist3_1(nblks_1))\n      CALL dbcsr_t_default_distvec(nblks_1, pdims_3d(1), size_1, dist3_1)\n      ALLOCATE (dist3_2(nblks_2))\n      CALL dbcsr_t_default_distvec(nblks_2, pdims_3d(2), size_2, dist3_2)\n      ALLOCATE (dist3_3(nblks_4))\n      CALL dbcsr_t_default_distvec(nblks_4, pdims_3d(3), size_4, dist3_3)\n\n      ALLOCATE (dist4_1(nblks_1))\n      CALL dbcsr_t_default_distvec(nblks_1, pdims_4d(1), size_1, dist4_1)\n      ALLOCATE (dist4_2(nblks_2))\n      CALL dbcsr_t_default_distvec(nblks_2, pdims_4d(2), size_2, dist4_2)\n      ALLOCATE (dist4_3(nblks_4))\n      CALL dbcsr_t_default_distvec(nblks_4, pdims_4d(3), size_4, dist4_3)\n      ALLOCATE (dist4_4(nblks_5))\n      CALL dbcsr_t_default_distvec(nblks_5, pdims_4d(4), size_5, dist4_4)\n\n      ALLOCATE (dist5_1(nblks_3))\n      CALL dbcsr_t_default_distvec(nblks_3, pdims_3d(1), size_3, dist5_1)\n      ALLOCATE (dist5_2(nblks_4))\n      CALL dbcsr_t_default_distvec(nblks_4, pdims_3d(2), size_4, dist5_2)\n      ALLOCATE (dist5_3(nblks_5))\n      CALL dbcsr_t_default_distvec(nblks_5, pdims_3d(3), size_5, dist5_3)\n\n!--------------------------------------------------------------------------------------------------!\n! Test 4: Testing tensor contraction (12|3)x(3|4)=(12|4)                                           !\n!--------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(2), map12(1), map21(1), map22(1), map31(2), map32(1))\n      map11(:) = [1, 2]\n      map12(:) = [3]\n      map21(:) = [1]\n      map22(:) = [2]\n      map31(:) = [1, 2]\n      map32(:) = [3]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_2d, dist2_1, dist2_2)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist3_1, dist3_2, dist3_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(12|3)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(3|4)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_3, size_4)\n      CALL dbcsr_t_create(tensor_C, \"(12|4)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_1, size_2, size_4)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_3_2, blk_ind_4_2)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_1_3, blk_ind_2_3, blk_ind_4_3)\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.9_real_8), tensor_A, tensor_B, dbcsr_scalar(0.1_real_8), tensor_C, &\n                                 [3], [2, 1], &\n                                 [1], [2], &\n                                 [2, 1], [3], &\n                                 io_unit, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!--------------------------------------------------------------------------------------------------!\n! Test 5: Testing tensor contraction (2|31)x(4|3)=(24|1)                                           !\n!--------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(1), map12(2), map21(1), map22(1), map31(2), map32(1))\n      map11(:) = [2]\n      map12(:) = [3, 1]\n      map21(:) = [2]\n      map22(:) = [1]\n      map31(:) = [2, 3]\n      map32(:) = [1]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_2d, dist2_1, dist2_2)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist3_1, dist3_2, dist3_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(2|31)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(4|3)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_3, size_4)\n      CALL dbcsr_t_create(tensor_C, \"(24|1)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_1, size_2, size_4)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_3_2, blk_ind_4_2)\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_1_3, blk_ind_2_3, blk_ind_4_3)\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.9_real_8), tensor_A, tensor_B, dbcsr_scalar(0.1_real_8), tensor_C, &\n                                 [3], [1, 2], &\n                                 [1], [2], &\n                                 [1, 2], [3], &\n                                 io_unit, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!-------------------------------------------------------------------------------------------------!\n! Test 6: Testing tensor contraction (4|3)x(1|32)=(24|1)                                           !\n!-------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(1), map12(2), map21(1), map22(1), map31(2), map32(1))\n      map11(:) = [1]\n      map12(:) = [3, 2]\n      map21(:) = [2]\n      map22(:) = [1]\n      map31(:) = [2, 3]\n      map32(:) = [1]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_2d, dist2_1, dist2_2)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist3_1, dist3_2, dist3_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(1|32)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(4|3)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_3, size_4)\n      CALL dbcsr_t_create(tensor_C, \"(24|1)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_1, size_2, size_4)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_3_2, blk_ind_4_2)\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_1_3, blk_ind_2_3, blk_ind_4_3)\n\n      ALLOCATE (bounds_t(ndims_tensor(tensor_B)))\n      CALL dbcsr_t_get_info(tensor_B, nfull_total=bounds_t)\n\n      ALLOCATE (bounds(2, 1))\n      bounds(1, 1) = 1\n      bounds(2, 1) = bounds_t(1) - 21\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.9_real_8), tensor_B, tensor_A, dbcsr_scalar(0.1_real_8), tensor_C, &\n                                 [1], [2], &\n                                 [3], [1, 2], &\n                                 [3], [1, 2], &\n                                 io_unit, &\n                                 bounds_1=bounds, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32, bounds_t, bounds)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!-------------------------------------------------------------------------------------------------!\n! Test 7: Testing tensor contraction (1|24)x(3|4)=(21|3)                                          !\n!-------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(2), map12(1), map21(1), map22(1), map31(1), map32(2))\n      map11(:) = [2, 1]\n      map12(:) = [3]\n      map21(:) = [1]\n      map22(:) = [2]\n      map31(:) = [1]\n      map32(:) = [2, 3]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_2d, dist2_1, dist2_2)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist3_1, dist3_2, dist3_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(21|3)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(3|4)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_3, size_4)\n      CALL dbcsr_t_create(tensor_C, \"(1|24)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_1, size_2, size_4)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      CALL dbcsr_t_setup_test_tensor(tensor_B, mp_comm, .FALSE., blk_ind_3_2, blk_ind_4_2)\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_1_3, blk_ind_2_3, blk_ind_4_3)\n\n      ALLOCATE (bounds_t(ndims_tensor(tensor_C)))\n      CALL dbcsr_t_get_info(tensor_C, nfull_total=bounds_t)\n\n      ALLOCATE (bounds(2, 2))\n      bounds(1, 1) = 4\n      bounds(2, 1) = bounds_t(1)\n      bounds(1, 2) = 13\n      bounds(2, 2) = bounds_t(2) - 10\n      DEALLOCATE (bounds_t)\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_C, tensor_B, dbcsr_scalar(0.8_real_8), tensor_A, &\n                                 [3], [1, 2], &\n                                 [2], [1], &\n                                 [1, 2], [3], &\n                                 io_unit, &\n                                 bounds_2=bounds, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32, bounds)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!-------------------------------------------------------------------------------------------------!\n! Test 8: Testing tensor contraction (12|3)x(12|45)=(3|45)\n!-------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(2), map12(1), map21(2), map22(2), map31(1), map32(2))\n      map11(:) = [1, 2]\n      map12(:) = [3]\n      map21(:) = [1, 2]\n      map22(:) = [3, 4]\n      map31(:) = [1]\n      map32(:) = [2, 3]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(12|3)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(12|45)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_1, size_2, size_4, size_5)\n      CALL dbcsr_t_create(tensor_C, \"(3|45)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_3, size_4, size_5)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      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)\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5)\n\n      ALLOCATE (bounds_t(ndims_tensor(tensor_A)))\n      CALL dbcsr_t_get_info(tensor_A, nfull_total=bounds_t)\n      ALLOCATE (bounds_1(2, 2))\n      bounds_1(1, 1) = 7\n      bounds_1(2, 1) = bounds_t(2) - 17\n      bounds_1(1, 2) = 8\n      bounds_1(2, 2) = bounds_t(1)\n      DEALLOCATE (bounds_t)\n\n      ALLOCATE (bounds_t(ndims_tensor(tensor_B)))\n      CALL dbcsr_t_get_info(tensor_B, nfull_total=bounds_t)\n      ALLOCATE (bounds_2(2, 2))\n      bounds_2(1, 1) = 1\n      bounds_2(2, 1) = bounds_t(3)\n      bounds_2(1, 2) = 1\n      bounds_2(2, 2) = bounds_t(4) - 18\n      DEALLOCATE (bounds_t)\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_A, tensor_B, dbcsr_scalar(0.8_real_8), tensor_C, &\n                                 [2, 1], [3], &\n                                 [2, 1], [3, 4], &\n                                 [1], [2, 3], &\n                                 io_unit, &\n                                 bounds_1=bounds_1, &\n                                 bounds_3=bounds_2, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32, bounds_1, bounds_2)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!-------------------------------------------------------------------------------------------------!\n! Test 9: Testing tensor contraction (3|21)x(12|45)=(3|45)\n!-------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(1), map12(2), map21(2), map22(2), map31(1), map32(2))\n      map11(:) = [3]\n      map12(:) = [2, 1]\n      map21(:) = [1, 2]\n      map22(:) = [3, 4]\n      map31(:) = [1]\n      map32(:) = [2, 3]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(3|21)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(12|45)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_1, size_2, size_4, size_5)\n      CALL dbcsr_t_create(tensor_C, \"(3|45)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_3, size_4, size_5)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      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)\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5)\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_A, tensor_B, dbcsr_scalar(0.8_real_8), tensor_C, &\n                                 [2, 1], [3], &\n                                 [2, 1], [3, 4], &\n                                 [1], [2, 3], &\n                                 io_unit, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!-------------------------------------------------------------------------------------------------!\n! Test 10: Testing tensor contraction (13|2)x(54|21)=(3|45)\n!-------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(2), map12(1), map21(2), map22(2), map31(1), map32(2))\n      map11(:) = [1, 3]\n      map12(:) = [2]\n      map21(:) = [4, 3]\n      map22(:) = [2, 1]\n      map31(:) = [1]\n      map32(:) = [2, 3]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(13|2)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(54|21)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_1, size_2, size_4, size_5)\n      CALL dbcsr_t_create(tensor_C, \"(3|45)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_3, size_4, size_5)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      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)\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5)\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_A, tensor_B, dbcsr_scalar(0.8_real_8), tensor_C, &\n                                 [1, 2], [3], &\n                                 [1, 2], [3, 4], &\n                                 [1], [2, 3], &\n                                 io_unit, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!-------------------------------------------------------------------------------------------------!\n! Test 10: Testing tensor contraction (54|21)x(2|31)=(43|5)\n!-------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(1), map12(2), map21(2), map22(2), map31(2), map32(1))\n      map11(:) = [2]\n      map12(:) = [3, 1]\n      map21(:) = [4, 3]\n      map22(:) = [2, 1]\n      map31(:) = [2, 1]\n      map32(:) = [3]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(2|31)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(54|21)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_1, size_2, size_4, size_5)\n      CALL dbcsr_t_create(tensor_C, \"(43|5)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_3, size_4, size_5)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      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)\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5)\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_B, tensor_A, dbcsr_scalar(0.8_real_8), tensor_C, &\n                                 [2, 1], [4, 3], &\n                                 [2, 1], [3], &\n                                 [3, 2], [1], &\n                                 io_unit, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!-------------------------------------------------------------------------------------------------!\n! Test 11: Testing tensor contraction (241|5)x(31|2)=(5|43)\n!-------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(2), map12(1), map21(3), map22(1), map31(1), map32(2))\n      map11(:) = [3, 1]\n      map12(:) = [2]\n      map21(:) = [2, 3, 1]\n      map22(:) = [4]\n      map31(:) = [3]\n      map32(:) = [2, 1]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(31|2)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(241|5)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_1, size_2, size_4, size_5)\n      CALL dbcsr_t_create(tensor_C, \"(5|43)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_3, size_4, size_5)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      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)\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5)\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.6_real_8), tensor_B, tensor_A, dbcsr_scalar(0.4_real_8), tensor_C, &\n                                 [2, 1], [3, 4], &\n                                 [2, 1], [3], &\n                                 [2, 3], [1], &\n                                 io_unit, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!-------------------------------------------------------------------------------------------------!\n! Test 12: Testing tensor contraction (34|5)x(12|3)=(14|25)\n!-------------------------------------------------------------------------------------------------!\n\n      ALLOCATE (map11(2), map12(1), map21(2), map22(2), map31(2), map32(1))\n      map11(:) = [1, 2]\n      map12(:) = [3]\n      map21(:) = [1, 3]\n      map22(:) = [2, 4]\n      map31(:) = [1, 2]\n      map32(:) = [3]\n\n      CALL dbcsr_t_distribution_new(dist1, pgrid_3d, dist1_1, dist1_2, dist1_3)\n      CALL dbcsr_t_distribution_new(dist2, pgrid_4d, dist4_1, dist4_2, dist4_3, dist4_4)\n      CALL dbcsr_t_distribution_new(dist3, pgrid_3d, dist5_1, dist5_2, dist5_3)\n\n      CALL dbcsr_t_create(tensor_A, \"(12|3)\", dist1, map11, map12, dbcsr_type_real_8, &\n                          size_1, size_2, size_3)\n      CALL dbcsr_t_create(tensor_B, \"(14|25)\", dist2, map21, map22, dbcsr_type_real_8, &\n                          size_1, size_2, size_4, size_5)\n      CALL dbcsr_t_create(tensor_C, \"(34|5)\", dist3, map31, map32, dbcsr_type_real_8, &\n                          size_3, size_4, size_5)\n\n      CALL dbcsr_t_setup_test_tensor(tensor_A, mp_comm, .FALSE., blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      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)\n      CALL dbcsr_t_setup_test_tensor(tensor_C, mp_comm, .FALSE., blk_ind_3_5, blk_ind_4_5, blk_ind_5_5)\n\n      CALL dbcsr_t_contract_test(dbcsr_scalar(0.2_real_8), tensor_C, tensor_A, dbcsr_scalar(0.8_real_8), tensor_B, &\n                                 [1], [2, 3], &\n                                 [3], [1, 2], &\n                                 [3, 4], [1, 2], &\n                                 io_unit, &\n                                 log_verbose=verbose, &\n                                 write_int=.TRUE.)\n\n      DEALLOCATE (map11, map12, map21, map22, map31, map32)\n\n      CALL dbcsr_t_destroy(tensor_A)\n      CALL dbcsr_t_destroy(tensor_B)\n      CALL dbcsr_t_destroy(tensor_C)\n      CALL dbcsr_t_distribution_destroy(dist1)\n      CALL dbcsr_t_distribution_destroy(dist2)\n      CALL dbcsr_t_distribution_destroy(dist3)\n\n!--------------------------------------------------------------------------------------------------!\n! Cleanup for tensor contraction tests                                                             !\n!--------------------------------------------------------------------------------------------------!\n\n      DEALLOCATE (blk_ind_1_1, blk_ind_2_1, blk_ind_3_1)\n      DEALLOCATE (blk_ind_3_2, blk_ind_4_2)\n      DEALLOCATE (blk_ind_1_3, blk_ind_2_3, blk_ind_4_3)\n      DEALLOCATE (blk_ind_1_4, blk_ind_2_4, blk_ind_4_4, blk_ind_5_4)\n      DEALLOCATE (blk_ind_3_5, blk_ind_4_5, blk_ind_5_5)\n      DEALLOCATE (size_1, size_2, size_3, size_4, size_5, dist1_1, dist1_2, dist1_3, &\n                  dist2_1, dist2_2, dist3_1, dist3_2, dist3_3, dist4_1, dist4_2, &\n                  dist4_3, dist4_4, dist5_1, dist5_2, dist5_3)\n      CALL dbcsr_t_pgrid_destroy(pgrid_3d)\n      CALL dbcsr_t_pgrid_destroy(pgrid_2d)\n      CALL dbcsr_t_pgrid_destroy(pgrid_4d)\n\n   END IF\n\n!--------------------------------------------------------------------------------------------------!\n! End tests                                                                                        !\n!--------------------------------------------------------------------------------------------------!\n\n   call dbcsr_print_statistics(.true.)\n\n   ! finalize libdbcsr\n   CALL dbcsr_finalize_lib()\n\n   ! finalize mpi\n   CALL mp_world_finalize()\n\nEND PROGRAM\n"
  },
  {
    "path": "tests/dbcsr_test.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include <vector>\n#include <iostream>\n#include <algorithm>\n#include <cstdlib>\n#include <cstdio>\n#include <cstdint>\n#include <random>\n\n#include <mpi.h>\n\n#include <dbcsr.h>\n\n\n// Random distribution by using round-robin assignment\n// of blocks to processors\nstd::vector<int> random_dist(int dist_size, int nbins) {\n  std::vector<int> dist(dist_size);\n\n  for (int i = 0; i < dist_size; i++) dist[i] = i % nbins;\n\n  return dist;\n}\n\n\nint main(int argc, char* argv[]) {\n  MPI_Init(&argc, &argv);\n\n  int mpi_size, mpi_rank;\n  MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);\n  MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);\n\n  // Make 2D grid\n  int dims[2] = {0};\n  MPI_Dims_create(mpi_size, 2, dims);\n  int periods[2] = {1};\n  int reorder = 0;\n  MPI_Comm group;\n  MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, reorder, &group);\n\n  int coord[2];\n  MPI_Cart_coords(group, mpi_rank, 2, coord);\n\n  for (int i = 0; i != mpi_size; ++i) {\n    if (mpi_rank == i) {\n      std::cout << \"I'm processor \" << mpi_rank << \" over \" << mpi_size << \" proc\"\n                << \", (\" << coord[0] << \", \" << coord[1] << \") in the 2D grid\" << std::endl;\n    }\n    MPI_Barrier(MPI_COMM_WORLD);\n  }\n\n  c_dbcsr_init_lib(MPI_COMM_WORLD, nullptr);\n\n  // Total number of blocks\n  int nrows_1 = 4;\n  int ncols_1 = 5;\n  int nrows_2 = 5;\n  int ncols_2 = 4;\n\n  // Block sizes\n  std::vector<int> row_blk_sizes_1 = {2, 3, 5, 2};\n  std::vector<int> col_blk_sizes_1 = {3, 3, 4, 6, 2};\n  std::vector<int> row_blk_sizes_2 = col_blk_sizes_1;\n  std::vector<int> col_blk_sizes_2 = {5, 2, 5, 3};\n\n  auto row_dist_1 = random_dist(nrows_1, dims[0]);\n  auto col_dist_1 = random_dist(ncols_1, dims[1]);\n  auto row_dist_2 = random_dist(nrows_2, dims[0]);\n  auto col_dist_2 = random_dist(ncols_2, dims[1]);\n\n  void* dist1 = nullptr;\n  void* dist2 = nullptr;\n  void* dist3 = nullptr;\n\n  if (mpi_rank == 0) std::cout << \"Creating distributions...\" << std::endl;\n\n  c_dbcsr_distribution_new(&dist1, group, row_dist_1.data(), row_dist_1.size(), col_dist_1.data(), col_dist_1.size());\n\n  c_dbcsr_distribution_new(&dist2, group, row_dist_2.data(), row_dist_2.size(), col_dist_2.data(), col_dist_2.size());\n\n  c_dbcsr_distribution_new(&dist3, group, row_dist_1.data(), row_dist_1.size(), col_dist_2.data(), col_dist_2.size());\n\n  // Fill all blocks, i.e. dense matrices\n\n\n  auto fill_matrix = [&](void* matrix, std::vector<int>& irblks, std::vector<int>& icblks) {\n    std::vector<double> block;\n    std::vector<int> loc_irblks, loc_icblks;\n\n    for (int i = 0; i != (int)irblks.size(); ++i) {\n      int blk_proc = -1;\n      int ix = irblks[i];\n      int jx = icblks[i];\n      c_dbcsr_get_stored_coordinates(matrix, ix, jx, &blk_proc);\n      if (mpi_rank == blk_proc) {\n        loc_irblks.push_back(ix);\n        loc_icblks.push_back(jx);\n      }\n    }\n\n    c_dbcsr_reserve_blocks(matrix, loc_irblks.data(), loc_icblks.data(), loc_irblks.size());\n\n    void* iter = nullptr;\n    c_dbcsr_iterator_start(&iter, matrix, nullptr, nullptr, nullptr, nullptr, nullptr);\n\n    while (c_dbcsr_iterator_blocks_left(iter)) {\n      int i = -1;\n      int j = -1;\n      int nblk = -1;\n      int rsize = -1;\n      int csize = -1;\n      int roff = -1;\n      int coff = -1;\n      bool tr = false;\n\n      double* blk = nullptr;\n      c_dbcsr_iterator_next_2d_block_d(iter, &i, &j, &blk, &tr, &nblk, &rsize, &csize, &roff, &coff);\n\n      std::generate(blk, blk + rsize * csize, [&]() { return static_cast<double>(std::rand()) / RAND_MAX; });\n    }\n\n    c_dbcsr_iterator_stop(&iter);\n  };\n\n\n  // create and fill matrix a\n  void* matrix_a = nullptr;\n  void* matrix_b = nullptr;\n  void* matrix_c = nullptr;\n\n  if (mpi_rank == 0) std::cout << \"Creating matrices...\" << std::endl;\n\n\n  c_dbcsr_create_new(&matrix_a, \"matrix a\", dist1, dbcsr_type_no_symmetry, row_blk_sizes_1.data(), row_blk_sizes_1.size(),\n    col_blk_sizes_1.data(), col_blk_sizes_1.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);\n\n  c_dbcsr_create_new(&matrix_b, \"matrix b\", dist2, dbcsr_type_no_symmetry, row_blk_sizes_2.data(), row_blk_sizes_2.size(),\n    col_blk_sizes_2.data(), col_blk_sizes_2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);\n\n  c_dbcsr_create_new(&matrix_c, \"matrix c\", dist3, dbcsr_type_no_symmetry, row_blk_sizes_1.data(), row_blk_sizes_1.size(),\n    col_blk_sizes_2.data(), col_blk_sizes_2.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);\n\n  std::vector<int> irblks_1 = {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3};\n  std::vector<int> icblks_1 = {0, 1, 2, 4, 0, 2, 3, 1, 3, 4, 0, 1, 2};\n\n  std::vector<int> irblks_2 = {0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4};\n  std::vector<int> icblks_2 = {0, 2, 3, 0, 1, 2, 3, 0, 2, 3, 1, 2, 3, 0, 1, 2, 3};\n\n  std::vector<int> irblks_3 = {0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3};\n  std::vector<int> icblks_3 = {0, 1, 2, 3, 0, 2, 3, 1, 2, 3, 0, 1, 2, 3};\n\n  if (mpi_rank == 0) std::cout << \"Filling matrices...\" << std::endl;\n\n  fill_matrix(matrix_a, irblks_1, icblks_1);\n  c_dbcsr_finalize(matrix_a);\n  fill_matrix(matrix_b, irblks_2, icblks_2);\n  c_dbcsr_finalize(matrix_b);\n  fill_matrix(matrix_c, irblks_3, icblks_3);\n  c_dbcsr_finalize(matrix_c);\n\n  if (mpi_rank == 0) std::cout << \"Multiplying...\" << std::endl;\n\n  c_dbcsr_multiply_d('N', 'N', 1.0, matrix_a, matrix_b, 2.0, matrix_c, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,\n    nullptr, nullptr, nullptr);\n\n  if (mpi_rank == 0) std::cout << \"Testing get_info for matrix_c\" << std::endl;\n\n  int nblkrowstot(0), nblkcolstot(0), nfullrowstot(0), nfullcolstot(0), nblkrowsloc(0), nblkcolsloc(0), nfullrowsloc(0),\n    nfullcolsloc(0), my_prow(0), my_pcol(0);\n\n  //int *local_rows, *local_cols, *proc_row_dist, *proc_col_dist,\n  //    *row_blk_size, *col_blk_size, *row_blk_offset, *col_blk_offset;\n\n  std::vector<int> local_rows(c_dbcsr_nblkrows_local(matrix_a));\n  std::vector<int> local_cols(c_dbcsr_nblkcols_local(matrix_a));\n  std::vector<int> proc_row(c_dbcsr_nblkrows_total(matrix_a));\n  std::vector<int> proc_col(c_dbcsr_nblkcols_total(matrix_a));\n  std::vector<int> row_blk(c_dbcsr_nblkrows_total(matrix_a));\n  std::vector<int> col_blk(c_dbcsr_nblkcols_total(matrix_a));\n  std::vector<int> row_off(c_dbcsr_nblkrows_total(matrix_a));\n  std::vector<int> col_off(c_dbcsr_nblkcols_total(matrix_a));\n\n  char* name;\n  char matrix_type;\n  int data_type;\n\n  c_dbcsr_get_info(matrix_c, &nblkrowstot, &nblkcolstot, &nfullrowstot, &nfullcolstot, &nblkrowsloc, &nblkcolsloc, &nfullrowsloc,\n    &nfullcolsloc, &my_prow, &my_pcol, local_rows.data(), local_cols.data(), proc_row.data(), proc_col.data(), row_blk.data(),\n    col_blk.data(), nullptr, nullptr, nullptr, &name, &matrix_type, &data_type, nullptr);\n\n\n  auto printv = [](std::vector<int>& v) {\n    for (auto x : v) std::cout << x << \" \";\n    std::cout << std::endl;\n  };\n\n#define print_var(name) std::cout << #name << \": \" << name << std::endl;\n\n#define print_vec(name) \\\n  std::cout << #name << \": \" << std::endl; \\\n  printv(name);\n\n  if (mpi_rank == 0) {\n    std::cout << \"Name: \" << name << std::endl;\n\n    print_var(nblkrowstot) print_var(nblkcolstot) print_var(nfullrowstot) print_var(nfullcolstot) print_var(nblkrowsloc)\n      print_var(nblkcolsloc) print_var(nfullrowsloc) print_var(nfullcolsloc)\n\n        print_vec(local_rows) print_vec(local_cols) print_vec(proc_row) print_vec(proc_col) print_vec(row_blk) print_vec(col_blk)\n          print_vec(row_off) print_vec(col_off)\n  }\n\n  c_free_string(&name);\n\n  MPI_Barrier(MPI_COMM_WORLD);\n\n  if (mpi_rank == 0) std::cout << \"Testing distribution_get for dist1\" << std::endl;\n\n  int *row_dist, *col_dist, *pgrid;\n  int nrows, ncols, mynode, numnodes, nprows, npcols, myprow, mypcol, prow_group, pcol_group;\n  bool has_threads, subgroups_defined;\n  MPI_Comm cgroup;\n\n  c_dbcsr_distribution_get(dist1, &row_dist, &col_dist, &nrows, &ncols, &has_threads, &cgroup, &mynode, &numnodes, &nprows, &npcols,\n    &myprow, &mypcol, &pgrid, &subgroups_defined, &prow_group, &pcol_group);\n\n  if (mpi_rank == 0) {\n    print_var(nrows) print_var(ncols) print_var(mynode) print_var(numnodes) print_var(nprows) print_var(npcols) print_var(myprow)\n      print_var(mypcol) print_var(prow_group) print_var(pcol_group)\n\n        if (cgroup == group) {\n      std::cout << \"Correct MPI communicator.\" << std::endl;\n    }\n    std::cout << \"dist row:\" << std::endl;\n    for (int i = 0; i != nrows; ++i) std::cout << row_dist[i] << \" \";\n    std::cout << std::endl;\n    std::cout << \"dist col:\" << std::endl;\n    for (int i = 0; i != ncols; ++i) std::cout << col_dist[i] << \" \";\n    std::cout << std::endl;\n\n    std::cout << \"grid: \" << std::endl;\n    for (int i = 0; i != nprows; ++i) {\n      for (int j = 0; j != npcols; ++j) std::cout << pgrid[i + nprows * j] << \" \";\n      std::cout << std::endl;\n    }\n  }\n\n  MPI_Barrier(MPI_COMM_WORLD);\n\n  c_dbcsr_release(&matrix_a);\n  c_dbcsr_release(&matrix_b);\n  c_dbcsr_release(&matrix_c);\n\n  c_dbcsr_distribution_release(&dist1);\n  c_dbcsr_distribution_release(&dist2);\n  c_dbcsr_distribution_release(&dist3);\n\n  if (mpi_rank == 0) std::cout << \"Extracting block diagonal...\" << std::endl;\n\n  std::vector<int> blk_sizes = {3, 3, 3};\n\n  auto rowdist = random_dist(blk_sizes.size(), dims[0]);\n  auto coldist = random_dist(blk_sizes.size(), dims[1]);\n\n  void* dist4 = nullptr;\n\n  c_dbcsr_distribution_new(&dist4, group, rowdist.data(), rowdist.size(), coldist.data(), coldist.size());\n\n  void* matrix_d = nullptr;\n\n  c_dbcsr_create_new(&matrix_d, \"matrix d\", dist4, dbcsr_type_no_symmetry, blk_sizes.data(), blk_sizes.size(), blk_sizes.data(),\n    blk_sizes.size(), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);\n\n  c_dbcsr_init_random(matrix_d, nullptr);\n\n  c_dbcsr_print(matrix_d);\n\n  std::vector<double> alpha(9);\n  for (size_t i = 0; i != alpha.size(); ++i) {\n    alpha[i] = (double)i;\n  }\n  c_dbcsr_scale_by_vector_d(matrix_d, alpha.data(), alpha.size(), \"right\");\n\n  c_dbcsr_print(matrix_d);\n\n  double* data = nullptr;\n  double type = 1.0;\n  long long int data_size = 0;\n  c_dbcsr_get_data_d(matrix_d, &data, &data_size, &type, nullptr, nullptr);\n\n  if (mpi_rank == 0) {\n    std::cout << \"Data on rank 0:\" << std::endl;\n    for (int i = 0; i != data_size; ++i) std::cout << data[i] << \" \";\n    std::cout << std::endl;\n  }\n\n  void* diag = nullptr;\n  c_dbcsr_get_block_diag(matrix_d, &diag);\n\n  c_dbcsr_print(diag);\n\n  c_dbcsr_release(&matrix_d);\n  c_dbcsr_release(&diag);\n  c_dbcsr_distribution_release(&dist4);\n\n  c_dbcsr_print_statistics(nullptr, nullptr);\n\n  MPI_Comm_free(&group);\n\n  c_dbcsr_finalize_lib();\n\n  MPI_Finalize();\n\n  return 0;\n}\n"
  },
  {
    "path": "tests/dbcsr_test_add.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_test_add\n   !! Tests for DBCSR add\n   USE dbcsr_data_methods, ONLY: dbcsr_data_get_sizes, &\n                                 dbcsr_data_init, &\n                                 dbcsr_data_new, &\n                                 dbcsr_data_release, &\n                                 dbcsr_type_1d_to_2d\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new, &\n                                 dbcsr_distribution_release\n   USE dbcsr_io, ONLY: dbcsr_print\n   USE dbcsr_kinds, ONLY: dp, &\n                          real_4, &\n                          real_8\n   USE dbcsr_methods, ONLY: &\n      dbcsr_col_block_sizes, dbcsr_get_data_type, dbcsr_get_matrix_type, dbcsr_name, &\n      dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_nfullcols_total, dbcsr_nfullrows_total, &\n      dbcsr_release, dbcsr_row_block_sizes\n   USE dbcsr_mpiwrap, ONLY: mp_bcast, &\n                            mp_environ, mp_comm_type\n   USE dbcsr_operations, ONLY: dbcsr_add, &\n                               dbcsr_get_occupation\n   USE dbcsr_test_methods, ONLY: compx_to_dbcsr_scalar, &\n                                 dbcsr_impose_sparsity, &\n                                 dbcsr_make_random_block_sizes, &\n                                 dbcsr_make_random_matrix, &\n                                 dbcsr_random_dist, &\n                                 dbcsr_to_dense_local\n   USE dbcsr_transformations, ONLY: dbcsr_redistribute, &\n                                    dbcsr_replicate_all\n   USE dbcsr_types, ONLY: &\n      dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_mp_obj, dbcsr_scalar_type, dbcsr_type, &\n      dbcsr_type_antihermitian, dbcsr_type_antisymmetric, dbcsr_type_complex_4, &\n      dbcsr_type_complex_4_2d, dbcsr_type_complex_8, dbcsr_type_complex_8_2d, &\n      dbcsr_type_hermitian, dbcsr_type_no_symmetry, dbcsr_type_real_4, dbcsr_type_real_4_2d, &\n      dbcsr_type_real_8, dbcsr_type_real_8_2d, dbcsr_type_symmetric\n   USE dbcsr_work_operations, ONLY: dbcsr_create\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC :: dbcsr_test_adds\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_test_add'\n\nCONTAINS\n\n   SUBROUTINE dbcsr_test_adds(test_name, mp_group, mp_env, npdims, io_unit, &\n                              matrix_sizes, bs_m, bs_n, sparsities, &\n                              alpha, beta, limits, retain_sparsity)\n      !! Performs a variety of matrix add\n\n      CHARACTER(len=*), INTENT(IN)                       :: test_name\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_group\n         !! MPI communicator\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, DIMENSION(2), INTENT(in)                  :: npdims\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! which unit to write to, if not negative\n      INTEGER, DIMENSION(:), INTENT(in)                  :: matrix_sizes, bs_m, bs_n\n         !! size of matrices to test\n         !! block sizes of the 3 dimensions\n         !! block sizes of the 3 dimensions\n      REAL(real_8), DIMENSION(2), INTENT(in)             :: sparsities\n         !! sparsities of matrices to create\n      COMPLEX(real_8)                                    :: alpha, beta\n      INTEGER, DIMENSION(4), INTENT(in)                  :: limits\n      LOGICAL, INTENT(in)                                :: retain_sparsity\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_test_adds'\n      CHARACTER, DIMENSION(2, 5), PARAMETER :: symmetries = &\n                                               RESHAPE((/dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, &\n                                                         dbcsr_type_symmetric, dbcsr_type_symmetric, &\n                                                         dbcsr_type_antisymmetric, dbcsr_type_antisymmetric, &\n                                                         dbcsr_type_hermitian, dbcsr_type_hermitian, &\n                                                         dbcsr_type_antihermitian, dbcsr_type_antihermitian/), (/2, 5/))\n      INTEGER, DIMENSION(4), PARAMETER :: types = (/dbcsr_type_real_4, dbcsr_type_real_8, &\n                                                    dbcsr_type_complex_4, dbcsr_type_complex_8/)\n\n      CHARACTER                                          :: a_symm, b_symm\n      INTEGER                                            :: a_c, a_r, b_c, b_r, handle, isymm, &\n                                                            itype, mynode, numnodes, numthreads, &\n                                                            TYPE\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: my_sizes_m, my_sizes_n, sizes_m, sizes_n\n      LOGICAL                                            :: do_complex\n      TYPE(dbcsr_data_obj)                               :: data_a, data_a_dbcsr, data_b\n      TYPE(dbcsr_scalar_type)                            :: alpha_obj, beta_obj\n      TYPE(dbcsr_type)                                   :: matrix_a, matrix_b\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      NULLIFY (my_sizes_m, my_sizes_n, sizes_m, sizes_n)\n\n      !\n      ! print\n      CALL mp_environ(numnodes, mynode, mp_group)\n      IF (io_unit .GT. 0) THEN\n         WRITE (io_unit, *) 'test_name ', test_name\n         numthreads = 1\n!$OMP PARALLEL\n!$OMP MASTER\n!$       numthreads = omp_get_num_threads()\n!$OMP END MASTER\n!$OMP END PARALLEL\n         WRITE (io_unit, *) 'numthreads', numthreads\n         WRITE (io_unit, *) 'numnodes', numnodes\n         WRITE (io_unit, *) 'matrix_sizes', matrix_sizes\n         WRITE (io_unit, *) 'sparsities', sparsities\n         WRITE (io_unit, *) 'alpha', alpha\n         WRITE (io_unit, *) 'beta', beta\n         WRITE (io_unit, *) 'limits', limits\n         WRITE (io_unit, *) 'retain_sparsity', retain_sparsity\n         WRITE (io_unit, *) 'bs_m', bs_m\n         WRITE (io_unit, *) 'bs_n', bs_n\n      END IF\n      !\n      !\n      ! loop over symmetry\n      DO isymm = 1, SIZE(symmetries, 2)\n         a_symm = symmetries(1, isymm)\n         b_symm = symmetries(2, isymm)\n\n         IF (a_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(2)) CYCLE\n         IF (b_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(2)) CYCLE\n\n         !\n         ! loop over types\n         DO itype = 1, SIZE(types)\n            TYPE = types(itype)\n\n            do_complex = TYPE .EQ. dbcsr_type_complex_4 .OR. TYPE .EQ. dbcsr_type_complex_8\n\n            alpha_obj = compx_to_dbcsr_scalar(alpha, TYPE)\n            beta_obj = compx_to_dbcsr_scalar(beta, TYPE)\n            IF (do_complex .AND. (a_symm .EQ. dbcsr_type_hermitian .OR. a_symm .EQ. dbcsr_type_antihermitian)) &\n               alpha_obj = compx_to_dbcsr_scalar(CMPLX(REAL(alpha, kind=dp), 0.0, dp), TYPE)\n            IF (do_complex .AND. (b_symm .EQ. dbcsr_type_hermitian .OR. b_symm .EQ. dbcsr_type_antihermitian)) &\n               beta_obj = compx_to_dbcsr_scalar(CMPLX(REAL(beta, kind=dp), 0.0, dp), TYPE)\n\n            !\n            ! Create the row/column block sizes.\n            CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), bs_m)\n            CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), bs_n)\n\n            !\n            ! If A/B has symmetry we need the same row/col blocking\n            my_sizes_m => sizes_m\n            my_sizes_n => sizes_n\n            IF (a_symm .NE. dbcsr_type_no_symmetry) THEN\n               my_sizes_n => sizes_m\n            END IF\n            IF (b_symm .NE. dbcsr_type_no_symmetry) THEN\n               my_sizes_n => sizes_m\n            END IF\n\n            IF (.FALSE.) THEN\n               WRITE (*, *) 'sizes_m', my_sizes_m\n               WRITE (*, *) 'sum(sizes_m)', SUM(my_sizes_m), ' matrix_sizes(1)', matrix_sizes(1)\n               WRITE (*, *) 'sizes_n', my_sizes_n\n               WRITE (*, *) 'sum(sizes_n)', SUM(my_sizes_n), ' matrix_sizes(2)', matrix_sizes(2)\n            END IF\n\n            !\n            ! Create the undistributed matrices.\n            CALL dbcsr_make_random_matrix(matrix_a, my_sizes_m, my_sizes_n, \"Matrix A\", &\n                                          sparsities(1), &\n                                          mp_group, data_type=TYPE, symmetry=a_symm)\n\n            CALL dbcsr_make_random_matrix(matrix_b, my_sizes_m, my_sizes_n, \"Matrix B\", &\n                                          sparsities(2), &\n                                          mp_group, data_type=TYPE, symmetry=b_symm)\n\n            DEALLOCATE (sizes_m, sizes_n)\n\n            !\n            ! convert the dbcsr matrices to denses\n            a_r = dbcsr_nfullrows_total(matrix_a); a_c = dbcsr_nfullcols_total(matrix_a)\n            b_r = dbcsr_nfullrows_total(matrix_b); b_c = dbcsr_nfullcols_total(matrix_b)\n            CALL dbcsr_data_init(data_a)\n            CALL dbcsr_data_init(data_b)\n            CALL dbcsr_data_init(data_a_dbcsr)\n            CALL dbcsr_data_new(data_a, dbcsr_type_1d_to_2d(TYPE), data_size=a_r, data_size2=a_c)\n            CALL dbcsr_data_new(data_b, dbcsr_type_1d_to_2d(TYPE), data_size=b_r, data_size2=b_c)\n            CALL dbcsr_data_new(data_a_dbcsr, dbcsr_type_1d_to_2d(TYPE), data_size=a_r, data_size2=a_c)\n            CALL dbcsr_to_dense_local(matrix_a, data_a)\n            CALL dbcsr_to_dense_local(matrix_b, data_b)\n\n            IF (.FALSE.) THEN\n               CALL dbcsr_print(matrix_a, matlab_format=.TRUE., variable_name='a0')\n               CALL dbcsr_print(matrix_b, matlab_format=.TRUE., variable_name='b0')\n            END IF\n\n            !\n            ! Prepare test parameters\n            CALL test_add(test_name, mp_group, mp_env, npdims, io_unit, &\n                          matrix_a, matrix_b, &\n                          data_a, data_b, data_a_dbcsr, &\n                          alpha_obj, beta_obj, &\n                          limits, retain_sparsity)\n            !\n            ! cleanup\n            CALL dbcsr_release(matrix_a)\n            CALL dbcsr_release(matrix_b)\n            CALL dbcsr_data_release(data_a)\n            CALL dbcsr_data_release(data_b)\n            CALL dbcsr_data_release(data_a_dbcsr)\n\n         END DO ! itype\n\n      END DO !isymm\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_test_adds\n\n   SUBROUTINE test_add(test_name, mp_group, mp_env, npdims, io_unit, &\n                       matrix_a, matrix_b, &\n                       data_a, data_b, data_a_dbcsr, &\n                       alpha, beta, limits, retain_sparsity)\n      !! Performs a variety of matrix add\n\n      CHARACTER(len=*), INTENT(IN)                       :: test_name\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_group\n         !! MPI communicator\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, DIMENSION(2), INTENT(in)                  :: npdims\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! which unit to write to, if not negative\n      TYPE(dbcsr_type), INTENT(in)                       :: matrix_a, matrix_b\n         !! matrices to add\n         !! matrices to add\n      TYPE(dbcsr_data_obj)                               :: data_a, data_b, data_a_dbcsr\n      TYPE(dbcsr_scalar_type), INTENT(in)                :: alpha, beta\n      INTEGER, DIMENSION(4), INTENT(in)                  :: limits\n      LOGICAL, INTENT(in)                                :: retain_sparsity\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'test_add'\n\n      INTEGER                                            :: c, handle, r\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_dist_a, col_dist_b, row_dist_a, &\n                                                            row_dist_b\n      LOGICAL                                            :: success\n      REAL(real_8)                                       :: occ_a_in, occ_a_out, occ_b\n      TYPE(dbcsr_distribution_obj)                       :: dist_a, dist_b\n      TYPE(dbcsr_type)                                   :: m_a, m_b\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n\n      ! Row & column distributions\n      CALL dbcsr_random_dist(row_dist_a, dbcsr_nblkrows_total(matrix_a), npdims(1))\n      CALL dbcsr_random_dist(col_dist_a, dbcsr_nblkcols_total(matrix_a), npdims(2))\n      CALL dbcsr_random_dist(row_dist_b, dbcsr_nblkrows_total(matrix_b), npdims(1))\n      CALL dbcsr_random_dist(col_dist_b, dbcsr_nblkcols_total(matrix_b), npdims(2))\n\n      CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a, reuse_arrays=.TRUE.)\n      CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b, reuse_arrays=.TRUE.)\n\n      ! Redistribute the matrices\n      ! A\n      CALL dbcsr_create(m_a, \"Test for \"//TRIM(dbcsr_name(matrix_a)), &\n                        dist_a, dbcsr_get_matrix_type(matrix_a), &\n                        row_blk_size_obj=matrix_a%row_blk_size, &\n                        col_blk_size_obj=matrix_a%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix_a))\n      CALL dbcsr_distribution_release(dist_a)\n      CALL dbcsr_redistribute(matrix_a, m_a)\n      ! B\n      CALL dbcsr_create(m_b, \"Test for \"//TRIM(dbcsr_name(matrix_b)), &\n                        dist_b, dbcsr_get_matrix_type(matrix_b), &\n                        row_blk_size_obj=matrix_b%row_blk_size, &\n                        col_blk_size_obj=matrix_b%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix_b))\n      CALL dbcsr_distribution_release(dist_b)\n      CALL dbcsr_redistribute(matrix_b, m_b)\n\n      IF (.FALSE.) THEN\n         CALL dbcsr_print(m_a, matlab_format=.FALSE., variable_name='a_in_')\n         CALL dbcsr_print(m_b, matlab_format=.FALSE., variable_name='b_')\n      END IF\n\n      occ_a_in = dbcsr_get_occupation(m_a)\n      occ_b = dbcsr_get_occupation(m_b)\n\n      !\n      ! Perform add\n      IF (ALL(limits == 0)) THEN\n         DBCSR_ABORT(\"limits shouldnt be 0\")\n      ELSE\n         CALL dbcsr_add(m_a, m_b, alpha, beta)\n      END IF\n\n      occ_a_out = dbcsr_get_occupation(m_a)\n\n      IF (.FALSE.) THEN\n         PRINT *, 'retain_sparsity', retain_sparsity, occ_a_in, occ_b, occ_a_out\n         CALL dbcsr_print(m_a, matlab_format=.TRUE., variable_name='a_out_')\n      END IF\n\n      CALL dbcsr_replicate_all(m_a)\n      CALL dbcsr_to_dense_local(m_a, data_a_dbcsr)\n      CALL dbcsr_check_add(test_name, m_a, data_a_dbcsr, data_a, data_b, &\n                           alpha, beta, limits, retain_sparsity, io_unit, mp_group, &\n                           success)\n\n      r = dbcsr_nfullrows_total(m_a)\n      c = dbcsr_nfullcols_total(m_a)\n\n      IF (io_unit .GT. 0) THEN\n         IF (success) THEN\n            WRITE (io_unit, *) REPEAT(\"*\", 70)\n            WRITE (io_unit, *) \" -- TESTING dbcsr_add (\", &\n               dbcsr_get_data_type(m_a), &\n               \", \", dbcsr_get_matrix_type(m_a), &\n               \", \", dbcsr_get_matrix_type(m_b), &\n               \") ............................. PASSED !\"\n            WRITE (io_unit, *) REPEAT(\"*\", 70)\n         ELSE\n            WRITE (io_unit, *) REPEAT(\"*\", 70)\n            WRITE (io_unit, *) \" -- TESTING dbcsr_add (\", &\n               dbcsr_get_data_type(m_a), &\n               \", \", dbcsr_get_matrix_type(m_a), &\n               \", \", dbcsr_get_matrix_type(m_b), &\n               \") ................. FAILED !\"\n            WRITE (io_unit, *) REPEAT(\"*\", 70)\n            DBCSR_ABORT('Test failed')\n         END IF\n      END IF\n\n      CALL dbcsr_release(m_a)\n      CALL dbcsr_release(m_b)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE test_add\n\n   SUBROUTINE dbcsr_check_add(test_name, matrix_a, dense_a_dbcsr, dense_a, dense_b, &\n                              alpha, beta, limits, retain_sparsity, io_unit, mp_group, &\n                              success)\n      !! Performs a check of matrix adds\n\n      CHARACTER(len=*), INTENT(IN)                       :: test_name\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_a\n      TYPE(dbcsr_data_obj), INTENT(inout)                :: dense_a_dbcsr, dense_a, dense_b\n         !! input dense matrices\n         !! input dense matrices\n      TYPE(dbcsr_scalar_type), INTENT(in)                :: alpha, beta\n         !! coefficients for the add\n         !! coefficients for the add\n      INTEGER, DIMENSION(4), INTENT(in)                  :: limits\n         !! limits for the add\n      LOGICAL, INTENT(in)                                :: retain_sparsity\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! io unit for printing\n      TYPE(mp_comm_type), INTENT(IN)                     :: mp_group\n      LOGICAL, INTENT(out)                               :: success\n         !! if passed the check success=T\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_check_add'\n      INTEGER                                            :: col, col_size, handle, i, istat, j, ld, &\n                                                            lwork, m, mynode, n, numnodes, row, &\n                                                            row_size\n      CHARACTER, PARAMETER                               :: norm = 'I'\n\n      LOGICAL                                            :: valid\n      REAL(real_4), ALLOCATABLE, DIMENSION(:)            :: work_sp\n#if defined (__ACCELERATE)\n      REAL(real_8), EXTERNAL                             :: clange, slamch, slange\n#else\n      REAL(real_4), EXTERNAL                             :: clange, slamch, slange\n#endif\n      REAL(real_8)                                       :: a_norm_dbcsr, a_norm_in, a_norm_out, &\n                                                            b_norm, eps, residual\n      REAL(real_8), ALLOCATABLE, DIMENSION(:)            :: work\n      REAL(real_8), EXTERNAL                             :: dlamch, dlange, zlange\n\n      CALL timeset(routineN, handle)\n\n      CALL mp_environ(numnodes, mynode, mp_group)\n\n      CALL dbcsr_data_get_sizes(dense_a, row_size, col_size, valid)\n      IF (.NOT. valid) &\n         DBCSR_ABORT(\"dense matrix not valid\")\n      !\n      !\n      m = limits(2) - limits(1) + 1\n      n = limits(4) - limits(3) + 1\n      row = limits(1); col = limits(3)\n\n      !\n      ! set the size of the work array\n      lwork = row_size\n      ld = row_size\n      !\n      !\n      SELECT CASE (dense_a%d%data_type)\n      CASE (dbcsr_type_real_8_2d)\n         ALLOCATE (work(lwork), STAT=istat)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"allocation problem\")\n         eps = dlamch('eps')\n         a_norm_in = dlange(norm, row_size, col_size, dense_a%d%r2_dp(1, 1), ld, work)\n         b_norm = dlange(norm, row_size, col_size, dense_b%d%r2_dp(1, 1), ld, work)\n         a_norm_dbcsr = dlange(norm, row_size, col_size, dense_a_dbcsr%d%r2_dp(1, 1), ld, work)\n         !\n         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) + &\n                                                             beta%r_dp*dense_b%d%r2_dp(row:row + m - 1, col:col + n - 1)\n         !\n         ! impose the sparsity if needed\n         IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_a, dense_a)\n         !\n         a_norm_out = dlange(norm, row_size, col_size, dense_a%d%r2_dp(1, 1), ld, work)\n         !\n         ! take the difference dense/sparse\n         dense_a%d%r2_dp = dense_a%d%r2_dp - dense_a_dbcsr%d%r2_dp\n         !\n         ! compute the residual\n         residual = dlange(norm, row_size, col_size, dense_a%d%r2_dp(1, 1), ld, work)\n         DEALLOCATE (work)\n      CASE (dbcsr_type_real_4_2d)\n         ALLOCATE (work_sp(lwork), STAT=istat)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"allocation problem\")\n         eps = slamch('eps')\n         a_norm_in = slange(norm, row_size, col_size, dense_a%d%r2_sp(1, 1), ld, work_sp)\n         b_norm = slange(norm, row_size, col_size, dense_b%d%r2_sp(1, 1), ld, work_sp)\n         a_norm_dbcsr = slange(norm, row_size, col_size, dense_a_dbcsr%d%r2_sp(1, 1), ld, work_sp)\n         !\n         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) + &\n                                                             beta%r_sp*dense_b%d%r2_sp(row:row + m - 1, col:col + n - 1)\n         !\n         ! impose the sparsity if needed\n         IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_a, dense_a)\n         !\n         a_norm_out = slange(norm, row_size, col_size, dense_a%d%r2_sp(1, 1), ld, work_sp)\n         !\n         ! take the difference dense/sparse\n         dense_a%d%r2_sp = dense_a%d%r2_sp - dense_a_dbcsr%d%r2_sp\n         !\n         ! compute the residual\n         residual = REAL(slange(norm, row_size, col_size, dense_a%d%r2_sp(1, 1), ld, work_sp), real_8)\n         DEALLOCATE (work_sp)\n      CASE (dbcsr_type_complex_8_2d)\n         ALLOCATE (work(lwork), STAT=istat)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"allocation problem\")\n         eps = dlamch('eps')\n         a_norm_in = zlange(norm, row_size, col_size, dense_a%d%c2_dp(1, 1), ld, work)\n         b_norm = zlange(norm, row_size, col_size, dense_b%d%c2_dp(1, 1), ld, work)\n         a_norm_dbcsr = zlange(norm, row_size, col_size, dense_a_dbcsr%d%c2_dp(1, 1), ld, work)\n         !\n         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) + &\n                                                             beta%c_dp*dense_b%d%c2_dp(row:row + m - 1, col:col + n - 1)\n         !\n         ! impose the sparsity if needed\n         IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_a, dense_a)\n         !\n         a_norm_out = zlange(norm, row_size, col_size, dense_a%d%c2_dp(1, 1), ld, work)\n         !\n         ! take the difference dense/sparse\n         dense_a%d%c2_dp = dense_a%d%c2_dp - dense_a_dbcsr%d%c2_dp\n         !\n         ! compute the residual\n         residual = zlange(norm, row_size, col_size, dense_a%d%c2_dp(1, 1), ld, work)\n         DEALLOCATE (work)\n      CASE (dbcsr_type_complex_4_2d)\n         ALLOCATE (work_sp(lwork), STAT=istat)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"allocation problem\")\n         eps = REAL(slamch('eps'), real_8)\n         a_norm_in = clange(norm, row_size, col_size, dense_a%d%c2_sp(1, 1), ld, work_sp)\n         b_norm = clange(norm, row_size, col_size, dense_b%d%c2_sp(1, 1), ld, work_sp)\n         a_norm_dbcsr = clange(norm, row_size, col_size, dense_a_dbcsr%d%c2_sp(1, 1), ld, work_sp)\n         !\n         IF (.FALSE.) THEN\n            !IF(io_unit .GT. 0) THEN\n            DO j = 1, SIZE(dense_a%d%c2_sp, 2)\n            DO i = 1, SIZE(dense_a%d%c2_sp, 1)\n               WRITE (*, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'a_in(', i, ',', j, ')=', REAL(dense_a%d%c2_sp(i, j)), '+', &\n                  AIMAG(dense_a%d%c2_sp(i, j)), 'i;'\n            END DO\n            END DO\n            DO j = 1, SIZE(dense_b%d%c2_sp, 2)\n            DO i = 1, SIZE(dense_b%d%c2_sp, 1)\n               WRITE (*, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'b(', i, ',', j, ')=', REAL(dense_b%d%c2_sp(i, j)), '+', &\n                  AIMAG(dense_b%d%c2_sp(i, j)), 'i;'\n            END DO\n            END DO\n         END IF\n\n         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) + &\n                                                             beta%c_sp*dense_b%d%c2_sp(row:row + m - 1, col:col + n - 1)\n         !\n         ! impose the sparsity if needed\n         IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_a, dense_a)\n         !\n\n         IF (.FALSE.) THEN\n            !IF(io_unit .GT. 0) THEN\n            DO j = 1, SIZE(dense_a%d%c2_sp, 2)\n            DO i = 1, SIZE(dense_a%d%c2_sp, 1)\n               WRITE (*, '(A,I3,A,I3,A,E15.7,A,E15.7,A)') 'a_out(', i, ',', j, ')=', REAL(dense_a%d%c2_sp(i, j)), '+', &\n                  AIMAG(dense_a%d%c2_sp(i, j)), 'i;'\n            END DO\n            END DO\n            DO j = 1, SIZE(dense_a_dbcsr%d%c2_sp, 2)\n            DO i = 1, SIZE(dense_a_dbcsr%d%c2_sp, 1)\n               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)), '+', &\n                  AIMAG(dense_a_dbcsr%d%c2_sp(i, j)), 'i;'\n            END DO\n            END DO\n         END IF\n\n         a_norm_out = clange(norm, row_size, col_size, dense_a%d%c2_sp(1, 1), ld, work_sp)\n         !\n         ! take the difference dense/sparse\n         dense_a%d%c2_sp = dense_a%d%c2_sp - dense_a_dbcsr%d%c2_sp\n         !\n         ! compute the residual\n         residual = REAL(clange(norm, row_size, col_size, dense_a%d%c2_sp(1, 1), ld, work_sp), real_8)\n         DEALLOCATE (work_sp)\n      CASE default\n         DBCSR_ABORT(\"Incorrect or 1-D data type\")\n      END SELECT\n\n      IF (mynode .EQ. 0) THEN\n         IF (residual/((a_norm_in + b_norm)*REAL(row_size, real_8)*eps) .GT. 10.0_real_8) THEN\n            success = .FALSE.\n         ELSE\n            success = .TRUE.\n         END IF\n      END IF\n      !\n      ! synchronize the result...\n      CALL mp_bcast(success, 0, mp_group)\n      !\n      ! printing\n      IF (io_unit .GT. 0) THEN\n         WRITE (io_unit, *) 'test_name ', test_name\n         WRITE (io_unit, '(2(A,E12.5))') ' residual ', residual, ', b_norm ', b_norm\n         WRITE (io_unit, '(3(A,E12.5))') ' a_norm_in ', a_norm_in, ', a_norm_out ', a_norm_out, &\n            ', a_norm_dbcsr ', a_norm_dbcsr\n         WRITE (io_unit, '(A)') ' Checking the norm of the difference against reference ADD '\n         WRITE (io_unit, '(A,E12.5)') ' -- ||A_dbcsr-A_dense||_oo/((||A||_oo+||B||_oo).N.eps)=', &\n            residual/((a_norm_in + b_norm)*n*eps)\n         !\n         ! check for nan or inf here\n         IF (success) THEN\n            WRITE (io_unit, '(A)') ' The solution is CORRECT !'\n         ELSE\n            WRITE (io_unit, '(A)') ' The solution is suspicious !'\n         END IF\n\n      END IF\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_check_add\n\nEND MODULE dbcsr_test_add\n"
  },
  {
    "path": "tests/dbcsr_test_csr_conversions.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_test_csr_conversions\n   !! Testing DBCSR to CSR conversion with random matrices\n   USE dbcsr_kinds, ONLY: dp, real_8\n   USE dbcsr_api, ONLY: &\n      dbcsr_convert_csr_to_dbcsr, dbcsr_convert_dbcsr_to_csr, &\n      dbcsr_csr_create_from_dbcsr, dbcsr_csr_destroy, &\n      dbcsr_csr_eqrow_ceil_dist, dbcsr_csr_type, dbcsr_add, dbcsr_copy, dbcsr_create, &\n      dbcsr_distribution_get, dbcsr_distribution_new, dbcsr_distribution_release, &\n      dbcsr_distribution_type, dbcsr_finalize, dbcsr_finalize_lib, dbcsr_get_stored_coordinates, &\n      dbcsr_init_lib, dbcsr_nblkcols_total, dbcsr_nblkrows_total, dbcsr_norm, &\n      dbcsr_norm_maxabsnorm, dbcsr_put_block, dbcsr_release, dbcsr_to_csr_filter, dbcsr_type, &\n      dbcsr_type_no_symmetry, dbcsr_type_real_8, dbcsr_print_statistics\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_mpiwrap, ONLY: mp_bcast, &\n                            mp_cart_create, &\n                            mp_comm_free, &\n                            mp_environ, &\n                            mp_world_finalize, &\n                            mp_world_init, mp_comm_type\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   TYPE(dbcsr_type)              :: matrix_a\n   TYPE(dbcsr_csr_type)          :: matrix_b\n\n   INTEGER, DIMENSION(:), POINTER :: col_blk_sizes, row_blk_sizes\n   INTEGER                        :: nblkrows_total, nblkcols_total\n\n   INTEGER, DIMENSION(:), POINTER :: col_dist, row_dist\n\n   INTEGER                      :: numnodes, mynode, io_unit\n\n   INTEGER, DIMENSION(2)                    :: npdims, myploc\n\n   INTEGER                      :: max_blks_total, max_blk_size, k, seedsz\n   INTEGER, ALLOCATABLE, DIMENSION(:)        ::seed\n\n   REAL                         :: rn\n   REAL, ALLOCATABLE, DIMENSION(:)        :: rn_array\n\n   REAL(KIND=real_8)            :: norm, norm_eps, sparsity, eps\n\n   CHARACTER(LEN=10)            :: k_str, mynode_str\n\n   TYPE(mp_comm_type)           :: mp_comm, group\n\n   ! Set up everything as in the dbcsr example codes\n   CALL mp_world_init(mp_comm)\n\n   CALL mp_environ(numnodes, mynode, mp_comm)\n\n   io_unit = 0\n   IF (mynode .EQ. 0) io_unit = default_output_unit\n\n   CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit)\n\n   npdims(:) = 0\n   CALL mp_cart_create(mp_comm, 2, npdims, myploc, group)\n   CALL mp_environ(numnodes, mynode, group)\n\n   ! Set seed for random number generator\n   CALL RANDOM_SEED(size=seedsz)\n   ALLOCATE (seed(seedsz))\n   seed = 434358235\n\n   ! Maximum number of blocks and maximum block sizes (in 1 dimension)\n   max_blks_total = 50\n   max_blk_size = 10\n\n   eps = 0.1_dp ! Filter threshold\n\n   DO k = 1, 100 ! test 100 matrices\n\n      CALL RANDOM_SEED(get=seed)\n      CALL mp_bcast(seed, 0, mp_comm)\n      CALL RANDOM_SEED(put=seed)\n\n      CALL RANDOM_NUMBER(rn)\n      nblkrows_total = FLOOR(rn*(max_blks_total)) + 1\n\n      CALL RANDOM_NUMBER(rn)\n      nblkcols_total = FLOOR(rn*(max_blks_total)) + 1\n\n      ALLOCATE (rn_array(MAX(nblkcols_total, nblkrows_total)))\n      ALLOCATE (col_blk_sizes(nblkcols_total))\n      ALLOCATE (row_blk_sizes(nblkrows_total))\n      ALLOCATE (row_dist(nblkrows_total))\n      ALLOCATE (col_dist(nblkcols_total))\n\n      CALL RANDOM_NUMBER(rn_array)\n      col_blk_sizes = FLOOR(rn_array(1:nblkcols_total)*(max_blk_size)) + 1\n\n      CALL RANDOM_NUMBER(rn_array)\n      row_blk_sizes = FLOOR(rn_array(1:nblkrows_total)*(max_blk_size)) + 1\n\n      CALL RANDOM_NUMBER(rn)\n      sparsity = rn\n\n      CALL RANDOM_NUMBER(rn_array)\n      row_dist = FLOOR(rn_array(1:nblkrows_total)*npdims(1))\n      CALL RANDOM_NUMBER(rn_array)\n      col_dist = FLOOR(rn_array(1:nblkcols_total)*npdims(2))\n\n      CALL make_random_dbcsr_matrix(matrix_a, group, col_blk_sizes, row_blk_sizes, col_dist, row_dist, sparsity)\n\n      WRITE (UNIT=k_str, FMT='(I0)') k\n      WRITE (UNIT=mynode_str, FMT='(I0)') mynode\n\n      CALL csr_conversion_test(matrix_a, matrix_b, norm, 0.0_dp)\n      CALL dbcsr_csr_destroy(matrix_b)\n      CALL csr_conversion_test(matrix_a, matrix_b, norm_eps, eps)\n      CALL dbcsr_csr_destroy(matrix_b)\n\n      IF ((norm > EPSILON(norm)) .OR. (norm_eps > eps)) THEN\n         IF (io_unit > 0) WRITE (io_unit, *) \"Conversion error > 0 for matrix no.\", k_str\n         DBCSR_ABORT(\"Error in csr conversion\")\n      ELSE\n         IF (io_unit > 0) WRITE (io_unit, *) \"Conversion OK!\"\n      END IF\n\n      CALL dbcsr_release(matrix_a)\n      DEALLOCATE (rn_array)\n\n   END DO\n\n   DEALLOCATE (seed)\n\n   CALL mp_comm_free(group)\n   call dbcsr_print_statistics(.true.)\n   CALL dbcsr_finalize_lib()\n   CALL mp_world_finalize()\n\nCONTAINS\n\n   SUBROUTINE csr_conversion_test(dbcsr_mat, csr_mat, norm, eps)\n      !! Test the conversion by converting to CSR format and converting back,\n      !! where the CSR sparsity is defined by some filtering threshold eps.\n      !! The maximum norm of the differences between the original and the\n      !! back-converted matrix is calculated.\n\n      TYPE(dbcsr_type), INTENT(IN)                       :: dbcsr_mat\n      TYPE(dbcsr_csr_type), INTENT(OUT)                  :: csr_mat\n      REAL(KIND=real_8), INTENT(OUT)                     :: norm\n      REAL(KIND=real_8), INTENT(IN)                      :: eps\n\n      TYPE(dbcsr_type)                                   :: csr_sparsity, dbcsr_mat_conv\n\n      CALL dbcsr_to_csr_filter(dbcsr_mat, csr_sparsity, eps)\n\n      CALL dbcsr_csr_create_from_dbcsr(dbcsr_mat, csr_mat, dbcsr_csr_eqrow_ceil_dist, csr_sparsity)\n      CALL dbcsr_convert_dbcsr_to_csr(dbcsr_mat, csr_mat)\n\n      CALL dbcsr_copy(dbcsr_mat_conv, dbcsr_mat)\n\n      CALL dbcsr_convert_csr_to_dbcsr(dbcsr_mat_conv, csr_mat)\n\n      CALL dbcsr_add(dbcsr_mat_conv, dbcsr_mat, 1.0_dp, -1.0_dp)\n      CALL dbcsr_norm(dbcsr_mat_conv, dbcsr_norm_maxabsnorm, norm_scalar=norm)\n\n      CALL dbcsr_release(dbcsr_mat_conv)\n      CALL dbcsr_release(csr_sparsity)\n   END SUBROUTINE csr_conversion_test\n\n   SUBROUTINE make_random_dbcsr_matrix(matrix_a, group, &\n      !! Create a DBCSR matrix with random values and random blocks\n                                       col_blk_sizes, row_blk_sizes, col_dist, row_dist, sparsity)\n      TYPE(dbcsr_type), INTENT(OUT)                      :: matrix_a\n      TYPE(mp_comm_type), INTENT(IN)                                :: group\n      INTEGER, DIMENSION(:), POINTER                     :: col_blk_sizes, row_blk_sizes, col_dist, &\n                                                            row_dist\n      REAL(real_8), INTENT(IN)                           :: sparsity\n\n      INTEGER                                            :: col, col_s, max_col_size, max_nze, &\n                                                            max_row_size, node_holds_blk, nze, &\n                                                            row, row_s\n      LOGICAL                                            :: tr\n      REAL(real_8)                                       :: rn\n      REAL(real_8), ALLOCATABLE, DIMENSION(:)            :: values\n      TYPE(dbcsr_distribution_type)                      :: dist\n\n      CALL dbcsr_distribution_new(dist, group=group%get_handle(), row_dist=row_dist, col_dist=col_dist, reuse_arrays=.TRUE.)\n\n      CALL dbcsr_create(matrix=matrix_a, &\n                        name=\"this is my matrix a\", &\n                        dist=dist, &\n                        matrix_type=dbcsr_type_no_symmetry, &\n                        row_blk_size=row_blk_sizes, &\n                        col_blk_size=col_blk_sizes, &\n                        data_type=dbcsr_type_real_8)\n\n      CALL dbcsr_distribution_get(dist, mynode=mynode)\n\n      ! get the maximum block size of the matrix\n      max_row_size = MAXVAL(row_blk_sizes)\n      max_col_size = MAXVAL(col_blk_sizes)\n      max_nze = max_row_size*max_col_size\n\n      ALLOCATE (values(max_nze))\n\n      DO row = 1, dbcsr_nblkrows_total(matrix_a)\n         DO col = 1, dbcsr_nblkcols_total(matrix_a)\n            CALL RANDOM_NUMBER(rn)\n            IF (rn .GT. sparsity) THEN\n               tr = .FALSE.\n               row_s = row; col_s = col\n               CALL dbcsr_get_stored_coordinates(matrix_a, row_s, col_s, node_holds_blk)\n               IF (node_holds_blk .EQ. mynode) THEN\n                  nze = row_blk_sizes(row_s)*col_blk_sizes(col_s)\n                  CALL RANDOM_NUMBER(values(1:nze))\n                  CALL dbcsr_put_block(matrix_a, row_s, col_s, values(1:nze))\n               END IF\n            END IF\n         END DO\n      END DO\n      DEALLOCATE (values)\n\n      CALL dbcsr_finalize(matrix_a)\n      CALL dbcsr_distribution_release(dist)\n      DEALLOCATE (row_blk_sizes, col_blk_sizes)\n\n   END SUBROUTINE make_random_dbcsr_matrix\n\nEND PROGRAM dbcsr_test_csr_conversions\n"
  },
  {
    "path": "tests/dbcsr_test_multiply.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_test_multiply\n   !! Tests for DBCSR multiply\n   USE dbcsr_data_methods, ONLY: dbcsr_data_get_sizes, &\n                                 dbcsr_data_init, &\n                                 dbcsr_data_new, &\n                                 dbcsr_data_release, &\n                                 dbcsr_scalar_negative, &\n                                 dbcsr_scalar_one, &\n                                 dbcsr_type_1d_to_2d\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new, &\n                                 dbcsr_distribution_release\n   USE dbcsr_io, ONLY: dbcsr_print\n   USE dbcsr_kinds, ONLY: real_4, &\n                          real_8\n   USE dbcsr_methods, ONLY: &\n      dbcsr_col_block_offsets, dbcsr_col_block_sizes, dbcsr_get_data_type, &\n      dbcsr_get_matrix_type, dbcsr_name, dbcsr_nblkcols_total, dbcsr_nblkrows_total, &\n      dbcsr_nfullcols_total, dbcsr_nfullrows_total, dbcsr_release, dbcsr_row_block_offsets, &\n      dbcsr_row_block_sizes\n   USE dbcsr_mpiwrap, ONLY: mp_bcast, &\n                            mp_environ, mp_comm_type\n   USE dbcsr_multiply_api, ONLY: dbcsr_multiply\n   USE dbcsr_operations, ONLY: dbcsr_copy, &\n                               dbcsr_get_occupation, &\n                               dbcsr_scale\n   USE dbcsr_test_methods, ONLY: compx_to_dbcsr_scalar, &\n                                 dbcsr_impose_sparsity, &\n                                 dbcsr_make_random_block_sizes, &\n                                 dbcsr_make_random_matrix, &\n                                 dbcsr_random_dist, &\n                                 dbcsr_to_dense_local\n   USE dbcsr_transformations, ONLY: dbcsr_redistribute, &\n                                    dbcsr_replicate_all\n   USE dbcsr_types, ONLY: &\n      dbcsr_conjugate_transpose, dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_mp_obj, &\n      dbcsr_no_transpose, dbcsr_scalar_type, dbcsr_transpose, dbcsr_type, &\n      dbcsr_type_antisymmetric, dbcsr_type_complex_4, dbcsr_type_complex_4_2d, &\n      dbcsr_type_complex_8, dbcsr_type_complex_8_2d, dbcsr_type_no_symmetry, dbcsr_type_real_4, &\n      dbcsr_type_real_4_2d, dbcsr_type_real_8, dbcsr_type_real_8_2d, dbcsr_type_symmetric\n   USE dbcsr_work_operations, ONLY: dbcsr_create\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_max_threads, omp_get_thread_num, omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC :: dbcsr_test_multiplies\n\n   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_test_multiply'\n\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n\nCONTAINS\n\n   SUBROUTINE dbcsr_test_multiplies(test_name, mp_group, mp_env, npdims, io_unit, &\n                                    matrix_sizes, bs_m, bs_n, bs_k, sparsities, &\n                                    alpha, beta, limits, retain_sparsity)\n      !! Performs a variety of matrix multiplies of same matrices on different\n      !! processor grids\n\n      CHARACTER(len=*), INTENT(IN)                       :: test_name\n      TYPE(mp_comm_type), INTENT(IN)                     :: mp_group\n         !! MPI communicator\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, DIMENSION(2), INTENT(in)                  :: npdims\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! which unit to write to, if not negative\n      INTEGER, DIMENSION(:), INTENT(in)                  :: matrix_sizes, bs_m, bs_n, bs_k\n         !! size of matrices to test\n         !! block sizes of the 3 dimension\n         !! block sizes of the 3 dimension\n         !! block sizes of the 3 dimension\n      REAL(real_8), DIMENSION(3), INTENT(in)             :: sparsities\n         !! sparsities of matrices to create\n      COMPLEX(real_8), INTENT(in)                        :: alpha, beta\n         !! alpha value to use in multiply\n         !! beta value to use in multiply\n      INTEGER, DIMENSION(6), INTENT(in)                  :: limits\n      LOGICAL, INTENT(in)                                :: retain_sparsity\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_test_multiplies'\n      CHARACTER, DIMENSION(3), PARAMETER :: &\n         trans = (/dbcsr_no_transpose, dbcsr_transpose, dbcsr_conjugate_transpose/)\n      CHARACTER, DIMENSION(3, 12), PARAMETER :: symmetries = &\n                                                RESHAPE((/dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, &\n                                                          dbcsr_type_no_symmetry, dbcsr_type_symmetric, &\n                                                          dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, &\n                                                          dbcsr_type_antisymmetric, dbcsr_type_no_symmetry, &\n                                                          dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, &\n                                                          dbcsr_type_symmetric, dbcsr_type_no_symmetry, &\n                                                          dbcsr_type_symmetric, dbcsr_type_symmetric, &\n                                                          dbcsr_type_no_symmetry, dbcsr_type_antisymmetric, &\n                                                          dbcsr_type_symmetric, dbcsr_type_no_symmetry, &\n                                                          dbcsr_type_no_symmetry, dbcsr_type_antisymmetric, &\n                                                          dbcsr_type_no_symmetry, dbcsr_type_symmetric, &\n                                                          dbcsr_type_antisymmetric, dbcsr_type_no_symmetry, &\n                                                          dbcsr_type_antisymmetric, dbcsr_type_antisymmetric, &\n                                                          dbcsr_type_no_symmetry, dbcsr_type_no_symmetry, &\n                                                          dbcsr_type_no_symmetry, dbcsr_type_symmetric, &\n                                                          dbcsr_type_symmetric, dbcsr_type_symmetric, &\n                                                          dbcsr_type_symmetric, dbcsr_type_antisymmetric, &\n                                                          dbcsr_type_antisymmetric, dbcsr_type_symmetric/), (/3, 12/))\n      INTEGER, DIMENSION(4), PARAMETER :: types = (/dbcsr_type_real_4, dbcsr_type_real_8, &\n                                                    dbcsr_type_complex_4, dbcsr_type_complex_8/)\n\n      CHARACTER                                          :: a_symm, b_symm, c_symm, transa, transb\n      INTEGER                                            :: a_c, a_r, a_tr, b_c, b_r, b_tr, c_c, &\n                                                            c_r, handle, isymm, itype, mynode, &\n                                                            numnodes, numthreads, TYPE\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: my_sizes_k, my_sizes_m, my_sizes_n, &\n                                                            sizes_k, sizes_m, sizes_n\n      LOGICAL                                            :: do_complex\n      TYPE(dbcsr_data_obj)                               :: data_a, data_b, data_c, data_c_dbcsr\n      TYPE(dbcsr_scalar_type)                            :: alpha_obj, beta_obj\n      TYPE(dbcsr_type)                                   :: matrix_a, matrix_b, matrix_c\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      NULLIFY (my_sizes_k, my_sizes_m, my_sizes_n, &\n               sizes_k, sizes_m, sizes_n)\n      !\n      ! print\n      CALL mp_environ(numnodes, mynode, mp_group)\n      IF (io_unit .GT. 0) THEN\n         WRITE (io_unit, *) 'test_name ', test_name\n         numthreads = 1\n!$OMP PARALLEL\n!$OMP MASTER\n!$       numthreads = omp_get_num_threads()\n!$OMP END MASTER\n!$OMP END PARALLEL\n         WRITE (io_unit, *) 'numthreads', numthreads\n         WRITE (io_unit, *) 'numnodes', numnodes\n         WRITE (io_unit, *) 'matrix_sizes', matrix_sizes\n         WRITE (io_unit, *) 'sparsities', sparsities\n         WRITE (io_unit, *) 'alpha', alpha\n         WRITE (io_unit, *) 'beta', beta\n         WRITE (io_unit, *) 'limits', limits\n         WRITE (io_unit, *) 'retain_sparsity', retain_sparsity\n         WRITE (io_unit, *) 'bs_m', bs_m\n         WRITE (io_unit, *) 'bs_n', bs_n\n         WRITE (io_unit, *) 'bs_k', bs_k\n      END IF\n      !\n      !\n      ! loop over symmetry\n      DO isymm = 1, SIZE(symmetries, 2)\n         a_symm = symmetries(1, isymm)\n         b_symm = symmetries(2, isymm)\n         c_symm = symmetries(3, isymm)\n\n         IF (a_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(3)) CYCLE\n         IF (b_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(2) .NE. matrix_sizes(3)) CYCLE\n         IF (c_symm .NE. dbcsr_type_no_symmetry .AND. matrix_sizes(1) .NE. matrix_sizes(2)) CYCLE\n\n         !\n         ! loop over types\n         DO itype = 1, SIZE(types)\n            TYPE = types(itype)\n\n            do_complex = TYPE .EQ. dbcsr_type_complex_4 .OR. TYPE .EQ. dbcsr_type_complex_8\n\n            alpha_obj = compx_to_dbcsr_scalar(alpha, TYPE)\n            beta_obj = compx_to_dbcsr_scalar(beta, TYPE)\n\n            IF (do_complex .AND. c_symm == dbcsr_type_symmetric) CYCLE\n\n            !\n            ! loop over transpositions\n            DO a_tr = 1, SIZE(trans)\n            DO b_tr = 1, SIZE(trans)\n               transa = trans(a_tr)\n               transb = trans(b_tr)\n\n               !\n               ! if C has a symmetry, we need special transpositions\n               IF (c_symm .NE. dbcsr_type_no_symmetry) THEN\n                  IF (.NOT. (transa .EQ. dbcsr_no_transpose .AND. transb .EQ. dbcsr_transpose .OR. &\n                             transa .EQ. dbcsr_transpose .AND. transb .EQ. dbcsr_no_transpose .OR. &\n                             transa .EQ. dbcsr_no_transpose .AND. transb .EQ. dbcsr_conjugate_transpose .AND. &\n                             .NOT. do_complex .OR. &\n                             transa .EQ. dbcsr_conjugate_transpose .AND. transb .EQ. dbcsr_no_transpose .AND. &\n                             .NOT. do_complex)) CYCLE\n               END IF\n               !\n               ! if C has symmetry and special limits\n               IF (c_symm .NE. dbcsr_type_no_symmetry) THEN\n                  IF (limits(1) .NE. 1 .OR. limits(2) .NE. matrix_sizes(1) .OR. &\n                      limits(3) .NE. 1 .OR. limits(4) .NE. matrix_sizes(2)) CYCLE\n               END IF\n\n               !\n               ! Create the row/column block sizes.\n               CALL dbcsr_make_random_block_sizes(sizes_m, matrix_sizes(1), bs_m)\n               CALL dbcsr_make_random_block_sizes(sizes_n, matrix_sizes(2), bs_n)\n               CALL dbcsr_make_random_block_sizes(sizes_k, matrix_sizes(3), bs_k)\n\n               !\n               ! if we have symmetry the row and column block sizes have to match\n               IF (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. &\n                   b_symm .NE. dbcsr_type_no_symmetry) THEN\n                  my_sizes_m => sizes_m\n                  my_sizes_n => sizes_m\n                  my_sizes_k => sizes_m\n               ELSE IF ((c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. &\n                         b_symm .NE. dbcsr_type_no_symmetry) .OR. &\n                        (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. &\n                         b_symm .NE. dbcsr_type_no_symmetry) .OR. &\n                        (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. &\n                         b_symm .EQ. dbcsr_type_no_symmetry)) THEN\n                  my_sizes_m => sizes_m\n                  my_sizes_n => sizes_m\n                  my_sizes_k => sizes_m\n               ELSE IF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. &\n                        b_symm .NE. dbcsr_type_no_symmetry) THEN\n                  my_sizes_m => sizes_m\n                  my_sizes_n => sizes_n\n                  my_sizes_k => sizes_n\n               ELSE IF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .NE. dbcsr_type_no_symmetry .AND. &\n                        b_symm .EQ. dbcsr_type_no_symmetry) THEN\n                  my_sizes_m => sizes_m\n                  my_sizes_n => sizes_n\n                  my_sizes_k => sizes_m\n               ELSE IF (c_symm .NE. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. &\n                        b_symm .EQ. dbcsr_type_no_symmetry) THEN\n                  my_sizes_m => sizes_m\n                  my_sizes_n => sizes_m\n                  my_sizes_k => sizes_k\n               ELSE IF (c_symm .EQ. dbcsr_type_no_symmetry .AND. a_symm .EQ. dbcsr_type_no_symmetry .AND. &\n                        b_symm .EQ. dbcsr_type_no_symmetry) THEN\n                  my_sizes_m => sizes_m\n                  my_sizes_n => sizes_n\n                  my_sizes_k => sizes_k\n               ELSE\n                  CALL dbcsr_abort(__LOCATION__, &\n                                   \"something wrong here... \")\n               END IF\n\n               IF (.FALSE.) THEN\n                  WRITE (*, *) 'sizes_m', my_sizes_m\n                  WRITE (*, *) 'sum(sizes_m)', SUM(my_sizes_m), ' matrix_sizes(1)', matrix_sizes(1)\n                  WRITE (*, *) 'sizes_n', my_sizes_n\n                  WRITE (*, *) 'sum(sizes_n)', SUM(my_sizes_n), ' matrix_sizes(2)', matrix_sizes(2)\n                  WRITE (*, *) 'sizes_k', my_sizes_k\n                  WRITE (*, *) 'sum(sizes_k)', SUM(my_sizes_k), ' matrix_sizes(3)', matrix_sizes(3)\n               END IF\n\n               !\n               ! Create the undistributed matrices.\n               CALL dbcsr_make_random_matrix(matrix_c, my_sizes_m, my_sizes_n, \"Matrix C\", &\n                                             sparsities(3), &\n                                             mp_group, data_type=TYPE, symmetry=c_symm)\n\n               IF (transa .NE. dbcsr_no_transpose) THEN\n                  CALL dbcsr_make_random_matrix(matrix_a, my_sizes_k, my_sizes_m, \"Matrix A\", &\n                                                sparsities(1), &\n                                                mp_group, data_type=TYPE, symmetry=a_symm)\n               ELSE\n                  CALL dbcsr_make_random_matrix(matrix_a, my_sizes_m, my_sizes_k, \"Matrix A\", &\n                                                sparsities(1), &\n                                                mp_group, data_type=TYPE, symmetry=a_symm)\n               END IF\n               IF (transb .NE. dbcsr_no_transpose) THEN\n                  CALL dbcsr_make_random_matrix(matrix_b, my_sizes_n, my_sizes_k, \"Matrix B\", &\n                                                sparsities(2), &\n                                                mp_group, data_type=TYPE, symmetry=b_symm)\n               ELSE\n                  CALL dbcsr_make_random_matrix(matrix_b, my_sizes_k, my_sizes_n, \"Matrix B\", &\n                                                sparsities(2), &\n                                                mp_group, data_type=TYPE, symmetry=b_symm)\n               END IF\n\n               DEALLOCATE (sizes_m, sizes_n, sizes_k)\n\n               !\n               ! if C has a symmetry, we build it accordingly, i.e. C=A*A and C=A*(-A)\n               IF (c_symm .NE. dbcsr_type_no_symmetry) THEN\n                  CALL dbcsr_copy(matrix_b, matrix_a)\n                  !print*, a_symm,b_symm,dbcsr_get_matrix_type(matrix_a),dbcsr_get_matrix_type(matrix_b)\n                  IF (c_symm .EQ. dbcsr_type_antisymmetric) THEN\n                     CALL dbcsr_scale(matrix_b, &\n                                      alpha_scalar=dbcsr_scalar_negative( &\n                                      dbcsr_scalar_one(TYPE)))\n                  END IF\n               END IF\n\n               !\n               ! convert the dbcsr matrices to denses\n               a_r = dbcsr_nfullrows_total(matrix_a)\n               a_c = dbcsr_nfullcols_total(matrix_a)\n               b_r = dbcsr_nfullrows_total(matrix_b)\n               b_c = dbcsr_nfullcols_total(matrix_b)\n               c_r = dbcsr_nfullrows_total(matrix_c)\n               c_c = dbcsr_nfullcols_total(matrix_c)\n               CALL dbcsr_data_init(data_a)\n               CALL dbcsr_data_init(data_b)\n               CALL dbcsr_data_init(data_c)\n               CALL dbcsr_data_init(data_c_dbcsr)\n               CALL dbcsr_data_new(data_a, dbcsr_type_1d_to_2d(TYPE), data_size=a_r, data_size2=a_c)\n               CALL dbcsr_data_new(data_b, dbcsr_type_1d_to_2d(TYPE), data_size=b_r, data_size2=b_c)\n               CALL dbcsr_data_new(data_c, dbcsr_type_1d_to_2d(TYPE), data_size=c_r, data_size2=c_c)\n               CALL dbcsr_data_new(data_c_dbcsr, dbcsr_type_1d_to_2d(TYPE), data_size=c_r, data_size2=c_c)\n               CALL dbcsr_to_dense_local(matrix_a, data_a)\n               CALL dbcsr_to_dense_local(matrix_b, data_b)\n               CALL dbcsr_to_dense_local(matrix_c, data_c)\n\n               !\n               ! Prepare test parameters\n               CALL test_multiply(test_name, mp_group, mp_env, npdims, io_unit, &\n                                  matrix_a, matrix_b, matrix_c, &\n                                  data_a, data_b, data_c, data_c_dbcsr, &\n                                  transa, transb, &\n                                  alpha_obj, beta_obj, &\n                                  limits, retain_sparsity)\n               !\n               ! cleanup\n               CALL dbcsr_release(matrix_a)\n               CALL dbcsr_release(matrix_b)\n               CALL dbcsr_release(matrix_c)\n               CALL dbcsr_data_release(data_a)\n               CALL dbcsr_data_release(data_b)\n               CALL dbcsr_data_release(data_c)\n               CALL dbcsr_data_release(data_c_dbcsr)\n\n            END DO\n            END DO\n\n         END DO ! itype\n\n      END DO !isymm\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_test_multiplies\n\n   SUBROUTINE test_multiply(test_name, mp_group, mp_env, npdims, io_unit, &\n                            matrix_a, matrix_b, matrix_c, &\n                            data_a, data_b, data_c, data_c_dbcsr, &\n                            transa, transb, alpha, beta, limits, retain_sparsity)\n      !! Performs a variety of matrix multiplies of same matrices on different\n      !! processor grids\n\n      CHARACTER(len=*), INTENT(IN)                       :: test_name\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_group\n         !! MPI communicator\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, DIMENSION(2), INTENT(in)                  :: npdims\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! which unit to write to, if not negative\n      TYPE(dbcsr_type), INTENT(in)                       :: matrix_a, matrix_b, matrix_c\n         !! matrices to multiply\n         !! matrices to multiply\n         !! matrices to multiply\n      TYPE(dbcsr_data_obj)                               :: data_a, data_b, data_c, data_c_dbcsr\n      CHARACTER, INTENT(in)                              :: transa, transb\n      TYPE(dbcsr_scalar_type), INTENT(in)                :: alpha, beta\n      INTEGER, DIMENSION(6), INTENT(in)                  :: limits\n      LOGICAL, INTENT(in)                                :: retain_sparsity\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'test_multiply'\n\n      INTEGER                                            :: c_a, c_b, c_c, handle, r_a, r_b, r_c\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: blk_offsets, col_dist_a, col_dist_b, &\n                                                            col_dist_c, row_dist_a, row_dist_b, &\n                                                            row_dist_c\n      LOGICAL                                            :: success\n      REAL(real_8)                                       :: occ_a, occ_b, occ_c_in, occ_c_out\n      TYPE(dbcsr_distribution_obj)                       :: dist_a, dist_b, dist_c\n      TYPE(dbcsr_type)                                   :: m_a, m_b, m_c\n\n!   ---------------------------------------------------------------------------\n\n      CALL timeset(routineN, handle)\n      NULLIFY (row_dist_a, col_dist_a, &\n               row_dist_b, col_dist_b, &\n               row_dist_c, col_dist_c)\n\n      IF (debug_mod .AND. io_unit .GT. 0) THEN\n         WRITE (io_unit, *) REPEAT(\"*\", 70)\n         WRITE (io_unit, *) \" -- TESTING dbcsr_multiply (\", transa, \", \", transb, &\n            \", \", dbcsr_get_data_type(m_a), &\n            \", \", dbcsr_get_matrix_type(m_a), &\n            \", \", dbcsr_get_matrix_type(m_b), &\n            \", \", dbcsr_get_matrix_type(m_c), &\n            \") ............... !\"\n         WRITE (io_unit, *) REPEAT(\"*\", 70)\n      END IF\n\n      ! Row & column distributions\n      CALL dbcsr_random_dist(row_dist_a, dbcsr_nblkrows_total(matrix_a), npdims(1))\n      CALL dbcsr_random_dist(col_dist_a, dbcsr_nblkcols_total(matrix_a), npdims(2))\n      CALL dbcsr_random_dist(row_dist_b, dbcsr_nblkrows_total(matrix_b), npdims(1))\n      CALL dbcsr_random_dist(col_dist_b, dbcsr_nblkcols_total(matrix_b), npdims(2))\n      CALL dbcsr_random_dist(row_dist_c, dbcsr_nblkrows_total(matrix_c), npdims(1))\n      CALL dbcsr_random_dist(col_dist_c, dbcsr_nblkcols_total(matrix_c), npdims(2))\n      CALL dbcsr_distribution_new(dist_a, mp_env, row_dist_a, col_dist_a, reuse_arrays=.TRUE.)\n      CALL dbcsr_distribution_new(dist_b, mp_env, row_dist_b, col_dist_b, reuse_arrays=.TRUE.)\n      CALL dbcsr_distribution_new(dist_c, mp_env, row_dist_c, col_dist_c, reuse_arrays=.TRUE.)\n      ! Redistribute the matrices\n      ! A\n      CALL dbcsr_create(m_a, \"Test for \"//TRIM(dbcsr_name(matrix_a)), &\n                        dist_a, dbcsr_get_matrix_type(matrix_a), &\n                        row_blk_size_obj=matrix_a%row_blk_size, &\n                        col_blk_size_obj=matrix_a%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix_a))\n      CALL dbcsr_distribution_release(dist_a)\n      CALL dbcsr_redistribute(matrix_a, m_a)\n      ! B\n      CALL dbcsr_create(m_b, \"Test for \"//TRIM(dbcsr_name(matrix_b)), &\n                        dist_b, dbcsr_get_matrix_type(matrix_b), &\n                        row_blk_size_obj=matrix_b%row_blk_size, &\n                        col_blk_size_obj=matrix_b%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix_b))\n      CALL dbcsr_distribution_release(dist_b)\n      CALL dbcsr_redistribute(matrix_b, m_b)\n      ! C\n      CALL dbcsr_create(m_c, \"Test for \"//TRIM(dbcsr_name(matrix_c)), &\n                        dist_c, dbcsr_get_matrix_type(matrix_c), &\n                        row_blk_size_obj=matrix_c%row_blk_size, &\n                        col_blk_size_obj=matrix_c%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix_c))\n      CALL dbcsr_distribution_release(dist_c)\n      CALL dbcsr_redistribute(matrix_c, m_c)\n\n      IF (.FALSE.) THEN\n         blk_offsets => dbcsr_row_block_offsets(matrix_c)\n         WRITE (*, *) 'row_block_offsets(matrix_c)', blk_offsets\n         blk_offsets => dbcsr_col_block_offsets(matrix_c)\n         WRITE (*, *) 'col_block_offsets(matrix_c)', blk_offsets\n      END IF\n\n      IF (.FALSE.) THEN\n         CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_in_')\n         CALL dbcsr_print(m_a, matlab_format=.FALSE., variable_name='a_')\n         CALL dbcsr_print(m_b, matlab_format=.FALSE., variable_name='b_')\n         CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_out_')\n      END IF\n\n      occ_a = dbcsr_get_occupation(m_a)\n      occ_b = dbcsr_get_occupation(m_b)\n      occ_c_in = dbcsr_get_occupation(m_c)\n\n      !\n      ! Perform multiply\n      IF (ALL(limits == 0)) THEN\n         DBCSR_ABORT(\"limits shouldnt be 0\")\n      ELSE\n         CALL dbcsr_multiply(transa, transb, alpha, &\n                             m_a, m_b, beta, m_c, &\n                             first_row=limits(1), &\n                             last_row=limits(2), &\n                             first_column=limits(3), &\n                             last_column=limits(4), &\n                             first_k=limits(5), &\n                             last_k=limits(6), &\n                             retain_sparsity=retain_sparsity)\n      END IF\n\n      occ_c_out = dbcsr_get_occupation(m_c)\n\n      IF (.FALSE.) THEN\n         PRINT *, 'retain_sparsity', retain_sparsity, occ_a, occ_b, occ_c_in, occ_c_out\n         CALL dbcsr_print(m_a, matlab_format=.TRUE., variable_name='a_')\n         CALL dbcsr_print(m_b, matlab_format=.TRUE., variable_name='b_')\n         CALL dbcsr_print(m_c, matlab_format=.FALSE., variable_name='c_out_')\n      END IF\n\n      CALL dbcsr_replicate_all(m_c)\n      CALL dbcsr_to_dense_local(m_c, data_c_dbcsr)\n      CALL dbcsr_check_multiply(test_name, m_c, data_c_dbcsr, data_a, data_b, data_c, &\n                                transa, transb, alpha, beta, limits, retain_sparsity, io_unit, mp_group, &\n                                success)\n\n      r_a = dbcsr_nfullrows_total(m_a)\n      c_a = dbcsr_nfullcols_total(m_a)\n      r_b = dbcsr_nfullrows_total(m_b)\n      c_b = dbcsr_nfullcols_total(m_b)\n      r_c = dbcsr_nfullrows_total(m_c)\n      c_c = dbcsr_nfullcols_total(m_c)\n      IF (io_unit .GT. 0) THEN\n         IF (success) THEN\n            WRITE (io_unit, *) REPEAT(\"*\", 70)\n            WRITE (io_unit, *) \" -- TESTING dbcsr_multiply (\", transa, \", \", transb, &\n               \", \", dbcsr_get_data_type(m_a), &\n               \", \", dbcsr_get_matrix_type(m_a), &\n               \", \", dbcsr_get_matrix_type(m_b), &\n               \", \", dbcsr_get_matrix_type(m_c), &\n               \") ............... PASSED !\"\n            WRITE (io_unit, *) REPEAT(\"*\", 70)\n         ELSE\n            WRITE (io_unit, *) REPEAT(\"*\", 70)\n            WRITE (io_unit, *) \" -- TESTING dbcsr_multiply (\", transa, \", \", transb, &\n               \", \", dbcsr_get_data_type(m_a), &\n               \", \", dbcsr_get_matrix_type(m_a), &\n               \", \", dbcsr_get_matrix_type(m_b), &\n               \", \", dbcsr_get_matrix_type(m_c), &\n               \") ... FAILED !\"\n            WRITE (io_unit, *) REPEAT(\"*\", 70)\n            DBCSR_ABORT('Test failed')\n         END IF\n      END IF\n\n      CALL dbcsr_release(m_a)\n      CALL dbcsr_release(m_b)\n      CALL dbcsr_release(m_c)\n\n      CALL timestop(handle)\n\n   END SUBROUTINE test_multiply\n\n   SUBROUTINE dbcsr_check_multiply(test_name, matrix_c, dense_c_dbcsr, dense_a, dense_b, dense_c, &\n                                   transa, transb, alpha, beta, limits, retain_sparsity, io_unit, mp_group, &\n                                   success)\n      !! Performs a check of matrix multiplies\n\n      CHARACTER(len=*), INTENT(IN)                       :: test_name\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix_c\n      TYPE(dbcsr_data_obj), INTENT(inout)                :: dense_c_dbcsr, dense_a, dense_b, dense_c\n         !! dense result of the dbcsr_multiply\n         !! input dense matrices\n         !! input dense matrices\n         !! input dense matrices\n      CHARACTER, INTENT(in)                              :: transa, transb\n         !! transposition status\n         !! transposition status\n      TYPE(dbcsr_scalar_type), INTENT(in)                :: alpha, beta\n         !! coefficients for the gemm\n         !! coefficients for the gemm\n      INTEGER, DIMENSION(6), INTENT(in)                  :: limits\n         !! limits for the gemm\n      LOGICAL, INTENT(in)                                :: retain_sparsity\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! io unit for printing\n      TYPE(mp_comm_type), INTENT(IN)                     :: mp_group\n      LOGICAL, INTENT(out)                               :: success\n         !! if passed the check success=T\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_check_multiply'\n      INTEGER :: a_col, a_m, a_n, a_row, b_col, b_m, b_n, b_row, c_col, c_col_size, c_row, &\n                 c_row_size, handle, i, istat, j, k, lda, ldb, ldc, lwork, m, mynode, n, numnodes\n      CHARACTER, PARAMETER                               :: norm = 'I'\n\n      LOGICAL                                            :: valid\n      REAL(real_4), ALLOCATABLE, DIMENSION(:)            :: work_sp\n#if defined (__ACCELERATE)\n      REAL(real_8), EXTERNAL                             :: clange, slamch, slange\n#else\n      REAL(real_4), EXTERNAL                             :: clange, slamch, slange\n#endif\n      REAL(real_8)                                       :: a_norm, b_norm, c_norm_dbcsr, c_norm_in, &\n                                                            c_norm_out, eps, eps_norm, residual\n      REAL(real_8), ALLOCATABLE, DIMENSION(:)            :: work\n      REAL(real_8), EXTERNAL                             :: dlamch, dlange, zlange\n\n      CALL timeset(routineN, handle)\n\n      CALL mp_environ(numnodes, mynode, mp_group)\n\n      CALL dbcsr_data_get_sizes(dense_c, c_row_size, c_col_size, valid)\n      IF (.NOT. valid) &\n         DBCSR_ABORT(\"dense matrix not valid\")\n      CALL dbcsr_data_get_sizes(dense_c, ldc, i, valid)\n      IF (.NOT. valid) &\n         DBCSR_ABORT(\"dense matrix not valid\")\n      CALL dbcsr_data_get_sizes(dense_a, lda, i, valid)\n      IF (.NOT. valid) &\n         DBCSR_ABORT(\"dense matrix not valid\")\n      CALL dbcsr_data_get_sizes(dense_b, ldb, i, valid)\n      IF (.NOT. valid) &\n         DBCSR_ABORT(\"dense matrix not valid\")\n      !\n      !\n      m = limits(2) - limits(1) + 1\n      n = limits(4) - limits(3) + 1\n      k = limits(6) - limits(5) + 1\n      a_row = limits(1); a_col = limits(5)\n      b_row = limits(5); b_col = limits(3)\n      c_row = limits(1); c_col = limits(3)\n      !\n      !\n      IF (transA == dbcsr_no_transpose) THEN\n         a_m = m\n         a_n = k\n      ELSE\n         a_m = k\n         a_n = m\n         i = a_row\n         a_row = a_col\n         a_col = i\n      END IF\n      IF (transB == dbcsr_no_transpose) THEN\n         b_m = k\n         b_n = n\n      ELSE\n         b_m = n\n         b_n = k\n         i = b_row\n         b_row = b_col\n         b_col = i\n      END IF\n      !\n      ! set the size of the work array\n      lwork = MAXVAL((/lda, ldb, ldc/))\n      !\n      !\n      SELECT CASE (dense_a%d%data_type)\n      CASE (dbcsr_type_real_8_2d)\n         ALLOCATE (work(lwork), STAT=istat)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"allocation problem\")\n         eps = dlamch('eps')\n         a_norm = dlange(norm, a_m, a_n, dense_a%d%r2_dp(a_row, a_col), lda, work)\n         b_norm = dlange(norm, b_m, b_n, dense_b%d%r2_dp(b_row, b_col), ldb, work)\n         c_norm_in = dlange(norm, c_row_size, c_col_size, dense_c%d%r2_dp(1, 1), ldc, work)\n         c_norm_dbcsr = dlange(norm, c_row_size, c_col_size, dense_c_dbcsr%d%r2_dp(1, 1), ldc, work)\n         !\n         CALL dgemm(transa, transb, m, n, k, alpha%r_dp, dense_a%d%r2_dp(a_row, a_col), lda, &\n                    dense_b%d%r2_dp(b_row, b_col), ldb, beta%r_dp, dense_c%d%r2_dp(c_row, c_col), ldc)\n         !\n         ! impose the sparsity if needed\n         IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_c, dense_c)\n         !\n         c_norm_out = dlange(norm, m, n, dense_c%d%r2_dp(c_row, c_col), ldc, work)\n         !\n         ! take the difference dense/sparse\n         dense_c%d%r2_dp = dense_c%d%r2_dp - dense_c_dbcsr%d%r2_dp\n         !\n         ! compute the residual\n         residual = dlange(norm, c_row_size, c_col_size, dense_c%d%r2_dp(1, 1), ldc, work)\n         DEALLOCATE (work)\n      CASE (dbcsr_type_real_4_2d)\n         ALLOCATE (work_sp(lwork), STAT=istat)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"allocation problem\")\n         eps = REAL(slamch('eps'), real_8)\n         a_norm = slange(norm, a_m, a_n, dense_a%d%r2_sp(a_row, a_col), lda, work_sp)\n         b_norm = slange(norm, b_m, b_n, dense_b%d%r2_sp(b_row, b_col), ldb, work_sp)\n         c_norm_in = slange(norm, c_row_size, c_col_size, dense_c%d%r2_sp(1, 1), ldc, work_sp)\n         c_norm_dbcsr = slange(norm, c_row_size, c_col_size, dense_c_dbcsr%d%r2_sp(1, 1), ldc, work_sp)\n         !\n\n         IF (.FALSE.) THEN\n            !IF (io_unit .GT. 0) THEN\n            DO j = 1, SIZE(dense_a%d%r2_sp, 2)\n               DO i = 1, SIZE(dense_a%d%r2_sp, 1)\n                  WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'a(', i, ',', j, ')=', dense_a%d%r2_sp(i, j), ';'\n               END DO\n            END DO\n            DO j = 1, SIZE(dense_b%d%r2_sp, 2)\n               DO i = 1, SIZE(dense_b%d%r2_sp, 1)\n                  WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'b(', i, ',', j, ')=', dense_b%d%r2_sp(i, j), ';'\n               END DO\n            END DO\n            DO j = 1, SIZE(dense_c%d%r2_sp, 2)\n               DO i = 1, SIZE(dense_c%d%r2_sp, 1)\n                  WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'c_in(', i, ',', j, ')=', dense_c%d%r2_sp(i, j), ';'\n               END DO\n            END DO\n         END IF\n\n         CALL sgemm(transa, transb, m, n, k, alpha%r_sp, dense_a%d%r2_sp(a_row, a_col), lda, &\n                    dense_b%d%r2_sp(b_row, b_col), ldb, beta%r_sp, dense_c%d%r2_sp(c_row, c_col), ldc)\n         !\n         ! impose the sparsity if needed\n         IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_c, dense_c)\n\n         IF (.FALSE.) THEN\n            !IF (io_unit .GT. 0) THEN\n            DO j = 1, SIZE(dense_c%d%r2_sp, 2)\n               DO i = 1, SIZE(dense_c%d%r2_sp, 1)\n                  WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'c_out(', i, ',', j, ')=', dense_c%d%r2_sp(i, j), ';'\n               END DO\n            END DO\n            DO j = 1, SIZE(dense_c_dbcsr%d%r2_sp, 2)\n               DO i = 1, SIZE(dense_c_dbcsr%d%r2_sp, 1)\n                  WRITE (*, '(A,I3,A,I3,A,E15.7,A)') 'c_dbcsr(', i, ',', j, ')=', dense_c_dbcsr%d%r2_sp(i, j), ';'\n               END DO\n            END DO\n         END IF\n         !\n         c_norm_out = slange(norm, m, n, dense_c%d%r2_sp(c_row, c_col), ldc, work_sp)\n         !\n         ! take the difference dense/sparse\n         dense_c%d%r2_sp = dense_c%d%r2_sp - dense_c_dbcsr%d%r2_sp\n         !\n         ! compute the residual\n         residual = REAL(slange(norm, c_row_size, c_col_size, dense_c%d%r2_sp(1, 1), ldc, work_sp), real_8)\n         DEALLOCATE (work_sp)\n      CASE (dbcsr_type_complex_8_2d)\n         ALLOCATE (work(lwork), STAT=istat)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"allocation problem\")\n         eps = dlamch('eps')\n         a_norm = zlange(norm, a_m, a_n, dense_a%d%c2_dp(a_row, a_col), lda, work)\n         b_norm = zlange(norm, b_m, b_n, dense_b%d%c2_dp(b_row, b_col), ldb, work)\n         c_norm_in = zlange(norm, c_row_size, c_col_size, dense_c%d%c2_dp(1, 1), ldc, work)\n         c_norm_dbcsr = zlange(norm, c_row_size, c_col_size, dense_c_dbcsr%d%c2_dp(1, 1), ldc, work)\n         !\n         CALL zgemm(transa, transb, m, n, k, alpha%c_dp, dense_a%d%c2_dp(a_row, a_col), lda, &\n                    dense_b%d%c2_dp(b_row, b_col), ldb, beta%c_dp, dense_c%d%c2_dp(c_row, c_col), ldc)\n         !\n         ! impose the sparsity if needed\n         IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_c, dense_c)\n         !\n         c_norm_out = zlange(norm, m, n, dense_c%d%c2_dp(c_row, c_col), ldc, work)\n         !\n         ! take the difference dense/sparse\n         dense_c%d%c2_dp = dense_c%d%c2_dp - dense_c_dbcsr%d%c2_dp\n         !\n         ! compute the residual\n         residual = zlange(norm, c_row_size, c_col_size, dense_c%d%c2_dp(1, 1), ldc, work)\n         DEALLOCATE (work)\n      CASE (dbcsr_type_complex_4_2d)\n         ALLOCATE (work_sp(lwork), STAT=istat)\n         IF (istat /= 0) &\n            DBCSR_ABORT(\"allocation problem\")\n         eps = REAL(slamch('eps'), real_8)\n         a_norm = clange(norm, a_m, a_n, dense_a%d%c2_sp(a_row, a_col), lda, work_sp)\n         b_norm = clange(norm, b_m, b_n, dense_b%d%c2_sp(b_row, b_col), ldb, work_sp)\n         c_norm_in = clange(norm, c_row_size, c_col_size, dense_c%d%c2_sp(1, 1), ldc, work_sp)\n         c_norm_dbcsr = clange(norm, c_row_size, c_col_size, dense_c_dbcsr%d%c2_sp(1, 1), ldc, work_sp)\n         !\n         CALL cgemm(transa, transb, m, n, k, alpha%c_sp, dense_a%d%c2_sp(a_row, a_col), lda, &\n                    dense_b%d%c2_sp(b_row, b_col), ldb, beta%c_sp, dense_c%d%c2_sp(c_row, c_col), ldc)\n         !\n         ! impose the sparsity if needed\n         IF (retain_sparsity) CALL dbcsr_impose_sparsity(matrix_c, dense_c)\n         !\n         c_norm_out = clange(norm, m, n, dense_c%d%c2_sp(c_row, c_col), ldc, work_sp)\n         !\n         ! take the difference dense/sparse\n         dense_c%d%c2_sp = dense_c%d%c2_sp - dense_c_dbcsr%d%c2_sp\n         !\n         ! compute the residual\n         residual = clange(norm, c_row_size, c_col_size, dense_c%d%c2_sp(1, 1), ldc, work_sp)\n         DEALLOCATE (work_sp)\n      CASE default\n         DBCSR_ABORT(\"Incorrect or 1-D data type\")\n      END SELECT\n\n      IF (mynode .EQ. 0) THEN\n         eps_norm = residual/((a_norm + b_norm + c_norm_in)*REAL(n, real_8)*eps)\n         IF (eps_norm .GT. 10.0_real_8) THEN\n            success = .FALSE.\n         ELSE\n            success = .TRUE.\n         END IF\n      END IF\n      !\n      ! synchronize the result...\n      CALL mp_bcast(success, 0, mp_group)\n      CALL mp_bcast(eps_norm, 0, mp_group)\n      !\n      ! printing\n      IF (io_unit .GT. 0) THEN\n         WRITE (io_unit, *) 'test_name ', test_name\n         !\n         ! check for nan or inf here\n         IF (success) THEN\n            WRITE (io_unit, '(A)') ' The solution is CORRECT !'\n         ELSE\n            WRITE (io_unit, '(A)') ' The solution is suspicious !'\n\n            WRITE (io_unit, '(3(A,E12.5))') ' residual ', residual, ', a_norm ', a_norm, ', b_norm ', b_norm\n            WRITE (io_unit, '(3(A,E12.5))') ' c_norm_in ', c_norm_in, ', c_norm_out ', c_norm_out, &\n               ', c_norm_dbcsr ', c_norm_dbcsr\n            WRITE (io_unit, '(A)') ' Checking the norm of the difference against reference GEMM '\n            WRITE (io_unit, '(A,E12.5)') ' -- ||C_dbcsr-C_dense||_oo/((||A||_oo+||B||_oo+||C||_oo).N.eps)=', &\n               eps_norm\n         END IF\n\n      END IF\n\n      CALL timestop(handle)\n\n   END SUBROUTINE dbcsr_check_multiply\n\nEND MODULE dbcsr_test_multiply\n"
  },
  {
    "path": "tests/dbcsr_test_scale_by_vector.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nMODULE dbcsr_test_scale_by_vector\n   !! Tests for DBCSR scale_by_vector\n   USE dbcsr_data_methods, ONLY: dbcsr_data_get_sizes, &\n                                 dbcsr_data_init, &\n                                 dbcsr_data_new, &\n                                 dbcsr_data_release, &\n                                 dbcsr_type_1d_to_2d\n   USE dbcsr_dist_methods, ONLY: dbcsr_distribution_new, &\n                                 dbcsr_distribution_release\n   USE dbcsr_kinds, ONLY: real_8\n   USE dbcsr_methods, ONLY: &\n      dbcsr_get_data_type, &\n      dbcsr_get_matrix_type, dbcsr_name, dbcsr_nblkcols_total, dbcsr_nblkrows_total, &\n      dbcsr_nfullcols_total, dbcsr_nfullrows_total, dbcsr_release\n\n   USE dbcsr_mpiwrap, ONLY: mp_environ, mp_comm_type\n   USE dbcsr_test_methods, ONLY: dbcsr_make_random_block_sizes, &\n                                 dbcsr_make_random_matrix, &\n                                 dbcsr_random_dist, &\n                                 dbcsr_to_dense_local\n   USE dbcsr_transformations, ONLY: dbcsr_redistribute, &\n                                    dbcsr_new_transposed\n   USE dbcsr_types, ONLY: &\n      dbcsr_data_obj, dbcsr_distribution_obj, dbcsr_mp_obj, dbcsr_type, &\n      dbcsr_type_antisymmetric, dbcsr_type_no_symmetry, dbcsr_type_symmetric, &\n      dbcsr_type_real_4, dbcsr_type_real_8, &\n      dbcsr_type_complex_4, dbcsr_type_complex_8\n   USE dbcsr_work_operations, ONLY: dbcsr_create\n   USE dbcsr_operations, ONLY: dbcsr_scale_by_vector\n   USE dbcsr_dist_util, ONLY: dbcsr_checksum\n#include \"base/dbcsr_base_uses.f90\"\n\n!$ USE OMP_LIB, ONLY: omp_get_num_threads\n\n   IMPLICIT NONE\n\n   PRIVATE\n\n   PUBLIC :: dbcsr_test_scale_by_vectors\n\n   LOGICAL, PARAMETER :: debug_mod = .FALSE.\n\nCONTAINS\n\n   FUNCTION dbcsr_test_scale_by_vectors(test_name, mp_group, mp_env, npdims, io_unit, &\n                                        matrix_size, bs_m, bs_n, sparsity, do_exact_comparison) RESULT(success)\n      !! Performs a variety of matrix multiplies of same matrices on different\n      !! processor grids\n\n      CHARACTER(len=*), INTENT(IN)                       :: test_name\n      TYPE(mp_comm_type), INTENT(IN)                                :: mp_group\n         !! MPI communicator\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, DIMENSION(2), INTENT(IN)                  :: npdims\n      INTEGER, INTENT(IN)                                :: io_unit\n         !! which unit to write to, if not negative\n      INTEGER, DIMENSION(2), INTENT(IN)                  :: matrix_size\n         !! size of matrix to test\n      INTEGER, DIMENSION(:), INTENT(IN)                  :: bs_m, bs_n\n         !! block sizes of the 2 dimension\n         !! block sizes of the 2 dimension\n      REAL(real_8), INTENT(IN)                           :: sparsity\n         !! sparsity of the matrix to create\n      LOGICAL, INTENT(IN)                                :: do_exact_comparison\n         !! whether or not to do exact comparison for the matrix values\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_test_scale_by_vectors'\n\n      CHARACTER, DIMENSION(3), PARAMETER :: symmetries = [dbcsr_type_no_symmetry, dbcsr_type_symmetric, dbcsr_type_antisymmetric]\n      INTEGER, DIMENSION(4), PARAMETER :: types = [dbcsr_type_real_4, dbcsr_type_real_8, dbcsr_type_complex_4, dbcsr_type_complex_8]\n\n      CHARACTER                                          :: symm\n      INTEGER                                            :: handle, isymm, itype, mynode, &\n                                                            numnodes, numthreads, type, nrows\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: sizes_m, sizes_n, sizes_1\n      LOGICAL                                            :: success\n      TYPE(dbcsr_data_obj)                               :: vector_data\n      TYPE(dbcsr_type)                                   :: matrix, vector\n\n      CALL timeset(routineN, handle)\n      NULLIFY (sizes_m, sizes_n, sizes_1)\n      !\n      ! print\n      CALL mp_environ(numnodes, mynode, mp_group)\n      IF (io_unit > 0) THEN\n         WRITE (io_unit, *) 'test_name ', test_name\n         numthreads = 1\n!$OMP PARALLEL\n!$OMP MASTER\n!$       numthreads = omp_get_num_threads()\n!$OMP END MASTER\n!$OMP END PARALLEL\n         WRITE (io_unit, *) 'numthreads', numthreads\n         WRITE (io_unit, *) 'numnodes', numnodes\n         WRITE (io_unit, *) 'matrix_size', matrix_size\n         WRITE (io_unit, *) 'sparsity', sparsity\n         WRITE (io_unit, *) 'bs_m', bs_m\n         WRITE (io_unit, *) 'bs_n', bs_n\n      END IF\n\n      success = .TRUE.\n      !\n      !\n      ! loop over symmetry\n      DO isymm = 1, SIZE(symmetries)\n         symm = symmetries(isymm)\n\n         IF (matrix_size(1) /= matrix_size(2) .AND. symm /= dbcsr_type_no_symmetry) &\n            CYCLE\n\n         !\n         ! loop over types\n         DO itype = 1, SIZE(types)\n            type = types(itype)\n\n            !\n            ! Create the row/column block sizes.\n            CALL dbcsr_make_random_block_sizes(sizes_m, matrix_size(1), bs_m)\n            CALL dbcsr_make_random_block_sizes(sizes_n, matrix_size(2), bs_n)\n            ALLOCATE (sizes_1(1))\n            sizes_1 = 1\n\n            !\n            ! Create the undistributed matrices.\n            CALL dbcsr_make_random_matrix(matrix, sizes_m, sizes_n, \"Matrix\", &\n                                          sparsity, mp_group, data_type=type, symmetry=symm)\n\n            !\n            ! Use a very skinny matrix to generate our test data\n            CALL dbcsr_make_random_matrix(vector, sizes_n, sizes_1, \"Vector\", 0.0_real_8, mp_group, data_type=type)\n\n            DEALLOCATE (sizes_m, sizes_n, sizes_1)\n\n            !\n            ! Densify the the vector\n            nrows = dbcsr_nfullrows_total(vector)\n            CALL dbcsr_data_init(vector_data)\n            CALL dbcsr_data_new(vector_data, type, data_size=nrows)\n            CALL dbcsr_to_dense_local(vector, vector_data)\n\n            IF (debug_mod .AND. io_unit > 0) THEN\n               CALL write_1d_data_obj(io_unit, vector_data)\n               CALL write_matrix_dense(io_unit, matrix)\n            END IF\n\n            !\n            ! Prepare test parameters\n            success = test_scale_by_vector(mp_env, npdims, matrix, vector_data, do_exact_comparison) .AND. success\n\n            IF (io_unit > 0) THEN\n               IF (success) THEN\n                  WRITE (io_unit, *) REPEAT(\"*\", 70)\n                  WRITE (io_unit, *) \" -- TESTING dbcsr_scale_by_vector (\", &\n                     dbcsr_get_data_type(matrix), &\n                     dbcsr_get_matrix_type(matrix), &\n                     do_exact_comparison, &\n                     \") ............... PASSED !\"\n                  WRITE (io_unit, *) REPEAT(\"*\", 70)\n               ELSE\n                  WRITE (io_unit, *) REPEAT(\"*\", 70)\n                  WRITE (io_unit, *) \" -- TESTING dbcsr_scale_by_vector (\", &\n                     dbcsr_get_data_type(matrix), &\n                     dbcsr_get_matrix_type(matrix), &\n                     do_exact_comparison, &\n                     \") ............... FAILED !\"\n                  WRITE (io_unit, *) REPEAT(\"*\", 70)\n               END IF\n            END IF\n\n            !\n            ! cleanup\n            CALL dbcsr_release(matrix)\n            CALL dbcsr_release(vector)\n            CALL dbcsr_data_release(vector_data)\n\n         END DO ! itype\n      END DO !isymm\n\n      CALL timestop(handle)\n   END FUNCTION\n\n   SUBROUTINE write_1d_data_obj(io_unit, vector)\n      INTEGER, INTENT(IN)               :: io_unit\n      TYPE(dbcsr_data_obj), INTENT(IN)  :: vector\n\n      INTEGER                           :: i, sz\n      LOGICAL                           :: valid\n\n      CALL dbcsr_data_get_sizes(vector, sz, valid)\n\n      IF (.NOT. valid) &\n         RETURN\n\n      SELECT CASE (vector%d%data_type)\n      CASE (dbcsr_type_real_4)\n         WRITE (io_unit, \"(A,I3)\") \"Vector dbcsr_type_real_4, size:\", sz\n         DO i = 1, SIZE(vector%d%r_sp)\n            WRITE (io_unit, '(T2,A,I3,A,E15.7,A)') 'vector(', i, ')=', vector%d%r_sp(i), ';'\n         END DO\n      CASE (dbcsr_type_real_8)\n         WRITE (io_unit, \"(A,I3)\") \"Vector dbcsr_type_real_8, size:\", sz\n         DO i = 1, SIZE(vector%d%r_dp)\n            WRITE (io_unit, '(T2,A,I3,A,E15.7,A)') 'vector(', i, ')=', vector%d%r_dp(i), ';'\n         END DO\n      CASE (dbcsr_type_complex_4)\n         WRITE (io_unit, \"(A,I3)\") \"Vector dbcsr_type_complex_4, size:\", sz\n         DO i = 1, SIZE(vector%d%c_sp)\n            WRITE (io_unit, '(T2,A,I3,A,E15.7,SP,E15.7,\"i\",A)') 'vector(', i, ')=', vector%d%c_sp(i), ';'\n         END DO\n      CASE (dbcsr_type_complex_8)\n         WRITE (io_unit, \"(A,I3)\") \"Vector dbcsr_type_complex_8, size:\", sz\n         DO i = 1, SIZE(vector%d%c_dp)\n            WRITE (io_unit, '(T2,A,I3,A,E15.7,SP,E15.7,\"i\",A)') 'vector(', i, ')=', vector%d%c_dp(i), ';'\n         END DO\n      END SELECT\n   END SUBROUTINE\n\n   SUBROUTINE write_matrix_dense(io_unit, matrix)\n      INTEGER, INTENT(IN)               :: io_unit\n      TYPE(dbcsr_type), INTENT(IN)      :: matrix\n\n      TYPE(dbcsr_data_obj)              :: mdata\n      INTEGER                           :: i, j, sz(2)\n      LOGICAL                           :: valid\n\n      CALL dbcsr_data_init(mdata)\n      CALL dbcsr_data_new(mdata, dbcsr_type_1d_to_2d(matrix%data_type), &\n                          data_size=dbcsr_nfullrows_total(matrix), data_size2=dbcsr_nfullcols_total(matrix))\n      CALL dbcsr_to_dense_local(matrix, mdata)\n\n      CALL dbcsr_data_get_sizes(mdata, sz, valid)\n\n      IF (.NOT. valid) &\n         CALL dbcsr_abort(__LOCATION__, &\n                          \"densification failed?!\")\n\n      SELECT CASE (matrix%data_type)\n      CASE (dbcsr_type_real_4)\n         WRITE (io_unit, \"(A,I3,I3)\") \"Matrix dbcsr_type_real_4, size:\", sz\n         DO j = 1, SIZE(mdata%d%r2_sp, 2)\n            DO i = 1, SIZE(mdata%d%r2_sp, 1)\n               WRITE (io_unit, '(T2,A,I3,A,I3,A,E15.7,A)') 'matrix(', i, ',', j, ')=', mdata%d%r2_sp(i, j), ';'\n            END DO\n         END DO\n      CASE (dbcsr_type_real_8)\n         WRITE (io_unit, \"(A,I3,I3)\") \"Matrix dbcsr_type_real_8, size:\", sz\n         DO j = 1, SIZE(mdata%d%r2_dp, 2)\n            DO i = 1, SIZE(mdata%d%r2_dp, 1)\n               WRITE (io_unit, '(T2,A,I3,A,I3,A,E15.7,A)') 'matrix(', i, ',', j, ')=', mdata%d%r2_dp(i, j), ';'\n            END DO\n         END DO\n      CASE (dbcsr_type_complex_4)\n         WRITE (io_unit, \"(A,I3,I3)\") \"Matrix dbcsr_type_complex_4, size:\", sz\n         DO j = 1, SIZE(mdata%d%c2_sp, 2)\n            DO i = 1, SIZE(mdata%d%c2_sp, 1)\n               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), ';'\n            END DO\n         END DO\n      CASE (dbcsr_type_complex_8)\n         WRITE (io_unit, \"(A,I3,I3)\") \"Matrix dbcsr_type_complex_8, size:\", sz\n         DO j = 1, SIZE(mdata%d%c2_dp, 2)\n            DO i = 1, SIZE(mdata%d%c2_dp, 1)\n               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), ';'\n            END DO\n         END DO\n      END SELECT\n\n      CALL dbcsr_data_release(mdata)\n   END SUBROUTINE\n\n   FUNCTION test_scale_by_vector(mp_env, npdims, matrix, vector, do_exact_comparison) RESULT(res)\n      !! Performs T(v * T(M)) == M*v\n      TYPE(dbcsr_mp_obj), INTENT(IN)                     :: mp_env\n      INTEGER, DIMENSION(2), INTENT(IN)                  :: npdims\n         !! processor grid\n      TYPE(dbcsr_type), INTENT(IN)                       :: matrix\n         !! matrix to scale\n      TYPE(dbcsr_data_obj), INTENT(IN)                   :: vector\n         !! scaling vector\n      LOGICAL, INTENT(IN)                                :: do_exact_comparison\n         !! whether to do an exact comparison (via densification)\n\n      INTEGER                                            :: handle\n      INTEGER, DIMENSION(:), POINTER, CONTIGUOUS         :: col_dist, row_dist\n      TYPE(dbcsr_distribution_obj)                       :: dist\n      TYPE(dbcsr_type)                                   :: matrix_right, matrix_left, matrix_left_transposed\n      LOGICAL                                            :: res\n\n      CHARACTER(len=*), PARAMETER :: routineN = 'test_scale_by_vector'\n\n      CALL timeset(routineN, handle)\n      NULLIFY (row_dist, col_dist)\n\n      ! Row & column distributions\n      CALL dbcsr_random_dist(row_dist, dbcsr_nblkrows_total(matrix), npdims(1))\n      CALL dbcsr_random_dist(col_dist, dbcsr_nblkcols_total(matrix), npdims(2))\n      CALL dbcsr_distribution_new(dist, mp_env, row_dist, col_dist, reuse_arrays=.TRUE.)\n\n      ! Create redistributed matrix\n      CALL dbcsr_create(matrix_right, \"RHS Test for \"//TRIM(dbcsr_name(matrix)), &\n                        dist, dbcsr_get_matrix_type(matrix), &\n                        row_blk_size_obj=matrix%row_blk_size, &\n                        col_blk_size_obj=matrix%col_blk_size, &\n                        data_type=dbcsr_get_data_type(matrix))\n\n      CALL dbcsr_distribution_release(dist)\n      CALL dbcsr_redistribute(matrix, matrix_right)\n\n      CALL dbcsr_new_transposed(matrix_left, matrix_right)\n\n      !\n      ! Perform scaling, once from right, once from left\n      CALL dbcsr_scale_by_vector(matrix_right, vector, side=\"right\")\n      CALL dbcsr_scale_by_vector(matrix_left, vector, side=\"left\")\n\n      ! for the comparison we need the transposed LHS again\n      CALL dbcsr_new_transposed(matrix_left_transposed, matrix_left)\n\n      ! now compare either exactly via densification or less exactly via checksums\n      IF (do_exact_comparison) THEN\n         BLOCK\n            TYPE(dbcsr_data_obj)              :: mdata_left, mdata_right\n\n            CALL dbcsr_data_init(mdata_left)\n            CALL dbcsr_data_new(mdata_left, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix_left_transposed)), &\n                                data_size=dbcsr_nfullrows_total(matrix_left_transposed), &\n                                data_size2=dbcsr_nfullcols_total(matrix_left_transposed))\n            CALL dbcsr_to_dense_local(matrix_left_transposed, mdata_left)\n\n            CALL dbcsr_data_init(mdata_right)\n            CALL dbcsr_data_new(mdata_right, dbcsr_type_1d_to_2d(dbcsr_get_data_type(matrix_right)), &\n                                data_size=dbcsr_nfullrows_total(matrix_right), data_size2=dbcsr_nfullcols_total(matrix_right))\n            CALL dbcsr_to_dense_local(matrix_right, mdata_right)\n\n            SELECT CASE (dbcsr_get_data_type(matrix_right))\n            CASE (dbcsr_type_real_4)\n               res = ALL(ABS(mdata_right%d%r2_sp - mdata_left%d%r2_sp) < 1.0D-5)\n            CASE (dbcsr_type_real_8)\n               res = ALL(ABS(mdata_right%d%r2_dp - mdata_left%d%r2_dp) < 1.0D-5)\n            CASE (dbcsr_type_complex_4)\n               res = ALL(ABS(mdata_right%d%c2_sp - mdata_left%d%c2_sp) < 1.0D-5)\n            CASE (dbcsr_type_complex_8)\n               res = ALL(ABS(mdata_right%d%c2_dp - mdata_left%d%c2_dp) < 1.0D-5)\n            END SELECT\n\n            CALL dbcsr_data_release(mdata_left)\n            CALL dbcsr_data_release(mdata_right)\n         END BLOCK\n      ELSE\n         !\n         ! Calculate checksums and set result\n         res = ABS(dbcsr_checksum(matrix_right, pos=.TRUE.) - dbcsr_checksum(matrix_left_transposed, pos=.TRUE.)) < 1.0D-5\n      END IF\n\n      CALL dbcsr_release(matrix_left)\n      CALL dbcsr_release(matrix_left_transposed)\n      CALL dbcsr_release(matrix_right)\n\n      CALL timestop(handle)\n   END FUNCTION\nEND MODULE\n"
  },
  {
    "path": "tests/dbcsr_unittest1.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_unittest_1\n   !! Tests for DBCSR operations:\n   !! add, multiply and multiply-ghost\n\n   USE dbcsr_kinds, ONLY: dp\n   USE dbcsr_lib, ONLY: dbcsr_finalize_lib, &\n                        dbcsr_init_lib, &\n                        dbcsr_print_statistics\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, &\n                               dbcsr_mp_release\n   USE dbcsr_mpiwrap, ONLY: mp_cart_create, &\n                            mp_cart_rank, &\n                            mp_comm_free, &\n                            mp_environ, &\n                            mp_world_finalize, &\n                            mp_world_init, mp_comm_type\n   USE dbcsr_test_add, ONLY: dbcsr_test_adds\n   USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed\n   USE dbcsr_test_multiply, ONLY: dbcsr_test_multiplies\n   USE dbcsr_types, ONLY: dbcsr_mp_obj\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   INTEGER                                  :: numnodes, mynode, &\n                                               prow, pcol, io_unit, handle\n   INTEGER, DIMENSION(2)                    :: npdims, myploc\n   INTEGER, DIMENSION(:, :), POINTER         :: pgrid\n   TYPE(dbcsr_mp_obj)                       :: mp_env\n   TYPE(mp_comm_type)                       :: mp_comm, group\n\n   CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_unittest'\n\n   !***************************************************************************************\n\n   ! initialize mpi\n   CALL mp_world_init(mp_comm)\n\n   ! setup the mp environment\n   npdims(:) = 0\n   CALL mp_cart_create(mp_comm, 2, npdims, myploc, group)\n   CALL mp_environ(numnodes, mynode, group)\n   ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1))\n   DO prow = 0, npdims(1) - 1\n      DO pcol = 0, npdims(2) - 1\n         CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol))\n      END DO\n   END DO\n   CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, &\n                     myprow=myploc(1), mypcol=myploc(2))\n   DEALLOCATE (pgrid)\n\n   ! set standard output parameters\n   io_unit = 0\n   IF (mynode .EQ. 0) io_unit = default_output_unit\n\n   ! initialize libdbcsr\n   CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit)\n\n   ! initialize libdbcsr errors\n   CALL timeset(routineN, handle)\n\n   CALL dbcsr_reset_randmat_seed()\n\n   ! run tests\n\n   ! add -----------------------------------------------------------------------\n\n   CALL dbcsr_test_adds(\"add_1\", &\n                        group, mp_env, npdims, io_unit, matrix_sizes=(/50, 25/), &\n                        sparsities=(/0.7_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                        alpha=CMPLX(1.0_dp, 1.0_dp, dp), beta=CMPLX(2.0_dp, 2.0_dp, dp), &\n                        bs_m=(/1, 2/), bs_n=(/1, 2, 1, 3/), &\n                        limits=(/1, 50, 1, 25/))\n\n   CALL dbcsr_test_adds(\"add_2\", &\n                        group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50/), &\n                        sparsities=(/0.4_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                        alpha=CMPLX(3.0_dp, 2.0_dp, dp), beta=CMPLX(4.0_dp, 0.5_dp, dp), &\n                        bs_m=(/1, 2/), bs_n=(/1, 2/), &\n                        limits=(/1, 50, 1, 50/))\n\n   ! multiply ------------------------------------------------------------------\n\n   CALL dbcsr_test_multiplies(\"multiply_ALPHA\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(-3.0_dp, -4.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 4/), bs_n=(/1, 4/), bs_k=(/1, 4/), &\n                              limits=(/2, 6, 3, 7, 6, 7/))\n\n   CALL dbcsr_test_multiplies(\"multiply_BETA\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(3.0_dp, -2.0_dp, dp), &\n                              bs_m=(/1, 4/), bs_n=(/1, 4/), bs_k=(/1, 4/), &\n                              limits=(/2, 6, 3, 7, 6, 7/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_COL_1\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 50, 1, 20, 1, 50/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_COL_2\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 50, 9, 18, 1, 50/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_COL_3\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 50, 9, 18, 1, 50/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_COL_4\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 25, 9, 18, 1, 75/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_K_1\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 50, 1, 50, 1, 20/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_K_2\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 50, 1, 50, 9, 18/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_K_3\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 50, 1, 50, 9, 18/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_K_4\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 25, 1, 50, 9, 18/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_MIX_1\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/9, 18, 11, 20, 1, 50/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_MIX_2\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 50, 9, 10, 11, 20/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_MIX_3\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/9, 20, 1, 50, 11, 18/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_MIX_4\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/11, 20, 11, 20, 13, 18/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_MIX_5\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/11, 20, 11, 20, 13, 18/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_MIX_6\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/11, 20, 11, 20, 13, 18/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_MIX_7\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 1.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2, 1, 3/), bs_k=(/1, 3, 1, 2, 1, 0/), &\n                              limits=(/11, 20, 11, 20, 6, 10/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_ROW_1\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 20, 1, 50, 1, 50/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_ROW_2\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/9, 18, 1, 50, 1, 50/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_ROW_3\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/9, 18, 1, 50, 1, 50/))\n\n   CALL dbcsr_test_multiplies(\"multiply_LIMITS_ROW_4\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/25, 50, 75/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/9, 18, 1, 50, 1, 75/))\n\n   CALL dbcsr_test_multiplies(\"multiply_RT\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 50, 1, 50, 1, 50/))\n\n   CALL dbcsr_test_multiplies(\"multiply_SQ\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 50/), &\n                              sparsities=(/0.0_dp, 0.0_dp, 0.0_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 50, 1, 50, 1, 50/))\n\n   ! multiply-ghost ------------------------------------------------------------\n\n   CALL dbcsr_test_multiplies(\"ub2\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 4/), bs_n=(/1, 4/), bs_k=(/1, 4/), &\n                              limits=(/2, 6, 3, 7, 6, 7/))\n\n   CALL dbcsr_test_multiplies(\"ub-k-ghost\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 4/), bs_n=(/1, 4/), bs_k=(/1, 4, 1, 0/), &\n                              limits=(/2, 6, 3, 7, 2, 7/))\n\n   CALL dbcsr_test_multiplies(\"ub-m-ghost\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 4, 1, 0/), bs_n=(/1, 4/), bs_k=(/1, 4/), &\n                              limits=(/2, 6, 3, 7, 2, 7/))\n\n   CALL dbcsr_test_multiplies(\"ub-mnk-ghost\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 4, 1, 0/), bs_n=(/1, 4, 1, 0/), bs_k=(/1, 4, 1, 0/), &\n                              limits=(/2, 6, 3, 7, 2, 7/))\n\n   CALL dbcsr_test_multiplies(\"ub-n-ghost\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 4/), bs_n=(/1, 4, 1, 0/), bs_k=(/1, 4/), &\n                              limits=(/2, 6, 3, 7, 2, 7/))\n\n   CALL dbcsr_test_multiplies(\"ub\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/20, 20, 20/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.TRUE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 2/), bs_n=(/1, 2/), bs_k=(/1, 2/), &\n                              limits=(/1, 20, 1, 20, 9, 18/))\n\n   ! end of test cases ---------------------------------------------------------\n\n   CALL timestop(handle)\n\n   ! clean mp environment\n   CALL dbcsr_mp_release(mp_env)\n\n   ! finalize mpi\n   CALL mp_comm_free(group)\n\n   call dbcsr_print_statistics(.true.)\n   ! finalize libdbcsr\n   CALL dbcsr_finalize_lib()\n   CALL mp_world_finalize()\n\nEND PROGRAM dbcsr_unittest_1\n"
  },
  {
    "path": "tests/dbcsr_unittest2.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_unittest_2\n   !! Tests for DBCSR multiply:\n   !! large blocks (block size=100)\n   !! and rectangular matrices (block size=5)\n\n   USE dbcsr_kinds, ONLY: dp\n   USE dbcsr_lib, ONLY: dbcsr_finalize_lib, &\n                        dbcsr_init_lib, &\n                        dbcsr_print_statistics\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, &\n                               dbcsr_mp_release\n   USE dbcsr_mpiwrap, ONLY: mp_cart_create, &\n                            mp_cart_rank, &\n                            mp_comm_free, &\n                            mp_environ, &\n                            mp_world_finalize, &\n                            mp_world_init, mp_comm_type\n   USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed\n   USE dbcsr_test_multiply, ONLY: dbcsr_test_multiplies\n   USE dbcsr_types, ONLY: dbcsr_mp_obj\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   INTEGER                                  :: numnodes, mynode, &\n                                               prow, pcol, io_unit, handle\n   INTEGER, DIMENSION(2)                    :: npdims, myploc\n   INTEGER, DIMENSION(:, :), POINTER         :: pgrid\n   TYPE(dbcsr_mp_obj)                       :: mp_env\n   TYPE(mp_comm_type)                       :: mp_comm, group\n\n   CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_unittest'\n\n   !***************************************************************************************\n\n   ! initialize mpi\n   CALL mp_world_init(mp_comm)\n\n   ! setup the mp environment\n   npdims(:) = 0\n   CALL mp_cart_create(mp_comm, 2, npdims, myploc, group)\n   CALL mp_environ(numnodes, mynode, group)\n   ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1))\n   DO prow = 0, npdims(1) - 1\n      DO pcol = 0, npdims(2) - 1\n         CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol))\n      END DO\n   END DO\n   CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, &\n                     myprow=myploc(1), mypcol=myploc(2))\n   DEALLOCATE (pgrid)\n\n   ! set standard output parameters\n   io_unit = 0\n   IF (mynode .EQ. 0) io_unit = default_output_unit\n\n   ! initialize libdbcsr\n   CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit)\n\n   ! initialize libdbcsr errors\n   CALL timeset(routineN, handle)\n\n   CALL dbcsr_reset_randmat_seed()\n\n   ! run tests\n\n   ! multiply ------------------------------------------------------------------\n\n   ! Large Blocks\n   CALL dbcsr_test_multiplies(\"large_blocks_1\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/500, 500, 500/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 100/), bs_n=(/1, 100/), bs_k=(/1, 100/), &\n                              limits=(/1, 500, 1, 500, 1, 500/))\n\n   CALL dbcsr_test_multiplies(\"large_blocks_2\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/500, 50, 50/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 100/), bs_n=(/1, 10/), bs_k=(/1, 10/), &\n                              limits=(/1, 500, 1, 50, 1, 50/))\n\n   ! Rectangular matrices\n   CALL dbcsr_test_multiplies(\"rectangular_matrix_M\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/500, 50, 50/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 5/), bs_n=(/1, 5/), bs_k=(/1, 5/), &\n                              limits=(/1, 500, 1, 50, 1, 50/))\n\n   CALL dbcsr_test_multiplies(\"rectangular_matrix_K\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/50, 50, 500/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 5/), bs_n=(/1, 5/), bs_k=(/1, 5/), &\n                              limits=(/1, 50, 1, 50, 1, 500/))\n\n   ! end of test cases ---------------------------------------------------------\n\n   ! finalize libdbcsr errors\n   CALL timestop(handle)\n\n   ! clean mp environment\n   CALL dbcsr_mp_release(mp_env)\n\n   ! finalize mpi\n   CALL mp_comm_free(group)\n\n   call dbcsr_print_statistics(.true.)\n   ! finalize libdbcsr\n   CALL dbcsr_finalize_lib()\n\n   CALL mp_world_finalize()\n\nEND PROGRAM dbcsr_unittest_2\n"
  },
  {
    "path": "tests/dbcsr_unittest3.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_unittest_3\n   !! Tests for DBCSR multiply:\n   !! various block sizes that are run by the libsmm_acc GPU backend if\n   !! DBCSR is compiled with GPU support.\n\n   USE dbcsr_kinds, ONLY: dp\n   USE dbcsr_lib, ONLY: dbcsr_finalize_lib, &\n                        dbcsr_init_lib, &\n                        dbcsr_print_statistics\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, &\n                               dbcsr_mp_release\n   USE dbcsr_mpiwrap, ONLY: mp_cart_create, &\n                            mp_cart_rank, &\n                            mp_comm_free, &\n                            mp_environ, &\n                            mp_world_finalize, &\n                            mp_world_init, mp_comm_type\n   USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed\n   USE dbcsr_test_multiply, ONLY: dbcsr_test_multiplies\n   USE dbcsr_types, ONLY: dbcsr_mp_obj\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   INTEGER                                  :: numnodes, mynode, &\n                                               prow, pcol, io_unit, handle\n   INTEGER, DIMENSION(2)                    :: npdims, myploc\n   INTEGER, DIMENSION(:, :), POINTER         :: pgrid\n   TYPE(dbcsr_mp_obj)                       :: mp_env\n   TYPE(mp_comm_type)                       :: mp_comm, group\n\n   CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_unittest'\n\n   !***************************************************************************************\n\n   ! initialize mpi\n   CALL mp_world_init(mp_comm)\n\n   ! setup the mp environment\n   npdims(:) = 0\n   CALL mp_cart_create(mp_comm, 2, npdims, myploc, group)\n   CALL mp_environ(numnodes, mynode, group)\n   ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1))\n   DO prow = 0, npdims(1) - 1\n      DO pcol = 0, npdims(2) - 1\n         CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol))\n      END DO\n   END DO\n   CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, &\n                     myprow=myploc(1), mypcol=myploc(2))\n   DEALLOCATE (pgrid)\n\n   ! set standard output parameters\n   io_unit = 0\n   IF (mynode .EQ. 0) io_unit = default_output_unit\n\n   ! initialize libdbcsr\n   CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit)\n\n   ! initialize libdbcsr errors\n   CALL timeset(routineN, handle)\n\n   CALL dbcsr_reset_randmat_seed()\n\n   ! run tests\n\n   ! multiply ------------------------------------------------------------------\n\n   CALL dbcsr_test_multiplies(\"blocks_1_3_4\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/496, 48, 48/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 1, 1, 3, 1, 4/), bs_n=(/1, 1, 1, 3, 1, 4/), bs_k=(/1, 1, 1, 3, 1, 4/), &\n                              limits=(/1, 496, 1, 48, 1, 48/))\n   CALL dbcsr_test_multiplies(\"blocks_4_5_7\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/496, 48, 48/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 4, 1, 5, 1, 7/), bs_n=(/1, 4, 1, 5, 1, 7/), bs_k=(/1, 4, 1, 5, 1, 7/), &\n                              limits=(/1, 496, 1, 48, 1, 48/))\n   CALL dbcsr_test_multiplies(\"blocks_5_8_9\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/506, 44, 44/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 5, 1, 8, 1, 9/), bs_n=(/1, 5, 1, 8, 1, 9/), bs_k=(/1, 5, 1, 8, 1, 9/), &\n                              limits=(/1, 506, 1, 44, 1, 44/))\n   CALL dbcsr_test_multiplies(\"blocks_4_13_25\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/504, 42, 42/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 4, 1, 13, 1, 25/), bs_n=(/1, 4, 1, 13, 1, 25/), bs_k=(/1, 4, 1, 13, 1, 25/), &\n                              limits=(/1, 504, 1, 42, 1, 42/))\n   CALL dbcsr_test_multiplies(\"blocks_14_29_32\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/525, 75, 75/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 14, 1, 29, 1, 32/), bs_n=(/1, 14, 1, 29, 1, 32/), bs_k=(/1, 14, 1, 29, 1, 32/), &\n                              limits=(/1, 525, 1, 75, 1, 75/))\n   CALL dbcsr_test_multiplies(\"blocks_H2O\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/552, 46, 46/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 23/), bs_n=(/1, 23/), bs_k=(/1, 23/), &\n                              limits=(/1, 552, 1, 46, 1, 46/))\n   CALL dbcsr_test_multiplies(\"blocks_45_67_78\", &\n                              group, mp_env, npdims, io_unit, matrix_sizes=(/570, 190, 190/), &\n                              sparsities=(/0.5_dp, 0.5_dp, 0.5_dp/), retain_sparsity=.FALSE., &\n                              alpha=CMPLX(1.0_dp, 0.0_dp, dp), beta=CMPLX(0.0_dp, 0.0_dp, dp), &\n                              bs_m=(/1, 45, 1, 67, 1, 78/), bs_n=(/1, 45, 1, 67, 1, 78/), bs_k=(/1, 45, 1, 67, 1, 78/), &\n                              limits=(/1, 570, 1, 190, 1, 190/))\n\n   ! end of test cases ---------------------------------------------------------\n\n   ! finalize libdbcsr errors\n   CALL timestop(handle)\n\n   ! clean mp environment\n   CALL dbcsr_mp_release(mp_env)\n\n   ! finalize mpi\n   CALL mp_comm_free(group)\n\n   call dbcsr_print_statistics(.true.)\n   ! finalize libdbcsr\n   CALL dbcsr_finalize_lib()\n\n   CALL mp_world_finalize()\n\nEND PROGRAM dbcsr_unittest_3\n"
  },
  {
    "path": "tests/dbcsr_unittest4.F",
    "content": "!--------------------------------------------------------------------------------------------------!\n! Copyright (C) by the DBCSR developers group - All rights reserved                                !\n! This file is part of the DBCSR library.                                                          !\n!                                                                                                  !\n! For information on the license, see the LICENSE file.                                            !\n! For further information please visit https://dbcsr.cp2k.org                                      !\n! SPDX-License-Identifier: GPL-2.0+                                                                !\n!--------------------------------------------------------------------------------------------------!\n\nPROGRAM dbcsr_unittest\n   !! Tests for DBCSR operations\n\n   USE dbcsr_kinds, ONLY: dp\n   USE dbcsr_lib, ONLY: dbcsr_finalize_lib, &\n                        dbcsr_init_lib, &\n                        dbcsr_print_statistics\n   USE dbcsr_machine, ONLY: default_output_unit\n   USE dbcsr_mp_methods, ONLY: dbcsr_mp_new, &\n                               dbcsr_mp_release\n   USE dbcsr_mpiwrap, ONLY: mp_cart_create, &\n                            mp_cart_rank, &\n                            mp_comm_free, &\n                            mp_environ, &\n                            mp_world_finalize, &\n                            mp_world_init, mp_comm_type\n   USE dbcsr_test_add, ONLY: dbcsr_test_adds\n   USE dbcsr_test_methods, ONLY: dbcsr_reset_randmat_seed\n   USE dbcsr_test_scale_by_vector, ONLY: dbcsr_test_scale_by_vectors\n   USE dbcsr_types, ONLY: dbcsr_mp_obj\n#include \"base/dbcsr_base_uses.f90\"\n\n   IMPLICIT NONE\n\n   INTEGER                                  :: numnodes, mynode, &\n                                               prow, pcol, io_unit, handle\n   INTEGER, DIMENSION(2)                    :: npdims, myploc\n   INTEGER, DIMENSION(:, :), POINTER        :: pgrid\n   TYPE(dbcsr_mp_obj)                       :: mp_env\n   LOGICAL                                  :: success\n   TYPE(mp_comm_type)                       :: mp_comm, group\n\n   CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_unittest'\n\n   ! initialize mpi\n   CALL mp_world_init(mp_comm)\n\n   ! setup the mp environment\n   npdims(:) = 0\n   CALL mp_cart_create(mp_comm, 2, npdims, myploc, group)\n   CALL mp_environ(numnodes, mynode, group)\n   ALLOCATE (pgrid(0:npdims(1) - 1, 0:npdims(2) - 1))\n   DO prow = 0, npdims(1) - 1\n      DO pcol = 0, npdims(2) - 1\n         CALL mp_cart_rank(group, (/prow, pcol/), pgrid(prow, pcol))\n      END DO\n   END DO\n   CALL dbcsr_mp_new(mp_env, group, pgrid, mynode, numnodes, &\n                     myprow=myploc(1), mypcol=myploc(2))\n   DEALLOCATE (pgrid)\n\n   ! set standard output parameters\n   io_unit = 0\n   IF (mynode .EQ. 0) io_unit = default_output_unit\n\n   ! initialize DBCSR\n   CALL dbcsr_init_lib(mp_comm%get_handle(), io_unit)\n\n   ! start measuring the complete test\n   CALL timeset(routineN, handle)\n\n   CALL dbcsr_reset_randmat_seed()\n\n   ! run tests\n   success = .TRUE.\n\n   success = dbcsr_test_scale_by_vectors(\"scale_by_vector_symmetric\", &\n                                         group, mp_env, npdims, io_unit, matrix_size=[20, 20], &\n                                         sparsity=0.5_dp, bs_m=[1, 4], bs_n=[1, 4], do_exact_comparison=.FALSE.) &\n             .AND. success\n\n   ! specific reproducers of https://github.com/cp2k/dbcsr/issues/362\n   ! the first one gives wrong results when scaling\n   success = dbcsr_test_scale_by_vectors(\"scale_by_vector_asymm_exact1\", &\n                                         group, mp_env, npdims, io_unit, matrix_size=[30, 20], &\n                                         sparsity=0.0_dp, bs_m=[1, 4], bs_n=[1, 4], do_exact_comparison=.TRUE.) &\n             .AND. success\n   ! the second one triggers segfaults without the fix\n   success = dbcsr_test_scale_by_vectors(\"scale_by_vector_asymm_exact2\", &\n                                         group, mp_env, npdims, io_unit, matrix_size=[20, 30], &\n                                         sparsity=0.0_dp, bs_m=[1, 4], bs_n=[1, 4], do_exact_comparison=.TRUE.) &\n             .AND. success\n   CALL timestop(handle)\n\n   ! clean mp environment\n   CALL dbcsr_mp_release(mp_env)\n\n   ! finalize mpi\n   CALL mp_comm_free(group)\n\n   call dbcsr_print_statistics(.true.)\n   ! finalize libdbcsr\n   CALL dbcsr_finalize_lib()\n   CALL mp_world_finalize()\n\n   ! finalize libdbcsr errors\n   IF (.NOT. success) &\n      ERROR STOP \"one or more tests failed\"\nEND PROGRAM dbcsr_unittest\n"
  },
  {
    "path": "tests/generate_libsmm_acc_timer_multiply.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport os\nimport random\nimport json\nimport argparse\n\n\ndef format_to_cpp(kernels):\n    \"\"\"Given a list of kernels represented as dictionaries, return a string representing them as C++ vector of vectors\n    using initializer lists\"\"\"\n    kernels = sorted(kernels, key=lambda k: (k[\"m\"], k[\"n\"], k[\"k\"]))\n    out = \"\"\n    init_list_line = \"        {{{m:>2}, {n:>2}, {k:>2}}},\\n\"\n    for k in kernels:\n        out += init_list_line.format(m=k[\"m\"], n=k[\"n\"], k=k[\"k\"])\n    return out\n\n\n# ===============================================================================\ndef main(\n    dbcsr_base_dir,\n    libsmm_acc_base_dir,\n    test_template_dir,\n    test_output_dir,\n    gpu_version,\n    nsamples,\n):\n    \"\"\"\n    Generate a performance test of libsmm_acc in the form of a CUDA or HIP file, using libsmm_acc_timer_multiply.cpp.template as\n    a template\n    \"\"\"\n\n    # Read parameter file\n    print(\"GPU version: {}\".format(gpu_version))\n    param_fn = os.path.join(\n        libsmm_acc_base_dir,\n        os.path.join(\"parameters\", \"parameters_{}.json\".format(gpu_version)),\n    )\n    with open(param_fn, \"r\") as f:\n        all_kernels = json.load(f)\n\n    # Get the autotuned kernels to test\n    autotuned_kernels = [k for k in all_kernels if k[\"source\"] == \"autotuned\"]\n    print(\"Found {:,} autotuned kernels\".format(len(autotuned_kernels)))\n    kernels_to_print_autotuned = format_to_cpp(autotuned_kernels)\n\n    # Get the non-autotuned kernels to test\n    predicted_kernels = [k for k in all_kernels if k[\"source\"] != \"autotuned\"]\n    print(\"Found {:,} predicted kernels\".format(len(predicted_kernels)))\n    num_predicted_kernels = len(predicted_kernels)\n    if num_predicted_kernels > 0:\n        if nsamples >= num_predicted_kernels:\n            nsamples = num_predicted_kernels\n        kernels_to_test_predicted = random.sample(predicted_kernels, nsamples)\n        kernels_to_print_predicted = format_to_cpp(kernels_to_test_predicted)\n    else:\n        kernels_to_test_predicted = list()\n        kernels_to_print_predicted = \"\"\n\n    # Print to test file\n    file_template = os.path.join(\n        test_template_dir, \"libsmm_acc_timer_multiply.cpp.template\"\n    )\n    file_generate = os.path.join(test_output_dir, \"libsmm_acc_timer_multiply.cpp\")\n    with open(file_template, \"r\") as f:\n        test = f.read()\n    test = test.replace(\n        \"[[AUTOTUNED_KERNELS_HERE]]\", kernels_to_print_autotuned.lstrip()\n    )\n    test = test.replace(\n        \"[[PREDICTED_KERNELS_HERE]]\", kernels_to_print_predicted.lstrip()\n    )\n    with open(file_generate, \"w\") as f:\n        f.write(test)\n    print(\n        \"Wrote {:,} test kernels to {}\".format(\n            len(autotuned_kernels + kernels_to_test_predicted), file_generate\n        )\n    )\n\n\n# ===============================================================================\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"\"\"\n        Generate a performance test of libsmm_acc in the form of a CUDA or HIP file, using\n        libsmm_acc_timer_multiply.cpp.template as a template\n        \"\"\",\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter,\n    )\n    parser.add_argument(\n        \"-f\", \"--base_dir\", metavar=\"DBCSRHOME\", default=\"\", help=\"DBCSR base directory\"\n    )\n    parser.add_argument(\n        \"-o\",\n        \"--out_dir\",\n        metavar=\"OUTDIR\",\n        default=\"tests\",\n        help=\"Directory in which to write the generated test files. Expressed relatively to base_dir\",\n    )\n    parser.add_argument(\n        \"-g\",\n        \"--gpu_version\",\n        metavar=\"GPU_VERSION\",\n        default=\"P100\",\n        help=\"GPU card version, used to select the appropriate libsmm_acc parameters file\",\n    )\n    parser.add_argument(\n        \"-n\",\n        \"--nsamples\",\n        default=1000,\n        help=(\n            \"Number of samples from the matrix sizes space 4 <= m,n,k <= 45 (except autotuned kernels)\"\n            \" to sample for performance testing\"\n        ),\n    )\n\n    args = parser.parse_args()\n\n    # Folders in/to which to read/write files\n    libsmm_acc_base_dir = os.path.join(args.base_dir, \"src/acc/libsmm_acc\")\n    test_template_dir = os.path.join(args.base_dir, \"tests\")\n    test_output_dir = os.path.join(args.base_dir, args.out_dir)\n\n    main(\n        args.base_dir,\n        libsmm_acc_base_dir,\n        test_template_dir,\n        test_output_dir,\n        args.gpu_version,\n        args.nsamples,\n    )\n"
  },
  {
    "path": "tests/generate_libsmm_acc_unittest_multiply.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n####################################################################################################\n# Copyright (C) by the DBCSR developers group - All rights reserved                                #\n# This file is part of the DBCSR library.                                                          #\n#                                                                                                  #\n# For information on the license, see the LICENSE file.                                            #\n# For further information please visit https://dbcsr.cp2k.org                                      #\n# SPDX-License-Identifier: GPL-2.0+                                                                #\n####################################################################################################\n\nimport os\nimport random\nimport json\nimport argparse\n\n\ndef format_to_cpp(kernels):\n    \"\"\"Given a list of kernels represented as dictionaries, return a string representing them as C++ vector of vectors\n    using initializer lists\"\"\"\n    kernels = sorted(kernels, key=lambda k: (k[\"m\"], k[\"n\"], k[\"k\"]))\n    out = \"\"\n    init_list_line = \"        {{{m:>2}, {n:>2}, {k:>2}}},\\n\"\n    for k in kernels:\n        out += init_list_line.format(m=k[\"m\"], n=k[\"n\"], k=k[\"k\"])\n    return out\n\n\n# ===============================================================================\ndef main(\n    dbcsr_base_dir,\n    libsmm_acc_base_dir,\n    test_template_dir,\n    test_output_dir,\n    gpu_version,\n    nsamples,\n):\n    \"\"\"\n    Generate a performance test of libsmm_acc in the form of a CUDA or HIP file, using libsmm_acc_unittest_multiply.cpp.template\n    as a template\n    \"\"\"\n\n    # Read parameter file\n    print(\"GPU version: {}\".format(gpu_version))\n    param_fn = os.path.join(\n        libsmm_acc_base_dir,\n        os.path.join(\"parameters\", \"parameters_{}.json\".format(gpu_version)),\n    )\n    with open(param_fn, \"r\") as f:\n        all_kernels = json.load(f)\n\n    # Get the autotuned kernels to test\n    autotuned_kernels = [k for k in all_kernels if k[\"source\"] == \"autotuned\"]\n    print(\"Found {:,} autotuned kernels\".format(len(autotuned_kernels)))\n\n    # Get the non-autotuned kernels to test\n    predicted_kernels = [k for k in all_kernels if k[\"source\"] != \"autotuned\"]\n    print(\"Found {:,} predicted kernels\".format(len(predicted_kernels)))\n    num_predicted_kernels = len(predicted_kernels)\n    if num_predicted_kernels > 0:\n        if nsamples >= num_predicted_kernels:\n            nsamples = num_predicted_kernels\n        kernels_to_test_predicted = random.sample(predicted_kernels, nsamples)\n    else:\n        kernels_to_test_predicted = list()\n    kernels_to_print = format_to_cpp(autotuned_kernels + kernels_to_test_predicted)\n\n    # Print to test file\n    file_template = os.path.join(\n        test_template_dir, \"libsmm_acc_unittest_multiply.cpp.template\"\n    )\n    file_generate = os.path.join(test_output_dir, \"libsmm_acc_unittest_multiply.cpp\")\n    with open(file_template, \"r\") as f:\n        test = f.read()\n    test = test.replace(\"[[UNITTEST_KERNELS_HERE]]\", kernels_to_print.lstrip())\n    with open(file_generate, \"w\") as f:\n        f.write(test)\n    print(\"Wrote {:,} test kernels to {}\".format(len(kernels_to_print), file_generate))\n\n\n# ===============================================================================\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(\n        description=\"\"\"\n        Generate a performance test of libsmm_acc in the form of a CUDA or HIP file, using\n        libsmm_acc_unittest_multiply.cpp.template as a template\n        \"\"\",\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter,\n    )\n    parser.add_argument(\n        \"-f\", \"--base_dir\", metavar=\"DBCSRHOME\", default=\"\", help=\"DBCSR base directory\"\n    )\n    parser.add_argument(\n        \"-o\",\n        \"--out_dir\",\n        metavar=\"OUTDIR\",\n        default=\"./tests\",\n        help=\"Directory in which to write the generated test files\",\n    )\n    parser.add_argument(\n        \"-g\",\n        \"--gpu_version\",\n        metavar=\"GPU_VERSION\",\n        default=\"P100\",\n        help=\"GPU card version, used to select the appropriate libsmm_acc parameters file\",\n    )\n    parser.add_argument(\n        \"-n\",\n        \"--nsamples\",\n        default=1000,\n        help=(\n            \"Number of samples from the matrix sizes space 4 <= m,n,k <= 45 (except autotuned kernels)\"\n            \" to sample for performance testing\"\n        ),\n    )\n\n    args = parser.parse_args()\n\n    # Folders in/to which to read/write files\n    libsmm_acc_base_dir = os.path.join(args.base_dir, \"src/acc/libsmm_acc/\")\n    test_template_dir = os.path.join(args.base_dir, \"tests\")\n    test_output_dir = os.path.join(args.base_dir, args.out_dir)\n\n    main(\n        args.base_dir,\n        libsmm_acc_base_dir,\n        test_template_dir,\n        test_output_dir,\n        args.gpu_version,\n        args.nsamples,\n    )\n"
  },
  {
    "path": "tests/input.perf",
    "content": "# Template Input File for DBCSR Performance Driver\n# -----------------------------------------------------------------------\n# npcols MPI grid\n# - 0 leaves MPI to find the best grid.\n# - Note that the total number of processors must be divisible per npcols\n0\n# use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n1000\n1000\n1000\n# sparsity (matrix A, matrix B, matrix C)\n0.0d0\n0.0d0\n0.0d0\n# transposes\nN\nN\n# symmetries\nN\nN\nN\n# data type\n# - 3: double\n# - other types, see \"Type definitions\" in dbcsr/src/data/dbcsr_data_types.F\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits\n# - 0 means full size\n# - row\n# -- limRowL (First full row of limiting submatrix)\n0\n# -- limRowU\n0\n# - col\n# -- limColL (First full col of limiting submatrix)\n0\n# -- limColU\n0\n# - k\n# -- limKL first full col of imiting inner product)\n0\n# -- limKU\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n1\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n# - this configuration, eg, will generate blocks of\n# - size 5 in the m-dimension\n1\n5\n# - this configuration would generate a block of\n# - size 5 followed by 2 blocks of size 3 in the m-dimension,\n# - followed by a block of size 5, etc. until size M is reached\n# - 1\n# - 5\n# - 2\n# - 3\n# the n blocks (multiplicity, block size, ...)\n1\n5\n# the k blocks (multiplicity, block size, ...)\n1\n5\n# checksum (check, threshold, references)\nF\n0.\n0.\n0.\n"
  },
  {
    "path": "tests/inputs/test_H2O.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n0\n# Use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n2208\n2208\n2208\n# sparsity (A, B, C)\n0.2d0\n0.2d0\n0.2d0\n# transposes\nN\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n50\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n23\n# the n blocks (multiplicity, block size, ...)\n1\n23\n# the k blocks (multiplicity, block size, ...)\n1\n23\n# checksum (check, threshold, references)\nF\n0.\n0.\n0.\n"
  },
  {
    "path": "tests/inputs/test_rect1_dense.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n1\n# Use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n1000\n100\n100\n# sparsity (A, B, C)\n0.0d0\n0.0d0\n0.0d0\n# transposes\nN\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n10\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n5\n# the n blocks (multiplicity, block size, ...)\n1\n5\n# the k blocks (multiplicity, block size, ...)\n1\n5\n# checksum (check, threshold, references)\nT\n0.1E-10\n0.675410189104774E+08\n0.247302643276505E+08\n"
  },
  {
    "path": "tests/inputs/test_rect1_sparse.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n1\n# Use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n5000\n1000\n1000\n# sparsity (A, B, C)\n0.9d0\n0.9d0\n0.9d0\n# transposes\nN\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n10\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n5\n# the n blocks (multiplicity, block size, ...)\n1\n5\n# the k blocks (multiplicity, block size, ...)\n1\n5\n# checksum (check, threshold, references)\nT\n0.1E-10\n0.515505547242877E+08\n0.173182002166628E+09\n"
  },
  {
    "path": "tests/inputs/test_rect2_dense.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n1\n# Use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n100\n100\n1000\n# sparsity (A, B, C)\n0.0d0\n0.0d0\n0.0d0\n# transposes\nT\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n10\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n5\n# the n blocks (multiplicity, block size, ...)\n1\n5\n# the k blocks (multiplicity, block size, ...)\n1\n5\n# checksum (check, threshold, references)\nT\n0.1E-10\n0.628267155865818E+09\n0.182181529654306E+08\n"
  },
  {
    "path": "tests/inputs/test_rect2_sparse.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n1\n# Use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n1000\n1000\n5000\n# sparsity (A, B, C)\n0.9d0\n0.9d0\n0.9d0\n# transposes\nT\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n10\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n5\n# the n blocks (multiplicity, block size, ...)\n1\n5\n# the k blocks (multiplicity, block size, ...)\n1\n5\n# checksum (check, threshold, references)\nT\n0.1E-10\n0.176967186312957E+09\n0.149098274728932E+09\n"
  },
  {
    "path": "tests/inputs/test_singleblock.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n0\n# Use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n50\n50\n50\n# sparsity (A, B, C)\n0.0d0\n0.0d0\n0.0d0\n# transposes\nN\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n10\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n50\n# the n blocks (multiplicity, block size, ...)\n1\n50\n# the k blocks (multiplicity, block size, ...)\n1\n50\n# checksum (check, threshold, references)\nT\n0.1E-10\n0.418186760034529E+06\n0.190157258297048E+06\n"
  },
  {
    "path": "tests/inputs/test_square_dense.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n0\n# Use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n100\n100\n100\n# sparsity (A, B, C)\n0.0d0\n0.0d0\n0.0d0\n# transposes\nN\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n10\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n5\n# the n blocks (multiplicity, block size, ...)\n1\n5\n# the k blocks (multiplicity, block size, ...)\n1\n5\n# checksum (check, threshold, references)\nT\n0.1E-10\n0.673287171736802E+07\n0.188077024338804E+07\n\n"
  },
  {
    "path": "tests/inputs/test_square_sparse.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n0\n# Use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n1000\n1000\n1000\n# sparsity (A, B, C)\n0.9d0\n0.9d0\n0.9d0\n# transposes\nN\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n10\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n5\n# the n blocks (multiplicity, block size, ...)\n1\n5\n# the k blocks (multiplicity, block size, ...)\n1\n5\n# checksum (check, threshold, references)\nT\n0.1E-10\n0.996149460464712E+07\n0.299382963262912E+08\n"
  },
  {
    "path": "tests/inputs/test_square_sparse_bigblocks.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n0\n# Use MPI-RMA\nF\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n10000\n1000\n1000\n# sparsity (A, B, C)\n0.9d0\n0.9d0\n0.9d0\n# transposes\nN\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n10\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n100\n# the n blocks (multiplicity, block size, ...)\n1\n50\n# the k blocks (multiplicity, block size, ...)\n1\n20\n# checksum (check, threshold, references)\nT\n0.1E-10\n0.179511893085946E+09\n0.349170005426525E+09\n"
  },
  {
    "path": "tests/inputs/test_square_sparse_rma.perf",
    "content": "# npcols MPI grid, 0 leaves MPI to find the best grid.\n# Note that the total number of processors must be divisible per npcols\n0\n# Use MPI-RMA\nT\n# operation\ndbcsr_multiply\n# matrix sizes (M, N, K)\n1000\n1000\n1000\n# sparsity (A, B, C)\n0.9d0\n0.9d0\n0.9d0\n# transposes\nN\nN\n# symmetries\nN\nN\nN\n# data type\n3\n# alpha (real, imag)\n1.0d0\n0.0d0\n# beta (real, imag)\n1.0d0\n0.0d0\n# limits (0 means full size)\n# row\n0\n0\n# col\n0\n0\n# k\n0\n0\n# retain sparsity (T/F)\nF\n# number of repetitions\n10\n# number of different blocks to read (m, n, k)\n1\n1\n1\n# the m blocks (multiplicity, block size, ...)\n1\n5\n# the n blocks (multiplicity, block size, ...)\n1\n5\n# the k blocks (multiplicity, block size, ...)\n1\n5\n# checksum (check, threshold, references)\nT\n0.1E-10\n0.996149460464712E+07\n0.299382963262912E+08\n"
  },
  {
    "path": "tests/libsmm_acc_timer_multiply.cpp.template",
    "content": "/*------------------------------------------------------------------------------------------------*\n * Copyright (C) by the DBCSR developers group - All rights reserved                              *\n * This file is part of the DBCSR library.                                                        *\n *                                                                                                *\n * For information on the license, see the LICENSE file.                                          *\n * For further information please visit https://dbcsr.cp2k.org                                    *\n * SPDX-License-Identifier: GPL-2.0+                                                              *\n *------------------------------------------------------------------------------------------------*/\n\n#include <cstdio>\n#include <cstdlib>\n#include <vector>\n#include <array>\n#include <algorithm>\n#include \"libsmm_acc_benchmark.h\"\n#include \"libsmm_acc.h\"\n\nstd::vector<Triplet> combinations(std::vector<int> to_combine) {\n\n    std::vector<Triplet> v;\n    size_t len = to_combine.size();\n    for (size_t i=0; i<len; i++) {\n        for (size_t j=0; j<len; j++) {\n            for (size_t k=0; k<len; k++) {\n                v.push_back({to_combine[i], to_combine[j], to_combine[k]});\n            }\n        }\n    }\n    return v;\n}\n\n/****************************************************************************\\\n  \\brief Checks correctness of and measures performance of randomly selected\n         libsmm_acc multiplication kernels.\n  \\returns -1 for invalid options, n>0 with n being the number of errors,\n           0 otherwise\n  \\****************************************************************************/\n\nint main(int argc, char* argv[]) {\n\n    if (argc < 2) {\n        printf(\"Usage: %s <autotuned|predicted>\\n\", argv[0]);\n        return -1;\n    }\n\n    printf(\"Time kernels: %s\\n\", argv[1]);\n\n    std::vector<Triplet> libsmm_acc_triplets;\n    if (argv[1] == std::string(\"autotuned\")) {\n\n        libsmm_acc_triplets = {\n            [[AUTOTUNED_KERNELS_HERE]]\n        };\n\n    } else if (argv[1] == std::string(\"predicted\")) {\n\n        libsmm_acc_triplets = {\n            [[PREDICTED_KERNELS_HERE]]\n        };\n\n    } else {\n\n        printf(\"Unrecognized option: %s, exiting ...\\n\", argv[1]);\n        return -1;\n\n    }\n\n    // Build benchmark\n    KernelLauncher launcher = libsmm_acc_process_d;\n    char buffer[1000];\n    char * kernel_descr[1] = {buffer};\n\n    int n_triplets = libsmm_acc_triplets.size();\n    printf(\"# Time %d blocksizes ...\\n\", n_triplets);\n\n    int errors = 0;\n    libsmm_acc_benchmark_t* handle;\n\n    for (int i=0; i<n_triplets; i++) {\n        printf(\"\\n\\n\");\n        int m = libsmm_acc_triplets[i][0];\n        int n = libsmm_acc_triplets[i][1];\n        int k = libsmm_acc_triplets[i][2];\n        sprintf(buffer, \"%d x %d x %d\", m, n, k);\n        libsmm_acc_benchmark_init(&handle, timing, m, n, k);\n        errors += libsmm_acc_benchmark(handle, m, n, k, 1, &launcher, kernel_descr);\n        libsmm_acc_benchmark_finalize(handle);\n    }\n\n    printf(\"# Done, found %d errors.\\n\", errors);\n    return errors;\n}\n"
  },
  {
    "path": "tests/libsmm_acc_unittest_multiply.cpp.template",
    "content": "/*------------------------------------------------------------------------------------------------*\n * Copyright (C) by the DBCSR developers group - All rights reserved                              *\n * This file is part of the DBCSR library.                                                        *\n *                                                                                                *\n * For information on the license, see the LICENSE file.                                          *\n * For further information please visit https://dbcsr.cp2k.org                                    *\n * SPDX-License-Identifier: GPL-2.0+                                                              *\n *------------------------------------------------------------------------------------------------*/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <vector>\n#include <array>\n#include \"libsmm_acc_benchmark.h\"\n#include \"libsmm_acc.h\"\n\n\n/****************************************************************************\\\n \\brief Checks correctness of randomly selected libsmm_acc multiplication kernels\n\\****************************************************************************/\n\nint main(int argc, char** argv) {\n\n    DBCSR_MARK_USED(argc);\n    DBCSR_MARK_USED(argv);\n\n    KernelLauncher launcher_mm = libsmm_acc_process_d;\n\n    char buffer[1000];\n    char * kernel_descr[1] = {buffer};\n\n    // Get all blocksizes available in libsmm_acc\n    std::vector<Triplet> libsmm_acc_triplets = {\n            [[UNITTEST_KERNELS_HERE]]\n    };\n    int n_triplets = libsmm_acc_triplets.size();\n    printf(\"# libsmm_acc has %d blocksizes for multiplication\\n\", n_triplets);\n\n    int max_m=0, max_n=0, max_k=0;\n    for (int i=0; i<n_triplets; i++) {\n        max_m = std::max(max_n, libsmm_acc_triplets[i][0]);\n        max_n = std::max(max_m, libsmm_acc_triplets[i][1]);\n        max_k = std::max(max_k, libsmm_acc_triplets[i][2]);\n    }\n\n    libsmm_acc_benchmark_t* handle;\n    libsmm_acc_benchmark_init(&handle, test, max_m, max_n, max_k);\n\n    int errors = 0;\n    for (int i=0; i<n_triplets; i++) {\n        int m = libsmm_acc_triplets[i][0];\n        int n = libsmm_acc_triplets[i][1];\n        int k = libsmm_acc_triplets[i][2];\n        sprintf(buffer, \"%d x %d x %d\", m, n, k);\n        errors += libsmm_acc_benchmark(handle, m, n, k, 1, &launcher_mm, kernel_descr);\n    }\n    libsmm_acc_benchmark_finalize(handle);\n\n    printf(\"# Done, found %d matrix-matrix multiplication errors.\\n\", errors);\n    return errors;\n}\n"
  },
  {
    "path": "tests/libsmm_acc_unittest_transpose.cpp",
    "content": "/*------------------------------------------------------------------------------------------------*/\n/* Copyright (C) by the DBCSR developers group - All rights reserved                              */\n/* This file is part of the DBCSR library.                                                        */\n/*                                                                                                */\n/* For information on the license, see the LICENSE file.                                          */\n/* For further information please visit https://dbcsr.cp2k.org                                    */\n/* SPDX-License-Identifier: GPL-2.0+                                                              */\n/*------------------------------------------------------------------------------------------------*/\n\n#include <algorithm>\n#include <stdio.h>\n#include <stdlib.h>\n#include <vector>\n#include <array>\n#include <utility>\n#include \"libsmm_acc_benchmark.h\"\n#include \"libsmm_acc.h\"\n\n\n/****************************************************************************\\\n \\brief Checks correctness of all libsmm transpose kernels\n\\****************************************************************************/\n\nint main(int argc, char** argv) {\n  DBCSR_MARK_USED(argc);\n  DBCSR_MARK_USED(argv);\n\n  TransposeLauncher launcher_tr = libsmm_acc_transpose_d;\n\n  char buffer[1000];\n  char* kernel_descr[1] = {buffer};\n\n  // Get all blocksizes available in libsmm\n  std::vector<Triplet> libsmm_acc_triplets;\n  extern const std::unordered_map<Triplet, KernelParameters> ht;\n  get_libsmm_acc_triplets(libsmm_acc_triplets, ht);\n  int n_triplets = libsmm_acc_triplets.size();\n\n  int max_m = 0, max_n = 0, max_k = 0;\n  for (int i = 0; i < n_triplets; i++) {\n    max_m = std::max(max_n, libsmm_acc_triplets[i][0]);\n    max_n = std::max(max_m, libsmm_acc_triplets[i][1]);\n    max_k = std::max(max_k, libsmm_acc_triplets[i][2]);\n  }\n\n  libsmm_acc_benchmark_t* handle;\n  libsmm_acc_benchmark_init(&handle, test, max_m, max_n, max_k);\n\n  // Get (m,n) pairs to test transposition\n  std::vector<std::pair<int, int>> libsmm_acc_transpose_pairs;\n  for (int i = 0; i < n_triplets; i++) {\n    int m = libsmm_acc_triplets[i][0];\n    int n = libsmm_acc_triplets[i][1];\n    int k = libsmm_acc_triplets[i][2];\n    libsmm_acc_transpose_pairs.push_back(std::make_pair(m, k));\n    libsmm_acc_transpose_pairs.push_back(std::make_pair(k, n));\n  }\n  std::sort(libsmm_acc_transpose_pairs.begin(), libsmm_acc_transpose_pairs.end(), [](std::pair<int, int> a, std::pair<int, int> b) {\n    return (a.first > b.first) || (a.first == b.first && a.second > b.second);\n  });\n  auto last = std::unique(libsmm_acc_transpose_pairs.begin(), libsmm_acc_transpose_pairs.end());\n  libsmm_acc_transpose_pairs.erase(last, libsmm_acc_transpose_pairs.end());\n  int n_pairs = libsmm_acc_transpose_pairs.size();\n  printf(\"# libsmm_acc has %d blocksizes for transposition\\n\", n_pairs);\n\n  // Sort (m,n) pairs in growing order\n  std::sort(\n    libsmm_acc_transpose_pairs.begin(), libsmm_acc_transpose_pairs.end(), [](std::pair<int, int> mn1, std::pair<int, int> mn2) {\n      if (mn1.first != mn2.first) {\n        return mn1.first < mn2.first;\n      }\n      else {\n        return mn1.second < mn2.second;\n      }\n    });\n\n  int errors = 0;\n  for (int i = 0; i < n_pairs; i++) {\n    int m = libsmm_acc_transpose_pairs[i].first;\n    int n = libsmm_acc_transpose_pairs[i].second;\n    sprintf(buffer, \"%d x %d\", m, n);\n    errors += libsmm_acc_benchmark_transpose(handle, m, n, &launcher_tr, kernel_descr);\n  }\n  libsmm_acc_benchmark_finalize(handle);\n\n  printf(\"# Done, found %d transpose errors.\\n\", errors);\n  return errors;\n}\n"
  },
  {
    "path": "tools/build_libsmm/COPYRIGHT",
    "content": "!====================================================================================================================\n! * Copyright (c) 2015 Joost VandeVondele and Alfio Lazzaro\n! * All rights reserved.\n! *\n! * Redistribution and use in source and binary forms, with or without\n! * modification, are permitted provided that the following conditions are met:\n! *     * Redistributions of source code must retain the above copyright\n! *       notice, this list of conditions and the following disclaimer.\n! *     * Redistributions in binary form must reproduce the above copyright\n! *       notice, this list of conditions and the following disclaimer in the\n! *       documentation and/or other materials provided with the distribution.\n! *\n! * THIS SOFTWARE IS PROVIDED BY Joost VandeVondele ''AS IS'' AND ANY\n! * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n! * DISCLAIMED. IN NO EVENT SHALL Joost VandeVondele BE LIABLE FOR ANY\n! * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n! * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n! * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n! * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n! * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n! * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n! *\n!====================================================================================================================\n\n"
  },
  {
    "path": "tools/build_libsmm/README",
    "content": "libsmm: a library for small matrix multiplies.\n\nIn order to deal efficiently with small matrix multiplies,\noften involving 'special' matrix dimensions such as 5,13,17,22,\na dedicated matrix library can be generated that outperforms (or matches)\ngeneral purpose (optimized) blas libraries.\n\nGeneration requires extensive compilation and timing runs, and is machine specific,\ni.e. the library should be constructed on the architecture it is supposed to run.\n\nUsers can modify the values inside the file config.in to set which kind of library\nthey want to generate. Furthermore, they can modify (or add) the files inside\nthe config directory to set the compiler options used to build the\nlibrary. They can use the existing files as template.\n\nThere are several options for building the library. Run ./generate -h to see them.\nBelow you can find the detailed instructions for some examples.\n\n====================================================================================================================\na) How to generate the library running several jobs in a cluster, where each\n   node allows for both execution and compilation.\n   For this example we will use a CRAY system with GNU compiler and SLURM.\n   Run \"./generate -h\" to see the meaning of the options.\n\n   1) Run: ./generate -c config/cray.gnu -j 100 -t 16 -w slurm tiny1\n      This command submits 100 jobs in batch. Wait until their completion.\n\n   2) Run: ./generate -c config/cray.gnu tiny2\n      This command collects all results produced in the tiny1 phase and it\n      generates a file tiny_gen_optimal_dnn_cray.gnu.out\n\n   3) As done in 1) and 2), run: ./generate -c config/cray.gnu -j 20 -t 16 -w slurm small1\n      This command submits 20 jobs in batch. Wait until their completion.\n      Then run: ./generate -c config/cray.gnu small2\n      This command collects all results produced in the small1 phase and it\n      generates a file small_gen_optimal_dnn_cray.gnu.out\n\n   4) Run: ./generate -c config/cray.gnu -t 16 -w slurm lib\n      This commman submit in batch a single job that compiles the library.\n      At the end the library is produced inside the directory lib/\n      (libsmm_dnn_cray.gnu.a).\n\n   5) It is highly recommended to run the final test to check the correctness of the library.\n      Run: ./generate -c config/cray.gnu -j 20 -w slurm check1\n      After the batch jobs completion, run: ./generate -c config/cray.gnu -j 20 check2\n      Note that it is important to use the same number of jobs specified in\n      check1 phase. Finally check test_smm_dnn_cray.gnu.out for performance and correctness.\n\n   6) Intermediate files (but not some key output and the library itself)\n      might be removed using ./generate clean\n\n\n====================================================================================================================\nb) How to generate the library running a single job interactively.\n   For this example we will use a Linux system with GNU compiler.\n   Run \"./generate -h\" to see the meaning of the options.\n\n   1) Run: ./generate -c config/linux.gnu -j 10 -t 16 -w none tiny1\n      This command generates, compiles and executes the tiny kernels\n      in 10 groups. Please increase the number of groups (-j <#> option)\n      if you get the error \"Argument list too long\".\n\n   2) Run: ./generate -c config/linux.gnu tiny2\n      This command collects all results produced in the tiny1 phase and it\n      generates a file tiny_gen_optimal_dnn_linux.gnu.out\n\n   3) Run: ./generate -c config/linux.gnu -j 0 -t 16 small1\n      This command generates a file small_gen_optimal_dnn_linux.gnu.out\n\n   4) Run: ./generate -c config/linux.gnu -j 0 -t 16 -w slurm lib\n      This command produces the llibrary inside the directory lib/\n      (libsmm_dnn_linux.gnu.a).\n\n   5) It is highly recommended to run the final test to check the correctness\n      of the library.\n      Run: ./generate -c config/linux.gnu -j 0 -w slurm check1\n      Finally check test_smm_dnn_linux.gnu.out for performance\n      and correctness.\n\n   6) Intermediate files (but not some key output and the library itself)\n      might be removed using ./generate clean\n\n====================================================================================================================\nc) How to generate the library for the Intel Xeon Phi in batch mode.\n\n   For this example we will use a cluster with SLURM, where each node has a\n   Intel Xeon Phi card.\n   Run \"./generate -h\" to see the meaning of the options.\n   We use the config file mic.intel (inside the directory config).\n   Check if all options are OK for your case, in particular:\n    - the target_compile variable with the flag \"-offload-attribute-target=mic\".\n    - the target_compile_offload variable with the flag \"-offload=mandatory\".\n    - Set the MIC_OMP_NUM_THREADS variable to the number of cores on the card.\n\n   Note that the library is produced by offloading the kernels to the Xeon\n   Phi. Performance output files are written in the same directory where the\n   library is executed on the host, therefore this directory must be exported\n   to the Xeon Phi with the right permission (read/write).\n\n   1) Run: ./generate -c config/mic.intel -j 100 -t 16 -w slurm tiny1\n      This command submits 100 jobs in batch. Each job offloads executions\n      to the Intel Xeon Phi card (MIC_OMP_NUM_THREADS threads). Wait until\n      completion of all jobs.\n\n   2) Run: ./generate -c config/mic.intel tiny2\n      This command collects all results of the tiny1 phase and it generates\n      the file tiny_gen_optimal_dnn_mic.intel.out.\n\n   3) As done in 1) and 2), run: ./generate -c config/mic.intel -j 100 -t 16 -w slurm small1\n      This command submits 100 jobs in batch, where each job offloads\n      executions to the Intel Xeon Phi card (MIC_OMP_NUM_THREADS\n      threads). Wait until their completion. Then run: ./generate -c config/mic.intel small2\n      This command collects all results produced in the small1 phase and it\n      generates a file small_gen_optimal_dnn_mic.intel.out\n\n   4) Run: ./generate -c config/mic.intel -t 16 -w slurm lib\n      This commman submit in batch a single job that compiles the library.\n      At the end the library is produced inside the directory lib/\n      (libsmm_dnn_mic.intel.a).\n\n   5) It is highly recommended to run the final test to check the correctness of the library.\n      Run: ./generate -c config/mic.intel -j 200 -w slurm check1\n      After the batch jobs completion, run: ./generate -c config/mic.intel -j 200 check2\n      Note that it is important to use the same number of jobs specified in\n      check1 phase. Finally check test_smm_dnn_mic.intel.out for performance and correctness.\n\n   6) Intermediate files (but not some key output and the library itself)\n      might be removed using ./generate clean\n\n\nThe following copyright covers code and generated library\n!====================================================================================================================\n! * Copyright (c) 2015 Joost VandeVondele and Alfio Lazzaro\n! * All rights reserved.\n! *\n! * Redistribution and use in source and binary forms, with or without\n! * modification, are permitted provided that the following conditions are met:\n! *     * Redistributions of source code must retain the above copyright\n! *       notice, this list of conditions and the following disclaimer.\n! *     * Redistributions in binary form must reproduce the above copyright\n! *       notice, this list of conditions and the following disclaimer in the\n! *       documentation and/or other materials provided with the distribution.\n! *\n! * THIS SOFTWARE IS PROVIDED BY Joost VandeVondele ''AS IS'' AND ANY\n! * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n! * DISCLAIMED. IN NO EVENT SHALL Joost VandeVondele BE LIABLE FOR ANY\n! * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n! * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n! * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n! * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n! * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n! * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n! *\n!====================================================================================================================\n\n"
  },
  {
    "path": "tools/build_libsmm/config/cray.cce",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2013)\n\n# Use: module load PrgEnv-cray\n# Remember to remove any module specific for GPU, e.g. module unload craype-accel-nvidia35 cudatoolkit\n\n#\n# target compiler... these are the options used for building the library.\n# They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native),\n# and allow some flexibility in reordering floating point expressions (-ffast-math).\n# Higher level optimisation (in particular loop nest optimization) should not be used.\n#\ntarget_compile=\"ftn -O2 -hfp3 -hnodwarf -Onopattern -hvector1 -eF -ffree\"\n\n#\n# target dgemm link options... these are the options needed to link blas (e.g. -lblas)\n# blas is used as a fall back option for sizes not included in the library or in those cases where it is faster\n# the same blas library should thus also be used when libsmm is linked.\n#\n# Use libsci when using ftn, therefore no need to set blas_linking\n#\n\n#\n# host compiler... this is used only to compile a few tools needed to build\n# the library. The library itself is not compiled this way.\n# This compiler needs to be able to deal with some Fortran2003 constructs.\n#\nhost_compile=\"gfortran-4.6 -O2\"\n\n#\n# Show affinity mask\n#\nexport CRAY_OMP_CHECK_AFFINITY=TRUE\n\n#\n# Set the aprun command and its options for batch submission\n#\naprun_cmd=\"aprun -n 1 -N 1 -d ${ntasks} -r 1\"\n"
  },
  {
    "path": "tools/build_libsmm/config/cray.gnu",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2013)\n\n# Use: module load PrgEnv-gnu\n# Remember to remove any module specific for GPU, e.g. module unload craype-accel-nvidia35 cudatoolkit\n\n#\n# target compiler... these are the options used for building the library.\n# They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native),\n# and allow some flexibility in reordering floating point expressions (-ffast-math).\n# Higher level optimisation (in particular loop nest optimization) should not be used.\n#\ntarget_compile=\"ftn -O2 -funroll-loops -ffast-math -ftree-vectorize -cpp -finline-functions -fopenmp -march=native\"\n\n#\n# target dgemm link options... these are the options needed to link blas (e.g. -lblas)\n# blas is used as a fall back option for sizes not included in the library or in those cases where it is faster\n# the same blas library should thus also be used when libsmm is linked.\n#\n# Use libsci when using ftn, therefore no need to set blas_linking\n#\n\n#\n# host compiler... this is used only to compile a few tools needed to build\n# the library. The library itself is not compiled this way.\n# This compiler needs to be able to deal with some Fortran2003 constructs.\n#\nhost_compile=\"gfortran -O2\"\n\n#\n# Set the aprun command and its options for batch submission\n#\naprun_cmd=\"aprun -n 1 -N 1 -d ${ntasks} -r 1\"\n"
  },
  {
    "path": "tools/build_libsmm/config/cray.intel.libsci",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2013)\n\n# Use: module load PrgEnv-intel\n# Remember to remove any module specific for GPU, e.g. module unload craype-accel-nvidia35 cudatoolkit\n\n#\n# target compiler... these are the options used for building the library.\n# They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native),\n# and allow some flexibility in reordering floating point expressions (-ffast-math).\n# Higher level optimisation (in particular loop nest optimization) should not be used.\n#\ntarget_compile=\"ftn -O2 -funroll-loops -warn -fpp -finline-functions -nogen-interfaces -openmp -nolib-inline -no-offload\"\n\n#\n# target dgemm link options... these are the options needed to link blas (e.g. -lblas)\n# blas is used as a fall back option for sizes not included in the library or in those cases where it is faster\n# the same blas library should thus also be used when libsmm is linked.\n#\n# Use libsci when using ftn, therefore no need to set blas_linking\n\n#\n# host compiler... this is used only to compile a few tools needed to build\n# the library. The library itself is not compiled this way.\n# This compiler needs to be able to deal with some Fortran2003 constructs.\n#\nhost_compile=\"ifort -O2\"\n\n#\n# Set KMP affinity\n#\nexport KMP_AFFINITY=verbose,granularity=fine,scatter\n\n#\n# Set the aprun command and its options for batch submission\n#\naprun_cmd=\"aprun -n 1 -N 1 -d ${ntasks} -r 1 -cc none\"\n"
  },
  {
    "path": "tools/build_libsmm/config/cray.intel.mkl",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2013)\n\n# Use: module load PrgEnv-intel\n# Remember to remove any module specific for GPU, e.g. module unload craype-accel-nvidia35 cudatoolkit\n\n#\n# target compiler... these are the options used for building the library.\n# They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native),\n# and allow some flexibility in reordering floating point expressions (-ffast-math).\n# Higher level optimisation (in particular loop nest optimization) should not be used.\n#\ntarget_compile=\"ftn -O2 -funroll-loops -warn -fpp -finline-functions -nogen-interfaces -openmp -nolib-inline -no-offload \"\n\n#\n# target dgemm link options... these are the options needed to link blas (e.g. -lblas)\n# blas is used as a fall back option for sizes not included in the library or in those cases where it is faster\n# the same blas library should thus also be used when libsmm is linked.\n#\nblas_linking=\"-static-intel -mkl=sequential\"\n\n#\n# host compiler... this is used only to compile a few tools needed to build\n# the library. The library itself is not compiled this way.\n# This compiler needs to be able to deal with some Fortran2003 constructs.\n#\nhost_compile=\"ifort -O2\"\n\n#\n# Set KMP affinity\n#\nexport KMP_AFFINITY=verbose,granularity=fine,scatter\n\n#\n# Set the aprun command and its options for batch submission\n#\naprun_cmd=\"aprun -n 1 -N 1 -d ${ntasks} -r 1 -cc none\"\n"
  },
  {
    "path": "tools/build_libsmm/config/cray_mic.intel",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2014)\n#\n# This file uses offload mode for the execution of the kernels on the Intel Xeon phi.\n# Remember to set the variable target_compile_offload.\n\n#\n# target compiler... these are the options used for building the Intel Xeon Phi kernels.\n# They should be aggessive enough to e.g. perform vectorization,\n# and allow some flexibility in reordering floating point expressions.\n# Higher level optimisation (in particular loop nest optimization) should not\n# be used.\n# Mandatory to add \"-offload-attribute-target=mic\"\n#\ntarget_compile=\"ftn -O2 -funroll-loops -warn -offload-attribute-target=mic -fpp -finline-functions -nogen-interfaces -openmp\"\n\n#\n# target compiler used to build the CPU driven code for the offload execution\n# of the Intel Xeon Phi kernels.\n# You can reuse most of the flags defined in the target_compile variable.\n# Replace \"-offload-attribute-target=mic\" with \"-offload=mandatory\".\n#\ntarget_compile_offload=\"ftn -O2 -funroll-loops -warn -offload=mandatory -watch=mic-cmd -fpp -finline-functions -nogen-interfaces -openmp\"\n\n#\n# target dgemm link options... these are the options needed to link blas (e.g. -lblas)\n# blas is used as a fall back option for sizes not included in the library or in those cases where it is faster\n# the same blas library should thus also be used when libsmm is linked.\n#\nblas_linking=\"-mkl=sequential\"\n\n#\n# SIMD registers type (bytes): sse (16), avx (32), knc (64)\n#\nSIMD=knc\n\n#\n# Number of threads to be used on the card.\n# Do not use hyperthreads!\n#\nMIC_OMP_NUM_THREADS=58\n\n#\n# host compiler... this is used only to compile a few tools needed to build\n# the library. The library itself is not compiled this way.\n# This compiler needs to be able to deal with some Fortran2003 constructs.\n#\nhost_compile=\"ftn -O2\"\n\n#\n# Set KMP affinity and other variables\n#\nexport KMP_AFFINITY=verbose,granularity=fine,scatter\nexport OFFLOAD_REPORT=3\nexport OMP_STACKSIZE=256M\nexport MIC_STACKSIZE=256M\nexport CRAYPE_LINK_TYPE=dynamic\n\n#\n# Set the aprun command and its options for batch submission\n#\naprun_cmd=\"aprun -n 1 -N 1 -d ${ntasks} -r 1 -cc none\"\n"
  },
  {
    "path": "tools/build_libsmm/config/linux.gnu",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2013)\n\n#\n# target compiler... these are the options used for building the library.\n# They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native),\n# and allow some flexibility in reordering floating point expressions (-ffast-math).\n# Higher level optimisation (in particular loop nest optimization) should not be used.\n#\ntarget_compile=\"gfortran -O2 -funroll-loops -ffast-math -ftree-vectorize -march=native -cpp -finline-functions -fopenmp\"\n\n#\n# target dgemm link options... these are the options needed to link blas (e.g. -lblas)\n# blas is used as a fall back option for sizes not included in the library or in those cases where it is faster\n# the same blas library should thus also be used when libsmm is linked.\n#\nblas_linking=\"-L${INTEL_PATH}/mkl/lib/intel64 -Wl,--start-group -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -Wl,--end-group\"\n\n#\n# host compiler... this is used only to compile a few tools needed to build\n# the library. The library itself is not compiled this way.\n# This compiler needs to be able to deal with some Fortran2003 constructs.\n#\nhost_compile=\"gfortran -O2\"\n"
  },
  {
    "path": "tools/build_libsmm/config/linux.intel",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2013)\n\n#\n# target compiler... these are the options used for building the library.\n# They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native),\n# and allow some flexibility in reordering floating point expressions (-ffast-math).\n# Higher level optimisation (in particular loop nest optimization) should not be used.\n# Note: -fp-model fast=1 is default for the Intel compiler\n#\ntarget_compile=\"ifort -O2 -funroll-loops -warn -xHost -fpp -finline-functions -nogen-interfaces -openmp -nolib-inline -no-offload\"\n\n#\n# target dgemm link options... these are the options needed to link blas (e.g. -lblas)\n# blas is used as a fall back option for sizes not included in the library or in those cases where it is faster\n# the same blas library should thus also be used when libsmm is linked.\n#\nblas_linking=\"-static-intel -mkl=sequential\"\n\n#\n# host compiler... this is used only to compile a few tools needed to build\n# the library. The library itself is not compiled this way.\n# This compiler needs to be able to deal with some Fortran2003 constructs.\n#\nhost_compile=\"gfortran -O2\"\n"
  },
  {
    "path": "tools/build_libsmm/config/local_libxsmm.gnu",
    "content": "# Author: Alfio Lazzaro, alfio.lazzaro@mat.ethz.ch (2015)\n\n#\n# target compiler... these are the options used for building the library.\n# They should be aggessive enough to e.g. perform vectorization for the specific CPU (e.g. -ftree-vectorize -march=native),\n# and allow some flexibility in reordering floating point expressions (-ffast-math).\n# Higher level optimisation (in particular loop nest optimization) should not be used.\n#\ntarget_compile=\"gfortran -O2 -funroll-loops -ffast-math -ftree-vectorize -march=native -cpp -finline-functions -fopenmp\"\n\n#\n# target dgemm link options... these are the options needed to link blas (e.g. -lblas)\n# blas is used as a fall back option for sizes not included in the library or in those cases where it is faster\n# the same blas library should thus also be used when libsmm is linked.\n#\nblas_linking=\"-L${CP2KINSTALLDIR}/lib -lrefblas\"\n\n#\n# host compiler... this is used only to compile a few tools needed to build\n# the library. The library itself is not compiled this way.\n# This compiler needs to be able to deal with some Fortran2003 constructs.\n#\nhost_compile=\"gfortran -O2\"\n\n#\n# include libxsmm (absolute path)\n#\nlibxsmm_dir=/data/lazzaral/new_libsmm/libxsmm-1.0\n"
  },
  {
    "path": "tools/build_libsmm/config/mic.intel",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2014)\n#\n# This file uses offload mode for the execution of the kernels on the Intel Xeon phi.\n# Remember to set the variable target_compile_offload.\n\n#\n# target compiler... these are the options used for building the Intel Xeon Phi kernels.\n# They should be aggessive enough to e.g. perform vectorization,\n# and allow some flexibility in reordering floating point expressions.\n# Higher level optimisation (in particular loop nest optimization) should not\n# be used.\n# Mandatory to add \"-offload-attribute-target=mic\"\n#\ntarget_compile=\"ifort -O2 -funroll-loops -warn -offload-attribute-target=mic -fpp -finline-functions -nogen-interfaces -openmp\"\n\n#\n# target compiler used to build the CPU driven code for the offload execution\n# of the Intel Xeon Phi kernels.\n# You can reuse most of the flags defined in the target_compile variable.\n# Replace \"-offload-attribute-target=mic\" with \"-offload=mandatory\".\n#\ntarget_compile_offload=\"ifort -O2 -funroll-loops -warn -offload=mandatory -watch=mic-cmd -fpp -finline-functions -nogen-interfaces -openmp\"\n\n#\n# target dgemm link options... these are the options needed to link blas (e.g. -lblas)\n# blas is used as a fall back option for sizes not included in the library or in those cases where it is faster\n# the same blas library should thus also be used when libsmm is linked.\n#\nblas_linking=\"-mkl=sequential\"\n\n#\n# SIMD registers type (bytes): sse (16), avx (32), knc (64)\n#\nSIMD=knc\n\n#\n# Number of threads to be used on the card.\n# Do not use hyperthreads!\n#\nMIC_OMP_NUM_THREADS=58\n\n#\n# host compiler... this is used only to compile a few tools needed to build\n# the library. The library itself is not compiled this way.\n# This compiler needs to be able to deal with some Fortran2003 constructs.\n#\nhost_compile=\"ifort -O2\"\n\n#\n# Set KMP affinity and other variables\n#\nexport KMP_AFFINITY=verbose,granularity=fine,scatter\nexport OFFLOAD_REPORT=3\nexport OMP_STACKSIZE=256M\nexport MIC_STACKSIZE=256M\n"
  },
  {
    "path": "tools/build_libsmm/config/none.wlm",
    "content": "\n# Author: Alfio Lazzaro, alfio.lazzaro@mat.ethz.ch  (2015)\n\nbatch_cmd() {\n$@\n}\n"
  },
  {
    "path": "tools/build_libsmm/config/pbs.wlm",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2013)\n\nbatch_cmd() {\n    echo \"${aprun_cmd} $@\" | \\\n\tqsub -N ${test_name} -j oe -V -d ${PWD} -lnodes=1 -lwalltime=${wtime};\n}\n"
  },
  {
    "path": "tools/build_libsmm/config/slurm.wlm",
    "content": "# Author: Alfio Lazzaro, alazzaro@cray.com (2013)\n\nbatch_cmd() {\n    sbatch -J ${test_name} -o \"${test_name}-%j.out\" -D ${PWD} --ntasks=1 --ntasks-per-node=1 --cpus-per-task=${ntasks} -t ${wtime} <<EOF\n#!/bin/bash -e\n${aprun_cmd} $@\nEOF\n}\n"
  },
  {
    "path": "tools/build_libsmm/config.in",
    "content": "#\n# the build script can generate optimized routines packed in a library for\n#\n# 1) 'nn' => C=C+MATMUL(A,B)\n# 2) 'tn' => C=C+MATMUL(TRANSPOSE(A),B)\n# 3) 'nt' => C=C+MATMUL(A,TRANSPOSE(B))\n# 4) 'tt' => C=C+MATMUL(TRANPOSE(A),TRANPOSE(B))\n#\n# select a tranpose_flavor from the list 1 2 3 4\n#\ntranspose_flavor=1\n\n# 1) d => double precision real\n# 2) s => single precision real\n# 3) z => double precision complex\n# 4) c => single precision complex\n#\n# select a data_type from the list 1 2 3 4\n#\ndata_type=1\n\n#\n# matrix dimensions for which optimized routines will be generated.\n# since all combinations of M,N,K are being generated the size of the library becomes very large\n# if too many sizes are being optimized for. Numbers have to be ascending.\n#\ndims_small=\"1 4 5 6 8 9 13 16 17 22 23 24 26 32\"\n\n#\n# tiny dimensions used are used as primivitves and generated in an 'exhaustive' search.\n# They should be a sequence from 1 to N,\n# where N is a number that is large enough to have good in cache performance\n#\ndims_tiny=`seq 1 24`\n"
  },
  {
    "path": "tools/build_libsmm/generate",
    "content": "#!/bin/bash -e\n\n#\n# Author: Alfio Lazzaro, alfio.lazzaro@mat.ethz.ch (2013-2015)\n# Script to generate LIBSMM library\n# Run ./generate -h to see the help\n#\necho\necho \"Script to generate LIBSMM library.\"\necho \"Author: Alfio Lazzaro, alfio.lazzaro@mat.ethz.ch (2013-2015)\"\necho\n\n#\n# Source the library with all routines\n#\nsource generate.bash\n\n#\n# Default OPTIONS values\n#\ndef_config_dir=\"config\"\ndef_config_file=\"${def_config_dir}/cray.gnu\"\ndef_SIMD=\"avx\"\ndef_ntasks=\"1\"\ndef_base_work_dir=\"output\"\ndef_target=\"all\"\ndef_njobs=\"1\"\ndef_wlm=\"slurm\"\ndef_wtime=\"01:00:00\"\n\nshow_help() {\n    echo \"Run with: ./generate [OPTIONS] [COMMAND]\"\n    echo\n    echo \"OPTIONS are:\"\n    echo \"   -h               : show this help.\"\n    echo \"   -c <config file> : config file to use (declared inside ${def_config_dir} directory).\"\n    echo \"                      Default value is \\\"${def_config_file}\\\".\"\n    echo \"   -j <#>           : set the number of jobs for batch submission. Setting to zero means no batch submission.\"\n    echo \"                      Default value is \\\"${def_njobs}\\\".\"\n    echo \"   -s <SIMD type>   : SIMD registers type (sse, avx, avx2, knc, avx512).\"\n    echo \"                      Default value is \\\"${def_SIMD}\\\".\"\n    echo \"   -t <#>           : set the number of tasks per each node.\"\n    echo \"                      Default value is ${def_ntasks}.\"\n    echo \"   -w <wlm type>    : workload manager for batch submission. The value must correspond to one of the files ${def_config_dir}/*.wlm.\"\n    echo \"                      Default value is \\\"${def_wlm}\\\".\"\n    echo \"   -m <time>        : time limit for batch execution.\"\n    echo \"                      Default value is \\\"${def_wtime}\\\".\"\n    echo \"   -a <target>      : Target for make compilation. Values are: \"\n    echo \"                           all: generate, compile and run the kernels.\"\n    echo \"                        source: only generate the source file kernels.\"\n    echo \"                       compile: generate and compile the kernels.\"\n    echo \"                      Default value is \\\"${def_target}\\\".\"\n    echo\n    echo \"COMMAND is one of the followings:\"\n    echo \"   tiny1  : it runs the tiny phase. Batch execution if requested.\"\n    echo \"   tiny2  : collect the results of the tiny phase.\"\n    echo \"            Run automatically during tiny1 when there is no batch execution.\"\n    echo \"   small1 : it runs the small phase. Batch execution if requested.\"\n    echo \"   small2 : collect the results of the small phase. \"\n    echo \"            Run automatically during small1 when there is no batch execution.\"\n    echo \"   lib    : generate the library. Batch execution if requested (a single job needed).\"\n    echo \"   check1 : run the checks on the library. Batch execution if requested.\"\n    echo \"   check2 : collect the results of the checks.\"\n    echo \"            Run automatically during check1 when there is no batch execution.\"\n    echo \"            NOTE: same number of jobs used in check1 must be used for check2.\"\n    echo \"NOTE: COMMANDs must be executed in the above order.\"\n    echo\n    echo \"Special COMMAND:\"\n    echo \"     clean : remove intermediate files (but not some key output and the library itself).\"\n    echo \" realclean : remove all intermediate files.\"\n    echo\n    exit\n}\n\n#\n# Load OPTIONS\n#\ncheck_number()\n{\n    if ! [[ \"$1\" =~ ^[0-9]+$ ]] ; then\n\techo \"Error: $1 is not a valid number for -$2 option!.\"\n\techo \"Run ./generate -h for help.\"\n\texit\n    fi\n\n    # Check for positive numbers\n    if [ $# -gt 2 -a $1 -le 0 ]; then\n\techo \"Error: $1 must be positive for -$2 option!.\"\n\techo \"Run ./generate -h for help.\"\n\texit\n    fi\n\n}\n\nwhile getopts \"c:hj:s:t:w:m:a:\" OPTION; do\n    case $OPTION in\n\tc)\n\t    config_file=$OPTARG\n\t    ;;\n\th)\n\t    show_help\n\t    ;;\n\tj)\n\t    jobs=$OPTARG\n\t    check_number $jobs $OPTION\n\t    ;;\n\ts)\n\t    SIMD=$OPTARG\n\t    ;;\n\tt)\n\t    ntasks=$OPTARG\n\t    check_number $ntasks $OPTION $ntasks\n\t    ;;\n\tw)\n\t    wlm=$OPTARG\n\t    ;;\n\tm)\n\t    wtime=$OPTARG\n\t    ;;\n\ta)\n\t    case $OPTARG in\n\t\tall|source|compile)\n\t\t    target=$OPTARG\n\t    \t    ;;\n\t\t*)\n\t\t    echo \"Warning: target \\\"$OPTARG\\\" unknown. Run ./generate -h for help.\"\n\t\t    exit\n\t\t    ;;\n\t    esac\n\t    ;;\n        ?)\n            exit\n            ;;\n    esac\ndone\nshift $(( OPTIND - 1))\n\n#\n# Use default OPTIONS values if they were not declared\n#\nif [ -z \"${config_file}\" ]; then\n    config_file=${def_config_file}\nfi\n\nif [ -z \"${SIMD}\" ]; then\n    SIMD=${def_SIMD}\nfi\n\nif [ -z \"${ntasks}\" ]; then\n    ntasks=${def_ntasks}\nfi\n\nif [ -z \"${jobs}\" ]; then\n    jobs=${def_njobs}\nfi\n\nif [ -z \"${wlm}\" ]; then\n    wlm=${def_wlm}\nfi\n\nif [ -z \"${wtime}\" ]; then\n    wtime=${def_wtime}\nfi\n\nif [ -z \"${target}\" ]; then\n    target=${def_target}\nfi\n\nbase_work_dir=$def_base_work_dir\n\n#\n# Check COMMAND value\n#\nif [ $# -eq 0 ]; then\n    echo \"Missing COMMAND! Run ./generate -h for help.\"\n    exit\nfi\n\ncmd=`echo $1 | awk '{ print tolower($0)}'`\n\ncase $cmd in\n    tiny1|tiny2|small1|small2|lib|check1|check2)\n\t;;\n    clean|realclean)\n\techo \"Remove files.\"\n\trm -fR run_tiny_*/\n\trm -fR run_small_*/\n\trm -fR run_lib_*/\n\trm -fR run_check_*/\n\trm -f *.mod Makefile.* *.x *.o\n\trm -f *~\n\tif [ \"$cmd\" == \"realclean\" ]; then\n\t    rm -f *.out\n\t    rm -fR lib\n\tfi\n\techo\n\texit\n\t;;\n    *)\n\techo \"Unknown COMMAND \\\"$1\\\". Run ./generate -h for help.\"\n\texit\n\t;;\nesac\n\n#\n# Check OPTIONS values\n#\nif [ ! -e ${config_file} ]; then\n    echo \"Error: config file \\\"${config_file}\\\" doesn't exist!\"\n    echo \"Available config files are:\"\n    ls ${def_config_dir} | grep -v \"wlm\"\n    exit\nfi\n\nif [ ! -e ${def_config_dir}/${wlm}.wlm ]; then\n    echo \"Error: corresponding wlm file to \\\"${wlm}\\\" (${wlm}.wlm) doesn't exist inside ${def_config_dir} directory!\"\n    echo \"Available wlm files are:\"\n    ls ${def_config_dir} | grep \"wlm\" | cut -d'.' -f1\n    exit\nfi\n\nif [ \"${cmd}\" == \"lib\" -a ${jobs} -gt 0 ]; then\n    jobs=1\nfi\n\n#\n# Source the configuration files\n#\nsource config.in\nsource ${config_file}\n\nif [[ ( -n \"${libxsmm_dir}\") ]]; then\n    echo \"Use libxsmm from ${libxsmm_dir}\"\n    if [[ ( \"${data_type}\" != \"1\" ) && ( \"${data_type}\" != \"2\" ) ]]; then\n\techo \"Error: libxsmm doesn't support complex numbers.\"\n\texit\n    fi\n    if [[ ( \"${transpose_flavor}\" != \"1\" ) ]]; then\n\techo \"Error: libxsmm supports only NN transposity.\"\n\texit\n    fi\nfi\n\ncase `echo ${SIMD} | awk '{ print tolower($0)}'` in\n    sse)\n\tSIMD_size=16\n\tSIMD_libxsmm=\"wsm\"\n\tSIMD_libxsmm_target=\"SSE=3\"\n\t;;\n    avx)\n\tSIMD_size=32\n\tSIMD_libxsmm=\"snb\"\n\tSIMD_libxsmm_target=\"AVX=1\"\n\t;;\n    avx2)\n\tSIMD_size=32\n\tSIMD_libxsmm=\"hsw\"\n\tSIMD_libxsmm_target=\"AVX=2\"\n\t;;\n    knc)\n\tif [ ! -n \"${target_compile_offload}\" ]; then\n            echo \"Error: knc requires to set \\`target_compile_offload' variable in the config file!\"\n\t    exit\n\tfi\n\tSIMD_size=64\n\tSIMD_libxsmm=\"knc\"\n\tSIMD_libxsmm_target=\"OFFLOAD=1\"\n\t;;\n    avx512)\n\tSIMD_size=64\n\tSIMD_libxsmm=\"knl\"\n\tSIMD_libxsmm_target=\"AVX=3\"\n\t;;\n    *)\n\techo \"Error: SIMD register type \\\"${SIMD}\\\" doesn't exist!\"\n\techo \"Run ./generate -h for help.\"\n\texit\n\t;;\nesac\n\ndims_tiny=`echo ${dims_tiny} | tr \"\\n\" \" \"` # remove \\n\ndims_small=`echo ${dims_small} | tr \"\\n\" \" \"` # remove \\n\n\n#\n# Dump configuration\n#\necho \"Config file                   : \\\"${config_file}\\\"\"\necho \"Number of tasks per each node : ${ntasks}\"\necho \"Number of batch jobs          : ${jobs}\"\necho \"WLM                           : ${wlm}\"\necho \"SIMD register type            : ${SIMD}\"\necho \"Limit time batch              : ${wtime}\"\necho \"COMMAND                       : \\\"${cmd}\\\"\"\necho \"Make target                   : \\\"${target}\\\"\"\necho\n\n#\n# customize target for libsmm\n#\ntarget+=\"_libsmm\"\n\n#\n# Set working variables\n#\nconfig_file_name=`basename ${config_file}`\nwork_dir=\"${base_work_dir}_${config_file_name}\"\n\nif [ ${jobs} -gt 0 ]; then\n    source ${def_config_dir}/${wlm}.wlm\n\n    case $cmd in\n\ttiny1|small1|lib|check1)\n\t    run_cmd=batch_cmd\n\t    ;;\n\ttiny2|small2|check2)\n\t    run_cmd=true\n\t    ;;\n    esac\nelse\n    # Require 1 job\n    jobs=1\n\n    case $cmd in\n\ttiny2|small2|check2)\n            run_cmd=true\n            ;;\n    esac\nfi\n\ntype_label=\"_\"\ncase \"${data_type}\" in\n    1 )\n\ttype_label+=\"d\"\n\tgemm=\"DGEMM\"\n        strdat=\"REAL(KIND=KIND(0.0D0))\"\n\tdata_libxsmm=\"DP\"\n\t;;\n    2 )\n\ttype_label+=\"s\"\n\tgemm=\"SGEMM\"\n\tstrdat=\"REAL(KIND=KIND(0.0))\"\n\tdata_libxsmm=\"SP\"\n\t;;\n    3 )\n\ttype_label+=\"z\"\n\tgemm=\"ZGEMM\"\n\tstrdat=\"COMPLEX(KIND=KIND(0.0D0))\"\n\t;;\n    4 )\n\ttype_label+=\"c\"\n\tgemm=\"CGEMM\"\n\tstrdat=\"COMPLEX(KIND=KIND(0.0))\"\n\t;;\nesac\ncase \"${transpose_flavor}\" in\n    1 )\n\ttype_label+=\"nn\"\n\tta=\"N\"\n\ttb=\"N\"\n\tdecl=\"A(M,K), B(K,N)\"\n\tlds=\"LDA=M ; LDB=K\"\n\t;;\n    2 )\n\ttype_label+=\"tn\"\n\tta=\"T\"\n\ttb=\"N\"\n\tdecl=\"A(K,M), B(K,N)\"\n\tlds=\"LDA=K ; LDB=K\"\n\t;;\n    3 )\n\ttype_label+=\"nt\"\n\tta=\"N\"\n\ttb=\"T\"\n\tdecl=\"A(M,K), B(N,K)\"\n\tlds=\"LDA=M ; LDB=N\"\n\t;;\n    4 )\n\ttype_label+=\"tt\"\n\tta=\"T\"\n\ttb=\"T\"\n\tdecl=\"A(K,M), B(N,K)\"\n\tlds=\"LDA=K ; LDB=N\"\n\t;;\nesac\n\nrun_dir=\"run\"\nmake_file=\"Makefile.\"\ncase $cmd in\n    tiny1|tiny2)\n\trun_dir+=\"_tiny\"\n\tmake_file+=\"tiny\"\n\t;;\n    small1|small2)\n\trun_dir+=\"_small\"\n\tmake_file+=\"small\"\n\t;;\n    lib)\n\trun_dir+=\"_lib\"\n\tmake_file+=\"lib\"\n\t;;\n    check1|check2)\n\trun_dir+=\"_check\"\n\n\t;;\nesac\nrun_dir+=\"${type_label}\"\nmake_file+=\"${type_label}_${config_file_name}\"\n\ntiny_file=\"tiny_gen_optimal${type_label}_${config_file_name}.out\"\nsmall_file=\"small_gen_optimal${type_label}_${config_file_name}.out\"\ntest_file=\"test_smm${type_label}\"\n\nlibrary=\"smm${type_label}_${config_file_name}\"\narchive=\"../lib/lib${library}.a\"\n\n#\n# Run the command!\n#\n\nmkdir -p ${run_dir}\n\ncase $cmd in\n    tiny1|tiny2)\n\tdo_generate_tiny\n\tif [ \"$cmd\" == \"tiny1\" -a -n \"${run_cmd}\" ]; then\n\t    echo\n\t    echo \"Wait for completion of all jobs, then run with tiny2 command for collecting all results.\"\n\t    echo\n\tfi\n\t;;\n    small1|small2)\n\tdo_generate_small\n\tif [ \"$cmd\" == \"small1\" -a -n \"${run_cmd}\" ]; then\n\t    echo\n\t    echo \"Wait for completion of all jobs, then run with small2 command for collecting all results.\"\n\t    echo\n\tfi\n\t;;\n    lib)\n\tdo_generate_lib\n\techo\n\techo \"Remember to run the check* commands to check the correctness and performance of the library.\"\n\techo\n\t;;\n    check1|check2)\n\tdo_check\n\tif [ \"$cmd\" == \"check1\" -a -n \"${run_cmd}\" ]; then\n\t    echo\n\t    echo \"Wait for completion of all jobs, then run with check2 command for collecting all results.\"\n\t    echo\n\tfi\n\t;;\nesac\n\n"
  },
  {
    "path": "tools/build_libsmm/generate.bash",
    "content": "#\n# Author: Alfio Lazzaro, alfio.lazzaro@mat.ethz.ch (2013-2015)\n# Library for the generate script used in LIBSMM library\n#\n\n#\n# Header of the makefile for small and tiny compilation parts\n#\nwrite_makefile_header() {\n    #\n    # generate the list of indices files\n    #\n    prefix_file=$1 ; shift\n\n    printf \"LIBSMM_DIMS         = $@\\n\"\n    printf \"LIBSMM_DIMS_INDICES = \\$(foreach m,\\$(LIBSMM_DIMS),\\$(foreach n,\\$(LIBSMM_DIMS),\\$(foreach k,\\$(LIBSMM_DIMS),\\$m_\\$n_\\$k)))\"\n    printf \"\\n\\n\"\n\n    #\n    # consider only a sub-range of all indices\n    #\n    printf \"LIBSMM_SI = 1\\n\"\n    printf \"LIBSMM_EI = \\$(words \\$(LIBSMM_DIMS_INDICES))\\n\"\n    printf \"LIBSMM_INDICES = \\$(wordlist \\$(LIBSMM_SI),\\$(LIBSMM_EI),\\$(LIBSMM_DIMS_INDICES))\\n\\n\"\n\n    #\n    # output directory for compiled and results files\n    #\n    printf \"LIBSMM_WORKDIR=${work_dir}\\n\\n\"\n\n    #\n    # list of source files\n    #\n    printf \"LIBSMM_SRCFILES=\\$(patsubst %%,${prefix_file}_find_%%.f90,\\$(LIBSMM_INDICES)) \\n\"\n\n    #\n    # list of executables\n    #\n    printf \"LIBSMM_OBJFILES=\\$(patsubst %%,\\$(LIBSMM_WORKDIR)/${prefix_file}_find_%%.o,\\$(LIBSMM_INDICES)) \\n\"\n\n    #\n    # list of output files\n    #\n    printf \"LIBSMM_OUTFILES=\\$(LIBSMM_OBJFILES:.o=.out) \\n\\n\"\n\n    #\n    # name of the executable\n    #\n    printf \"LIBSMM_EXE=\\$(LIBSMM_WORKDIR)/${prefix_file}_find_\\$(firstword \\$(LIBSMM_INDICES))__\\$(lastword \\$(LIBSMM_INDICES)).x \\n\\n\"\n\n    #\n    # main target\n    #\n    printf \".PHONY: all_libsmm compile_libsmm source_libsmm \\$(LIBSMM_EXE:.x=.f90) \\n\"\n    printf \"all_libsmm: \\n\\n\"\n\n    #\n    # include makefile for source master code generation\n    #\n    printf \"LIBSMM_DATATYPE=${strdat}\\n\"\n    if [ -n \"${target_compile_offload}\" ]; then\n\tprintf \"LIBSMM_MIC_OFFLOAD=1\\n\"\n    fi\n    printf \"include ../make.gen\\n\\n\"\n\n    #\n    # include Makefile for libxsmm kernels\n    #\n    if [[ (\"$prefix_file\" = \"small\") && ( -n \"${libxsmm_dir}\") ]]; then\n\tprintf \"LIBXSMM_DIR=${libxsmm_dir}\\n\"\n\tprintf \"LIBXSMM_WORKDIR=${libxsmm_work_dir}\\n\"\n\tprintf \"ROW_MAJOR=0\\n\"\n\tprintf \"${SIMD_libxsmm_target}\\n\"\n\tprintf \"include \\$(LIBXSMM_DIR)/Makefile\\n\"\n\tprintf \"LIBXSMM_OBJFILES=\\$(patsubst %%,\\$(LIBXSMM_WORKDIR)/libxsmm${type_label}_${SIMD_libxsmm}_${prefix_file}_find_%%.o,\\$(LIBSMM_INDICES))\\n\\n\"\n    fi\n\n    #\n    # write general targets\n    #\n    printf \"all_libsmm: \\$(LIBSMM_EXE) \\n\"\n    printf \"\\t rm -f \\$(LIBSMM_OUTFILES) \\n\"\n    printf \"\\t export OMP_NUM_THREADS=\"\n    if [ -n \"${MIC_OMP_NUM_THREADS}\" ]; then\n\tprintf \"${MIC_OMP_NUM_THREADS}\"\n    else\n\tprintf \"${ntasks}\"\n    fi\n    printf \" ; ./\\$< \\n\\n\"\n\n    printf \"\\$(LIBSMM_EXE): \\$(LIBSMM_OBJFILES) \\$(LIBSMM_EXE:.x=.f90)\"\n    if [[ (\"$prefix_file\" = \"small\") && ( -n \"${libxsmm_dir}\") ]]; then\n\tprintf \" \\$(LIBXSMM_OBJFILES)\"\n    fi\n    printf \"\\n\"\n    if [ -n \"${target_compile_offload}\" ]; then\n\tprintf \"\\t ${target_compile_offload} \"\n    else\n\tprintf \"\\t ${target_compile} \"\n    fi\n    printf \"\\$^ -o \\$@ ${blas_linking} \\n\\n\"\n}\n\n\n#\n# Function to run the make command\n# Execution in several jobs if requested\n#\nrun_make() {\n    cd ${run_dir}\n    mkdir -p ${work_dir}\n    if [ -n \"${target_compile_offload}\" ]; then\n\tchmod o+w ${work_dir}\n    fi\n\n    ndims=$#\n    nelements=$((ndims*ndims*ndims))\n    nelements_in=$((nelements / jobs))\n    nelements_out=$((nelements % jobs))\n    element_start=1\n    element_end=0\n\n    echo \"# Elements = ${ndims}^3 = ${nelements} split in ${jobs} jobs.\"\n\n    for (( ijob=1 ; ijob<=jobs; ijob++ )); do\n\n        element_end=$(( element_end + nelements_in ))\n        if [ ${ijob} -le ${nelements_out} ]; then\n            element_end=$(( element_end + 1))\n        fi\n\n        test_name=${run_dir}_job${ijob}\n        echo \"Launching elements ${element_start} --> ${element_end} (${test_name})\"\n        ${run_cmd} make -j ${ntasks} -f ../${make_file} ${target} LIBSMM_SI=${element_start} LIBSMM_EI=${element_end}\n\n        element_start=$(( element_end + 1))\n    done\n\n    cd ..\n}\n\n\n#\n# Macro to collected results (small and tiny parts)\n#\ncollect_results() {\n\n    #\n    # Stop the execution if the output files were not produced or it is running in batch mode\n    #\n    if [ \"$target\" = \"source\" -o \"$target\" = \"compile\" -o \"$run_cmd\" = \"batch_cmd\" ]; then\n\treturn\n    fi\n\n    echo \"Collecting results (it can take several minutes)...\"\n\n    out_file=$1 ; shift\n    suffix=$1 ; shift\n\n    #\n    # analyse results finding optimal tiny or small mults\n    #\n    (\n\tfor m in $@  ; do\n\t    for n in $@  ; do\n\t\tfor k in $@  ; do\n\t\t    file=${suffix}_find_${m}_${n}_${k}.out\n\t\t    res=`tail -n 1 ${run_dir}/${work_dir}/$file`\n\t\t    if [ -z \"${res}\" ]; then\n\t\t\tres=`tail -n 2 ${run_dir}/${work_dir}/$file`\n\t\t    fi\n\t\t    echo \"$m $n $k $res\"\n\t\tdone ; done ; done\n    ) > ${out_file}\n}\n\n\ndo_generate_tiny() {\n    #\n    # skip the compilation part if it needs only to collect the results\n    #\n    if [ \"$run_cmd\" != \"true\" ]; then\n        #\n        # compile the generator of tiny mults\n        #\n\t${host_compile} -c mults.f90\n\t${host_compile} mults.o tiny_gen.f90 -o tiny_gen.x\n\n        #\n        # for easy parallelism go via a Makefile\n        #\n\trm -f ${make_file}\n\t(\n\t    write_makefile_header tiny \"${dims_tiny}\"\n\n\t    #\n\t    # Write specific targets\n\t    #\n\t    printf \"compile_libsmm: \\$(LIBSMM_OBJFILES) \\n\"\n\t    printf \"\\$(LIBSMM_WORKDIR)/%%.o: %%.f90 \\n\"\n\t    printf \"\\t ${target_compile} -c \\$< -o \\$@ \\n\\n\"\n\n\t    printf \"source_libsmm: \\$(LIBSMM_SRCFILES) \\n\"\n\t    printf \"%%.f90: \\n\"\n\t    printf '\\t .././tiny_gen.x `echo $* | awk -F_ '\\''{ print $$3\" \"$$4\" \"$$5 }'\\''`'\n\t    printf \" ${transpose_flavor} ${data_type} > \\$@ \\n\\n\"\n\t) > ${make_file}\n\n\trun_make ${dims_tiny}\n\n    fi # close if [ \"$run_cmd\" != \"true\" ]\n\n    collect_results ${tiny_file} \"tiny\" \"${dims_tiny}\"\n}\n\n\ndo_generate_small() {\n    #\n    # Check if tiny file exists\n    #\n    if [ ! -s ${tiny_file} ]; then\n\techo \"Tiny file ${tiny_file} doesn't exist. Have you ran tiny1/tiny2 phase?\"\n\techo \"Abort execution.\"\n\techo\n\texit\n    fi\n\n    #\n    # skip the compilation part if it needs only to collect the results\n    #\n    if [ \"$run_cmd\" != \"true\" ]; then\n\t#\n\t# compile the generator of small mults\n\t#\n\t${host_compile} -c mults.f90\n\t${host_compile} -c multrec_gen.f90\n\t${host_compile} mults.o multrec_gen.o small_gen.f90 -o small_gen.x\n\t#\n\t# compile libxsmm generator\n\t#\n\tif [[ ( -n \"${libxsmm_dir}\") ]]; then\n\t    libxsmm_work_dir=libxsmm\n\t    mkdir -p ${run_dir}/${libxsmm_work_dir}\n\t    ( cd ${libxsmm_dir} && make -j ${ntasks} generator )\n\tfi\n\t#\n\t# for easy parallelism go via a Makefile\n\t#\n\trm -f ${make_file}\n\t(\n\t    write_makefile_header small \"${dims_small}\"\n    \t    #\n\t    # Write specific targets\n\t    #\n\t    printf \"compile_libsmm: \\$(LIBSMM_OBJFILES)\"\n\t    if [[ ( -n \"${libxsmm_dir}\") ]]; then\n\t\tprintf \" \\$(LIBXSMM_OBJFILES)\"\n\t    fi\n\t    printf \"\\n\"\n\t    printf \"\\$(LIBSMM_WORKDIR)/%%.o: \\$(LIBSMM_WORKDIR)/%%.f90 \\n\"\n\t    printf \"\\t ${target_compile} -c \\$< -o \\$@ \\n\"\n    \t    #\n\t    # compile libxsmm kernel\n\t    #\n\t    if [[ ( -n \"${libxsmm_dir}\") ]]; then\n\t\tprintf \"\\$(LIBXSMM_WORKDIR)/%%.o: \\$(LIBXSMM_WORKDIR)/%%.c \\n\"\n\t\tprintf \"\\t \\$(CC) \\$(CFLAGS) \\$(DFLAGS) \\$(TARGET) -c \\$< -o \\$@ \\n\"\n\t    fi\n\t    printf \"\\n\"\n\n\t    printf \"source_libsmm: \\$(addprefix \\$(LIBSMM_WORKDIR)/,\\$(LIBSMM_SRCFILES))\"\n\t    if [[ ( -n \"${libxsmm_dir}\") ]]; then\n\t\tprintf \" \\$(LIBXSMM_OBJFILES:.o=.c)\"\n\t    fi\n\t    printf \"\\n\"\n\t    printf \"\\$(LIBSMM_WORKDIR)/%%.f90: ../${tiny_file} \\n\"\n\t    printf '\\t .././small_gen.x `echo $* | awk -F_ '\\''{ print $$3\" \"$$4\" \"$$5 }'\\''`'\n\t    printf \" ${transpose_flavor} ${data_type} ${SIMD_size} ../${tiny_file} \"\n\t    if [ -n \"${libxsmm_dir}\" ]; then\n\t\tprintf \"1 \"\n\t    fi\n\t    printf \"> \\$@\\n\"\n\t    #\n\t    # generate libxsmm kernel\n\t    #\n\t    if [[ ( -n \"${libxsmm_dir}\") ]]; then\n\t\tprintf \"\\$(LIBXSMM_WORKDIR)/%%.c:\\n\"\n\t\tprintf \"\\t rm -f \\$@\\n\"\n\t\tprintf \"\\t \\$(LIBXSMM_DIR)/bin/./generator dense\"\n\t\tprintf \" \\$@\"\n\t\tprintf \" libxsmm_\"\n\t\tprintf '`echo $* | awk -F_ '\\''{ print $$6\"_\"$$7\"_\"$$8\" \"$$6\" \"$$7\" \"$$8\" \"$$6\" \"$$8\" \"$$6 }'\\''` '\n\t\tprintf \"1 1 0 0 ${SIMD_libxsmm} nopf ${data_libxsmm}\"\n\t    fi\n\t    printf \"\\n\\n\"\n\t) > ${make_file}\n\n\trun_make ${dims_small}\n\n    fi # close if [ \"$run_cmd\" != \"true\" ]\n\n    collect_results ${small_file} \"small\" \"${dims_small}\"\n\n}\n\ndo_generate_lib() {\n    #\n    # Check if tiny file exists\n    #\n    if [ ! -s ${tiny_file} ]; then\n\techo \"Tiny file ${tiny_file} doesn't exist. Have you ran tiny1/tiny2 phase?\"\n\techo \"Abort execution.\"\n\techo\n\texit\n    fi\n\n    #\n    # Check if small file exists\n    #\n    if [ ! -s ${small_file} ]; then\n\techo \"Small file ${small_file} doesn't exist. Have you ran small1/small2 phase?\"\n\techo \"Abort execution.\"\n\techo\n\texit\n    fi\n\n    #\n    # compile the generator of small mults\n    #\n    ${host_compile} -c mults.f90\n    ${host_compile} -c multrec_gen.f90\n    ${host_compile} mults.o multrec_gen.o lib_gen.f90 -o lib_gen.x\n\n    #\n    # directory for the library\n    #\n    mkdir -p lib\n\n    #\n    # generate the generic caller\n    #\n    echo \"Generate the generic caller... it can take a while...\"\n\n    maxsize=-1\n    numsize=0\n\n    for myn in ${dims_small}\n    do\n\tnumsize=$((numsize+1))\n\tmaxsize=`echo \"$myn $maxsize\" | awk '{if ($1>$2) { print $1 } else { print $2 } }'`\n    done\n\n    #\n    # generate a translation array for the jump table\n    #\n    count=0\n    eles=\"(/0\"\n    for i in `seq 1 $maxsize`\n    do\n\n\tfound=0\n\tfor myn in ${dims_small}\n\tdo\n\t    if [ \"$myn\" == \"$i\" ]; then\n\t\tfound=1\n\t    fi\n\tdone\n\tif [ \"$found\" == 1 ]; then\n\t    count=$((count+1))\n\t    ele=$count\n\telse\n\t    ele=0\n\tfi\n\teles=\"$eles,$ele\"\n    done\n    eles=\"$eles/)\"\n\n    cd ${run_dir}\n\n    file=\"smm${type_label}.f90\"\n    rm -f ${file}\n\n    write_routine() {\n\n\tif [ $# -eq 0 ]; then\n\t    printf \"SUBROUTINE smm_vec${type_label}(M,N,K,A,B,C,stack_size,dbcsr_ps_width,params,p_a_first,p_b_first,p_c_first)\\n\" >> ${file}\n\telse\n\t    printf \"SUBROUTINE smm${type_label}(M,N,K,A,B,C)\\n\" >> ${file}\n\tfi\n\tprintf \" INTEGER :: M,N,K,LDA,LDB\\n ${strdat} :: C(*), B(*), A(*)\\n\" >> ${file}\n\tif [ $# -eq 0 ]; then\n\t    printf \" INTEGER :: stack_size, dbcsr_ps_width \\n\" >> ${file}\n\t    printf \" INTEGER :: params(dbcsr_ps_width,stack_size) \\n\" >> ${file}\n\t    printf \" INTEGER :: p_a_first,p_b_first,p_c_first \\n\" >> ${file}\n\t    printf \" INTEGER :: sp\\n\" >> ${file}\n\tfi\n\tprintf \" INTEGER, PARAMETER :: indx(0:$maxsize)=&\\n $eles\\n\" >> ${file}\n\tprintf \" INTEGER :: im,in,ik,itot\\n\" >> ${file}\n\tprintf \" $strdat, PARAMETER :: one=1\\n\" >> ${file}\n\tprintf \" IF (M<=$maxsize) THEN\\n   im=indx(M)\\n ELSE\\n   im=0\\n ENDIF\\n\" >> ${file}\n\tprintf \" IF (N<=$maxsize) THEN\\n   in=indx(N)\\n ELSE\\n   in=0\\n ENDIF\\n\" >> ${file}\n\tprintf \" IF (K<=$maxsize) THEN\\n   ik=indx(K)\\n ELSE\\n   ik=0\\n ENDIF\\n\" >> ${file}\n\tprintf \" itot=(ik*($numsize+1)+in)*($numsize+1)+im\\n\" >> ${file}\n\n\tcount=0\n\tprintf \" SELECT CASE(itot)\\n\" >> ${file}\n\tfor myk in 0 ${dims_small}\n\tdo\n\t    for myn in 0 ${dims_small}\n\t    do\n\t\tfor mym in 0 ${dims_small}\n\t\tdo\n\t\t    printf \" CASE($count)\\n \" >> ${file}\n\t\t    prod=$((myk*myn*mym))\n\t\t    if [[ \"$prod\" == \"0\" ]]; then\n\t\t\tprintf '   GOTO 999\\n' >> ${file}\n\t\t    else\n\t\t\tif [ -n \"${target_compile_offload}\" ]; then\n\t\t\t    printf '!dir$ attributes offload:mic ::' >> ${file}\n\t\t\t    printf \"smm${type_label}_${mym}_${myn}_${myk}\" >> ${file}\n\t\t\t    if [ $# -eq 0 ]; then\n\t\t\t\tprintf \"_stack\" >> ${file}\n\t\t\t    fi\n\t\t\t    printf \"\\n\" >> ${file}\n\t\t\tfi\n\t\t\tif [ $# -eq 0 ]; then\n\t\t\t    printf \"   CALL smm${type_label}_${mym}_${myn}_${myk}_stack(A,B,C,stack_size,dbcsr_ps_width,params,p_a_first,p_b_first,p_c_first)\\n\" >> ${file}\n\t\t\telse\n\t\t\t    printf \"   CALL smm${type_label}_${mym}_${myn}_${myk}(A,B,C)\\n\" >> ${file}\n\t\t\tfi\n\t\t    fi\n\t\t    count=$((count+1))\n\t\tdone\n\t    done\n\tdone\n\tprintf \" END SELECT\\n\" >> ${file}\n\tprintf \" RETURN\\n\" >> ${file}\n\tprintf \"999 CONTINUE \\n\" >> ${file}\n\tprintf \" ${lds}\\n\" >> ${file}\n\tif [ -n \"${target_compile_offload}\" ]; then\n\t    printf '!dir$ attributes offload:mic ::' >> ${file}\n\t    printf \"${gemm}\\n\" >> ${file}\n\tfi\n\tif [ $# -eq 0 ]; then\n\t    printf \" DO sp = 1, stack_size\\n\" >> ${file}\n\t    printf \"   CALL ${gemm}('%s','%s',M,N,K,one,A(params(p_a_first,sp)),LDA,B(params(p_b_first,sp)),LDB,one,C(params(p_c_first,sp)),M)\\n\" $ta $tb >> ${file}\n\t    printf \" ENDDO\\n\" >> ${file}\n\t    printf \"END SUBROUTINE smm_vec${type_label}\\n\\n\" >> ${file}\n\telse\n\t    printf \" CALL ${gemm}('%s','%s',M,N,K,one,A,LDA,B,LDB,one,C,M)\\n\" $ta $tb >> ${file}\n\t    printf \"END SUBROUTINE smm${type_label}\\n\\n\" >> ${file}\n\tfi\n    }\n\n    write_routine\n    write_routine 0\n\n    cd ..\n\n    #\n    # compile libxsmm generator\n    #\n    if [[ ( -n \"${libxsmm_dir}\") ]]; then\n\tlibxsmm_work_dir=libxsmm\n\tmkdir -p ${run_dir}/${libxsmm_work_dir}\n\t( cd ${libxsmm_dir} && make -j ${ntasks} generator )\n    fi\n\n    #\n    # for easy parallelism go via a Makefile\n    #\n    rm -f ${make_file}\n    rm -f ${archive}\n\n    (\n\tprintf \"LIBSMM_DIMS = ${dims_small}\\n\"\n\tprintf \"LIBSMM_DIMS_INDICES = \\$(foreach m,\\$(LIBSMM_DIMS),\\$(foreach n,\\$(LIBSMM_DIMS),\\$(foreach k,\\$(LIBSMM_DIMS),\\$m_\\$n_\\$k)))\"\n\tprintf \"\\n\\n\"\n\n\t#\n\t# output directory for compiled and results files\n\t#\n\tprintf \"LIBSMM_WORKDIR=${work_dir}\\n\\n\"\n\n\t#\n\t# driver file\n\t#\n\tprintf \"LIBSMM_DRIVER=${file%.*}.o \\n\\n\"\n\n\t#\n\t# list of source files\n\t#\n\tprintf \"LIBSMM_SRCFILES=\\$(patsubst %%,\\$(LIBSMM_WORKDIR)/smm${type_label}_%%.f90,\\$(LIBSMM_DIMS_INDICES)) \\n\"\n\n\t#\n\t# list of obj files\n\t#\n\tprintf \"LIBSMM_OBJFILES=\\$(patsubst %%,\\$(LIBSMM_WORKDIR)/smm${type_label}_%%.o,\\$(LIBSMM_DIMS_INDICES)) \\n\\n\"\n\n\tprintf \".PHONY: \\$(LIBSMM_WORKDIR)/\\$(LIBSMM_DRIVER) all_libsmm \\n\\n\"\n\n\tprintf \"all_libsmm: \\n\\n\"\n\n        #\n        # include Makefile for libxsmm kernels\n        #\n\tif [[ ( -n \"${libxsmm_dir}\") ]]; then\n            printf \"LIBXSMM_DIR=${libxsmm_dir}\\n\"\n            printf \"LIBXSMM_WORKDIR=${libxsmm_work_dir}\\n\"\n            printf \"ROW_MAJOR=0\\n\"\n            printf \"${SIMD_libxsmm_target}\\n\"\n            printf \"include \\$(LIBXSMM_DIR)/Makefile\\n\"\n            printf \"LIBXSMM_OBJFILES=\\$(patsubst %%,\\$(LIBXSMM_WORKDIR)/libxsmm${type_label}_${SIMD_libxsmm}_%%.o,\\$(LIBSMM_DIMS_INDICES))\\n\\n\"\n\tfi\n\n\t#\n\t# generation source rule\n\t#\n\tprintf \"source_libsmm: \\$(LIBSMM_SRCFILES) \\n\"\n\tprintf \"\\$(LIBSMM_WORKDIR)/%%.f90: ../${small_file} ../${tiny_file} \\n\"\n\tprintf '\\t .././lib_gen.x `echo $* | awk -F_ '\\''{ print $$3\" \"$$4\" \"$$5 }'\\''`'\n\tprintf \" ${transpose_flavor} ${data_type} ${SIMD_size} ../${small_file} ../${tiny_file} > \\$@\\n\"\n        #\n        # generate libxsmm kernel\n        #\n        if [[ ( -n \"${libxsmm_dir}\") ]]; then\n            printf \"\\$(LIBXSMM_WORKDIR)/%%.c:\\n\"\n            printf \"\\t rm -f \\$@\\n\"\n            printf \"\\t \\$(LIBXSMM_DIR)/bin/./generator dense\"\n            printf \" \\$@\"\n            printf \" libxsmm_\"\n            printf '`echo $* | awk -F_ '\\''{ print $$4\"_\"$$5\"_\"$$6\" \"$$4\" \"$$5\" \"$$6\" \"$$4\" \"$$6\" \"$$4 }'\\''` '\n            printf \"1 1 0 0 ${SIMD_libxsmm} nopf ${data_libxsmm}\\n\"\n        fi\n\tprintf \"\\n\"\n\n\t#\n\t# compile rule\n\t#\n\tprintf \"compile_libsmm: \\$(LIBSMM_OBJFILES) \\n\"\n\tprintf \"\\$(LIBSMM_WORKDIR)/%%.o: \\$(LIBSMM_WORKDIR)/%%.f90 \\n\"\n\tprintf \"\\t ${target_compile} -c \\$< -o \\$@ \\n\\n\"\n        #\n        # compile libxsmm kernel\n        #\n        if [[ ( -n \"${libxsmm_dir}\") ]]; then\n            printf \"\\$(LIBXSMM_WORKDIR)/%%.o: \\$(LIBXSMM_WORKDIR)/%%.c \\n\"\n            printf \"\\t \\$(CC) \\$(CFLAGS) \\$(DFLAGS) \\$(TARGET) -c \\$< -o \\$@ \\n\"\n        fi\n        printf \"\\n\"\n\n\tprintf \"\\$(LIBSMM_WORKDIR)/\\$(LIBSMM_DRIVER): \\n\"\n\tprintf \"\\t ${target_compile} -c \\$(notdir \\$*).f90 -o \\$@ \\n\\n\"\n\n\tprintf \"all_libsmm: ${archive} \\n\"\n\tprintf \"${archive}: \\$(LIBSMM_OBJFILES) \\$(LIBSMM_WORKDIR)/\\$(LIBSMM_DRIVER)\"\n\tif [ -n \"${libxsmm_dir}\" ]; then\n\t    printf \" \\$(LIBXSMM_OBJFILES)\"\n\tfi\n\tprintf \"\\n\"\n\tif [ -n \"${target_compile_offload}\" ]; then\n\t    printf \"\\t xiar -rs -qoffload-build \\$@ \\$^ \\n\"\n\telse\n\t    printf \"\\t ar -rs \\$@ \\$^ \\n\"\n\tfi\n\tprintf \"\\t @echo 'Library produced at `pwd`/lib/lib${library}.a'\\n\\n\"\n\n    ) > ${make_file}\n\n    cd ${run_dir}\n\n    #\n    # make the output dir\n    #\n    mkdir -p ${work_dir}\n\n    #\n    # execute makefile compiling all variants and executing them\n    #\n    test_name=\"${run_dir}_job${jobs}\"\n    ${run_cmd} make -j ${ntasks} -f ../${make_file} ${target}\n\n}\n\ndo_check() {\n    #\n    # check if the library exists\n    #\n    archive=\"lib/lib${library}.a\"\n    if [ ! -s ${archive} ]; then\n\techo \"ERROR: the library $archive doesn't exist.\"\n\texit\n    fi\n\n    #\n    # skip the compilation part if it needs only to collect the results\n    #\n    if [ \"$run_cmd\" != \"true\" ]; then\n\n\tcd ${run_dir}\n\n\techo \"Split in ${jobs} jobs.\"\n\n\tndims=`echo ${dims_small} | wc -w`\n\tnelements=$((ndims*ndims*ndims))\n\tnelements_in=$((nelements / jobs))\n\tnelements_out=$((nelements % jobs))\n\telement=1\n\telement_end=0\n\tijob=0\n\n        #\n        # make the output dir\n        #\n        mkdir -p ${work_dir}\n\n\tfor m in ${dims_small}  ; do\n\t    for n in ${dims_small}  ; do\n\t\tfor k in ${dims_small}  ; do\n\n\t\t    if [ $element_end -eq 0 -o $element -gt $element_end ]; then\n\t\t\telement_end=$(( element_end + nelements_in ))\n\t\t\tijob=$(( ijob + 1))\n\n\t\t\tif [ ${ijob} -le ${nelements_out} ]; then\n\t\t\t    element_end=$(( element_end + 1))\n\t\t\tfi\n\n\t\t\techo \"Preparing test program for job #$ijob...\"\n\t\t\tfilename=${test_file}_job$ijob\n\ncat << EOF > ${work_dir}/${filename}.f90\nMODULE WTF_job$ijob\n  INTERFACE MYRAND\n    MODULE PROCEDURE SMYRAND, DMYRAND, CMYRAND, ZMYRAND\n  END INTERFACE\nCONTAINS\nEOF\nif [ -n \"${target_compile_offload}\" ]; then\n    printf '!dir$ attributes offload:mic :: DMYRAND \\n' >> ${work_dir}/${filename}.f90\nfi\ncat << EOF >> ${work_dir}/${filename}.f90\n  SUBROUTINE DMYRAND(A)\n    REAL(KIND=KIND(0.0D0)), DIMENSION(:,:) :: A\n    REAL(KIND=KIND(0.0)), DIMENSION(SIZE(A,1),SIZE(A,2)) :: Aeq\n    CALL RANDOM_NUMBER(Aeq)\n    A=Aeq\n  END SUBROUTINE\nEOF\nif [ -n \"${target_compile_offload}\" ]; then\n    printf '!dir$ attributes offload:mic :: SMYRAND \\n' >> ${work_dir}/${filename}.f90\nfi\ncat << EOF >> ${work_dir}/${filename}.f90\n  SUBROUTINE SMYRAND(A)\n    REAL(KIND=KIND(0.0)), DIMENSION(:,:) :: A\n    REAL(KIND=KIND(0.0)), DIMENSION(SIZE(A,1),SIZE(A,2)) :: Aeq\n    CALL RANDOM_NUMBER(Aeq)\n    A=Aeq\n  END SUBROUTINE\nEOF\nif [ -n \"${target_compile_offload}\" ]; then\n    printf '!dir$ attributes offload:mic :: CMYRAND \\n' >> ${work_dir}/${filename}.f90\nfi\ncat << EOF >> ${work_dir}/${filename}.f90\n  SUBROUTINE CMYRAND(A)\n    COMPLEX(KIND=KIND(0.0)), DIMENSION(:,:) :: A\n    REAL(KIND=KIND(0.0)), DIMENSION(SIZE(A,1),SIZE(A,2)) :: Aeq,Beq\n    CALL RANDOM_NUMBER(Aeq)\n    CALL RANDOM_NUMBER(Beq)\n    A=CMPLX(Aeq,Beq,KIND=KIND(0.0))\n  END SUBROUTINE\nEOF\nif [ -n \"${target_compile_offload}\" ]; then\n    printf '!dir$ attributes offload:mic :: ZMYRAND \\n' >> ${work_dir}/${filename}.f90\nfi\ncat << EOF >> ${work_dir}/${filename}.f90\n  SUBROUTINE ZMYRAND(A)\n    COMPLEX(KIND=KIND(0.0D0)), DIMENSION(:,:) :: A\n    REAL(KIND=KIND(0.0)), DIMENSION(SIZE(A,1),SIZE(A,2)) :: Aeq,Beq\n    CALL RANDOM_NUMBER(Aeq)\n    CALL RANDOM_NUMBER(Beq)\n    A=CMPLX(Aeq,Beq,KIND=KIND(0.0D0))\n  END SUBROUTINE\nEND MODULE\n\nEOF\nif [ -n \"${target_compile_offload}\" ]; then\n    printf '!dir$ attributes offload:mic :: testit, ' >> ${work_dir}/${filename}.f90\n    printf \"${gemm}, smm${type_label} \\n\" >> ${work_dir}/${filename}.f90\nfi\ncat << EOF >> ${work_dir}/${filename}.f90\nSUBROUTINE testit(M,N,K)\n  USE WTF_job$ijob\n  IMPLICIT NONE\n  INTEGER :: M,N,K\n\n  $strdat :: C1(M,N), C2(M,N)\n  $strdat :: ${decl}\n  $strdat, PARAMETER :: one=1\n  INTEGER :: i,LDA,LDB\n\n  REAL(KIND=KIND(0.0D0)) :: flops,gflop\n  REAL :: t1,t2,t3,t4\n  INTEGER :: Niter\n\n  flops=2*REAL(M,KIND=KIND(0.0D0))*N*K\n  gflop=1000.0D0*1000.0D0*1000.0D0\n  ! assume we would like to do 1 Gflop for testing a subroutine\n  Niter=MAX(1,CEILING(MIN(10000000.0D0,1*gflop/flops)))\n  ${lds}\n\n  DO i=1,3\n     CALL MYRAND(A)\n     CALL MYRAND(B)\n     CALL MYRAND(C1)\n     C2=C1\n\n     CALL ${gemm}(\"$ta\",\"$tb\",M,N,K,one,A,LDA,B,LDB,one,C1,M)\n     CALL smm${type_label}(M,N,K,A,B,C2)\n\n     IF (MAXVAL(ABS(C2-C1))>100*EPSILON(REAL(1.0,KIND=KIND(A(1,1))))) THEN\n        write(6,*) \"Matrix size\",M,N,K\n        write(6,*) \"Max diff=\",MAXVAL(ABS(C2-C1))\n        write(6,*) \"A=\",A\n        write(6,*) \"B=\",B\n        write(6,*) \"C1=\",C1\n        write(6,*) \"C2=\",C2\n        write(6,*) \"BLAS and smm yield different results : possible compiler bug... do not use the library ;-)\"\n        ERROR STOP\n     ENDIF\n  ENDDO\n\n  A=0; B=0; C1=0 ; C2=0\n\n  CALL CPU_TIME(t1)\n  DO i=1,Niter\n     CALL ${gemm}(\"$ta\",\"$tb\",M,N,K,one,A,LDA,B,LDB,one,C1,M)\n  ENDDO\n  CALL CPU_TIME(t2)\n\n  CALL CPU_TIME(t3)\n  DO i=1,Niter\n     CALL smm${type_label}(M,N,K,A,B,C2)\n  ENDDO\n  CALL CPU_TIME(t4)\n\n  WRITE(6,'(A,I5,I5,I5,A,F6.3,A,F6.3,A,F12.3,A)') \"Matrix size \",M,N,K, &\n        \" smm: \",Niter*flops/(t4-t3)/gflop,\" Gflops. Linked blas: \",Niter*flops/(t2-t1)/gflop,&\n        \" Gflops. Performance ratio: \",((t2-t1)/(t4-t3))*100,\"%\"\n\nEND SUBROUTINE\nEOF\nif [ -n \"${target_compile_offload}\" ]; then\n    printf '!dir$ attributes offload:mic :: testit \\n ' >> ${work_dir}/${filename}.f90\nfi\ncat << EOF >> ${work_dir}/${filename}.f90\nPROGRAM tester\n  IMPLICIT NONE\nEOF\nif [ -n \"${target_compile_offload}\" ]; then\n    printf '!dir$ offload begin target(mic) \\n' >> ${work_dir}/${filename}.f90\nfi\ncat << EOF >> ${work_dir}/${filename}.f90\n  !\\$omp parallel\nEOF\n\n\t\t    fi\n\n\t\t    echo \"   CALL testit(${m},${n},${k})\" >> ${work_dir}/${filename}.f90\n\n\t\t    # last entry for a job\n\t\t    if [ $element -eq $element_end ]; then\n\n\t\t\t# last job\n\t\t\tif [ $ijob -eq $jobs -a ! -n \"${target_compile_offload}\" ]; then\ncat << EOF >> ${work_dir}/${filename}.f90\n  ! checking 'peak' performance (and a size likely outside of the library)\n  CALL testit(1000,1000,1000)\nEOF\n\t\t\tfi\n\ncat << EOF >> ${work_dir}/${filename}.f90\n  !\\$omp end parallel\nEOF\nif [ -n \"${target_compile_offload}\" ]; then\n    printf '!dir$ end offload \\n' >> ${work_dir}/${filename}.f90\nfi\ncat << EOF >> ${work_dir}/${filename}.f90\nEND PROGRAM\nEOF\n\n\t\t\techo \"Launching job #$ijob\"\n\t\t\ttest_name=\"${run_dir}_job${ijob}\"\n\n\t\t\texe=${filename}.x\n\n\t\t\trm -f ${work_dir}/${filename}.sh\n\t\t\t#\n\t\t\t# Prepare the script for compile the benchmarking\n\t\t\t# and testing program for the smm library\n\t\t\t#\n\t\t\t(\n\t\t\t    printf \"#!/bin/bash -e \\n\\n\"\n\t\t\t    printf \"set -o pipefail\\n\\n\"\n\t\t\t    printf \"cd ${work_dir}\\n\"\n\t\t\t    if [ -n \"${target_compile_offload}\" ]; then\n\t\t\t\tprintf \"${target_compile_offload}\"\n\t\t\t    else\n\t\t\t\tprintf \"${target_compile}\"\n\t\t\t    fi\n\t\t\t    printf \" ${filename}.f90 -o ${exe} ../../${archive} ${blas_linking}\\n\"\n\t\t\t    printf \"export OMP_NUM_THREADS=1 ; ./${exe} | tee ${filename}.out\\n\"\n\t\t\t) > ${work_dir}/${filename}.sh\n\t\t\tchmod +x ${work_dir}/${filename}.sh\n\n\t\t\t${run_cmd} ./${work_dir}/${filename}.sh\n\t\t    fi\n\n\t\t    element=$(( element + 1 ))\n\n\t\tdone ; done ; done\n\n\t#\n\t# Stop the execution if it is running in batch mode\n\t#\n\tif [ \"$run_cmd\" = \"batch_cmd\" ]; then\n\t    return\n\tfi\n\n\tcd ..\n\n    fi # close if [ \"$run_cmd\" != \"true\" ]\n\n    #\n    # Merge the output files in the case of $run_cmd\" = \"true\"\n    #\n    rm -f ${test_file}_${config_file_name}.out\n\n    for (( ijob=1 ; ijob<=jobs; ijob++ )); do\n\tif [ ! -s ${run_dir}/${work_dir}/${test_file}\"_job$ijob\".out ]; then\n\t    echo \"ERROR: Empty check file \\\"${run_dir}/${work_dir}/${test_file}_job$ijob.out\\\"\"\n\t    exit\n\tfi\n\tcat ${run_dir}/${work_dir}/${test_file}\"_job$ijob\".out | grep \"Matrix size\" >> ${test_file}_${config_file_name}.out\n    done\n\n    #\n    # We're done... protect the user from bad compilers\n    #\n    set +e\n    grep \"BLAS and smm yield different results\" ${test_file}_${config_file_name}.out >& /dev/null\n    if [ \"$?\" == \"0\" ]; then\n\techo \"Library is miscompiled... removing ${archive}\"\n\techo\n\trm -f ${archive}\n    else\n\tpathhere=`pwd -P`\n\techo \"Done... check performance looking at ${test_file}_${config_file_name}.out\"\n\techo \"Final library can be found at ${archive}\"\n\techo\n    fi\n\n}\n"
  },
  {
    "path": "tools/build_libsmm/lib_gen.f90",
    "content": "PROGRAM lib_gen\n   USE mults\n   USE multrec_gen\n   IMPLICIT NONE\n\n   INTEGER :: M, N, K\n   CHARACTER(LEN=1024) :: arg, filename_small, filename_tiny, line, label\n   REAL :: tmp\n   INTEGER, DIMENSION(:, :), ALLOCATABLE ::  small_opts\n   REAL, DIMENSION(:), ALLOCATABLE :: small_perf\n   INTEGER :: opt, iline, nline, transpose_flavor, data_type, SIMD_size\n   CHARACTER(LEN=10), PARAMETER :: stack_size_label = \"stack_size\"\n\n   CALL GET_COMMAND_ARGUMENT(1, arg)\n   READ (arg, *) M\n   CALL GET_COMMAND_ARGUMENT(2, arg)\n   READ (arg, *) N\n   CALL GET_COMMAND_ARGUMENT(3, arg)\n   READ (arg, *) K\n   CALL GET_COMMAND_ARGUMENT(4, arg)\n   READ (arg, *) transpose_flavor\n   CALL GET_COMMAND_ARGUMENT(5, arg)\n   READ (arg, *) data_type\n   CALL GET_COMMAND_ARGUMENT(6, arg)\n   READ (arg, *) SIMD_size\n   CALL GET_COMMAND_ARGUMENT(7, filename_small)\n   CALL GET_COMMAND_ARGUMENT(8, filename_tiny)\n\n   !\n   ! filename is the result of small optimization (cat small_gen_optimal.out )\n   ! 6 13 6    4    0.756046       6.613\n   !\n   OPEN (UNIT=10, FILE=filename_small)\n   REWIND (10)\n   nline = 0\n   DO\n      READ (10, *, END=999) line\n      nline = nline + 1\n   END DO\n999 CONTINUE\n   ALLOCATE (small_opts(4, nline))\n   ALLOCATE (small_perf(nline))\n   REWIND (10)\n   DO iline = 1, nline\n      READ (10, '(A1024)', END=999) line\n      READ (line, *) small_opts(:, iline), tmp, small_perf(iline)\n   END DO\n   CLOSE (10)\n\n   CALL find_small_opt(opt, small_opts, m, n, k)\n\n   label = \"\"\n   CALL mult_versions(M, N, K, opt, label, transpose_flavor, data_type, SIMD_size, filename_tiny, stack_size_label, .TRUE.)\n\nCONTAINS\n\n   SUBROUTINE find_small_opt(opt, small_opts, m, n, k)\n      INTEGER, INTENT(OUT) :: opt\n      INTEGER, DIMENSION(:, :) :: small_opts\n      INTEGER :: m, n, k\n      INTEGER :: i\n      ! by default we call dgemm (but this should never happen)\n      opt = 3\n      DO i = 1, SIZE(small_opts, 2)\n         IF (ALL(small_opts(1:3, i) == (/m, n, k/))) opt = small_opts(4, i)\n      END DO\n   END SUBROUTINE find_small_opt\n\nEND PROGRAM lib_gen\n"
  },
  {
    "path": "tools/build_libsmm/make.gen",
    "content": "\n$(LIBSMM_EXE:.x=.f90):\n\t@echo \"Generate master file $@\"\n\t@rm -f $@\n\n\t@if [ -n \"$(LIBSMM_MIC_OFFLOAD)\" ]; then printf '!dir$$ attributes offload:mic :: run_kernels, kern \\n' >> $@ ; fi\n\t@printf \"SUBROUTINE run_kernels(filename,unit,M,N,K,A,B,C,Nmin,Nk,Nloop,kernels,mnk) \\n\" >> $@\n\t@printf \"  USE omp_lib \\n\" >> $@\n\t@printf \"  IMPLICIT NONE \\n\" >> $@\n\t@printf \"  CHARACTER(len=*) :: filename \\n\" >> $@\n\t@printf \"  INTEGER :: unit ! Output unit \\n\" >> $@\n\t@printf \"  INTEGER :: M,N,K \\n\" >> $@\n\t@printf \"  $(LIBSMM_DATATYPE) :: C(*) \\n\" >> $@\n\t@printf \"  $(LIBSMM_DATATYPE) :: B(*), A(*) \\n\" >> $@\n\t@printf \"  INTEGER :: Nmin \\n\" >> $@\n\t@printf \"  INTEGER :: Nk, Nloop \\n\" >> $@\n\t@printf \"  INTERFACE \\n\" >> $@\n\t@printf \"     SUBROUTINE X(A,B,C) \\n\" >> $@\n\t@printf \"       $(LIBSMM_DATATYPE) :: C(*) \\n\" >> $@\n\t@printf \"       $(LIBSMM_DATATYPE) :: B(*), A(*) \\n\" >> $@\n\t@printf \"     END SUBROUTINE X \\n\" >> $@\n\t@printf \"  END INTERFACE \\n\" >> $@\n\t@printf \"  TYPE t_kernels \\n\" >> $@\n\t@printf \"     PROCEDURE(X), POINTER, NOPASS :: ptr \\n\" >> $@\n\t@printf \"  END TYPE t_kernels \\n\" >> $@\n\t@printf \"  TYPE(t_kernels) :: kernels(Nk,Nloop) \\n\" >> $@\n\t@printf \"  PROCEDURE(X), POINTER :: kern \\n\" >> $@\n\t@printf \"  INTEGER :: mnk(3,Nk) ! mu, nu, ku \\n\" >> $@\n\t@printf \"  REAL(KIND=KIND(0.D0)), PARAMETER :: gflop=1000.0D0*1000.0D0*1000.0D0 \\n\" >> $@\n\t@printf \"  REAL(KIND=KIND(0.D0)) :: flops \\n\" >> $@\n\t@printf \"  REAL(KIND=KIND(0.D0)) :: t1,t2,timing,best_time \\n\" >> $@\n\t@printf \"  INTEGER :: iter,Niter,imin,ik,iloop,best_loop,best_mnk(3) \\n\" >> \t$@\n\t@printf \"  if (unit.ne.6) THEN \\n\" >> $@\n\t@printf \"     open(unit=unit,file=\\\"`pwd -P`/$(LIBSMM_WORKDIR)/\\\"//trim(filename)) \\n\" >> $@\n\t@printf \"  END if \\n\" >> $@\n\t@printf \"  flops=2*REAL(M,KIND=KIND(0.D0))*N*K \\n\" >> $@\n\t@printf \"  ! assume we would like to do 1 Gflop for testing a subroutine \\n\" >> $@\n\t@printf \"  Niter=MAX(1,CEILING(MIN(100000000.0D0,1*gflop/flops))) \\n\" >> $@\n\t@printf \"  best_time=HUGE(best_time) \\n\" >> $@\n\t@printf \"  best_loop=0 \\n\" >> $@\n\t@printf \"  best_mnk=0 \\n\" >> $@\n\t@printf \"  DO imin=1,Nmin \\n\" >> $@\n\t@printf \"    DO iloop=1,Nloop \\n\" >> $@\n\t@printf \"      DO ik=1,Nk \\n\" >> $@\n\t@printf \"        kern => kernels(ik,iloop)%%ptr \\n\" >> $@\n\t@printf \"        IF (.NOT.ASSOCIATED(kern)) CYCLE \\n\" >> $@\n\t@printf \"        t1=OMP_GET_WTIME() \\n\" >> $@\n\t@printf \"        DO iter=1,Niter \\n\" >> $@\n\t@printf \"          CALL kern(A,B,C) \\n\" >> $@\n\t@printf \"        ENDDO \\n\" >> $@\n\t@printf \"        t2=OMP_GET_WTIME() \\n\" >> $@\n\t@printf \"        timing=t2-t1 \\n\" >> $@\n\t@printf \"        IF (mnk(1,ik).ne.0) THEN \\n\" >> $@\n\t@printf \"          write(unit,'(4I4,F12.6,F12.3)') &  \\n\" >> $@\n\t@printf \"                iloop, &  \\n\" >> $@\n\t@printf \"                mnk(1,ik),mnk(2,ik),mnk(3,ik), & \\n\" >> $@\n\t@printf \"                timing, & \\n\" >> $@\n\t@printf \"                flops*Niter/gflop/timing \\n\" >> $@\n\t@printf \"        ELSE \\n\" >> $@\n\t@printf \"          write(unit,'(1I4,F12.6,F12.3)') &  \\n\" >> $@\n\t@printf \"                iloop, &  \\n\" >> $@\n\t@printf \"                timing, & \\n\" >> $@\n\t@printf \"                flops*Niter/gflop/timing \\n\" >> $@\n\t@printf \"        END IF \\n\" >> $@\n\t@printf \"        IF (timing<best_time) THEN \\n\" >> $@\n\t@printf \"          best_time=timing \\n\" >> $@\n\t@printf \"          best_loop=iloop \\n\" >> $@\n\t@printf \"          IF (mnk(1,ik).ne.0) best_mnk=mnk(:,ik) \\n\" >> $@\n\t@printf \"        END IF \\n\" >> $@\n\t@printf \"      END DO \\n\" >> $@\n\t@printf \"    END DO \\n\" >> $@\n\t@printf \"  END DO \\n\" >> $@\n\t@printf \"  IF (best_mnk(1).ne.0) THEN \\n\" >> $@\n\t@printf \"    write(unit,'(4I4,F12.6,F12.3)') best_loop,best_mnk,best_time,(flops*Niter/best_time)/gflop \\n\" >> $@\n\t@printf \"  ELSE \\n\" >> $@\n\t@printf \"    write(unit,'(1I4,F12.6,F12.3)') best_loop,best_time,(flops*Niter/best_time)/gflop \\n\" >> $@\n\t@printf \"  END IF \\n\" >> $@\n\t@printf \"  if (unit.ne.6) close(unit) \\n\" >> $@\n\t@printf \"END SUBROUTINE run_kernels \\n\\n\" >> $@\n\n\t@if [ -n \"$(LIBSMM_MIC_OFFLOAD)\" ]; then \\\n\t  il=20; \\\n\t  ii=6; \\\n\t  for kernel_find in $(basename $(LIBSMM_SRCFILES)); do \\\n\t   if [ $${ii} -lt 5 ]; then printf \", \"; \\\n\t   else \\\n\t    il=$$((il+1)); \\\n\t    if [ $${ii} -eq 5 ]; then \\\n\t     if [ $${il} -lt 20 ]; then printf \", &\"; fi; \\\n\t     printf \"\\n  \"; \\\n\t    fi; \\\n\t    ii=0; \\\n\t   fi; \\\n\t   if [ $${il} -ge 20 ]; then printf '!dir$$ attributes offload:mic :: '; il=0; fi; \\\n\t   printf \"$${kernel_find}\"; \\\n\t   ii=$$((ii+1)); \\\n\t  done; \\\n\t  printf \"\\n\"; \\\n\t fi >> $@\n\t@printf \"PROGRAM $(notdir $(basename $@)) \\n\" >> $@\n\t@printf \"  USE omp_lib \\n\" >> $@\n\t@if [ -n \"$(LIBSMM_MIC_OFFLOAD)\" ]; then printf \"  USE mic_lib \\n\" >> $@ ; fi\n\t@printf \"  IMPLICIT NONE \\n\" >> $@\n\t@printf \"  INTERFACE \\n\" >> $@\n\t@printf \"    SUBROUTINE kernel_find_X(unit) \\n\" >> $@\n\t@printf \"      INTEGER :: unit \\n\" >> $@\n\t@printf \"    END SUBROUTINE kernel_find_X \\n\" >> $@\n\t@printf \"  END INTERFACE \\n\" >> $@\n\t@for kernel_find in $(basename $(LIBSMM_SRCFILES)); do printf \"  PROCEDURE(kernel_find_X) :: $${kernel_find} \\n\" >> $@ ; done\n\t@printf \"  TYPE t_kernels_vector \\n\" >> $@\n\t@printf \"    PROCEDURE(kernel_find_X), POINTER, NOPASS :: ptr \\n\" >> $@\n\t@printf \"  END TYPE t_kernels_vector \\n\" >> $@\n\t@if [ -n \"$(LIBSMM_MIC_OFFLOAD)\" ]; then printf '  !dir$$ attributes offload:mic :: kernels_vector \\n' >> $@ ; fi\n\t@printf \"  TYPE(t_kernels_vector) :: kernels_vector($(words $(LIBSMM_SRCFILES))) \\n\" >> $@\n\t@if [ -n \"$(LIBSMM_MIC_OFFLOAD)\" ]; then printf '  !dir$$ attributes offload:mic :: ikernel, skernel, ekernel \\n' >> $@ ; fi\n\t@printf \"  INTEGER :: ikernel, skernel, ekernel \\n\"  >> $@\n\t@if [ -n \"$(LIBSMM_MIC_OFFLOAD)\" ]; then \\\n\t printf \"  INTEGER :: i_mic, n_mics \\n\" ; \\\n\t printf \"  n_mics = OFFLOAD_NUMBER_OF_DEVICES() \\n\" ; \\\n\t printf '  !$$omp parallel do num_threads(n_mics) schedule(static,1) \\n' ; \\\n\t printf \"  DO i_mic=0,n_mics-1 \\n\" ; \\\n\t printf '  !dir$$ offload begin target(mic:i_mic) in(i_mic,n_mics) \\n' ; \\\n\t fi >> $@\n\t@ii=1; for kernel_find in $(basename $(LIBSMM_SRCFILES)); do printf \"  kernels_vector($${ii})%%ptr => $${kernel_find} \\n\" >> $@ ; ii=$$((ii+1)) ; done\n\t@if [ -n \"$(LIBSMM_MIC_OFFLOAD)\" ]; then \\\n\t printf \"  skernel=1+SIZE(kernels_vector,1)*(REAL(i_mic,KIND=KIND(0.D0))/n_mics) ; ekernel=SIZE(kernels_vector,1)*((REAL(i_mic,KIND=KIND(0.D0))+1)/n_mics) \\n\" ; \\\n\t printf '  !dir$$ end offload \\n' ; \\\n\t printf '  !dir$$ omp offload target(mic:i_mic) in(i_mic,n_mics) \\n' ; \\\n\t else \\\n\t printf \"  skernel=1 ; ekernel=SIZE(kernels_vector,1) \\n\" ; \\\n\t fi >> $@\n\t@printf '  !$$omp parallel do schedule(dynamic,2) \\n' >> $@\n\t@printf \"  DO ikernel=skernel,ekernel \\n\" >> $@\n\t@printf \"    print *,\\\"Remaining kernels=\\\",ekernel-ikernel \\n\" >> $@\n\t@printf \"    call kernels_vector(ikernel)%%ptr(unit=omp_get_thread_num()\" >> $@\n\t@if [ -n \"$(LIBSMM_MIC_OFFLOAD)\" ]; then \\\n\t printf \"*n_mics+i_mic\" >> $@ ; \\\n\t fi\n\t@printf \"+7) \\n\" >> $@\n\t@printf \"  END DO \\n\" >> $@\n\t@printf '  !$$omp end parallel do \\n' >> $@\n\t@if [ -n \"$(LIBSMM_MIC_OFFLOAD)\" ]; then \\\n\t printf \"  END DO \\n\" ; \\\n\t printf '  !$$omp end parallel do \\n' ; \\\n\t fi >> $@\n\t@printf \"END PROGRAM $(notdir $(basename $@)) \\n\" >> $@\n\n\t@echo \"Master file generation completed.\"\n"
  },
  {
    "path": "tools/build_libsmm/multrec_gen.f90",
    "content": "!\n! generate a benchmark for the following cases\n!\n! 1) tiny_gemm\n! 2) matmul\n! 3) dgemm\n! 4) multrec 1\n! 5) multrec 2\n! 6) multrec 3\n! 7) multrec 4\n! 8) Vector version\n! 9) libxsmm\n!\nMODULE multrec_gen\n   USE mults\n   IMPLICIT NONE\nCONTAINS\n   SUBROUTINE find_tiny_opts(opts, tiny_opts, m, n, k)\n      INTEGER, INTENT(OUT) :: opts(4)\n      INTEGER, DIMENSION(:, :) :: tiny_opts\n      INTEGER :: m, n, k\n      INTEGER :: i\n      opts = (/5, 1, 1, 1/)\n      DO i = 1, SIZE(tiny_opts, 2)\n         IF (ALL(tiny_opts(1:3, i) == (/m, n, k/))) opts = tiny_opts(4:7, i)\n      END DO\n   END SUBROUTINE find_tiny_opts\n\n   RECURSIVE SUBROUTINE MULTREC(mi, mf, ni, nf, ki, kf, block_size, tiny_opts, transpose_flavor, data_type)\n      INTEGER :: mi, mf, ni, nf, ki, kf, block_size, tiny_opts(:, :), transpose_flavor, data_type\n      INTEGER :: M, N, K, opts(4)\n      INTEGER :: cut, s1\n\n      M = mf - mi + 1\n      N = nf - ni + 1\n      K = kf - ki + 1\n\n      ! small sizes are done directly, otherwise we recurse\n      IF (M <= block_size .AND. N <= block_size .AND. K <= block_size) THEN\n         CALL find_tiny_opts(opts, tiny_opts, m, n, k)\n         CALL smm_inner(mi, mf, ni, nf, ki, kf, opts(1), opts(2), opts(3), opts(4), transpose_flavor, data_type)\n      ELSE\n         ! a three case recursion\n         IF (M >= MAX(N, K)) cut = 1\n         IF (K >= MAX(N, M)) cut = 2\n         IF (N >= MAX(M, K)) cut = 3\n         SELECT CASE (cut)\n         CASE (1)\n            s1 = ((M/2 + block_size - 1)/block_size)*block_size\n            CALL MULTREC(mi, mi + s1 - 1, ni, nf, ki, kf, block_size, tiny_opts, transpose_flavor, data_type)\n            CALL MULTREC(mi + s1, mf, ni, nf, ki, kf, block_size, tiny_opts, transpose_flavor, data_type)\n         CASE (2)\n            s1 = ((K/2 + block_size - 1)/block_size)*block_size\n            CALL MULTREC(mi, mf, ni, nf, ki, ki + s1 - 1, block_size, tiny_opts, transpose_flavor, data_type)\n            CALL MULTREC(mi, mf, ni, nf, ki + s1, kf, block_size, tiny_opts, transpose_flavor, data_type)\n         CASE (3)\n            s1 = ((N/2 + block_size - 1)/block_size)*block_size\n            CALL MULTREC(mi, mf, ni, ni + s1 - 1, ki, kf, block_size, tiny_opts, transpose_flavor, data_type)\n            CALL MULTREC(mi, mf, ni + s1, nf, ki, kf, block_size, tiny_opts, transpose_flavor, data_type)\n         END SELECT\n      END IF\n   END SUBROUTINE MULTREC\n\n   FUNCTION trsum(last)\n      LOGICAL :: last\n      CHARACTER(LEN=25) :: trsum\n      IF (last) THEN\n         trsum = \"\"\n      ELSE\n         trsum = \"+ &\"\n      END IF\n   END FUNCTION trsum\n\n   SUBROUTINE write_subroutine_stack(label, M, N, K, transpose_flavor, &\n                                     data_type, version, stack_size_label, &\n                                     Cbuffer_row, Cbuffer_col)\n      CHARACTER(LEN=*) :: label\n      INTEGER :: M, N, K, transpose_flavor, data_type, version\n      CHARACTER(LEN=*), OPTIONAL :: stack_size_label\n      INTEGER, OPTIONAL :: Cbuffer_row, Cbuffer_col\n\n      IF (PRESENT(stack_size_label)) THEN\n         IF (stack_size_label /= \"\") THEN\n            write (6, '(A)') \"#ifdef __INTEL_OFFLOAD\"\n            IF (PRESENT(Cbuffer_row) .AND. PRESENT(Cbuffer_col)) THEN\n               write (6, '(A,I0,A,I0,A,I0,A)') \"!dir$ attributes offload:mic :: smm_\" &\n                  //trstr(transpose_flavor, data_type)//\"_\", &\n                  M, \"_\", N, \"_\", K, TRIM(label)//\"_buffer\"\n            ELSE\n               write (6, '(A,I0,A,I0,A,I0,A)') \"!dir$ attributes offload:mic :: smm_\" &\n                  //trstr(transpose_flavor, data_type)//\"_\", &\n                  M, \"_\", N, \"_\", K, TRIM(label)\n            END IF\n            write (6, '(A)') \"#endif\"\n            write (6, '(A,I0,A,I0,A,I0,A)') \"   SUBROUTINE smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n               M, \"_\", N, \"_\", K, \"_stack\"//TRIM(label)//\"(\"//TRIM(trparam(stack_size_label))//\")\"\n            CALL write_stack_params(data_type, stack_size_label)\n            write (6, '(A)') \"      INTEGER            :: sp\"\n            IF (PRESENT(Cbuffer_row) .AND. PRESENT(Cbuffer_col)) THEN\n               write (6, '(A,I0,A,I0,A)') \"       \"//trdat(data_type, .FALSE.)//\":: Cbuffer(\", Cbuffer_row, \",\", Cbuffer_col, \")\"\n            END IF\n            IF (version .eq. 9) THEN\n               write (6, '(A)') \"      INTERFACE\"\n               write (6, '(A,I0,A,I0,A,I0,A)') \"        SUBROUTINE smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n                  M, \"_\", N, \"_\", K, TRIM(label)//\"(A,B,C)\"\n               CALL write_matrix_defs(M, N, K, transpose_flavor, data_type, .TRUE., version .eq. 9)\n               write (6, '(A)') \"        END SUBROUTINE\"\n               write (6, '(A)') \"      END INTERFACE\"\n            END IF\n            write (6, '(A)') \"      DO sp = 1, \"//TRIM(stack_size_label)\n            IF (PRESENT(Cbuffer_row) .AND. PRESENT(Cbuffer_col)) THEN\n               write (6, '(A,I0,A,I0,A,I0,A)') \"         CALL smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n                  M, \"_\", N, \"_\", K, &\n                  TRIM(label)//\"_buffer(A(params(p_a_first,sp)),B(params(p_b_first,sp)),C(params(p_c_first,sp)),Cbuffer)\"\n            ELSE\n               write (6, '(A,I0,A,I0,A,I0,A)') \"         CALL smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n                  M, \"_\", N, \"_\", K, &\n                  TRIM(label)//\"(A(params(p_a_first,sp)),B(params(p_b_first,sp)),C(params(p_c_first,sp)))\"\n            END IF\n            write (6, '(A)') \"      ENDDO\"\n            write (6, '(A)') \"   END SUBROUTINE\"\n         END IF\n      END IF\n   END SUBROUTINE write_subroutine_stack\n\n   SUBROUTINE MULTVECTOR(label, M, N, K, transpose_flavor, data_type, nSIMD, stride, stack_size_label)\n      INTEGER :: M, N, K, sj, je, ji, sl, le, li\n      INTEGER :: transpose_flavor, data_type, nSIMD, stride\n      INTEGER :: multElements, modElements\n      CHARACTER(LEN=*) :: label\n      CHARACTER(LEN=*), OPTIONAL :: stack_size_label\n      LOGICAL :: do_stack\n\n      multElements = (M/nSIMD)*nSIMD\n      modElements = MOD(M, nSIMD)\n\n      IF (modElements > 0) THEN\n         do_stack = .FALSE.\n         IF (PRESENT(stack_size_label)) THEN\n            IF (stack_size_label /= \"\") do_stack = .TRUE.\n         END IF\n         IF (do_stack) THEN\n            write (6, '(A,I0,A,I0,A,I0,A)') \"   PURE SUBROUTINE smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n               M, \"_\", N, \"_\", K, TRIM(label)//\"_buffer(A,B,C,Cbuffer)\"\n            write (6, '(A,I0,A,I0,A)') \"      \"//trdat(data_type, .FALSE., \"INOUT\")//\" :: Cbuffer(\", nSIMD, \",\", MIN(stride, N), \")\"\n         ELSE\n            write (6, '(A,I0,A,I0,A,I0,A)') \"   PURE SUBROUTINE smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n               M, \"_\", N, \"_\", K, TRIM(label)//\"(A,B,C)\"\n            write (6, '(A,I0,A,I0,A)') \"      \"//trdat(data_type, .FALSE.)//\" :: Cbuffer(\", nSIMD, \",\", MIN(stride, N), \")\"\n         END IF\n      ELSE\n         if (PRESENT(stack_size_label)) THEN\n            write (6, '(A,I0,A,I0,A,I0,A)') \"   PURE SUBROUTINE smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n               M, \"_\", N, \"_\", K, TRIM(label)//\"(A,B,C)\"\n         ELSE\n            RETURN\n         END IF\n      END IF\n\n      CALL write_matrix_defs(M, N, K, transpose_flavor, data_type, .TRUE., .FALSE.)\n\n      write (6, '(A)') \"      INTEGER :: i\"\n\n      sj = stride ! blocking dimension in N\n      sl = stride ! blocking dimension in K\n\n      DO je = 1, N, sj\n\n         DO le = 1, K, sl\n\n            IF (multElements > 0) THEN\n               write (6, '(A,I0,A,I0,A,I0)') \"     DO i=\", 1, \",\", multElements, \",\", 1\n               DO ji = je, MIN(je + sj - 1, N), 1\n                  write (6, '(A,I0,A,I0,A)') \"       C(i,\", ji, \")=C(i,\", ji, \")+ &\"\n                  DO li = le, MIN(le + sl - 1, K), 1\n                     write (6, '(A,I0,A,I0,A,I0,A)') \"         A(i,\", &\n                        li, \")*B(\", li, \",\", ji, \")\"//trsum(li == MIN(le + sl - 1, K))\n                  END DO\n               END DO\n               write (6, '(A)') \"     ENDDO \"\n            END IF\n\n            ! consider remaining elements\n            IF (modElements > 0) THEN\n               write (6, '(A,I0,A,I0,A,I0)') \"     DO i=\", 1, \",\", nSIMD, \",\", 1\n               DO ji = je, MIN(je + sj - 1, N), 1\n                  IF (le > 1) THEN\n                     write (6, '(A,I0,A,I0,A)') \"       Cbuffer(i,\", &\n                        MOD(ji - 1, sj) + 1, \")=Cbuffer(i,\", MOD(ji - 1, sj) + 1, \")+ &\"\n                  ELSE\n                     write (6, '(A,I0,A,I0,A,I0,A)') \"       Cbuffer(i,\", &\n                        MOD(ji - 1, sj) + 1, \")=C(i+\", multElements, \",\", ji, \")+ &\"\n                  END IF\n\n                  DO li = le, MIN(le + sl - 1, K), 1\n                     write (6, '(A,I0,A,I0,A,I0,A,I0,A)') \"         A(i+\", &\n                        multElements, \",\", li, \")*B(\", li, \",\", ji, \")\"//trsum(li == MIN(le + sl - 1, K))\n                  END DO\n               END DO\n               write (6, '(A)') \"     ENDDO \"\n\n            END IF\n         END DO\n\n         ! copy the remaining elements\n         IF (modElements > 0) THEN\n            write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') \"      C(\", &\n               1 + multElements, \":\", M, \",\", je, \":\", MIN(je + sj - 1, N), \")=Cbuffer(\", &\n               1, \":\", modElements, \",1:\", MIN(je + sj, N + 1) - je, \")\"\n\n         END IF\n\n      END DO\n\n      write (6, '(A)') \"   END SUBROUTINE\"\n\n      if (PRESENT(stack_size_label)) THEN\n\n         IF (modElements > 0 .AND. nSIMD > 0 .AND. stride > 0) THEN\n            CALL write_subroutine_stack(label, M, N, K, transpose_flavor, data_type, 8, stack_size_label, nSIMD, MIN(stride, N))\n         ELSE\n            CALL write_subroutine_stack(label, M, N, K, transpose_flavor, data_type, 8, stack_size_label)\n         END IF\n      END IF\n\n   END SUBROUTINE MULTVECTOR\n\n   SUBROUTINE mult_versions(M, N, K, version, label, transpose_flavor, data_type, SIMD_size, filename, &\n                            stack_size_label, write_buffer_interface)\n      INTEGER :: M, N, K, version, transpose_flavor, data_type, SIMD_size\n      INTEGER, ALLOCATABLE, DIMENSION(:, :) :: tiny_opts\n      INTEGER :: best_square(4)\n      REAL, ALLOCATABLE, DIMENSION(:)      :: tiny_perf, square_perf\n      CHARACTER(LEN=1024) :: filename, line\n      CHARACTER(LEN=*), OPTIONAL :: stack_size_label\n      LOGICAL, OPTIONAL :: write_buffer_interface\n      CHARACTER(LEN=*) :: label\n      INTEGER :: opts(4), blocksize, i, iline, nline, max_dim, isquare\n      REAL :: tmp\n      INTEGER :: size_type, nSIMD\n      INTEGER, PARAMETER :: stride = 8 ! used for the unrolling\n      size_type = 0; nSIMD = 0\n\n      ! only in the case of SIMD_size=32(i.e. AVX/AVX2) and SIMD_size=64(i.e. KNC/AVX512)\n      IF ((SIMD_size == 32 .OR. SIMD_size == 64) .AND. transpose_flavor == 1 .AND. data_type <= 2 .AND. &\n          (LABEL == \"\" .OR. version == 8)) THEN\n\n         SELECT CASE (data_type)\n         CASE (1)\n            size_type = 8 !double precision bytes\n         CASE (2)\n            size_type = 4 !single precision bytes\n         END SELECT\n\n         nSIMD = SIMD_size/size_type\n      END IF\n\n      !\n      ! filename is the result of tiny optimization (cat tiny_gen_optimal.out)\n      ! 1 1 1    5   1   1   1    0.376023       0.532\n      !\n      OPEN (UNIT=10, FILE=filename)\n      REWIND (10)\n      nline = 0\n      DO\n         READ (10, *, END=999) line\n         nline = nline + 1\n      END DO\n999   CONTINUE\n      ALLOCATE (tiny_opts(7, nline))\n      ALLOCATE (tiny_perf(nline))\n      REWIND (10)\n      DO iline = 1, nline\n         READ (10, '(A1024)', END=999) line\n         READ (line, *) tiny_opts(:, iline), tmp, tiny_perf(iline)\n      END DO\n      CLOSE (10)\n\n      ! find square sizes that give good performance with tiny opts\n      max_dim = MAXVAL(tiny_opts(1:3, :))\n      ALLOCATE (square_perf(max_dim))\n      square_perf = -1\n      DO iline = 1, nline\n         IF (tiny_opts(1, iline) == tiny_opts(2, iline) .AND. tiny_opts(1, iline) == tiny_opts(3, iline)) THEN\n            square_perf(tiny_opts(1, iline)) = tiny_perf(iline)\n         END IF\n      END DO\n      best_square = -1\n      DO isquare = 1, SIZE(best_square)\n         tmp = -HUGE(tmp)\n         DO i = 1, max_dim\n            IF (square_perf(i) > tmp .AND. .NOT. ANY(best_square .EQ. i)) THEN\n               tmp = square_perf(i)\n               best_square(isquare) = i\n            END IF\n         END DO\n      END DO\n      IF (ANY(best_square < 1)) ERROR STOP \"tiny opts file needs sufficiently many square sizes\"\n\n      IF ((version .ge. 1 .and. version .le. 7) .or. version .eq. 9) THEN\n         IF (version .ne. 3 .and. version .ne. 9) THEN\n            write (6, '(A,I0,A,I0,A,I0,A)') \"   PURE SUBROUTINE smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n               M, \"_\", N, \"_\", K, TRIM(label)//\"(A,B,C)\"\n         ELSE\n            write (6, '(A,I0,A,I0,A,I0,A)') \"   SUBROUTINE smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n               M, \"_\", N, \"_\", K, TRIM(label)//\"(A,B,C)\"\n            IF (version .eq. 9) THEN\n               write (6, '(A)') \"      USE, INTRINSIC :: ISO_C_BINDING\"\n            END IF\n         END IF\n         CALL write_matrix_defs(M, N, K, transpose_flavor, data_type, .TRUE., version .eq. 9)\n      END IF\n\n      SELECT CASE (version)\n      CASE (1)\n         ! generation of the tiny version\n         write (6, '(A)') \"      INTEGER ::i,j,l\"\n         CALL find_tiny_opts(opts, tiny_opts, m, n, k)\n         CALL smm_inner(1, M, 1, N, 1, K, opts(1), opts(2), opts(3), opts(4), transpose_flavor, data_type)\n      CASE (2)\n         ! generation of the matmul version\n         SELECT CASE (transpose_flavor)\n         CASE (1)\n            write (6, '(A)') \"      C = C + MATMUL(A,B) ! so easy\"\n         CASE (2)\n            write (6, '(A)') \"      C = C + MATMUL(TRANSPOSE(A),B) ! so easy\"\n         CASE (3)\n            write (6, '(A)') \"      C = C + MATMUL(A,TRANSPOSE(B)) ! so easy\"\n         CASE (4)\n            write (6, '(A)') \"      C = C + MATMUL(TRANSPOSE(A),TRANSPOSE(B)) ! so easy\"\n         END SELECT\n      CASE (3)\n         ! generation of the gemm version\n         WRITE (6, '(A)') \"      \"//trdat(data_type, .FALSE.)//\", PARAMETER :: one=1\"\n         write (6, '(A)') \"#ifdef __INTEL_OFFLOAD\"\n         write (6, '(A)') \"!dir$ attributes offload:mic :: \"//trgemm(data_type)\n         write (6, '(A)') \"#endif\"\n         SELECT CASE (transpose_flavor)\n         CASE (1)\n            write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') &\n               \"      CALL \"//trgemm(data_type)//\"('N','N',\", M, \",\", N, \",\", K, \",one,A,\", M, \",B,\", K, \",one,C,\", M, \")\"\n         CASE (2)\n            write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') &\n               \"      CALL \"//trgemm(data_type)//\"('T','N',\", M, \",\", N, \",\", K, \",one,A,\", K, \",B,\", K, \",one,C,\", M, \")\"\n         CASE (3)\n            write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') &\n               \"      CALL \"//trgemm(data_type)//\"('N','T',\", M, \",\", N, \",\", K, \",one,A,\", M, \",B,\", N, \",one,C,\", M, \")\"\n         CASE (4)\n            write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') &\n               \"      CALL \"//trgemm(data_type)//\"('T','T',\", M, \",\", N, \",\", K, \",one,A,\", K, \",B,\", N, \",one,C,\", M, \")\"\n         END SELECT\n      CASE (4, 5, 6, 7)\n         isquare = version - 3\n         ! generation of the multrec versions\n         write (6, '(A)') \"      INTEGER ::i,j,l\"\n         blocksize = best_square(isquare)\n         CALL MULTREC(1, M, 1, N, 1, K, blocksize, tiny_opts, transpose_flavor, data_type)\n      CASE (8)\n         ! generation of the vector version\n         IF (nSIMD > 0) THEN\n            CALL MULTVECTOR(label, M, N, K, transpose_flavor, data_type, nSIMD, stride, stack_size_label)\n            IF (PRESENT(write_buffer_interface)) THEN\n               IF (write_buffer_interface) THEN\n                  CALL MULTVECTOR(label, M, N, K, transpose_flavor, data_type, nSIMD, stride)\n               END IF\n            END IF\n\n         END IF\n      CASE (9)\n         write (6, '(A)') \"      INTERFACE\"\n         write (6, '(A,I0,A,I0,A,I0,A)') \"        SUBROUTINE libxsmm_\", M, \"_\", N, \"_\", K, \"(A,B,C) BIND(C)\"\n         write (6, '(A)') \"          USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR\"\n         write (6, '(A)') \"          TYPE(C_PTR), VALUE               :: C, B, A\"\n         write (6, '(A,I0,A,I0,A,I0)') \"        END SUBROUTINE libxsmm_\", M, \"_\", N, \"_\", K\n         write (6, '(A)') \"      END INTERFACE\"\n         write (6, '(A,I0,A,I0,A,I0,A)') \"      CALL libxsmm_\", M, \"_\", N, \"_\", K, \"(C_LOC(A),C_LOC(B),C_LOC(C))\"\n      CASE DEFAULT\n         ERROR STOP \"MISSING CASE mult_versions\"\n      END SELECT\n\n      IF ((version .ge. 1 .and. version .le. 7) .or. version .eq. 9) THEN\n         write (6, '(A)') \"   END SUBROUTINE\"\n         CALL write_subroutine_stack(label, M, N, K, transpose_flavor, data_type, version, stack_size_label)\n      END IF\n\n   END SUBROUTINE mult_versions\n\nEND MODULE multrec_gen\n"
  },
  {
    "path": "tools/build_libsmm/mults.f90",
    "content": "MODULE mults\n\n   IMPLICIT NONE\n\nCONTAINS\n   FUNCTION trdat(data_type, write_target, in_intent_label)\n      INTEGER :: data_type\n      LOGICAL :: write_target\n      CHARACTER(LEN=*), OPTIONAL :: in_intent_label\n      CHARACTER(LEN=50) :: options\n      CHARACTER(LEN=50) :: trdat\n\n      options = \"\"\n      IF (PRESENT(in_intent_label)) THEN\n         IF (in_intent_label /= \"\") THEN\n            options = \", INTENT(\"//TRIM(in_intent_label)//\")\"\n         END IF\n      END IF\n      IF (write_target) THEN\n         options = TRIM(options)//\", TARGET\"\n      END IF\n      SELECT CASE (data_type)\n      CASE (1)\n         trdat = \"REAL(KIND=KIND(0.0D0))\"//TRIM(options)\n      CASE (2)\n         trdat = \"REAL(KIND=KIND(0.0))\"//TRIM(options)\n      CASE (3)\n         trdat = \"COMPLEX(KIND=KIND(0.0D0))\"//TRIM(options)\n      CASE (4)\n         trdat = \"COMPLEX(KIND=KIND(0.0))\"//TRIM(options)\n      END SELECT\n   END FUNCTION\n\n   FUNCTION trgemm(data_type)\n      INTEGER :: data_type\n      CHARACTER(LEN=5) :: trgemm\n      SELECT CASE (data_type)\n      CASE (1)\n         trgemm = \"DGEMM\"\n      CASE (2)\n         trgemm = \"SGEMM\"\n      CASE (3)\n         trgemm = \"ZGEMM\"\n      CASE (4)\n         trgemm = \"CGEMM\"\n      END SELECT\n   END FUNCTION\n\n   FUNCTION trstr(transpose_flavor, data_type)\n      INTEGER :: transpose_flavor, data_type\n      CHARACTER(LEN=3) :: trstr\n      CHARACTER(LEN=1) :: dstr\n      SELECT CASE (data_type)\n      CASE (1)\n         dstr = \"d\"\n      CASE (2)\n         dstr = \"s\"\n      CASE (3)\n         dstr = \"z\"\n      CASE (4)\n         dstr = \"c\"\n      END SELECT\n      SELECT CASE (transpose_flavor)\n      CASE (1)\n         trstr = dstr//\"nn\"\n      CASE (2)\n         trstr = dstr//\"tn\"\n      CASE (3)\n         trstr = dstr//\"nt\"\n      CASE (4)\n         trstr = dstr//\"tt\"\n      END SELECT\n   END FUNCTION trstr\n\n   FUNCTION trparam(stack_size_label)\n      CHARACTER(LEN=*), OPTIONAL :: stack_size_label\n      CHARACTER(LEN=128) :: trparam\n      if (PRESENT(stack_size_label)) THEN\n         trparam = \"A,B,C,\"//TRIM(stack_size_label)//\",dbcsr_ps_width,params,p_a_first,p_b_first,p_c_first\"\n      ELSE\n         trparam = \"A,B,C\"\n      END IF\n   END FUNCTION trparam\n\n   SUBROUTINE write_stack_params(data_type, stack_size_label)\n      INTEGER          :: data_type\n      CHARACTER(LEN=*), OPTIONAL :: stack_size_label\n      CALL write_matrix_defs(data_type=data_type, write_intent=.TRUE., write_target=.FALSE.)\n      IF (PRESENT(stack_size_label)) THEN\n         write (6, '(A)') \"        INTEGER, INTENT(IN) :: \"//TRIM(stack_size_label)//\", dbcsr_ps_width\"\n         write (6, '(A)') \"        INTEGER, INTENT(IN) :: params(dbcsr_ps_width, \"//TRIM(stack_size_label)//\")\"\n         write (6, '(A)') \"        INTEGER, INTENT(IN) :: p_a_first, p_b_first, p_c_first\"\n      END IF\n   END SUBROUTINE write_stack_params\n\n   SUBROUTINE write_matrix_defs(M, N, K, transpose_flavor, data_type, write_intent, &\n                                write_target, stack_size_label, padding)\n      INTEGER, OPTIONAL          :: M, N, K, transpose_flavor\n      INTEGER                    :: data_type\n      LOGICAL                    :: write_intent, write_target\n      CHARACTER(LEN=*), OPTIONAL :: stack_size_label\n      LOGICAL, OPTIONAL          :: padding\n      CHARACTER(LEN=50)          :: intent_label\n      LOGICAL                    :: do_padding\n\n      IF (PRESENT(M) .AND. PRESENT(N) .AND. PRESENT(K) .AND. PRESENT(transpose_flavor)) THEN\n         IF (PRESENT(stack_size_label)) THEN\n            ! +8 ... the buffered routines need to be able to read past the last 'used' elements of the C array.\n            !        the array therefore needs to be padded appropriately.\n            write (6, '(A)') \"      \"//trdat(data_type, write_target)// &\n               \" :: C(M*N*\"//TRIM(stack_size_label)// &\n               \"+8), B(K*N*\"//TRIM(stack_size_label)// &\n               \"), A(M*K*\"//TRIM(stack_size_label)//\")\"\n         ELSE\n            IF (write_intent) THEN\n               write (6, '(A,I0,A,I0,A)') &\n                  \"      \"//trdat(data_type, write_target, \"INOUT\")//\" :: C(\", M, \",\", N, \")\"\n               intent_label = \"IN\"\n            ELSE\n               do_padding = .FALSE.\n               IF (PRESENT(padding)) THEN\n                  IF (padding) do_padding = .TRUE.\n               END IF\n               IF (do_padding) THEN\n                  write (6, '(A)') &\n                     \"      \"//trdat(data_type, write_target)//\" :: C(M*N+8)\"\n               ELSE\n                  write (6, '(A,I0,A,I0,A)') &\n                     \"      \"//trdat(data_type, write_target)//\" :: C(\", M, \",\", N, \")\"\n               END IF\n               intent_label = \"\"\n            END IF\n            SELECT CASE (transpose_flavor)\n            CASE (1)\n               write (6, '(A,I0,A,I0,A,I0,A,I0,A)') &\n                  \"      \"//trdat(data_type, write_target, intent_label)//\" :: B(\", K, \",\", N, \"), A(\", M, \",\", K, \")\"\n            CASE (2)\n               write (6, '(A,I0,A,I0,A,I0,A,I0,A)') &\n                  \"      \"//trdat(data_type, write_target, intent_label)//\" :: B(\", K, \",\", N, \"), A(\", K, \",\", M, \")\"\n            CASE (3)\n               write (6, '(A,I0,A,I0,A,I0,A,I0,A)') &\n                  \"      \"//trdat(data_type, write_target, intent_label)//\" :: B(\", N, \",\", K, \"), A(\", M, \",\", K, \")\"\n            CASE (4)\n               write (6, '(A,I0,A,I0,A,I0,A,I0,A)') &\n                  \"      \"//trdat(data_type, write_target, intent_label)//\" :: B(\", N, \",\", K, \"), A(\", K, \",\", M, \")\"\n            END SELECT\n         END IF\n      ELSE\n         IF (write_intent) THEN\n            write (6, '(A)') \"      \"//trdat(data_type, write_target, \"INOUT\")//\" :: C(*)\"\n            write (6, '(A)') \"      \"//trdat(data_type, write_target, \"IN\")//\" :: B(*), A(*)\"\n         ELSE\n            write (6, '(A)') \"      \"//trdat(data_type, write_target)//\" :: C(*)\"\n            write (6, '(A)') \"      \"//trdat(data_type, write_target)//\" :: B(*), A(*)\"\n         END IF\n      END IF\n   END SUBROUTINE write_matrix_defs\n\n   SUBROUTINE smm_inner(mi, mf, ni, nf, ki, kf, iloop, mu, nu, ku, transpose_flavor, data_type)\n      INTEGER :: mi, mf, ni, nf, ki, kf, iloop, mu, nu, ku, transpose_flavor, data_type\n      INTEGER :: im, in, ik, ido\n      INTEGER :: loop_order(3, 6), have_loops\n\n      loop_order(:, 1) = (/1, 2, 3/)\n      loop_order(:, 2) = (/2, 1, 3/)\n      loop_order(:, 3) = (/2, 3, 1/)\n      loop_order(:, 4) = (/1, 3, 2/)\n      loop_order(:, 5) = (/3, 1, 2/)\n      loop_order(:, 6) = (/3, 2, 1/)\n      have_loops = 0\n      CALL out_loop(mi, mf, ni, nf, ki, kf, mu, nu, ku, loop_order(1, iloop), have_loops)\n      CALL out_loop(mi, mf, ni, nf, ki, kf, mu, nu, ku, loop_order(2, iloop), have_loops)\n      CALL out_loop(mi, mf, ni, nf, ki, kf, mu, nu, ku, loop_order(3, iloop), have_loops)\n      ! what is the fastest order for these loops ? Does it matter ?\n      DO im = 0, mu - 1\n      DO in = 0, nu - 1\n      DO ik = 0, ku - 1\n         SELECT CASE (transpose_flavor)\n         CASE (1)\n            write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') &\n               \"        C(i+\", im, \",j+\", in, \")=C(i+\", im, \",j+\", in, \")+A(i+\", im, \",l+\", ik, \")*B(l+\", ik, \",j+\", in, \")\"\n         CASE (2)\n            write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') &\n               \"        C(i+\", im, \",j+\", in, \")=C(i+\", im, \",j+\", in, \")+A(l+\", ik, \",i+\", im, \")*B(l+\", ik, \",j+\", in, \")\"\n         CASE (3)\n            write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') &\n               \"        C(i+\", im, \",j+\", in, \")=C(i+\", im, \",j+\", in, \")+A(i+\", im, \",l+\", ik, \")*B(j+\", in, \",l+\", ik, \")\"\n         CASE (4)\n            write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') &\n               \"        C(i+\", im, \",j+\", in, \")=C(i+\", im, \",j+\", in, \")+A(l+\", ik, \",i+\", im, \")*B(j+\", in, \",l+\", ik, \")\"\n         END SELECT\n      END DO\n      END DO\n      END DO\n      DO ido = 1, have_loops\n         write (6, '(A)') \"     ENDDO \"\n      END DO\n   END SUBROUTINE smm_inner\n\n   SUBROUTINE out_loop(mi, mf, ni, nf, ki, kf, mu, nu, ku, ichoice, have_loops)\n      INTEGER :: mi, mf, ni, nf, ki, kf, ichoice, mu, nu, ku, have_loops\n      IF (ichoice == 1) THEN\n         IF (nf - ni + 1 > nu) THEN\n            write (6, '(A,I0,A,I0,A,I0)') \"     DO j=\", ni, \",\", nf, \",\", nu\n            have_loops = have_loops + 1\n         ELSE\n            write (6, '(A,I0)') \"     j=\", ni\n         END IF\n      END IF\n      IF (ichoice == 2) THEN\n         IF (mf - mi + 1 > mu) THEN\n            write (6, '(A,I0,A,I0,A,I0)') \"     DO i=\", mi, \",\", mf, \",\", mu\n            have_loops = have_loops + 1\n         ELSE\n            write (6, '(A,I0)') \"     i=\", mi\n         END IF\n      END IF\n      IF (ichoice == 3) THEN\n         IF (kf - ki + 1 > ku) THEN\n            write (6, '(A,I0,A,I0,A,I0)') \"     DO l=\", ki, \",\", kf, \",\", ku\n            have_loops = have_loops + 1\n         ELSE\n            write (6, '(A,I0)') \"     l=\", ki\n         END IF\n      END IF\n   END SUBROUTINE\n\nEND MODULE mults\n"
  },
  {
    "path": "tools/build_libsmm/small_gen.f90",
    "content": "!\n! generate a benchmark for the following cases\n!\n! 1) tiny_gemm\n! 2) matmul\n! 3) dgemm\n! 4) multrec 1\n! 5) multrec 2\n! 6) multrec 3\n! 7) multrec 4\n! 8) multvec\n! 9) libxsmm\n!\nPROGRAM small_gen\n   USE mults\n   USE multrec_gen\n   IMPLICIT NONE\n\n   CHARACTER(LEN=1024) :: arg, filename, label\n   INTEGER :: M, N, K, transpose_flavor, data_type, SIMD_size\n   INTEGER :: ibest_square = 3, best_square = 4\n   INTEGER :: isquare\n   LOGICAL :: do_libxsmm\n\n   CALL GET_COMMAND_ARGUMENT(1, arg)\n   READ (arg, *) M\n   CALL GET_COMMAND_ARGUMENT(2, arg)\n   READ (arg, *) N\n   CALL GET_COMMAND_ARGUMENT(3, arg)\n   READ (arg, *) K\n   CALL GET_COMMAND_ARGUMENT(4, arg)\n   READ (arg, *) transpose_flavor\n   CALL GET_COMMAND_ARGUMENT(5, arg)\n   READ (arg, *) data_type\n   CALL GET_COMMAND_ARGUMENT(6, arg)\n   READ (arg, *) SIMD_size\n   CALL GET_COMMAND_ARGUMENT(7, filename)\n\n   IF (COMMAND_ARGUMENT_COUNT() .gt. 7) THEN\n      do_libxsmm = .TRUE.\n   ELSE\n      do_libxsmm = .FALSE.\n   END IF\n\n   ! generation of the tiny version\n   write (label, '(A,I0)') \"_\", 1\n   CALL mult_versions(M, N, K, 1, label, transpose_flavor, data_type, SIMD_size, filename)\n\n   ! generation of the matmul version\n   write (label, '(A,I0)') \"_\", 2\n   CALL mult_versions(M, N, K, 2, label, transpose_flavor, data_type, SIMD_size, filename)\n\n   ! generation of the dgemm version\n   write (label, '(A,I0)') \"_\", 3\n   CALL mult_versions(M, N, K, 3, label, transpose_flavor, data_type, SIMD_size, filename)\n\n   ! generation of the multrec versions (4)\n   DO isquare = ibest_square + 1, ibest_square + best_square\n      write (label, '(A,I0)') \"_\", isquare\n      CALL mult_versions(M, N, K, isquare, label, transpose_flavor, data_type, SIMD_size, filename)\n   END DO\n\n   ! generation of the vector version,\n   ! only in the case of SIMD_size=32(i.e. AVX/AVX2) and SIMD_size=64(i.e. KNC/AVX512)\n   ibest_square = ibest_square + 1\n   IF ((SIMD_size == 32 .OR. SIMD_size == 64) .AND. transpose_flavor == 1 .AND. data_type <= 2) THEN\n      write (label, '(A,I0)') \"_\", ibest_square + best_square\n      CALL mult_versions(M, N, K, ibest_square + best_square, label, &\n                         transpose_flavor, data_type, SIMD_size, filename, stack_size_label=\"\")\n   END IF\n\n   ! generation of the libxsmm version interface\n   ibest_square = ibest_square + 1\n   IF (do_libxsmm .AND. transpose_flavor == 1 .AND. data_type <= 2) THEN\n      write (label, '(A,I0)') \"_\", ibest_square + best_square\n      CALL mult_versions(M, N, K, ibest_square + best_square, label, &\n                         transpose_flavor, data_type, SIMD_size, filename, stack_size_label=\"\")\n   END IF\n\n   write (6, '(A)') \"#ifdef __INTEL_OFFLOAD\"\n   write (6, '(A)') \"!dir$ attributes offload:mic :: run_kernels\"\n   write (6, '(A)') \"#endif\"\n   write (6, '(A,I0,A,I0,A,I0,A)') \"SUBROUTINE small_find_\", M, \"_\", N, \"_\", K, \"(unit)\"\n   write (6, '(A)') \"  IMPLICIT NONE\"\n   write (6, '(A)') \"  INTEGER :: unit ! Output unit\"\n   write (6, '(A,I0,A,I0,A,I0,A,I0)') \"  INTEGER, PARAMETER :: M=\", M, \",N=\", N, \",K=\", K\n   write (6, '(A)') \"  CHARACTER(len=64) :: filename\"\n   CALL write_matrix_defs(M, N, K, transpose_flavor, data_type, .FALSE., .FALSE., padding=.TRUE.)\n   write (6, '(A)') \"  INTERFACE\"\n   write (6, '(A)') \"    SUBROUTINE X(\"//TRIM(trparam())//\")\"\n   CALL write_matrix_defs(data_type=data_type, write_intent=.TRUE., write_target=.FALSE.)\n   write (6, '(A)') \"    END SUBROUTINE\"\n   write (6, '(A)') \"  END INTERFACE\"\n   DO isquare = 1, ibest_square + best_square\n      IF (isquare == 8 .AND. ((SIMD_size /= 32 .AND. SIMD_size /= 64) .OR. transpose_flavor /= 1 .OR. data_type > 2)) CYCLE\n      IF (isquare == 9 .AND. ((.NOT. do_libxsmm) .OR. transpose_flavor /= 1 .OR. data_type > 2)) CYCLE\n      write (6, '(A,I0,A,I0,A,I0,A,I0)') \"PROCEDURE(X) :: smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n         M, \"_\", N, \"_\", K, \"_\", isquare\n   END DO\n   write (6, '(A,I0,A,I0)') \"  INTEGER, PARAMETER :: Nmin=5,Nk=1,Nloop=\", ibest_square + best_square\n   write (6, '(A)') \"  TYPE t_kernels\"\n   write (6, '(A)') \"    PROCEDURE(X), POINTER, NOPASS :: ptr\"\n   write (6, '(A)') \"  END TYPE t_kernels\"\n   write (6, '(A)') \"  TYPE(t_kernels) :: kernels(Nk,Nloop)\"\n   write (6, '(A)') \"  INTEGER :: mnk(3,Nk) ! mu, nu, ku\"\n   DO isquare = 1, ibest_square + best_square\n      IF ((isquare == 8 .AND. ((SIMD_size /= 32 .AND. SIMD_size /= 64) .OR. transpose_flavor /= 1 .OR. data_type > 2)) .OR. &\n          (isquare == 9 .AND. ((.NOT. do_libxsmm) .OR. transpose_flavor /= 1 .OR. data_type > 2))) THEN\n         write (6, '(A,I0,A)') \"  kernels(Nk,\", isquare, \")%ptr => Null()\"\n      ELSE\n         write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0)') &\n            \"  kernels(Nk,\", isquare, \")%ptr => smm_\"//trstr(transpose_flavor, data_type)//\"_\", &\n            M, \"_\", N, \"_\", K, \"_\", isquare\n      END IF\n   END DO\n   write (6, '(A,I0,A,I0,A,I0,A)') \"  filename='small_find_\", M, \"_\", N, \"_\", K, \".out'\"\n   write (6, '(A)') \"  C = 0 ; A = 0 ; B = 0\"\n   write (6, '(A)') \"  mnk=0\"\n   write (6, '(A)') \"  CALL run_kernels(filename,unit,M,N,K,A,B,C,Nmin,Nk,Nloop,kernels,mnk)\"\n   write (6, '(A,I0,A,I0,A,I0)') \"END SUBROUTINE small_find_\", M, \"_\", N, \"_\", K\n\nEND PROGRAM small_gen\n"
  },
  {
    "path": "tools/build_libsmm/tiny_gen.f90",
    "content": "PROGRAM tiny_gen\n   USE mults\n   IMPLICIT NONE\n\n   INTEGER :: M, N, K, transpose_flavor, data_type\n   INTEGER, PARAMETER :: Nloop = 6\n   CHARACTER(LEN=80) :: arg\n   INTEGER :: Nk, mi, mf, ni, nf, ki, kf, iloop, ku, nu, mu\n\n   CALL GET_COMMAND_ARGUMENT(1, arg)\n   READ (arg, *) M\n   CALL GET_COMMAND_ARGUMENT(2, arg)\n   READ (arg, *) N\n   CALL GET_COMMAND_ARGUMENT(3, arg)\n   READ (arg, *) K\n   CALL GET_COMMAND_ARGUMENT(4, arg)\n   READ (arg, *) transpose_flavor\n   CALL GET_COMMAND_ARGUMENT(5, arg)\n   READ (arg, *) data_type\n\n   CALL loop_variants(1)\n   write (6, '(A)') \"#ifdef __INTEL_OFFLOAD\"\n   write (6, '(A)') \"!dir$ attributes offload:mic :: run_kernels\"\n   write (6, '(A)') \"#endif\"\n   write (6, '(A,I0,A,I0,A,I0,A)') \"SUBROUTINE tiny_find_\", M, \"_\", N, \"_\", K, \"(unit)\"\n   write (6, '(A)') \"  IMPLICIT NONE\"\n   write (6, '(A)') \"  INTEGER :: unit ! Output unit\"\n   write (6, '(A,I0,A,I0,A,I0)') \"  INTEGER, PARAMETER :: M=\", M, \",N=\", N, \",K=\", K\n   write (6, '(A)') \"  CHARACTER(len=64) :: filename\"\n   CALL write_matrix_defs(M, N, K, transpose_flavor, data_type, .FALSE., .FALSE.)\n   write (6, '(A)') \"  INTERFACE\"\n   write (6, '(A)') \"    SUBROUTINE X(A,B,C)\"\n   CALL write_matrix_defs(data_type=data_type, write_intent=.FALSE., write_target=.FALSE.)\n   write (6, '(A)') \"    END SUBROUTINE\"\n   write (6, '(A)') \"  END INTERFACE\"\n   CALL loop_variants(2)\n   write (6, '(A,I0,A,I0)') \"  INTEGER, PARAMETER :: Nmin=2, Nk=\", Nk, \", Nloop=\", Nloop\n   write (6, '(A)') \"  TYPE t_kernels\"\n   write (6, '(A)') \"    PROCEDURE(X), POINTER, NOPASS :: ptr\"\n   write (6, '(A)') \"  END TYPE t_kernels\"\n   write (6, '(A)') \"  TYPE(t_kernels) :: kernels(Nk,Nloop)\"\n   write (6, '(A)') \"  INTEGER :: mnk(3,Nk) ! mu, nu, ku\"\n   CALL loop_variants(3)\n   write (6, '(A,I0,A,I0,A,I0,A)') \"  filename='tiny_find_\", M, \"_\", N, \"_\", K, \".out'\"\n   write (6, '(A)') \"  C = 0 ; A = 0 ; B = 0\"\n   write (6, '(A)') \"  CALL run_kernels(filename,unit,M,N,K,A,B,C,Nmin,Nk,Nloop,kernels,mnk)\"\n   write (6, '(A,I0,A,I0,A,I0)') \"END SUBROUTINE tiny_find_\", M, \"_\", N, \"_\", K\n\nCONTAINS\n\n   SUBROUTINE loop_variants(itype)\n\n      INTEGER :: itype\n\n      mi = 1; mf = M; ni = 1; nf = N; ki = 1; kf = K\n\n      DO iloop = 1, Nloop\n\n         IF (itype .ne. 1) Nk = 0\n\n         DO mu = 1, M\n            DO nu = 1, N\n               DO ku = 1, K\n                  ! unroll only if no cleanup is needed\n                  IF (MOD(M, mu) .NE. 0) CYCLE\n                  IF (MOD(N, nu) .NE. 0) CYCLE\n                  IF (MOD(K, ku) .NE. 0) CYCLE\n                  ! do not unroll with more than 32 mults in the inner loop\n                  ! (some more unrolling can be faster, but we reduce size and speedup lib generation)\n                  IF (mu*nu*ku > 32) CYCLE\n\n                  SELECT CASE (itype)\n                  CASE (1)\n                     write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A)') &\n                        \"   SUBROUTINE smm_\"//trstr(transpose_flavor, data_type)//\"_\", M, \"_\", N, \"_\", K, \"_\", &\n                        iloop, \"_\", mu, \"_\", nu, \"_\", ku, \"(A,B,C)\"\n                     CALL write_matrix_defs(M, N, K, transpose_flavor, data_type, .FALSE., .FALSE.)\n                     write (6, '(A)') \"      INTEGER ::i,j,l\"\n                     CALL smm_inner(mi, mf, ni, nf, ki, kf, iloop, mu, nu, ku, transpose_flavor, data_type)\n                     write (6, '(A)') \"   END SUBROUTINE\"\n                  CASE (2)\n                     Nk = Nk + 1\n                     write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0)') &\n                        \"  PROCEDURE(X) :: smm_\"//trstr(transpose_flavor, data_type)//\"_\", M, \"_\", N, \"_\", K, \"_\", iloop, &\n                        \"_\", mu, \"_\", nu, \"_\", ku\n                  CASE (3)\n                     Nk = Nk + 1\n                     write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0,A,I0)') \"  kernels(\", Nk, \",\", iloop, &\n                        \")%ptr => smm_\"//trstr(transpose_flavor, data_type)//\"_\", M, \"_\", N, \"_\", K, \"_\", &\n                        iloop, \"_\", mu, \"_\", nu, \"_\", ku\n                     IF (iloop .eq. 1) THEN\n                        write (6, '(A,I0,A,I0,A,I0,A,I0,A,I0,A,I0)') \"  mnk(1,\", Nk, \")=\", mu, &\n                           \" ; mnk(2,\", Nk, \")=\", nu, &\n                           \" ; mnk(3,\", Nk, \")=\", ku\n                     END IF\n                  END SELECT\n               END DO\n            END DO\n         END DO\n      END DO\n\n   END SUBROUTINE loop_variants\n\nEND PROGRAM tiny_gen\n"
  },
  {
    "path": "tools/docker/Dockerfile.build-env-latest-gcc",
    "content": "FROM gcc:latest\n# based on Debian stable (as of Feb 2022), providing:\n# * CMake 3.22 (via backports)\n# * Ninja 1.10.1\n\nENV DEBIAN_FRONTEND=noninteractive\n\n# Idiom to enable backports when available/required. Add after `set -ex` below:\n#   grep -q bullseye /etc/os-release ; \\\n#   echo \"deb http://deb.debian.org/debian bullseye-backports main\" > /etc/apt/sources.list.d/backports.list ; \\\n# To install packages from the backports, append `/bullseye-backports` to package name, ex.:\n#   cmake/bullseye-backports\n\nRUN set -ex ; \\\n    apt-get update ; \\\n    apt-get install -y --no-install-recommends \\\n        locales \\\n        libopenblas-openmp-dev \\\n        cmake \\\n        ninja-build \\\n        lcov \\\n        pkg-config \\\n        git \\\n        python3-pip \\\n        unzip \\\n        rsync \\\n        valgrind \\\n        ; \\\n    rm -rf /var/lib/apt/lists/* ; \\\n    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8\n\n# Make sure we have a proper unicode locale and language\nENV LANG en_US.utf8\n"
  },
  {
    "path": "tools/docker/Dockerfile.build-env-rocm",
    "content": "FROM rocm/dev-ubuntu-22.04:latest\n\nENV DEBIAN_FRONTEND=noninteractive\n\nRUN set -ex ; \\\n    apt-get update ; \\\n    apt-get install -y \\\n        apt-transport-https \\\n        ca-certificates \\\n        gnupg \\\n        software-properties-common \\\n        curl \\\n        ; \\\n    curl -LsS https://apt.kitware.com/keys/kitware-archive-latest.asc \\\n        | gpg --dearmor - \\\n        | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null ; \\\n    apt-add-repository 'deb https://apt.kitware.com/ubuntu/ jammy main' ; \\\n    apt-get install -y \\\n        locales \\\n        gfortran \\\n        g++ \\\n        openmpi-bin \\\n        libopenmpi-dev \\\n        mpich \\\n        libmpich-dev \\\n        libopenblas-openmp-dev \\\n        cmake \\\n        ninja-build \\\n        lcov \\\n        pkg-config \\\n        git \\\n        python3-pip \\\n        unzip \\\n        rsync \\\n        valgrind \\\n        ; \\\n    apt-get install -y \\\n        rocblas \\\n        rocsolver \\\n        hipblas \\\n        ; \\\n    rm -rf /var/lib/apt/lists/* ; \\\n    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8\n\n# Make sure we have a proper unicode locale and language\nENV LANG en_US.utf8\n\n# Leak suppression\nCOPY lsan.supp /opt\nENV LSAN_OPTIONS=suppressions=/opt/lsan.supp\n\n# Make sure CMake finds the HIP/ROCm CMake configuration files\nENV CMAKE_PREFIX_PATH /opt/rocm\n"
  },
  {
    "path": "tools/docker/Dockerfile.build-env-ubuntu",
    "content": "FROM ubuntu:22.04\n\n# we need at least Ubuntu 19.10 for:\n#   git > 2.18\n#   lcov > 1.13\n#   openmpi > 2.1\n# we need at least Ubuntu 20.04 for:\n#   ninja >= 1.10\n#   an OpenBLAS built with OpenMP-support\n\nENV DEBIAN_FRONTEND=noninteractive\n\nRUN set -ex ; \\\n    apt-get update ; \\\n    apt-get install -y \\\n        apt-transport-https \\\n        ca-certificates \\\n        gnupg \\\n        software-properties-common \\\n        curl \\\n        ; \\\n    curl -LsS https://apt.kitware.com/keys/kitware-archive-latest.asc \\\n        | gpg --dearmor - \\\n        | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null ; \\\n    apt-add-repository 'deb https://apt.kitware.com/ubuntu/ jammy main' ; \\\n    apt-get install -y \\\n        locales \\\n        gfortran \\\n        g++ \\\n        openmpi-bin \\\n        libopenmpi-dev \\\n\tmpich \\\n\tlibmpich-dev \\\n        libopenblas-openmp-dev \\\n        cmake \\\n        ninja-build \\\n        lcov \\\n        pkg-config \\\n        git \\\n        python3-pip \\\n        unzip \\\n        rsync \\\n        valgrind \\\n        ; \\\n    rm -rf /var/lib/apt/lists/* ; \\\n    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8\n\n# Make sure we have a proper unicode locale and language\nENV LANG en_US.utf8\n\nRUN set -ex ; \\\n    pip3 install \\\n        pre-commit \\\n        ford \\\n        git-archive-all \\\n        ;\n\nARG libxsmm_version=488aa88f2a9825e9f92a0cfc773c1aedf019f88a\n\nRUN set -ex ; \\\n    curl -LsS https://github.com/libxsmm/libxsmm/archive/${libxsmm_version}.tar.gz | tar -xz -C /opt ; \\\n    ln -s libxsmm-${libxsmm_version} /opt/libxsmm ; \\\n    make -j -C /opt/libxsmm WRAP=0\n\nENV PKG_CONFIG_PATH=\"/opt/libxsmm/lib:${PKG_CONFIG_PATH}\"\n\n# Remove LTO for MPICH (default now in Ubuntu >=22)\nRUN set -ex ; \\\n    for ff in /usr/lib/x86_64-linux-gnu/pkgconfig/mpich.pc /usr/bin/mpicc.mpich /usr/bin/mpicxx.mpich /usr/bin/mpif77.mpich /usr/bin/mpif90.mpich /usr/bin/mpifort.mpich; do \\\n    \tsed -i -e 's/-flto=auto//g' -e 's/-ffat-lto-objects//g' ${ff}; \\\n    done\n\n# Leak suppression\nCOPY lsan.supp /opt\nENV LSAN_OPTIONS=suppressions=/opt/lsan.supp\n"
  },
  {
    "path": "tools/docker/Dockerfile.build-env-ubuntu-cuda",
    "content": "FROM nvidia/cuda:12.2.0-devel-ubuntu22.04\nENV DEBIAN_FRONTEND=noninteractive\n\nRUN set -ex ; \\\n    apt-get update ; \\\n    apt-get install -y \\\n        apt-transport-https \\\n        ca-certificates \\\n        gnupg \\\n        software-properties-common \\\n        curl \\\n        ; \\\n    curl -LsS https://apt.kitware.com/keys/kitware-archive-latest.asc \\\n        | gpg --dearmor - \\\n        | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null ; \\\n    apt-add-repository 'deb https://apt.kitware.com/ubuntu/ jammy main' ; \\\n    apt-get install -y \\\n        locales \\\n        gfortran \\\n        g++ \\\n        openmpi-bin \\\n        libopenmpi-dev \\\n        mpich \\\n        libmpich-dev \\\n        libopenblas-openmp-dev \\\n        cmake \\\n        ninja-build \\\n        lcov \\\n        pkg-config \\\n        git \\\n        python3-pip \\\n        unzip \\\n        rsync \\\n        valgrind \\\n        ; \\\n    rm -rf /var/lib/apt/lists/* ; \\\n    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8\n\n# Make sure we have a proper unicode locale and language\nENV LANG en_US.utf8\n\nRUN set -ex ; \\\n    pip3 install \\\n        pre-commit \\\n        ford \\\n        git-archive-all \\\n        ;\n\nARG libxsmm_version=488aa88f2a9825e9f92a0cfc773c1aedf019f88a\n\nRUN set -ex ; \\\n    curl -LsS https://github.com/libxsmm/libxsmm/archive/${libxsmm_version}.tar.gz | tar -xz -C /opt ; \\\n    ln -s libxsmm-${libxsmm_version} /opt/libxsmm ; \\\n    make -j -C /opt/libxsmm WRAP=0\n\nENV PKG_CONFIG_PATH=\"/opt/libxsmm/lib:${PKG_CONFIG_PATH}\"\n\n# Leak suppression\nCOPY lsan.supp /opt\nENV LSAN_OPTIONS=suppressions=/opt/lsan.supp\n"
  },
  {
    "path": "tools/docker/Makefile",
    "content": "all: build-env-latest-gcc build-env-rocm build-env-ubuntu build-env-ubuntu-cuda\n\nbuild-env-%: Dockerfile.build-env-%\n\tdocker build -t dbcsr-$@ -f $< .\n"
  },
  {
    "path": "tools/docker/README.md",
    "content": "# Docker images\n\nAll images are hosted on the [GitHub Container Registry of the CP2K organization](https://github.com/orgs/cp2k/packages).\n\n## Ubuntu Build Environment\n\nThe image is based on Ubuntu 22.04 and contains:\n\n* GNU Fortran Compiler\n* OpenBLAS\n* OpenMPI **and** MPICH\n* CMake (recent version)\n* Ninja (recent version)\n* libxsmm\n* FORD\n* pre-commit\n\n### Using the image\n\n```console\n$ cd dbcsr\n$ docker run --rm -it -v $PWD:/app --workdir /app --user $(id -u):$(id -g) ghcr.io/cp2k/dbcsr-build-env-ubuntu-22.04 /bin/bash\n$ mkdir build && cd build/\n$ cmake -G Ninja ..\n$ cmake --build .\n```\n\n### Building the image\n\nIf you need to rebuild the image, use:\n\n```console\n$ cd dbcsr/tools/docker\n$ docker build -t dbcsr-build-env-ubuntu-22.04 -f Dockerfile.build-env-ubuntu .\n```\n\n## ROCm Build Environment\n\nThe image is based on Ubuntu 22.04 and contains:\n\n* GNU Fortran Compiler\n* OpenBLAS\n* MPICH\n* CMake (recent version)\n* Ninja (recent version)\n* Git\n* ROCm (hip, rocblas, rocsolver, hipblas)\n\n## Latest GCC Build Environment\n\nThe image is based on `gcc:latest`, which in turn uses Debian (testing). It contains:\n\n* Latest GNU Fortran Compiler\n* OpenBLAS\n* CMake (recent version)\n* Ninja (recent version)\n* Git\n* **no** MPI\n"
  },
  {
    "path": "tools/docker/lsan.supp",
    "content": "# leak due to compiler bug triggered by combination of OOP and ALLOCATABLE\nleak:__dbcsr_tensor_types_MOD___copy_dbcsr_tensor_types_Dbcsr_tas_dist_t\nleak:__dbcsr_tensor_types_MOD___copy_dbcsr_tensor_types_Dbcsr_tas_blk_size_t\n# similar case, for gcc-13+\nleak:__dbcsr_tas_global_MOD___copy_dbcsr_tas_global_Dbcsr_tas_blk_size_arb\n"
  },
  {
    "path": "tools/fedora/dbcsr.rpmlintrc",
    "content": ""
  },
  {
    "path": "tools/fedora/dbcsr.spec",
    "content": "# Currently does not build with opencl/libxsmm\n%bcond_with opencl\n\n# No openmpi on i668 with openmpi 5 in Fedora 40+\n%if 0%{?fedora} >= 40\n%ifarch %{ix86}\n%bcond_with openmpi\n%else\n%bcond_without openmpi\n%endif\n%else\n%bcond_without openmpi\n%endif\n\nName:          dbcsr\nVersion:       0.0.0\nRelease:       %autorelease\nSummary:       Distributed Block Compressed Sparse Row matrix library\nLicense:       GPL-2.0-or-later\nURL:           https://cp2k.github.io/dbcsr/develop/\nSource0:       https://github.com/cp2k/dbcsr/releases/download/v%{version}/dbcsr-%{version}.tar.gz\n\nBuildRequires: cmake\nBuildRequires: gcc-c++\nBuildRequires: gcc-gfortran\nBuildRequires: make\nBuildRequires: flexiblas-devel\n%if %{with opencl}\nBuildRequires: libxsmm-devel\n%endif\nBuildRequires: python3-fypp\n\n%global _description %{expand:\nDBCSR stands for Distributed Blocked Compressed Sparse Row.\n\nDBCSR is a library designed to efficiently perform sparse matrix-matrix\nmultiplication, among other operations.  It is MPI and OpenMP parallel and\ncan exploit Nvidia and AMD GPUs via CUDA and HIP.}\n\n\n%description\n%{_description}\n\nThis package contains the non-MPI single process and multi-threaded versions.\n\n%package devel\nSummary: Development files for %{name}\nRequires: %{name}%{?_isa} = %{version}-%{release}\nRequires: gcc-gfortran%{_isa}\n\n%description devel\nThe %{name}-devel package contains libraries and header files for\ndeveloping applications that use %{name}.\n\n%global mpi_list mpich\n\n%if %{with openmpi}\n%global mpi_list %{mpi_list} openmpi\n%package openmpi\nSummary: DBCSR - openmpi version\nBuildRequires:  openmpi-devel\n\n%description openmpi\n%{_description}\n\nThis package contains the parallel single- and multi-threaded versions\nusing OpenMPI.\n\n%package openmpi-devel\nSummary: Development files for %{name}-openmpi\nRequires: %{name}-openmpi%{?_isa} = %{version}-%{release}\n\n%description openmpi-devel\nThe %{name}-openmpi-devel package contains libraries and header files for\ndeveloping applications that use %{name}-openmpi.\n%endif\n\n%package mpich\nSummary: DBCSR - mpich version\nBuildRequires:  mpich-devel\n\n%description mpich\n%{_description}\n\nThis package contains the parallel single- and multi-threaded versions\nusing mpich.\n\n%package mpich-devel\nSummary: Development files for %{name}-mpich\nRequires: %{name}-mpich%{?_isa} = %{version}-%{release}\n\n%description mpich-devel\nThe %{name}-mpich-devel package contains libraries and header files for\ndeveloping applications that use %{name}-mpich.\n\n\n%prep\n%autosetup -p1\n# Use system fypp, other tools not needed\nrm -r tools\n\n\n# $mpi will be evaluated in the loops below\n%global _vpath_builddir %{_vendor}-%{_target_os}-build-${mpi:-serial}\n\n%build\nexport CFLAGS=\"%{optflags} -fPIC\"\nexport CXXFLAGS=\"%{optflags} -fPIC\"\nexport FFLAGS=\"%{optflags} -fPIC\"\n%cmake \\\n  -DCMAKE_INSTALL_Fortran_MODULES=%{_fmoddir} \\\n  -DUSE_MPI=OFF \\\n  %{?with_opencl:-DUSE_ACCEL=opencl -DUSE_SMM=libxsmm}\n%cmake_build\nfor mpi in %{mpi_list}\ndo\n  module load mpi/$mpi-%{_arch}\n  %cmake \\\n    -DCMAKE_INSTALL_Fortran_MODULES=$MPI_FORTRAN_MOD_DIR \\\n    %{?with_opencl:-DUSE_ACCEL=opencl -DUSE_SMM=libxsmm} \\\n    -DCMAKE_INSTALL_PREFIX:PATH=$MPI_HOME \\\n    -DCMAKE_INSTALL_LIBDIR:PATH=$MPI_LIB \\\n    -DUSE_MPI_F08=ON \\\n    -DTEST_MPI_RANKS=2\n  %cmake_build\n  module purge\ndone\n\n\n%install\n%cmake_install\nfor mpi in %{mpi_list}\ndo\n  module load mpi/$mpi-%{_arch}\n  %cmake_install\n  module purge\ndone\n\n\n%check\n%ctest\nfor mpi in %{mpi_list}\ndo\n  module load mpi/$mpi-%{_arch}\n  fail=\n  # mpich tests fail on s390x - reported https://github.com/cp2k/dbcsr/issues/703\n  [ $mpi = mpich -a %{_arch} = s390x ] && fail=no\n  %ctest || test $fail\n  module purge\ndone\n\n\n%files\n%license LICENSE\n%doc README.md\n%{_libdir}/libdbcsr.so.*\n\n%files devel\n%{_fmoddir}/dbcsr_api.mod\n%{_fmoddir}/dbcsr_tensor_api.mod\n%{_libdir}/cmake/dbcsr/\n%{_libdir}/libdbcsr.so\n\n%if %{with openmpi}\n%files openmpi\n%license LICENSE\n%doc README.md\n%{_libdir}/openmpi/lib/libdbcsr.so.*\n%{_libdir}/openmpi/lib/libdbcsr_c.so.*\n\n%files openmpi-devel\n%{_libdir}/openmpi/include/dbcsr.h\n%{_libdir}/openmpi/include/dbcsr_tensor.h\n%{_fmoddir}/openmpi/dbcsr_api.mod\n%{_fmoddir}/openmpi/dbcsr_tensor_api.mod\n%{_libdir}/openmpi/lib/cmake/dbcsr/\n%{_libdir}/openmpi/lib/libdbcsr.so\n%{_libdir}/openmpi/lib/libdbcsr_c.so\n%endif\n\n%files mpich\n%license LICENSE\n%doc README.md\n%{_libdir}/mpich/lib/libdbcsr.so.*\n%{_libdir}/mpich/lib/libdbcsr_c.so.*\n\n%files mpich-devel\n%{_libdir}/mpich/include/dbcsr.h\n%{_libdir}/mpich/include/dbcsr_tensor.h\n%{_fmoddir}/mpich/dbcsr_api.mod\n%{_fmoddir}/mpich/dbcsr_tensor_api.mod\n%{_libdir}/mpich/lib/cmake/dbcsr/\n%{_libdir}/mpich/lib/libdbcsr.so\n%{_libdir}/mpich/lib/libdbcsr_c.so\n\n%changelog\n%autochangelog\n"
  }
]